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 jb...@apache.org on 2005/05/02 08:26:03 UTC
svn commit: r165585 [6/42] - in
/incubator/derby/code/trunk/java/client/org/apache/derby: client/
client/am/ client/net/ client/resources/ jdbc/
Modified: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/ColumnMetaData.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/ColumnMetaData.java?rev=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/ColumnMetaData.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/ColumnMetaData.java Sun May 1 23:25:59 2005
@@ -22,918 +22,904 @@
// Under JDBC 2, we must new up our parameter meta data as column meta data instances
// Once we move to JDK 1.4 pre-req, create a ResultSetMetaData class and make this class abstract
-public class ColumnMetaData implements java.sql.ResultSetMetaData
-{
- public int columns_;
+public class ColumnMetaData implements java.sql.ResultSetMetaData {
- public boolean[] nullable_;
+ public int columns_;
- // Although this is describe information, it is tagged transient for now becuase it is not currently used.
- transient public int[] singleMixedByteOrDouble_; // 1 means single, 2 means double, 3 means mixed-byte, 0 not applicable
-
- // All of the following state data comes from the SQLDA reply.
-
- //Data from SQLDHGRP
- public short sqldHold_;
- public short sqldReturn_;
- public short sqldScroll_;
- public short sqldSensitive_;
- public short sqldFcode_;
- public short sqldKeytype_;
- public String sqldRdbnam_; // catalog name, not used by driver, placeholder only
- public String sqldSchema_; // schema name, not used by driver, placeholder only
-
- //data comes from SQLDAGRP
- public int[] sqlPrecision_; // adjusted sqllen;
- public int[] sqlScale_;
- public long[] sqlLength_; // This is maximum length for varchar fields
- // These are the derby sql types, for use only by ResultSetMetaData, other code should use jdbcTypes_.
- // sqlTypes_ is currently not set for input column meta data.
- public int[] sqlType_;
- public int[] sqlCcsid_;
-
- // With the exception of sqlNames_ and sqlxParmmode_, the following members are only allocated when needed
-
- //Data from SQLDOPTGRP
- public String[] sqlName_; // column name, pre-allocated
- public String[] sqlLabel_; // column label
- public short[] sqlUnnamed_;
- public String[] sqlComment_;
-
- //Data from SQLDXGRP
- public short[] sqlxKeymem_;
- public short[] sqlxGenerated_;
- public short[] sqlxParmmode_; // pre-allocated
- public String[] sqlxCorname_;
- public String[] sqlxName_;
- public String[] sqlxBasename_; // table name
- public int[] sqlxUpdatable_;
- public String[] sqlxSchema_; // schema name
- public String[] sqlxRdbnam_; // catalog name
-
- //-----------------------------transient state--------------------------------
-
- // For performance only, not part of logical model.
- public transient int[][] protocolTypesCache_ = null;
- public transient java.util.Hashtable protocolTypeToOverrideLidMapping_ = null;
- public transient java.util.ArrayList mddOverrideArray_ = null;
-
- public transient int[] types_;
- public transient int[] clientParamtertype_;
-
- public transient LogWriter logWriter_;
-
- // only set on execute replies, this is not describe information.
- // only used for result set meta data.
-
- public transient int resultSetConcurrency_;
-
- transient private java.util.Hashtable columnNameToIndexCache_ = null;
-
- transient private boolean statementClosed_ = false;
- void markClosed() {
- statementClosed_ = true;
- nullDataForGC();
- }
-
- void checkForClosedStatement() throws SqlException
- {
- // agent_.checkForDeferredExceptions();
- if (statementClosed_) throw new SqlException (logWriter_, "Statement closed");
- }
-
-
- //---------------------navigational members-----------------------------------
-
- //---------------------constructors/finalizer---------------------------------
-
- // Called by NETColumnMetaData constructor before #columns is parsed out yet.
- public ColumnMetaData (LogWriter logWriter)
- {
- logWriter_ = logWriter;
- }
-
- // For creating column meta data when describe input is not available.
- // The upper bound that is passed in is determined by counting the number of parameter markers.
- // Called by PreparedStatement.flowPrepareStatement() and flowDescribeInputOutput()
- // only when describe input is not available.
- public ColumnMetaData (LogWriter logWriter, int upperBound)
- {
- logWriter_ = logWriter;
- initializeCache (upperBound);
- }
-
-
- public void initializeCache (int upperBound)
- {
- columns_ = upperBound;
- nullable_ = new boolean[upperBound];
- types_ = new int[upperBound];
- clientParamtertype_ = new int[upperBound];
- singleMixedByteOrDouble_ = new int[upperBound]; // 1 means single, 2 means double, 3 means mixed-byte, 0 not applicable
-
- sqlPrecision_ = new int[upperBound];
- sqlScale_ = new int[upperBound];
- sqlLength_ = new long[upperBound];
- sqlType_ = new int[upperBound];
- sqlCcsid_ = new int[upperBound];
-
- sqlName_ = new String[upperBound];
- sqlxParmmode_ = new short[upperBound];
- }
-
- protected void finalize () throws java.lang.Throwable
- {
- super.finalize();
- }
-
- //--------------------Abstract material layer call-down methods-----------------
-
- //------------------material layer event callback methods-----------------------
-
- // ---------------------------jdbc 1------------------------------------------
-
- public int getColumnCount () throws SqlException
- {
- checkForClosedStatement();
- return columns_;
- }
-
- public boolean isAutoIncrement (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- return false;
- }
-
- public boolean isCaseSensitive (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- //return true if the SQLTYPE is CHAR, VARCHAR, LOGVARCHAR or CLOB
- int type = types_[column-1];
- return
- type == Types.CHAR ||
- type == Types.VARCHAR ||
- type == Types.LONGVARCHAR ||
- type == Types.CLOB;
- }
-
- // all searchable except distinct
- public boolean isSearchable (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- return true;
- }
-
- public boolean isCurrency (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- return false;
- }
-
- public int isNullable (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- if (nullable_[column-1])
- return java.sql.ResultSetMetaData.columnNullable;
- else
- return java.sql.ResultSetMetaData.columnNoNulls;
- }
-
- public boolean isSigned (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- //return true only if the SQLType is SMALLINT, INT, BIGINT, FLOAT, REAL, DOUBLE, NUMERIC OR DECIMAL
- int type = types_[column-1];
- return
- type == Types.SMALLINT ||
- type == Types.INTEGER ||
- type == Types.BIGINT ||
- type == java.sql.Types.FLOAT ||
- type == Types.REAL ||
- type == Types.DOUBLE ||
- type == java.sql.Types.NUMERIC ||
- type == Types.DECIMAL;
- }
-
- public int getColumnDisplaySize (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- int jdbcType = types_[column-1];
- switch (jdbcType){
- case Types.INTEGER:
- return 11;
- case Types.SMALLINT:
- return 6;
- case Types.BIGINT:
- return 20;
- case Types.REAL:
- return 13;
- case Types.DOUBLE:
- case java.sql.Types.FLOAT:
- return 22;
- case Types.DECIMAL:
- case java.sql.Types.NUMERIC:
- return getPrecision(column) + 2; // add 1 for sign and 1 for decimal
- case Types.CHAR:
- case Types.VARCHAR:
- case Types.LONGVARCHAR:
- case Types.CLOB:
- return (int) sqlLength_[column-1];
- case Types.DATE:
- return 10;
- case Types.TIME:
- return 8;
- case Types.TIMESTAMP:
- return 26;
- case Types.BINARY:
- case Types.VARBINARY:
- case Types.LONGVARBINARY:
- case Types.BLOB:
- return (int) (2*sqlLength_[column-1]); // eg. "FF" represents just one byte
- default:
- throw new SqlException (logWriter_, "not supported");
- }
- }
-
- public String getColumnLabel (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- // return labels if label is turned on, otherwise, return column name
- if (sqlLabel_ != null && sqlLabel_[column-1] != null) return sqlLabel_[column-1];
- if (sqlName_ == null || sqlName_[column-1] == null)
- assignColumnName (column);
- return sqlName_[column-1];
- }
-
- public String getColumnName (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- // The Javadoc and Jdbc book explicitly state that the empty string ("") is returned if "not applicable"
- // for the following methods:
- // getSchemaName()
- // getTableName()
- // getCatalogName()
- // Since the empty string is a valid string and is not really a proper table name, schema name, or catalog name,
- // we're not sure why the empty string was chosen over null, except possibly to be friendly to lazy jdbc apps
- // that may not be checking for nulls, thereby minimizing potential NPE's.
- // By induction, it would make sense to return the empty string when column name is not available/applicable.
- //
- // The JDBC specification contains blanket statements about SQL compliance levels,
- // so elaboration within the JDBC specification is often bypassed.
- // Personally, I would prefer to return Java null for all the not-applicable cases,
- // but it appears that we have precedent for the empty ("") string.
- //
- // We assume a straightforward induction from jdbc spec that the column name be "" (empty)
- // in preference to null or NULL for the not applicable case.
- //
- if (sqlName_ == null || sqlName_[column-1] == null)
- assignColumnName (column);
- return sqlName_[column-1];
- }
-
- public String getSchemaName (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- if (sqlxSchema_ == null || sqlxSchema_[column-1] == null) return ""; // Per jdbc spec
- return sqlxSchema_[column-1];
- }
-
- public int getPrecision (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- int jdbcType = types_[column-1];
-
- switch (jdbcType) {
- case java.sql.Types.NUMERIC:
- case Types.DECIMAL:
- return sqlPrecision_[column-1];
- case Types.SMALLINT:
- return 5;
- case Types.INTEGER:
- return 10;
- case Types.BIGINT:
- return 19;
- case java.sql.Types.FLOAT:
- return 15;
- case Types.REAL:
- return 7; // This is the number of signed digits for IEEE float with mantissa 24, ie. 2^24
- case Types.DOUBLE:
- return 15; // This is the number of signed digits for IEEE float with mantissa 24, ie. 2^24
- case Types.CHAR:
- case Types.VARCHAR:
- case Types.LONGVARCHAR:
- case Types.BINARY:
- case Types.VARBINARY:
- case Types.LONGVARBINARY:
- case Types.CLOB:
- case Types.BLOB:
- return (int) sqlLength_[column-1];
- case Types.DATE:
- return 10;
- case Types.TIME:
- return 8;
- case Types.TIMESTAMP:
- return 26;
- default:
- throw new SqlException (logWriter_, "Unregistered column type");
- }
- }
-
- public int getScale (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
-
- // We get the scale from the SQLDA as returned by DERBY, but DERBY does not return the ANSI-defined
- // value of scale 6 for TIMESTAMP.
- //
- // The JDBC drivers should hardcode this info as a short/near term solution.
- //
- if (types_[column-1] == Types.TIMESTAMP) return 6;
-
- return sqlScale_[column-1];
- }
-
- public String getTableName (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- if (sqlxBasename_ == null || sqlxBasename_[column-1] == null) return ""; // Per jdbc spec
- return sqlxBasename_[column-1];
- }
+ public boolean[] nullable_;
+
+ // Although this is describe information, it is tagged transient for now becuase it is not currently used.
+ transient public int[] singleMixedByteOrDouble_; // 1 means single, 2 means double, 3 means mixed-byte, 0 not applicable
+
+ // All of the following state data comes from the SQLDA reply.
+
+ //Data from SQLDHGRP
+ public short sqldHold_;
+ public short sqldReturn_;
+ public short sqldScroll_;
+ public short sqldSensitive_;
+ public short sqldFcode_;
+ public short sqldKeytype_;
+ public String sqldRdbnam_; // catalog name, not used by driver, placeholder only
+ public String sqldSchema_; // schema name, not used by driver, placeholder only
+
+ //data comes from SQLDAGRP
+ public int[] sqlPrecision_; // adjusted sqllen;
+ public int[] sqlScale_;
+ public long[] sqlLength_; // This is maximum length for varchar fields
+ // These are the derby sql types, for use only by ResultSetMetaData, other code should use jdbcTypes_.
+ // sqlTypes_ is currently not set for input column meta data.
+ public int[] sqlType_;
+ public int[] sqlCcsid_;
+
+ // With the exception of sqlNames_ and sqlxParmmode_, the following members are only allocated when needed
+
+ //Data from SQLDOPTGRP
+ public String[] sqlName_; // column name, pre-allocated
+ public String[] sqlLabel_; // column label
+ public short[] sqlUnnamed_;
+ public String[] sqlComment_;
+
+ //Data from SQLDXGRP
+ public short[] sqlxKeymem_;
+ public short[] sqlxGenerated_;
+ public short[] sqlxParmmode_; // pre-allocated
+ public String[] sqlxCorname_;
+ public String[] sqlxName_;
+ public String[] sqlxBasename_; // table name
+ public int[] sqlxUpdatable_;
+ public String[] sqlxSchema_; // schema name
+ public String[] sqlxRdbnam_; // catalog name
+
+ //-----------------------------transient state--------------------------------
+
+ // For performance only, not part of logical model.
+ public transient int[][] protocolTypesCache_ = null;
+ public transient java.util.Hashtable protocolTypeToOverrideLidMapping_ = null;
+ public transient java.util.ArrayList mddOverrideArray_ = null;
+
+ public transient int[] types_;
+ public transient int[] clientParamtertype_;
+
+ public transient LogWriter logWriter_;
+
+ // only set on execute replies, this is not describe information.
+ // only used for result set meta data.
+
+ public transient int resultSetConcurrency_;
+
+ transient private java.util.Hashtable columnNameToIndexCache_ = null;
+
+ transient private boolean statementClosed_ = false;
+
+ void markClosed() {
+ statementClosed_ = true;
+ nullDataForGC();
+ }
+
+ void checkForClosedStatement() throws SqlException {
+ // agent_.checkForDeferredExceptions();
+ if (statementClosed_) {
+ throw new SqlException(logWriter_, "Statement closed");
+ }
+ }
+
+
+ //---------------------navigational members-----------------------------------
+
+ //---------------------constructors/finalizer---------------------------------
+
+ // Called by NETColumnMetaData constructor before #columns is parsed out yet.
+ public ColumnMetaData(LogWriter logWriter) {
+ logWriter_ = logWriter;
+ }
+
+ // For creating column meta data when describe input is not available.
+ // The upper bound that is passed in is determined by counting the number of parameter markers.
+ // Called by PreparedStatement.flowPrepareStatement() and flowDescribeInputOutput()
+ // only when describe input is not available.
+ public ColumnMetaData(LogWriter logWriter, int upperBound) {
+ logWriter_ = logWriter;
+ initializeCache(upperBound);
+ }
+
+
+ public void initializeCache(int upperBound) {
+ columns_ = upperBound;
+ nullable_ = new boolean[upperBound];
+ types_ = new int[upperBound];
+ clientParamtertype_ = new int[upperBound];
+ singleMixedByteOrDouble_ = new int[upperBound]; // 1 means single, 2 means double, 3 means mixed-byte, 0 not applicable
+
+ sqlPrecision_ = new int[upperBound];
+ sqlScale_ = new int[upperBound];
+ sqlLength_ = new long[upperBound];
+ sqlType_ = new int[upperBound];
+ sqlCcsid_ = new int[upperBound];
+
+ sqlName_ = new String[upperBound];
+ sqlxParmmode_ = new short[upperBound];
+ }
+
+ protected void finalize() throws java.lang.Throwable {
+ super.finalize();
+ }
+
+ //--------------------Abstract material layer call-down methods-----------------
+
+ //------------------material layer event callback methods-----------------------
+
+ // ---------------------------jdbc 1------------------------------------------
+
+ public int getColumnCount() throws SqlException {
+ checkForClosedStatement();
+ return columns_;
+ }
+
+ public boolean isAutoIncrement(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ return false;
+ }
+
+ public boolean isCaseSensitive(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ //return true if the SQLTYPE is CHAR, VARCHAR, LOGVARCHAR or CLOB
+ int type = types_[column - 1];
+ return
+ type == Types.CHAR ||
+ type == Types.VARCHAR ||
+ type == Types.LONGVARCHAR ||
+ type == Types.CLOB;
+ }
+
+ // all searchable except distinct
+ public boolean isSearchable(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ return true;
+ }
+
+ public boolean isCurrency(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ return false;
+ }
+
+ public int isNullable(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ if (nullable_[column - 1]) {
+ return java.sql.ResultSetMetaData.columnNullable;
+ } else {
+ return java.sql.ResultSetMetaData.columnNoNulls;
+ }
+ }
+
+ public boolean isSigned(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ //return true only if the SQLType is SMALLINT, INT, BIGINT, FLOAT, REAL, DOUBLE, NUMERIC OR DECIMAL
+ int type = types_[column - 1];
+ return
+ type == Types.SMALLINT ||
+ type == Types.INTEGER ||
+ type == Types.BIGINT ||
+ type == java.sql.Types.FLOAT ||
+ type == Types.REAL ||
+ type == Types.DOUBLE ||
+ type == java.sql.Types.NUMERIC ||
+ type == Types.DECIMAL;
+ }
+
+ public int getColumnDisplaySize(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ int jdbcType = types_[column - 1];
+ switch (jdbcType) {
+ case Types.INTEGER:
+ return 11;
+ case Types.SMALLINT:
+ return 6;
+ case Types.BIGINT:
+ return 20;
+ case Types.REAL:
+ return 13;
+ case Types.DOUBLE:
+ case java.sql.Types.FLOAT:
+ return 22;
+ case Types.DECIMAL:
+ case java.sql.Types.NUMERIC:
+ return getPrecision(column) + 2; // add 1 for sign and 1 for decimal
+ case Types.CHAR:
+ case Types.VARCHAR:
+ case Types.LONGVARCHAR:
+ case Types.CLOB:
+ return (int) sqlLength_[column - 1];
+ case Types.DATE:
+ return 10;
+ case Types.TIME:
+ return 8;
+ case Types.TIMESTAMP:
+ return 26;
+ case Types.BINARY:
+ case Types.VARBINARY:
+ case Types.LONGVARBINARY:
+ case Types.BLOB:
+ return (int) (2 * sqlLength_[column - 1]); // eg. "FF" represents just one byte
+ default:
+ throw new SqlException(logWriter_, "not supported");
+ }
+ }
+
+ public String getColumnLabel(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ // return labels if label is turned on, otherwise, return column name
+ if (sqlLabel_ != null && sqlLabel_[column - 1] != null) {
+ return sqlLabel_[column - 1];
+ }
+ if (sqlName_ == null || sqlName_[column - 1] == null) {
+ assignColumnName(column);
+ }
+ return sqlName_[column - 1];
+ }
+
+ public String getColumnName(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ // The Javadoc and Jdbc book explicitly state that the empty string ("") is returned if "not applicable"
+ // for the following methods:
+ // getSchemaName()
+ // getTableName()
+ // getCatalogName()
+ // Since the empty string is a valid string and is not really a proper table name, schema name, or catalog name,
+ // we're not sure why the empty string was chosen over null, except possibly to be friendly to lazy jdbc apps
+ // that may not be checking for nulls, thereby minimizing potential NPE's.
+ // By induction, it would make sense to return the empty string when column name is not available/applicable.
+ //
+ // The JDBC specification contains blanket statements about SQL compliance levels,
+ // so elaboration within the JDBC specification is often bypassed.
+ // Personally, I would prefer to return Java null for all the not-applicable cases,
+ // but it appears that we have precedent for the empty ("") string.
+ //
+ // We assume a straightforward induction from jdbc spec that the column name be "" (empty)
+ // in preference to null or NULL for the not applicable case.
+ //
+ if (sqlName_ == null || sqlName_[column - 1] == null) {
+ assignColumnName(column);
+ }
+ return sqlName_[column - 1];
+ }
+
+ public String getSchemaName(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ if (sqlxSchema_ == null || sqlxSchema_[column - 1] == null) {
+ return ""; // Per jdbc spec
+ }
+ return sqlxSchema_[column - 1];
+ }
+
+ public int getPrecision(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ int jdbcType = types_[column - 1];
+
+ switch (jdbcType) {
+ case java.sql.Types.NUMERIC:
+ case Types.DECIMAL:
+ return sqlPrecision_[column - 1];
+ case Types.SMALLINT:
+ return 5;
+ case Types.INTEGER:
+ return 10;
+ case Types.BIGINT:
+ return 19;
+ case java.sql.Types.FLOAT:
+ return 15;
+ case Types.REAL:
+ return 7; // This is the number of signed digits for IEEE float with mantissa 24, ie. 2^24
+ case Types.DOUBLE:
+ return 15; // This is the number of signed digits for IEEE float with mantissa 24, ie. 2^24
+ case Types.CHAR:
+ case Types.VARCHAR:
+ case Types.LONGVARCHAR:
+ case Types.BINARY:
+ case Types.VARBINARY:
+ case Types.LONGVARBINARY:
+ case Types.CLOB:
+ case Types.BLOB:
+ return (int) sqlLength_[column - 1];
+ case Types.DATE:
+ return 10;
+ case Types.TIME:
+ return 8;
+ case Types.TIMESTAMP:
+ return 26;
+ default:
+ throw new SqlException(logWriter_, "Unregistered column type");
+ }
+ }
+
+ public int getScale(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+
+ // We get the scale from the SQLDA as returned by DERBY, but DERBY does not return the ANSI-defined
+ // value of scale 6 for TIMESTAMP.
+ //
+ // The JDBC drivers should hardcode this info as a short/near term solution.
+ //
+ if (types_[column - 1] == Types.TIMESTAMP) {
+ return 6;
+ }
+
+ return sqlScale_[column - 1];
+ }
+
+ public String getTableName(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ if (sqlxBasename_ == null || sqlxBasename_[column - 1] == null) {
+ return ""; // Per jdbc spec
+ }
+ return sqlxBasename_[column - 1];
+ }
/**
* What's a column's table's catalog name?
*
* @param column the first column is 1, the second is 2, ...
+ *
* @return column name or "" if not applicable.
- * @exception SQLException thrown on failure
+ *
+ * @throws SQLException thrown on failure
*/
- public String getCatalogName (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- return "";
- }
-
- public int getColumnType (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
-
- return types_[column-1];
- }
-
- public String getColumnTypeName (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
-
- int jdbcType = types_[column-1];
- // So these all come back zero for downlevel servers in PROTOCOL.
- // John is going to write some code to construct the sqlType_ array
- // based on the protocol types from the query descriptor.
- int sqlType = sqlType_[column-1];
-
- switch (sqlType) {
- case Types.DERBY_SQLTYPE_DATE:
- case Types.DERBY_SQLTYPE_NDATE:
- return "DATE";
- case Types.DERBY_SQLTYPE_TIME:
- case Types.DERBY_SQLTYPE_NTIME:
- return "TIME";
- case Types.DERBY_SQLTYPE_TIMESTAMP:
- case Types.DERBY_SQLTYPE_NTIMESTAMP:
- return "TIMESTAMP";
- case Types.DERBY_SQLTYPE_BLOB:
- case Types.DERBY_SQLTYPE_NBLOB:
- return "BLOB";
- case Types.DERBY_SQLTYPE_CLOB:
- case Types.DERBY_SQLTYPE_NCLOB:
- return "CLOB";
- case Types.DERBY_SQLTYPE_VARCHAR:
- case Types.DERBY_SQLTYPE_NVARCHAR:
- if (jdbcType == Types.VARBINARY)
- return "VARCHAR FOR BIT DATA";
- else
- return "VARCHAR";
- case Types.DERBY_SQLTYPE_CHAR:
- case Types.DERBY_SQLTYPE_NCHAR:
- if(jdbcType == Types.BINARY)
- return "CHAR FOR BIT DATA";
- else
- return "CHAR";
- case Types.DERBY_SQLTYPE_LONG:
- case Types.DERBY_SQLTYPE_NLONG:
- if(jdbcType == Types.LONGVARBINARY)
- return "LONG VARCHAR FOR BIT DATA";
- else
- return "LONG VARCHAR";
- case Types.DERBY_SQLTYPE_CSTR:
- case Types.DERBY_SQLTYPE_NCSTR:
- return "SBCS";
- case Types.DERBY_SQLTYPE_FLOAT:
- case Types.DERBY_SQLTYPE_NFLOAT:
- if(jdbcType == Types.DOUBLE)
- return "DOUBLE";
- if(jdbcType == Types.REAL)
- return "REAL";
- case Types.DERBY_SQLTYPE_DECIMAL:
- case Types.DERBY_SQLTYPE_NDECIMAL:
- return "DECIMAL";
- case Types.DERBY_SQLTYPE_BIGINT:
- case Types.DERBY_SQLTYPE_NBIGINT:
- return "BIGINT";
- case Types.DERBY_SQLTYPE_INTEGER:
- case Types.DERBY_SQLTYPE_NINTEGER:
- return "INTEGER";
- case Types.DERBY_SQLTYPE_SMALL:
- case Types.DERBY_SQLTYPE_NSMALL:
- return "SMALLINT";
- case Types.DERBY_SQLTYPE_NUMERIC:
- case Types.DERBY_SQLTYPE_NNUMERIC:
- return "NUMERIC";
- default:
- throw new SqlException (logWriter_, "Not supported");
- }
- }
-
- public boolean isReadOnly (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- if (sqlxUpdatable_ == null)
- return (resultSetConcurrency_ == java.sql.ResultSet.CONCUR_READ_ONLY); // If no extended describe, return resultSet's concurrecnty
- return sqlxUpdatable_[column-1] == 0; // PROTOCOL 0 means not updatable, 1 means updatable
- }
-
- public boolean isWritable (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- if (sqlxUpdatable_ == null)
- return (resultSetConcurrency_ == java.sql.ResultSet.CONCUR_UPDATABLE); // If no extended describe, return resultSet's concurrency
- return sqlxUpdatable_[column-1] == 1; // PROTOCOL 0 means not updatable, 1 means updatable
- }
-
- public boolean isDefinitelyWritable (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
- if (sqlxUpdatable_ == null) return false;
- return sqlxUpdatable_[column-1] == 1; // PROTOCOL 0 means not updatable, 1 means updatable
- }
-
- //--------------------------jdbc 2.0-----------------------------------
-
- public String getColumnClassName (int column) throws SqlException
- {
- checkForClosedStatement();
- checkForValidColumnIndex (column);
-
- int jdbcType = types_[column-1];
- switch (jdbcType) {
- case java.sql.Types.BIT:
- return "java.lang.Boolean";
- case java.sql.Types.TINYINT:
- return "java.lang.Integer";
- case Types.SMALLINT:
- return "java.lang.Integer";
- case Types.INTEGER:
- return "java.lang.Integer";
- case Types.BIGINT:
- return "java.lang.Long";
- case java.sql.Types.FLOAT:
- return "java.lang.Double";
- case Types.REAL:
- return "java.lang.Float";
- case Types.DOUBLE:
- return "java.lang.Double";
- case java.sql.Types.NUMERIC:
- case Types.DECIMAL:
- return "java.math.BigDecimal";
- case Types.CHAR:
- case Types.VARCHAR:
- case Types.LONGVARCHAR:
- return "java.lang.String";
- case Types.DATE:
- return "java.sql.Date";
- case Types.TIME:
- return "java.sql.Time";
- case Types.TIMESTAMP:
- return "java.sql.Timestamp";
- case Types.BINARY:
- case Types.VARBINARY:
- case Types.LONGVARBINARY:
- return "byte[]";
- case java.sql.Types.STRUCT:
- return "java.sql.Struct";
- case java.sql.Types.ARRAY:
- return "java.sql.Array";
- case Types.BLOB:
- return "java.sql.Blob";
- case Types.CLOB:
- return "java.sql.Clob";
- case java.sql.Types.REF:
- return "java.sql.Ref";
- default:
- throw new SqlException (logWriter_, "Not supported");
- }
- }
-
- //----------------------------helper methods----------------------------------
-
-
- void checkForValidColumnIndex (int column) throws SqlException
- {
- if (column < 1 || column > columns_)
- throw new SqlException (logWriter_, "Invalid argument: column index " +
- column + " is out of range.");
- }
-
- // If the input parameter has been set, return true, else return false.
- private boolean isParameterModeGuessedAsAnInput (int parameterIndex)
- {
- if (sqlxParmmode_[parameterIndex - 1] == java.sql.ParameterMetaData.parameterModeIn ||
- sqlxParmmode_[parameterIndex - 1] == java.sql.ParameterMetaData.parameterModeInOut) {
- return true;
- }
- return false;
- }
-
- // Does OUT parm registration rely on extended describe?
- // If the output parameter has been registered, return true, else return false.
- public boolean isParameterModeGuessedAsOutput (int parameterIndex)
- {
- return sqlxParmmode_[parameterIndex - 1] >= java.sql.ParameterMetaData.parameterModeInOut;
- }
-
- // Only called when column meta data is not described. Called by setXXX methods.
- public void guessInputParameterMetaData (int parameterIndex,
- int jdbcType) throws SqlException
- {
- guessInputParameterMetaData (parameterIndex, jdbcType, 0);
- }
-
- private void setParmModeForInputParameter (int parameterIndex)
- {
- if (sqlxParmmode_[parameterIndex - 1] == java.sql.ParameterMetaData.parameterModeOut)
- sqlxParmmode_[parameterIndex - 1] = java.sql.ParameterMetaData.parameterModeInOut;
- else if (sqlxParmmode_[parameterIndex - 1] == java.sql.ParameterMetaData.parameterModeUnknown)
- sqlxParmmode_[parameterIndex - 1] = java.sql.ParameterMetaData.parameterModeIn;
- }
-
- // Only called when column meta data is not described. Called by setXXX methods.
- // Scale is only applied for Decimal or Numeric JDBC type.
- public void guessInputParameterMetaData (int parameterIndex,
- int jdbcType,
- int scale) throws SqlException
- {
- setParmModeForInputParameter (parameterIndex);
- int driverType = getInternalTypeForGuessedOrRegisteredJdbcType (jdbcType);
- // if output parameter has been registered already
- if (isParameterModeGuessedAsOutput (parameterIndex)) {
- if (!isCompatibleDriverTypes (types_[parameterIndex-1], driverType)) {
- throw new SqlException (logWriter_, "The jdbcType " + jdbcType + " does not match between the setter method and " +
- "the registerOutParameter method.");
- }
- else return; // don't bother guessing if the parameter was already registered
- }
- guessParameterMetaDataBasedOnSupportedDriverType (parameterIndex, jdbcType==java.sql.Types.BIGINT, driverType, scale);
- }
-
- private void setParmModeForOutputParameter (int parameterIndex)
- {
- if (sqlxParmmode_[parameterIndex - 1] == java.sql.ParameterMetaData.parameterModeIn)
- sqlxParmmode_[parameterIndex - 1] = java.sql.ParameterMetaData.parameterModeInOut;
- else if (sqlxParmmode_[parameterIndex - 1] == java.sql.ParameterMetaData.parameterModeUnknown)
- sqlxParmmode_[parameterIndex - 1] = java.sql.ParameterMetaData.parameterModeOut;
- }
+ public String getCatalogName(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ return "";
+ }
+
+ public int getColumnType(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
- // Only called when column meta data is not described, called by registerOutParameter methods.
- public void guessOutputParameterMetaData (int parameterIndex,
+ return types_[column - 1];
+ }
+
+ public String getColumnTypeName(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+
+ int jdbcType = types_[column - 1];
+ // So these all come back zero for downlevel servers in PROTOCOL.
+ // John is going to write some code to construct the sqlType_ array
+ // based on the protocol types from the query descriptor.
+ int sqlType = sqlType_[column - 1];
+
+ switch (sqlType) {
+ case Types.DERBY_SQLTYPE_DATE:
+ case Types.DERBY_SQLTYPE_NDATE:
+ return "DATE";
+ case Types.DERBY_SQLTYPE_TIME:
+ case Types.DERBY_SQLTYPE_NTIME:
+ return "TIME";
+ case Types.DERBY_SQLTYPE_TIMESTAMP:
+ case Types.DERBY_SQLTYPE_NTIMESTAMP:
+ return "TIMESTAMP";
+ case Types.DERBY_SQLTYPE_BLOB:
+ case Types.DERBY_SQLTYPE_NBLOB:
+ return "BLOB";
+ case Types.DERBY_SQLTYPE_CLOB:
+ case Types.DERBY_SQLTYPE_NCLOB:
+ return "CLOB";
+ case Types.DERBY_SQLTYPE_VARCHAR:
+ case Types.DERBY_SQLTYPE_NVARCHAR:
+ if (jdbcType == Types.VARBINARY) {
+ return "VARCHAR FOR BIT DATA";
+ } else {
+ return "VARCHAR";
+ }
+ case Types.DERBY_SQLTYPE_CHAR:
+ case Types.DERBY_SQLTYPE_NCHAR:
+ if (jdbcType == Types.BINARY) {
+ return "CHAR FOR BIT DATA";
+ } else {
+ return "CHAR";
+ }
+ case Types.DERBY_SQLTYPE_LONG:
+ case Types.DERBY_SQLTYPE_NLONG:
+ if (jdbcType == Types.LONGVARBINARY) {
+ return "LONG VARCHAR FOR BIT DATA";
+ } else {
+ return "LONG VARCHAR";
+ }
+ case Types.DERBY_SQLTYPE_CSTR:
+ case Types.DERBY_SQLTYPE_NCSTR:
+ return "SBCS";
+ case Types.DERBY_SQLTYPE_FLOAT:
+ case Types.DERBY_SQLTYPE_NFLOAT:
+ if (jdbcType == Types.DOUBLE) {
+ return "DOUBLE";
+ }
+ if (jdbcType == Types.REAL) {
+ return "REAL";
+ }
+ case Types.DERBY_SQLTYPE_DECIMAL:
+ case Types.DERBY_SQLTYPE_NDECIMAL:
+ return "DECIMAL";
+ case Types.DERBY_SQLTYPE_BIGINT:
+ case Types.DERBY_SQLTYPE_NBIGINT:
+ return "BIGINT";
+ case Types.DERBY_SQLTYPE_INTEGER:
+ case Types.DERBY_SQLTYPE_NINTEGER:
+ return "INTEGER";
+ case Types.DERBY_SQLTYPE_SMALL:
+ case Types.DERBY_SQLTYPE_NSMALL:
+ return "SMALLINT";
+ case Types.DERBY_SQLTYPE_NUMERIC:
+ case Types.DERBY_SQLTYPE_NNUMERIC:
+ return "NUMERIC";
+ default:
+ throw new SqlException(logWriter_, "Not supported");
+ }
+ }
+
+ public boolean isReadOnly(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ if (sqlxUpdatable_ == null) {
+ return (resultSetConcurrency_ == java.sql.ResultSet.CONCUR_READ_ONLY); // If no extended describe, return resultSet's concurrecnty
+ }
+ return sqlxUpdatable_[column - 1] == 0; // PROTOCOL 0 means not updatable, 1 means updatable
+ }
+
+ public boolean isWritable(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ if (sqlxUpdatable_ == null) {
+ return (resultSetConcurrency_ == java.sql.ResultSet.CONCUR_UPDATABLE); // If no extended describe, return resultSet's concurrency
+ }
+ return sqlxUpdatable_[column - 1] == 1; // PROTOCOL 0 means not updatable, 1 means updatable
+ }
+
+ public boolean isDefinitelyWritable(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+ if (sqlxUpdatable_ == null) {
+ return false;
+ }
+ return sqlxUpdatable_[column - 1] == 1; // PROTOCOL 0 means not updatable, 1 means updatable
+ }
+
+ //--------------------------jdbc 2.0-----------------------------------
+
+ public String getColumnClassName(int column) throws SqlException {
+ checkForClosedStatement();
+ checkForValidColumnIndex(column);
+
+ int jdbcType = types_[column - 1];
+ switch (jdbcType) {
+ case java.sql.Types.BIT:
+ return "java.lang.Boolean";
+ case java.sql.Types.TINYINT:
+ return "java.lang.Integer";
+ case Types.SMALLINT:
+ return "java.lang.Integer";
+ case Types.INTEGER:
+ return "java.lang.Integer";
+ case Types.BIGINT:
+ return "java.lang.Long";
+ case java.sql.Types.FLOAT:
+ return "java.lang.Double";
+ case Types.REAL:
+ return "java.lang.Float";
+ case Types.DOUBLE:
+ return "java.lang.Double";
+ case java.sql.Types.NUMERIC:
+ case Types.DECIMAL:
+ return "java.math.BigDecimal";
+ case Types.CHAR:
+ case Types.VARCHAR:
+ case Types.LONGVARCHAR:
+ return "java.lang.String";
+ case Types.DATE:
+ return "java.sql.Date";
+ case Types.TIME:
+ return "java.sql.Time";
+ case Types.TIMESTAMP:
+ return "java.sql.Timestamp";
+ case Types.BINARY:
+ case Types.VARBINARY:
+ case Types.LONGVARBINARY:
+ return "byte[]";
+ case java.sql.Types.STRUCT:
+ return "java.sql.Struct";
+ case java.sql.Types.ARRAY:
+ return "java.sql.Array";
+ case Types.BLOB:
+ return "java.sql.Blob";
+ case Types.CLOB:
+ return "java.sql.Clob";
+ case java.sql.Types.REF:
+ return "java.sql.Ref";
+ default:
+ throw new SqlException(logWriter_, "Not supported");
+ }
+ }
+
+ //----------------------------helper methods----------------------------------
+
+
+ void checkForValidColumnIndex(int column) throws SqlException {
+ if (column < 1 || column > columns_) {
+ throw new SqlException(logWriter_, "Invalid argument: column index " +
+ column + " is out of range.");
+ }
+ }
+
+ // If the input parameter has been set, return true, else return false.
+ private boolean isParameterModeGuessedAsAnInput(int parameterIndex) {
+ if (sqlxParmmode_[parameterIndex - 1] == java.sql.ParameterMetaData.parameterModeIn ||
+ sqlxParmmode_[parameterIndex - 1] == java.sql.ParameterMetaData.parameterModeInOut) {
+ return true;
+ }
+ return false;
+ }
+
+ // Does OUT parm registration rely on extended describe?
+ // If the output parameter has been registered, return true, else return false.
+ public boolean isParameterModeGuessedAsOutput(int parameterIndex) {
+ return sqlxParmmode_[parameterIndex - 1] >= java.sql.ParameterMetaData.parameterModeInOut;
+ }
+
+ // Only called when column meta data is not described. Called by setXXX methods.
+ public void guessInputParameterMetaData(int parameterIndex,
+ int jdbcType) throws SqlException {
+ guessInputParameterMetaData(parameterIndex, jdbcType, 0);
+ }
+
+ private void setParmModeForInputParameter(int parameterIndex) {
+ if (sqlxParmmode_[parameterIndex - 1] == java.sql.ParameterMetaData.parameterModeOut) {
+ sqlxParmmode_[parameterIndex - 1] = java.sql.ParameterMetaData.parameterModeInOut;
+ } else if (sqlxParmmode_[parameterIndex - 1] == java.sql.ParameterMetaData.parameterModeUnknown) {
+ sqlxParmmode_[parameterIndex - 1] = java.sql.ParameterMetaData.parameterModeIn;
+ }
+ }
+
+ // Only called when column meta data is not described. Called by setXXX methods.
+ // Scale is only applied for Decimal or Numeric JDBC type.
+ public void guessInputParameterMetaData(int parameterIndex,
int jdbcType,
- int scale) throws SqlException
- {
- setParmModeForOutputParameter (parameterIndex);
- int driverType = getInternalTypeForGuessedOrRegisteredJdbcType (jdbcType);
- if (isParameterModeGuessedAsAnInput (parameterIndex)) { // if input parameter has been set already
- // Verify that "set" and "registered" types are compatible.
- if (!isCompatibleDriverTypes (driverType, types_[parameterIndex -1])) {
- throw new SqlException (logWriter_, "The jdbcType does not match between the setter method and " +
- "the registerOutParameter method.");
- }
- // the registered type will take precedence over any previously guessed input "set" type
- }
- guessParameterMetaDataBasedOnSupportedDriverType (parameterIndex, jdbcType==java.sql.Types.BIGINT, driverType, scale);
- }
-
- private boolean isCompatibleDriverTypes (int registeredType, int guessedInputType)
- {
- switch (registeredType) {
- case Types.CHAR:
- case Types.VARCHAR:
- case Types.LONGVARCHAR:
- return guessedInputType == Types.CHAR || guessedInputType == Types.VARCHAR || guessedInputType == Types.LONGVARCHAR;
- case Types.BINARY:
- case Types.VARBINARY:
- case Types.LONGVARBINARY:
- return guessedInputType == Types.BINARY || guessedInputType == Types.VARBINARY || guessedInputType == Types.LONGVARBINARY;
- default:
- return registeredType == guessedInputType;
- }
- }
-
- // Only used when describe information is not available.
- private int getInternalTypeForGuessedOrRegisteredJdbcType (int guessedOrRegisteredJdbcType) throws SqlException
- {
- switch (guessedOrRegisteredJdbcType) {
- case java.sql.Types.BIT:
- case java.sql.Types.TINYINT:
- case java.sql.Types.SMALLINT:
- return Types.SMALLINT;
- case java.sql.Types.INTEGER:
- return Types.INTEGER;
- case java.sql.Types.BIGINT:
- return Types.BIGINT;
- case java.sql.Types.REAL:
- return Types.REAL;
- case java.sql.Types.DOUBLE:
- case java.sql.Types.FLOAT:
- return Types.DOUBLE;
- case java.sql.Types.DECIMAL:
- case java.sql.Types.NUMERIC:
- return Types.DECIMAL;
- case java.sql.Types.DATE:
- return Types.DATE;
- case java.sql.Types.TIME:
- return Types.TIME;
- case java.sql.Types.TIMESTAMP:
- return Types.TIMESTAMP;
- case java.sql.Types.CHAR:
- return Types.CHAR;
- case java.sql.Types.VARCHAR:
- return Types.VARCHAR;
- case java.sql.Types.LONGVARCHAR:
- return Types.LONGVARCHAR;
- case java.sql.Types.BINARY:
- return Types.BINARY;
- case java.sql.Types.VARBINARY:
- return Types.VARBINARY;
- case java.sql.Types.LONGVARBINARY:
- return Types.LONGVARBINARY;
- case java.sql.Types.BLOB:
- return Types.BLOB;
- case java.sql.Types.CLOB:
- return Types.CLOB;
- case java.sql.Types.NULL:
- case java.sql.Types.OTHER:
- throw new SqlException (logWriter_, "Jdbc type " + guessedOrRegisteredJdbcType + " not yet supported.");
- default:
- throw new SqlException (logWriter_, "Unrecognized jdbc type " + guessedOrRegisteredJdbcType);
- }
- }
-
- private void guessParameterMetaDataBasedOnSupportedDriverType (int parameterIndex,
- boolean isBigInt,
- int driverType,
- int scale) throws SqlException
- {
- switch (driverType) {
- case Types.SMALLINT:
- guessParameterMetaData (parameterIndex, driverType, 2, 0, 0);
- break;
- case Types.INTEGER:
- guessParameterMetaData (parameterIndex, driverType, 4, 0, 0);
- break;
- case Types.BIGINT:
- guessParameterMetaData (parameterIndex, driverType, 8, 0, 0);
- break;
- case Types.REAL:
- guessParameterMetaData (parameterIndex, driverType, 4, 0, 0);
- break;
- case Types.DOUBLE:
- guessParameterMetaData (parameterIndex, driverType, 8, 0, 0);
- break;
- case Types.DECIMAL:
- if (isBigInt)
- guessParameterMetaData (parameterIndex, driverType, 0, 19, 0);
- else
- guessParameterMetaData (parameterIndex, driverType, 0, 31, scale);
- break;
- case Types.DATE:
- guessParameterMetaData (parameterIndex, driverType, 10, 0, 0);
- break;
- case Types.TIME:
- guessParameterMetaData (parameterIndex, driverType, 8, 0, 0);
- break;
- case Types.TIMESTAMP:
- guessParameterMetaData (parameterIndex, driverType, 26, 0, 0);
- break;
- case Types.CHAR:
- case Types.VARCHAR:
- guessParameterMetaData (parameterIndex, driverType, 32672, 0, 0);
- break;
- case Types.LONGVARCHAR:
- guessParameterMetaData (parameterIndex, driverType, 32700, 0, 0);
- break;
- case Types.BINARY:
- case Types.VARBINARY:
- guessParameterMetaData (parameterIndex, driverType, 4000, 0, 0);
- break;
- case Types.LONGVARBINARY:
- guessParameterMetaData (parameterIndex, driverType, 32700, 0, 0);
- break;
- case Types.BLOB:
- // 32768 will cause 8004 for a null placeholder length (could hard code in NET layer)
- guessParameterMetaData (parameterIndex, driverType, 32768, 0, 0);
- break;
- case Types.CLOB:
- // 32768 will cause 8004 for a null placeholder length (could hard code in NET layer)
- guessParameterMetaData (parameterIndex, driverType, 32768, 0, 0);
- break;
- default:
- throw new SqlException (logWriter_, "Unrecognized driver type " + driverType);
- }
- }
-
- // Only called when column meta data is not described
- private void guessParameterMetaData (int parameterIndex,
- int type,
- int length,
- int precision,
- int scale)
- {
- // Always guess that the column is nullable
- nullable_[parameterIndex-1] = true;
- types_[parameterIndex-1] = type;
- sqlLength_[parameterIndex-1] = length;
- sqlPrecision_[parameterIndex-1] = precision;
- sqlScale_[parameterIndex-1] = scale;
- sqlType_[parameterIndex-1] = mapDriverToSqlType(type, true);
- }
-
- int mapDriverToSqlType(int type, boolean nullable)
- {
- int sqlType = 0;
- switch (type)
- {
- case java.sql.Types.SMALLINT:
- sqlType = Types.DERBY_SQLTYPE_NSMALL;
- break;
- case java.sql.Types.INTEGER:
- sqlType = Types.DERBY_SQLTYPE_NINTEGER;
- break;
- case java.sql.Types.BIGINT:
- sqlType = Types.DERBY_SQLTYPE_NBIGINT;
- break;
- case java.sql.Types.REAL:
- case java.sql.Types.DOUBLE:
- case java.sql.Types.FLOAT:
- sqlType = Types.DERBY_SQLTYPE_NFLOAT;
- break;
- case java.sql.Types.DATE:
- sqlType = Types.DERBY_SQLTYPE_NDATE;
- break;
- case java.sql.Types.TIME:
- sqlType = Types.DERBY_SQLTYPE_NTIME;
- break;
- case java.sql.Types.TIMESTAMP:
- sqlType = Types.DERBY_SQLTYPE_NTIMESTAMP;
- break;
- case java.sql.Types.CHAR:
- case java.sql.Types.VARCHAR:
- sqlType = Types.DERBY_SQLTYPE_NVARCHAR;
- break;
- case java.sql.Types.LONGVARCHAR:
- sqlType = Types.DERBY_SQLTYPE_NLONG;
- break;
- case java.sql.Types.BINARY:
- case java.sql.Types.VARBINARY:
- sqlType = Types.DERBY_SQLTYPE_NVARCHAR;
- break;
- case java.sql.Types.LONGVARBINARY:
- sqlType = Types.DERBY_SQLTYPE_NLONG;
- break;
- case java.sql.Types.NUMERIC:
- case java.sql.Types.DECIMAL:
- sqlType = Types.DERBY_SQLTYPE_NDECIMAL;
- break;
- case java.sql.Types.BLOB:
- sqlType = Types.DERBY_SQLTYPE_NBLOB;
- break;
- case java.sql.Types.CLOB:
- sqlType = Types.DERBY_SQLTYPE_NCLOB;
- break;
- default:
- break; // bug check
- }
- if (!nullable)
- sqlType--;
- return sqlType;
- }
-
-
- public void setLogWriter (LogWriter logWriter)
- {
- logWriter_ = logWriter;
- }
-
- private void nullDataForGC()
- {
- columns_ = 0;
- nullable_ = null;
- types_ = null;
- singleMixedByteOrDouble_ = null;
- sqldRdbnam_ = null;
- sqldSchema_ = null;
- sqlPrecision_ = null;
- sqlScale_ = null;
- sqlLength_ = null;
- sqlType_ = null;
- sqlCcsid_ = null;
- sqlName_ = null;
- sqlLabel_ = null;
- sqlUnnamed_ = null;
- sqlComment_ = null;
- sqlxKeymem_ = null;
- sqlxGenerated_ = null;
- sqlxParmmode_ = null;
- sqlxCorname_ = null;
- sqlxName_ = null;
- sqlxBasename_ = null;
- sqlxUpdatable_ = null;
- sqlxSchema_ = null;
- sqlxRdbnam_ = null;
- clientParamtertype_ = null;
- types_ = null;
- }
-
- public boolean hasLobColumns ()
- {
- for (int i=0; i<columns_; i++) {
- switch (org.apache.derby.client.am.Utils.getNonNullableSqlType (sqlType_[i])) {
- case org.apache.derby.client.am.Types.DERBY_SQLTYPE_BLOB:
- case org.apache.derby.client.am.Types.DERBY_SQLTYPE_CLOB:
- return true;
+ int scale) throws SqlException {
+ setParmModeForInputParameter(parameterIndex);
+ int driverType = getInternalTypeForGuessedOrRegisteredJdbcType(jdbcType);
+ // if output parameter has been registered already
+ if (isParameterModeGuessedAsOutput(parameterIndex)) {
+ if (!isCompatibleDriverTypes(types_[parameterIndex - 1], driverType)) {
+ throw new SqlException(logWriter_, "The jdbcType " + jdbcType + " does not match between the setter method and " +
+ "the registerOutParameter method.");
+ } else {
+ return; // don't bother guessing if the parameter was already registered
+ }
+ }
+ guessParameterMetaDataBasedOnSupportedDriverType(parameterIndex, jdbcType == java.sql.Types.BIGINT, driverType, scale);
+ }
+
+ private void setParmModeForOutputParameter(int parameterIndex) {
+ if (sqlxParmmode_[parameterIndex - 1] == java.sql.ParameterMetaData.parameterModeIn) {
+ sqlxParmmode_[parameterIndex - 1] = java.sql.ParameterMetaData.parameterModeInOut;
+ } else if (sqlxParmmode_[parameterIndex - 1] == java.sql.ParameterMetaData.parameterModeUnknown) {
+ sqlxParmmode_[parameterIndex - 1] = java.sql.ParameterMetaData.parameterModeOut;
+ }
+ }
+
+ // Only called when column meta data is not described, called by registerOutParameter methods.
+ public void guessOutputParameterMetaData(int parameterIndex,
+ int jdbcType,
+ int scale) throws SqlException {
+ setParmModeForOutputParameter(parameterIndex);
+ int driverType = getInternalTypeForGuessedOrRegisteredJdbcType(jdbcType);
+ if (isParameterModeGuessedAsAnInput(parameterIndex)) { // if input parameter has been set already
+ // Verify that "set" and "registered" types are compatible.
+ if (!isCompatibleDriverTypes(driverType, types_[parameterIndex - 1])) {
+ throw new SqlException(logWriter_, "The jdbcType does not match between the setter method and " +
+ "the registerOutParameter method.");
+ }
+ // the registered type will take precedence over any previously guessed input "set" type
+ }
+ guessParameterMetaDataBasedOnSupportedDriverType(parameterIndex, jdbcType == java.sql.Types.BIGINT, driverType, scale);
+ }
+
+ private boolean isCompatibleDriverTypes(int registeredType, int guessedInputType) {
+ switch (registeredType) {
+ case Types.CHAR:
+ case Types.VARCHAR:
+ case Types.LONGVARCHAR:
+ return guessedInputType == Types.CHAR || guessedInputType == Types.VARCHAR || guessedInputType == Types.LONGVARCHAR;
+ case Types.BINARY:
+ case Types.VARBINARY:
+ case Types.LONGVARBINARY:
+ return guessedInputType == Types.BINARY || guessedInputType == Types.VARBINARY || guessedInputType == Types.LONGVARBINARY;
+ default:
+ return registeredType == guessedInputType;
+ }
+ }
+
+ // Only used when describe information is not available.
+ private int getInternalTypeForGuessedOrRegisteredJdbcType(int guessedOrRegisteredJdbcType) throws SqlException {
+ switch (guessedOrRegisteredJdbcType) {
+ case java.sql.Types.BIT:
+ case java.sql.Types.TINYINT:
+ case java.sql.Types.SMALLINT:
+ return Types.SMALLINT;
+ case java.sql.Types.INTEGER:
+ return Types.INTEGER;
+ case java.sql.Types.BIGINT:
+ return Types.BIGINT;
+ case java.sql.Types.REAL:
+ return Types.REAL;
+ case java.sql.Types.DOUBLE:
+ case java.sql.Types.FLOAT:
+ return Types.DOUBLE;
+ case java.sql.Types.DECIMAL:
+ case java.sql.Types.NUMERIC:
+ return Types.DECIMAL;
+ case java.sql.Types.DATE:
+ return Types.DATE;
+ case java.sql.Types.TIME:
+ return Types.TIME;
+ case java.sql.Types.TIMESTAMP:
+ return Types.TIMESTAMP;
+ case java.sql.Types.CHAR:
+ return Types.CHAR;
+ case java.sql.Types.VARCHAR:
+ return Types.VARCHAR;
+ case java.sql.Types.LONGVARCHAR:
+ return Types.LONGVARCHAR;
+ case java.sql.Types.BINARY:
+ return Types.BINARY;
+ case java.sql.Types.VARBINARY:
+ return Types.VARBINARY;
+ case java.sql.Types.LONGVARBINARY:
+ return Types.LONGVARBINARY;
+ case java.sql.Types.BLOB:
+ return Types.BLOB;
+ case java.sql.Types.CLOB:
+ return Types.CLOB;
+ case java.sql.Types.NULL:
+ case java.sql.Types.OTHER:
+ throw new SqlException(logWriter_, "Jdbc type " + guessedOrRegisteredJdbcType + " not yet supported.");
+ default:
+ throw new SqlException(logWriter_, "Unrecognized jdbc type " + guessedOrRegisteredJdbcType);
+ }
+ }
+
+ private void guessParameterMetaDataBasedOnSupportedDriverType(int parameterIndex,
+ boolean isBigInt,
+ int driverType,
+ int scale) throws SqlException {
+ switch (driverType) {
+ case Types.SMALLINT:
+ guessParameterMetaData(parameterIndex, driverType, 2, 0, 0);
+ break;
+ case Types.INTEGER:
+ guessParameterMetaData(parameterIndex, driverType, 4, 0, 0);
+ break;
+ case Types.BIGINT:
+ guessParameterMetaData(parameterIndex, driverType, 8, 0, 0);
+ break;
+ case Types.REAL:
+ guessParameterMetaData(parameterIndex, driverType, 4, 0, 0);
+ break;
+ case Types.DOUBLE:
+ guessParameterMetaData(parameterIndex, driverType, 8, 0, 0);
+ break;
+ case Types.DECIMAL:
+ if (isBigInt) {
+ guessParameterMetaData(parameterIndex, driverType, 0, 19, 0);
+ } else {
+ guessParameterMetaData(parameterIndex, driverType, 0, 31, scale);
+ }
+ break;
+ case Types.DATE:
+ guessParameterMetaData(parameterIndex, driverType, 10, 0, 0);
+ break;
+ case Types.TIME:
+ guessParameterMetaData(parameterIndex, driverType, 8, 0, 0);
+ break;
+ case Types.TIMESTAMP:
+ guessParameterMetaData(parameterIndex, driverType, 26, 0, 0);
+ break;
+ case Types.CHAR:
+ case Types.VARCHAR:
+ guessParameterMetaData(parameterIndex, driverType, 32672, 0, 0);
+ break;
+ case Types.LONGVARCHAR:
+ guessParameterMetaData(parameterIndex, driverType, 32700, 0, 0);
+ break;
+ case Types.BINARY:
+ case Types.VARBINARY:
+ guessParameterMetaData(parameterIndex, driverType, 4000, 0, 0);
+ break;
+ case Types.LONGVARBINARY:
+ guessParameterMetaData(parameterIndex, driverType, 32700, 0, 0);
+ break;
+ case Types.BLOB:
+ // 32768 will cause 8004 for a null placeholder length (could hard code in NET layer)
+ guessParameterMetaData(parameterIndex, driverType, 32768, 0, 0);
+ break;
+ case Types.CLOB:
+ // 32768 will cause 8004 for a null placeholder length (could hard code in NET layer)
+ guessParameterMetaData(parameterIndex, driverType, 32768, 0, 0);
+ break;
+ default:
+ throw new SqlException(logWriter_, "Unrecognized driver type " + driverType);
+ }
+ }
+
+ // Only called when column meta data is not described
+ private void guessParameterMetaData(int parameterIndex,
+ int type,
+ int length,
+ int precision,
+ int scale) {
+ // Always guess that the column is nullable
+ nullable_[parameterIndex - 1] = true;
+ types_[parameterIndex - 1] = type;
+ sqlLength_[parameterIndex - 1] = length;
+ sqlPrecision_[parameterIndex - 1] = precision;
+ sqlScale_[parameterIndex - 1] = scale;
+ sqlType_[parameterIndex - 1] = mapDriverToSqlType(type, true);
+ }
+
+ int mapDriverToSqlType(int type, boolean nullable) {
+ int sqlType = 0;
+ switch (type) {
+ case java.sql.Types.SMALLINT:
+ sqlType = Types.DERBY_SQLTYPE_NSMALL;
+ break;
+ case java.sql.Types.INTEGER:
+ sqlType = Types.DERBY_SQLTYPE_NINTEGER;
+ break;
+ case java.sql.Types.BIGINT:
+ sqlType = Types.DERBY_SQLTYPE_NBIGINT;
+ break;
+ case java.sql.Types.REAL:
+ case java.sql.Types.DOUBLE:
+ case java.sql.Types.FLOAT:
+ sqlType = Types.DERBY_SQLTYPE_NFLOAT;
+ break;
+ case java.sql.Types.DATE:
+ sqlType = Types.DERBY_SQLTYPE_NDATE;
+ break;
+ case java.sql.Types.TIME:
+ sqlType = Types.DERBY_SQLTYPE_NTIME;
+ break;
+ case java.sql.Types.TIMESTAMP:
+ sqlType = Types.DERBY_SQLTYPE_NTIMESTAMP;
+ break;
+ case java.sql.Types.CHAR:
+ case java.sql.Types.VARCHAR:
+ sqlType = Types.DERBY_SQLTYPE_NVARCHAR;
+ break;
+ case java.sql.Types.LONGVARCHAR:
+ sqlType = Types.DERBY_SQLTYPE_NLONG;
+ break;
+ case java.sql.Types.BINARY:
+ case java.sql.Types.VARBINARY:
+ sqlType = Types.DERBY_SQLTYPE_NVARCHAR;
+ break;
+ case java.sql.Types.LONGVARBINARY:
+ sqlType = Types.DERBY_SQLTYPE_NLONG;
+ break;
+ case java.sql.Types.NUMERIC:
+ case java.sql.Types.DECIMAL:
+ sqlType = Types.DERBY_SQLTYPE_NDECIMAL;
+ break;
+ case java.sql.Types.BLOB:
+ sqlType = Types.DERBY_SQLTYPE_NBLOB;
+ break;
+ case java.sql.Types.CLOB:
+ sqlType = Types.DERBY_SQLTYPE_NCLOB;
+ break;
default:
- break;
- }
+ break; // bug check
+ }
+ if (!nullable) {
+ sqlType--;
+ }
+ return sqlType;
+ }
+
+
+ public void setLogWriter(LogWriter logWriter) {
+ logWriter_ = logWriter;
+ }
+
+ private void nullDataForGC() {
+ columns_ = 0;
+ nullable_ = null;
+ types_ = null;
+ singleMixedByteOrDouble_ = null;
+ sqldRdbnam_ = null;
+ sqldSchema_ = null;
+ sqlPrecision_ = null;
+ sqlScale_ = null;
+ sqlLength_ = null;
+ sqlType_ = null;
+ sqlCcsid_ = null;
+ sqlName_ = null;
+ sqlLabel_ = null;
+ sqlUnnamed_ = null;
+ sqlComment_ = null;
+ sqlxKeymem_ = null;
+ sqlxGenerated_ = null;
+ sqlxParmmode_ = null;
+ sqlxCorname_ = null;
+ sqlxName_ = null;
+ sqlxBasename_ = null;
+ sqlxUpdatable_ = null;
+ sqlxSchema_ = null;
+ sqlxRdbnam_ = null;
+ clientParamtertype_ = null;
+ types_ = null;
}
- return false;
- }
- // Cache the hashtable in ColumnMetaData.
- int findColumnX (String columnName) throws SqlException
- {
- // Create cache if it doesn't exist
- if (columnNameToIndexCache_ == null) {
- columnNameToIndexCache_ = new java.util.Hashtable ();
- }
- else { // Check cache for mapping
- Integer index = (Integer) columnNameToIndexCache_.get (columnName);
- if (index != null)
- return index.intValue ();
- }
-
- // Ok, we'll have to search the metadata
- for (int col = 0; col < this.columns_; col++) {
- if (this.sqlName_ != null && // sqlName comes from an optional group
- this.sqlName_[col] != null &&
- this.sqlName_[col].equalsIgnoreCase (columnName)) {
- // Found it, add it to the cache
- columnNameToIndexCache_.put (columnName, new Integer (col+1));
- return col+1;
- }
- }
- throw new SqlException (logWriter_, "Invalid argument: unknown column name " + columnName);
- }
-
- // assign ordinal position as the column name if null.
- void assignColumnName (int column)
- {
- if (columnNameToIndexCache_ == null)
- columnNameToIndexCache_ = new java.util.Hashtable ();
- String columnName = (new Integer(column)).toString();
- columnNameToIndexCache_.put (columnName, new Integer (column));
- sqlName_[column-1] = columnName;
- }
-
- public boolean columnIsNotInUnicode (int index)
- {
- return (sqlCcsid_[index] != 1208);
- }
+ public boolean hasLobColumns() {
+ for (int i = 0; i < columns_; i++) {
+ switch (org.apache.derby.client.am.Utils.getNonNullableSqlType(sqlType_[i])) {
+ case org.apache.derby.client.am.Types.DERBY_SQLTYPE_BLOB:
+ case org.apache.derby.client.am.Types.DERBY_SQLTYPE_CLOB:
+ return true;
+ default:
+ break;
+ }
+ }
+ return false;
+ }
+
+ // Cache the hashtable in ColumnMetaData.
+ int findColumnX(String columnName) throws SqlException {
+ // Create cache if it doesn't exist
+ if (columnNameToIndexCache_ == null) {
+ columnNameToIndexCache_ = new java.util.Hashtable();
+ } else { // Check cache for mapping
+ Integer index = (Integer) columnNameToIndexCache_.get(columnName);
+ if (index != null) {
+ return index.intValue();
+ }
+ }
+
+ // Ok, we'll have to search the metadata
+ for (int col = 0; col < this.columns_; col++) {
+ if (this.sqlName_ != null && // sqlName comes from an optional group
+ this.sqlName_[col] != null &&
+ this.sqlName_[col].equalsIgnoreCase(columnName)) {
+ // Found it, add it to the cache
+ columnNameToIndexCache_.put(columnName, new Integer(col + 1));
+ return col + 1;
+ }
+ }
+ throw new SqlException(logWriter_, "Invalid argument: unknown column name " + columnName);
+ }
+
+ // assign ordinal position as the column name if null.
+ void assignColumnName(int column) {
+ if (columnNameToIndexCache_ == null) {
+ columnNameToIndexCache_ = new java.util.Hashtable();
+ }
+ String columnName = (new Integer(column)).toString();
+ columnNameToIndexCache_.put(columnName, new Integer(column));
+ sqlName_[column - 1] = columnName;
+ }
+
+ public boolean columnIsNotInUnicode(int index) {
+ return (sqlCcsid_[index] != 1208);
+ }
}
Modified: incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Configuration.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Configuration.java?rev=165585&r1=165584&r2=165585&view=diff
==============================================================================
--- incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Configuration.java (original)
+++ incubator/derby/code/trunk/java/client/org/apache/derby/client/am/Configuration.java Sun May 1 23:25:59 2005
@@ -19,228 +19,215 @@
*/
package org.apache.derby.client.am;
-import org.apache.derby.iapi.services.info.ProductVersionHolder;
-import org.apache.derby.iapi.services.info.ProductGenusNames;
-import java.security.AccessController;
-import java.security.PrivilegedExceptionAction;
+
import java.io.IOException;
import java.io.InputStream;
+import java.security.AccessController;
+import java.security.PrivilegedExceptionAction;
+
+import org.apache.derby.iapi.services.info.ProductGenusNames;
+import org.apache.derby.iapi.services.info.ProductVersionHolder;
+
+public class Configuration {
+
+
+ public static int traceFileSuffixIndex__ = 0;
+
+ public static int traceLevel__ = org.apache.derby.client.ClientBaseDataSource.TRACE_ALL;
+
+ public static String traceFile__ = null;
+
+ public static String traceDirectory__ = null;
+
+ public static boolean traceFileAppend__ = false;
+ public static String jreLevel = "1.3.0"; // default level if unable to read
+ public static int jreLevelMajor = 1;
+ public static int jreLevelMinor = 3;
+
+ private Configuration() {
+ }
+
+ public static boolean traceSuspended__;
+
+ public static boolean[] enableConnectivityToTargetServer__;
+ public static boolean jvmSupportsMicrosClock__ = false;
+
+ // -------------------------- versioning -------------------------------------
+
+ public static ProductVersionHolder dncProductVersionHolder__;
+
+ public static ProductVersionHolder getProductVersionHolder() {
+ return dncProductVersionHolder__;
+ }
+
+
+ // for DatabaseMetaData.getDriverName()
+ public final static String dncDriverName = "Apache Derby Network Client JDBC Driver";
+
+
+ // Hard-wired for JDBC
+ //
+ // Currently ASCII hex value of "SYSLVL01".
+ public final static byte[] dncPackageConsistencyToken =
+ {0x53, 0x59, 0x53, 0x4c, 0x56, 0x4c, 0x30, 0x31};
+
+ // We will not set packagge VERSION in the initial release.
+ // If we have to change the package version in the future then we can.
+ public static String dncPackageVersion = null;
-public class Configuration
-{
+ // for Driver.jdbcCompliant()
+ public final static boolean jdbcCompliant = true;
+ // for Driver.getCompatibileJREVersions()
+ public final static String[] dncCompatibleJREVersions = new String[]{"1.3", "1.4"};
- public static int traceFileSuffixIndex__ = 0;
+ //---------------------- database URL protocols ------------------------------
- public static int traceLevel__ = org.apache.derby.client.ClientBaseDataSource.TRACE_ALL;
+ // For DatabaseMetaData.getURL()
+ public final static String jdbcDerbyNETProtocol = "jdbc:derby://";
- public static String traceFile__ = null;
-
- public static String traceDirectory__ = null;
-
- public static boolean traceFileAppend__ = false;
- public static String jreLevel = "1.3.0"; // default level if unable to read
- public static int jreLevelMajor = 1;
- public static int jreLevelMinor = 3;
-
- private Configuration () {}
-
- public static boolean traceSuspended__;
-
- public static boolean[] enableConnectivityToTargetServer__;
- public static boolean jvmSupportsMicrosClock__ = false;
-
- // -------------------------- versioning -------------------------------------
-
- public static ProductVersionHolder dncProductVersionHolder__;
-
- public static ProductVersionHolder getProductVersionHolder()
- {
- return dncProductVersionHolder__;
- }
-
-
- // for DatabaseMetaData.getDriverName()
- public final static String dncDriverName = "Apache Derby Network Client JDBC Driver" ;
-
-
- // Hard-wired for JDBC
- //
- // Currently ASCII hex value of "SYSLVL01".
- public final static byte[] dncPackageConsistencyToken =
- {0x53, 0x59, 0x53, 0x4c, 0x56, 0x4c, 0x30, 0x31};
-
- // We will not set packagge VERSION in the initial release.
- // If we have to change the package version in the future then we can.
- public static String dncPackageVersion = null;
-
- // for Driver.jdbcCompliant()
- public final static boolean jdbcCompliant = true;
-
- // for Driver.getCompatibileJREVersions()
- public final static String[] dncCompatibleJREVersions = new String[] {"1.3", "1.4"};
-
- //---------------------- database URL protocols ------------------------------
-
- // For DatabaseMetaData.getURL()
- public final static String jdbcDerbyNETProtocol = "jdbc:derby://";
-
- // -------------------------- metrics ----------------------
- // Not currently used by production builds.
- // We can't really use this stuff with tracing enabled, the results are not accurate.
-
- // -------------------------- compiled in properties -------------------------
-
- public final static boolean enableNetConnectionPooling = true;
-
- final static boolean rangeCheckCrossConverters = true;
-
- // Define different levels of bug checking, for now turn all bits on.
- final static int bugCheckLevel = 0xff;
-
- // --------------------------- connection defaults ---------------------------
-
- // This is the DERBY default and maps to DERBY's "Cursor Stability".
- public final static int defaultIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED;
-
- // ---------------------------- statement defaults----------------------------
-
- public static final int defaultFetchSize = 64;
-
- // Prepare attribute constants
- public static final String cursorAttribute_SensitiveStatic = "SENSITIVE STATIC SCROLL ";
- public static final String cursorAttribute_SensitiveStaticRowset = cursorAttribute_SensitiveStatic;
- public static final String cursorAttribute_SensitiveDynamic = "SENSITIVE DYNAMIC SCROLL ";
- public static final String cursorAttribute_SensitiveDynamicRowset = "SENSITIVE DYNAMIC SCROLL WITH ROWSET POSITIONING ";
- public static final String cursorAttribute_Insensitive = "INSENSITIVE SCROLL ";
- public static final String cursorAttribute_InsensitiveRowset = cursorAttribute_Insensitive;
-
- // uncomment the following when we want to use multi-row fetch to support sensitive static and
- // insensitve cursors whenever the server has support for it.
- //public static final String cursorAttribute_SensitiveStaticRowset = "SENSITIVE STATIC SCROLL WITH ROWSET POSITIONING ";
- //public static final String cursorAttribute_InsensitiveRowset = "INSENSITIVE SCROLL WITH ROWSET POSITIONING ";
-
- public static final String cursorAttribute_ForUpdate = "FOR UPDATE ";
- public static final String cursorAttribute_ForReadOnly = "FOR READ ONLY ";
-
- public static final String cursorAttribute_WithHold = "WITH HOLD ";
-
- // -----------------------Load resource bundles for the driver asap-----------
-
- private static final String packageNameForDNC = "org.apache.derby.client";
- private static final String classNameForResources = "org.apache.derby.client.resources.Resources";
-
- public static SqlException exceptionsOnLoadResources = null; // used by ClientDriver to accumulate load exceptions
- public static java.util.ResourceBundle dncResources__;
-
- static {
- try {
- loadProductVersionHolder();
- loadResources ();
- }
- catch (SqlException e) {
- exceptionsOnLoadResources = e;
- }
- try {
- jreLevel = System.getProperty( "java.version" );
- }
- catch (SecurityException e) {} // ignore it, assume 1.3.0
- java.util.StringTokenizer st = new java.util.StringTokenizer( jreLevel, "." );
- int jreState = 0;
- while( st.hasMoreTokens() )
- {
- int i;
- try
- {
- i = java.lang.Integer.parseInt(st.nextToken()); // get int value
- }
- catch( NumberFormatException e ) { i=0;}
- switch( jreState++ )
- {
- case 0:
- jreLevelMajor = i; // state 0, this is the major version
- break;
- case 1:
- jreLevelMinor = i; // state 1, this is the minor version
- break;
- default:
- break; // state >1, ignore
- }
- }
- }
-
- private static void loadResources () throws SqlException
- {
- try {
- dncResources__ = (java.util.ResourceBundle) java.security.AccessController.doPrivileged (
- new org.apache.derby.client.am.GetResourceBundleAction (classNameForResources));
- }
- catch (java.security.PrivilegedActionException e) {
- throw new SqlException (null,
- "[derby] " +
- "PrivilegedActionException:" +
- e.getException());
- }
- catch (java.util.MissingResourceException e) {
- // A null log writer is passed, because jdbc 1 sql exceptions are automatically traced
- throw new SqlException (null,
- "[derby] " +
- "Missing resource bundle:" +
- " a resource bundle could not be found" +
- " in the " + packageNameForDNC + " package for " + Configuration.dncDriverName);
- }
- }
-
- public static void checkForExceptionsFromLoadConfiguration (LogWriter dncLogWriter) throws SqlException
- {
- if (dncResources__ == null) {
- throw new SqlException (dncLogWriter,
- "Missing resource bundle: a resource bundle could not be found" +
- " in the " + Configuration.packageNameForDNC + " package for " + Configuration.dncDriverName);
- }
- }
-
- /**
- * load product version information and accumulate exceptions
- */
- private static void loadProductVersionHolder() throws SqlException
- {
- try {
- dncProductVersionHolder__ = buildProductVersionHolder();
- }
- catch (java.security.PrivilegedActionException e) {
- throw new SqlException (null,
- "[derby] " +
- "PrivilegedActionException:" +
- e.getException());
- }
- catch (java.io.IOException ioe) {
- throw new SqlException (null,
- "[derby] " +
- "IOException:" +
- ioe);
- }
- }
-
-
- // Create ProductVersionHolder in security block for Java 2 security.
- private static ProductVersionHolder buildProductVersionHolder() throws
- java.security.PrivilegedActionException, IOException
- {
- ProductVersionHolder myPVH= null;
- myPVH = (ProductVersionHolder)
- AccessController.doPrivileged(
- new PrivilegedExceptionAction() {
-
- public Object run() throws IOException
- {
- InputStream versionStream = getClass().getResourceAsStream(ProductGenusNames.DNC_INFO);
-
- return ProductVersionHolder.getProductVersionHolderFromMyEnv(versionStream);
- }
- });
-
- return myPVH;
- }
+ // -------------------------- metrics ----------------------
+ // Not currently used by production builds.
+ // We can't really use this stuff with tracing enabled, the results are not accurate.
+
+ // -------------------------- compiled in properties -------------------------
+
+ public final static boolean enableNetConnectionPooling = true;
+
+ final static boolean rangeCheckCrossConverters = true;
+
+ // Define different levels of bug checking, for now turn all bits on.
+ final static int bugCheckLevel = 0xff;
+
+ // --------------------------- connection defaults ---------------------------
+
+ // This is the DERBY default and maps to DERBY's "Cursor Stability".
+ public final static int defaultIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED;
+
+ // ---------------------------- statement defaults----------------------------
+
+ public static final int defaultFetchSize = 64;
+
+ // Prepare attribute constants
+ public static final String cursorAttribute_SensitiveStatic = "SENSITIVE STATIC SCROLL ";
+ public static final String cursorAttribute_SensitiveStaticRowset = cursorAttribute_SensitiveStatic;
+ public static final String cursorAttribute_SensitiveDynamic = "SENSITIVE DYNAMIC SCROLL ";
+ public static final String cursorAttribute_SensitiveDynamicRowset = "SENSITIVE DYNAMIC SCROLL WITH ROWSET POSITIONING ";
+ public static final String cursorAttribute_Insensitive = "INSENSITIVE SCROLL ";
+ public static final String cursorAttribute_InsensitiveRowset = cursorAttribute_Insensitive;
+
+ // uncomment the following when we want to use multi-row fetch to support sensitive static and
+ // insensitve cursors whenever the server has support for it.
+ //public static final String cursorAttribute_SensitiveStaticRowset = "SENSITIVE STATIC SCROLL WITH ROWSET POSITIONING ";
+ //public static final String cursorAttribute_InsensitiveRowset = "INSENSITIVE SCROLL WITH ROWSET POSITIONING ";
+
+ public static final String cursorAttribute_ForUpdate = "FOR UPDATE ";
+ public static final String cursorAttribute_ForReadOnly = "FOR READ ONLY ";
+
+ public static final String cursorAttribute_WithHold = "WITH HOLD ";
+
+ // -----------------------Load resource bundles for the driver asap-----------
+
+ private static final String packageNameForDNC = "org.apache.derby.client";
+ private static final String classNameForResources = "org.apache.derby.client.resources.Resources";
+
+ public static SqlException exceptionsOnLoadResources = null; // used by ClientDriver to accumulate load exceptions
+ public static java.util.ResourceBundle dncResources__;
+
+ static {
+ try {
+ loadProductVersionHolder();
+ loadResources();
+ } catch (SqlException e) {
+ exceptionsOnLoadResources = e;
+ }
+ try {
+ jreLevel = System.getProperty("java.version");
+ } catch (SecurityException e) {
+ } // ignore it, assume 1.3.0
+ java.util.StringTokenizer st = new java.util.StringTokenizer(jreLevel, ".");
+ int jreState = 0;
+ while (st.hasMoreTokens()) {
+ int i;
+ try {
+ i = java.lang.Integer.parseInt(st.nextToken()); // get int value
+ } catch (NumberFormatException e) {
+ i = 0;
+ }
+ switch (jreState++) {
+ case 0:
+ jreLevelMajor = i; // state 0, this is the major version
+ break;
+ case 1:
+ jreLevelMinor = i; // state 1, this is the minor version
+ break;
+ default:
+ break; // state >1, ignore
+ }
+ }
+ }
+
+ private static void loadResources() throws SqlException {
+ try {
+ dncResources__ = (java.util.ResourceBundle) java.security.AccessController.doPrivileged(new org.apache.derby.client.am.GetResourceBundleAction(classNameForResources));
+ } catch (java.security.PrivilegedActionException e) {
+ throw new SqlException(null,
+ "[derby] " +
+ "PrivilegedActionException:" +
+ e.getException());
+ } catch (java.util.MissingResourceException e) {
+ // A null log writer is passed, because jdbc 1 sql exceptions are automatically traced
+ throw new SqlException(null,
+ "[derby] " +
+ "Missing resource bundle:" +
+ " a resource bundle could not be found" +
+ " in the " + packageNameForDNC + " package for " + Configuration.dncDriverName);
+ }
+ }
+
+ public static void checkForExceptionsFromLoadConfiguration(LogWriter dncLogWriter) throws SqlException {
+ if (dncResources__ == null) {
+ throw new SqlException(dncLogWriter,
+ "Missing resource bundle: a resource bundle could not be found" +
+ " in the " + Configuration.packageNameForDNC + " package for " + Configuration.dncDriverName);
+ }
+ }
+
+ /**
+ * load product version information and accumulate exceptions
+ */
+ private static void loadProductVersionHolder() throws SqlException {
+ try {
+ dncProductVersionHolder__ = buildProductVersionHolder();
+ } catch (java.security.PrivilegedActionException e) {
+ throw new SqlException(null,
+ "[derby] " +
+ "PrivilegedActionException:" +
+ e.getException());
+ } catch (java.io.IOException ioe) {
+ throw new SqlException(null,
+ "[derby] " +
+ "IOException:" +
+ ioe);
+ }
+ }
+
+
+ // Create ProductVersionHolder in security block for Java 2 security.
+ private static ProductVersionHolder buildProductVersionHolder() throws
+ java.security.PrivilegedActionException, IOException {
+ ProductVersionHolder myPVH = null;
+ myPVH = (ProductVersionHolder)
+ AccessController.doPrivileged(new PrivilegedExceptionAction() {
+
+ public Object run() throws IOException {
+ InputStream versionStream = getClass().getResourceAsStream(ProductGenusNames.DNC_INFO);
+
+ return ProductVersionHolder.getProductVersionHolderFromMyEnv(versionStream);
+ }
+ });
+
+ return myPVH;
+ }
}