From: brian z. <bz...@us...> - 2005-02-23 04:27:02
|
Update of /cvsroot/jython/jython/com/ziclix/python/sql/handler In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18519/com/ziclix/python/sql/handler Modified Files: InformixDataHandler.java OracleDataHandler.java SQLServerDataHandler.java UpdateCountDataHandler.java Log Message: for the sake of better javadocs, fixed all warnings and updated ant build.xml; removed all tabs; removed Makefiles Index: InformixDataHandler.java =================================================================== RCS file: /cvsroot/jython/jython/com/ziclix/python/sql/handler/InformixDataHandler.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** InformixDataHandler.java 9 Apr 2003 13:49:14 -0000 1.3 --- InformixDataHandler.java 23 Feb 2005 04:26:19 -0000 1.4 *************** *** 1,3 **** - /* * Jython Database Specification API 2.0 --- 1,2 ---- *************** *** 34,179 **** public class InformixDataHandler extends FilterDataHandler { ! /** ! * Decorator for handling Informix specific issues. ! * ! * @param datahandler the delegate DataHandler ! */ ! public InformixDataHandler(DataHandler datahandler) { ! super(datahandler); ! } ! /** ! * Returns the serial for the statement. ! * ! * @param Statement stmt ! * ! * @return PyObject ! * ! * @throws SQLException ! * ! */ ! public PyObject getRowId(Statement stmt) throws SQLException { ! if (stmt instanceof com.informix.jdbc.IfmxStatement) { ! return Py.newInteger(((com.informix.jdbc.IfmxStatement)stmt).getSerial()); ! } ! return super.getRowId(stmt); ! } ! /** ! * Provide fixes for Ifx driver. ! * ! * @param stmt ! * @param index ! * @param object ! * @param type ! * @throws SQLException ! */ ! public void setJDBCObject(PreparedStatement stmt, int index, PyObject object, int type) throws SQLException { ! if (DataHandler.checkNull(stmt, index, object, type)) { ! return; ! } ! switch (type) { ! case Types.LONGVARCHAR : ! // Ifx driver can't handle the setCharacterStream() method so use setObject() instead ! if (object instanceof PyFile) { ! object = ((PyFile)object).read(); ! } ! String varchar = (String)object.__tojava__(String.class); ! stmt.setObject(index, varchar, type); ! break; ! case Types.OTHER : ! // this is most likely an Informix boolean ! stmt.setBoolean(index, object.__nonzero__()); ! break; ! default : ! super.setJDBCObject(stmt, index, object, type); ! } ! } ! /** ! * Provide fixes for Ifx driver. ! * ! * @param stmt ! * @param index ! * @param object ! * @throws SQLException ! */ ! public void setJDBCObject(PreparedStatement stmt, int index, PyObject object) throws SQLException { ! // there is a bug in the Ifx driver when using setObject() with a String for a prepared statement ! if (object instanceof PyString) { ! super.setJDBCObject(stmt, index, object, Types.VARCHAR); ! } else { ! super.setJDBCObject(stmt, index, object); ! } ! } ! /** ! * Override to handle Informix related issues. ! * ! * @param set the result set ! * @param col the column number ! * @param type the SQL type ! * @return the mapped Python object ! * @throws SQLException thrown for a sql exception ! */ ! public PyObject getPyObject(ResultSet set, int col, int type) throws SQLException { ! PyObject obj = Py.None; ! switch (type) { ! case Types.OTHER : ! try { ! // informix returns boolean as OTHERs, so let's give that a try ! obj = set.getBoolean(col) ? Py.One : Py.Zero; ! } catch (SQLException e) { ! obj = super.getPyObject(set, col, type); ! } ! break; ! case Types.BLOB : ! int major = set.getStatement().getConnection().getMetaData().getDriverMajorVersion(); ! int minor = set.getStatement().getConnection().getMetaData().getDriverMinorVersion(); ! if ((major <= 2) && (minor <= 11)) { ! Blob blob = set.getBlob(col); ! if (blob == null) { ! obj = Py.None; ! } else { ! InputStream is = null; ! try { ! // the available() bug means we CANNOT buffer this stream ! is = blob.getBinaryStream(); ! obj = Py.java2py(DataHandler.read(is)); ! } finally { ! try { ! is.close(); ! } catch (Exception e) {} ! } ! } ! break; ! } ! default : ! obj = super.getPyObject(set, col, type); ! } ! return (set.wasNull() || (obj == null)) ? Py.None : obj; ! } } --- 33,176 ---- public class InformixDataHandler extends FilterDataHandler { ! /** ! * Decorator for handling Informix specific issues. ! * ! * @param datahandler the delegate DataHandler ! */ ! public InformixDataHandler(DataHandler datahandler) { ! super(datahandler); ! } ! /** ! * Returns the serial for the statement. ! * ! * @param stmt ! * @return PyObject ! * @throws SQLException ! */ ! public PyObject getRowId(Statement stmt) throws SQLException { ! if (stmt instanceof com.informix.jdbc.IfmxStatement) { ! return Py.newInteger(((com.informix.jdbc.IfmxStatement) stmt).getSerial()); ! } ! return super.getRowId(stmt); ! } ! /** ! * Provide fixes for Ifx driver. ! * ! * @param stmt ! * @param index ! * @param object ! * @param type ! * @throws SQLException ! */ ! public void setJDBCObject(PreparedStatement stmt, int index, PyObject object, int type) throws SQLException { ! if (DataHandler.checkNull(stmt, index, object, type)) { ! return; ! } ! switch (type) { ! case Types.LONGVARCHAR: ! // Ifx driver can't handle the setCharacterStream() method so use setObject() instead ! if (object instanceof PyFile) { ! object = ((PyFile) object).read(); ! } ! String varchar = (String) object.__tojava__(String.class); ! stmt.setObject(index, varchar, type); ! break; ! case Types.OTHER: ! // this is most likely an Informix boolean ! stmt.setBoolean(index, object.__nonzero__()); ! break; ! default : ! super.setJDBCObject(stmt, index, object, type); ! } ! } ! /** ! * Provide fixes for Ifx driver. ! * ! * @param stmt ! * @param index ! * @param object ! * @throws SQLException ! */ ! public void setJDBCObject(PreparedStatement stmt, int index, PyObject object) throws SQLException { ! // there is a bug in the Ifx driver when using setObject() with a String for a prepared statement ! if (object instanceof PyString) { ! super.setJDBCObject(stmt, index, object, Types.VARCHAR); ! } else { ! super.setJDBCObject(stmt, index, object); ! } ! } ! /** ! * Override to handle Informix related issues. ! * ! * @param set the result set ! * @param col the column number ! * @param type the SQL type ! * @return the mapped Python object ! * @throws SQLException thrown for a sql exception ! */ ! public PyObject getPyObject(ResultSet set, int col, int type) throws SQLException { ! PyObject obj = Py.None; ! switch (type) { ! case Types.OTHER: ! try { ! // informix returns boolean as OTHERs, so let's give that a try ! obj = set.getBoolean(col) ? Py.One : Py.Zero; ! } catch (SQLException e) { ! obj = super.getPyObject(set, col, type); ! } ! break; ! case Types.BLOB: ! int major = set.getStatement().getConnection().getMetaData().getDriverMajorVersion(); ! int minor = set.getStatement().getConnection().getMetaData().getDriverMinorVersion(); ! if ((major <= 2) && (minor <= 11)) { ! Blob blob = set.getBlob(col); ! if (blob == null) { ! obj = Py.None; ! } else { ! InputStream is = null; ! try { ! // the available() bug means we CANNOT buffer this stream ! is = blob.getBinaryStream(); ! obj = Py.java2py(DataHandler.read(is)); ! } finally { ! try { ! is.close(); ! } catch (Exception e) { ! } ! } ! } ! break; ! } ! default : ! obj = super.getPyObject(set, col, type); ! } ! return (set.wasNull() || (obj == null)) ? Py.None : obj; ! } } Index: OracleDataHandler.java =================================================================== RCS file: /cvsroot/jython/jython/com/ziclix/python/sql/handler/OracleDataHandler.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** OracleDataHandler.java 9 Apr 2003 13:49:15 -0000 1.5 --- OracleDataHandler.java 23 Feb 2005 04:26:19 -0000 1.6 *************** *** 1,3 **** - /* * Jython Database Specification API 2.0 --- 1,2 ---- *************** *** 37,170 **** public class OracleDataHandler extends FilterDataHandler { ! /** ! * Default constructor for DataHandler filtering. ! */ ! public OracleDataHandler(DataHandler datahandler) { ! super(datahandler); ! } ! /** ! * Method getMetaDataName ! * ! * @param PyString name ! * ! * @return String ! * ! */ ! public String getMetaDataName(PyObject name) { ! String metaName = super.getMetaDataName(name); ! return (metaName == null) ? null : metaName.toUpperCase(); ! } ! /** ! * Provide functionality for Oracle specific types, such as ROWID. ! */ ! public void setJDBCObject(PreparedStatement stmt, int index, PyObject object, int type) throws SQLException { ! if (DataHandler.checkNull(stmt, index, object, type)) { ! return; ! } ! switch (type) { ! case OracleTypes.ROWID : ! stmt.setString(index, (String)object.__tojava__(String.class)); ! break; ! case Types.DECIMAL : ! // Oracle is annoying ! Object input = object.__tojava__(Double.class); ! if (input != Py.NoConversion) { ! stmt.setDouble(index, ((Double)input).doubleValue()); ! break; ! } ! super.setJDBCObject(stmt, index, object, type); ! break; ! case Types.NUMERIC : ! super.setJDBCObject(stmt, index, object, Types.DOUBLE); ! break; ! case Types.BLOB : ! case Types.CLOB : ! Integer[] vals = { new Integer(index), new Integer(type) }; ! String msg = zxJDBC.getString("errorSettingIndex", vals); ! throw new SQLException(msg); ! default : ! super.setJDBCObject(stmt, index, object, type); ! } ! } ! /** ! * Provide functionality for Oracle specific types, such as ROWID. ! */ ! public PyObject getPyObject(ResultSet set, int col, int type) throws SQLException { ! PyObject obj = Py.None; ! switch (type) { ! case Types.BLOB : ! BLOB blob = ((OracleResultSet)set).getBLOB(col); ! if (blob == null) { ! return Py.None; ! } ! InputStream stream = new BufferedInputStream(blob.getBinaryStream()); ! obj = Py.java2py(DataHandler.read(stream)); ! break; ! case OracleTypes.ROWID : ! ROWID rowid = ((OracleResultSet)set).getROWID(col); ! if (rowid != null) { ! obj = Py.java2py(rowid.stringValue()); ! } ! break; ! default : ! obj = super.getPyObject(set, col, type); ! } ! return (set.wasNull() ? Py.None : obj); ! } ! /** ! * Called when a stored procedure or function is executed and OUT parameters ! * need to be registered with the statement. ! * ! * @param CallableStatement statement ! * @param int index the JDBC offset column number ! * @param int colType the column as from DatabaseMetaData (eg, procedureColumnOut) ! * @param int dataType the JDBC datatype from Types ! * @param String dataTypeName the JDBC datatype name ! * ! * @throws SQLException ! * ! */ ! public void registerOut(CallableStatement statement, int index, int colType, int dataType, String dataTypeName) throws SQLException { ! if (dataType == Types.OTHER) { ! if ("REF CURSOR".equals(dataTypeName)) { ! statement.registerOutParameter(index, OracleTypes.CURSOR); ! return; ! } else if ("PL/SQL RECORD".equals(dataTypeName)) { ! statement.registerOutParameter(index, OracleTypes.CURSOR); ! return; ! } ! } ! super.registerOut(statement, index, colType, dataType, dataTypeName); ! } } --- 36,165 ---- public class OracleDataHandler extends FilterDataHandler { ! /** ! * Default constructor for DataHandler filtering. ! */ ! public OracleDataHandler(DataHandler datahandler) { ! super(datahandler); ! } ! /** ! * Method getMetaDataName ! * ! * @param name ! * @return String ! */ ! public String getMetaDataName(PyObject name) { ! String metaName = super.getMetaDataName(name); ! return (metaName == null) ? null : metaName.toUpperCase(); ! } ! /** ! * Provide functionality for Oracle specific types, such as ROWID. ! */ ! public void setJDBCObject(PreparedStatement stmt, int index, PyObject object, int type) throws SQLException { ! if (DataHandler.checkNull(stmt, index, object, type)) { ! return; ! } ! switch (type) { ! case OracleTypes.ROWID: ! stmt.setString(index, (String) object.__tojava__(String.class)); ! break; ! case Types.DECIMAL: ! // Oracle is annoying ! Object input = object.__tojava__(Double.class); ! if (input != Py.NoConversion) { ! stmt.setDouble(index, ((Double) input).doubleValue()); ! break; ! } ! super.setJDBCObject(stmt, index, object, type); ! break; ! case Types.NUMERIC: ! super.setJDBCObject(stmt, index, object, Types.DOUBLE); ! break; ! case Types.BLOB: ! case Types.CLOB: ! Integer[] vals = {new Integer(index), new Integer(type)}; ! String msg = zxJDBC.getString("errorSettingIndex", vals); ! throw new SQLException(msg); ! default : ! super.setJDBCObject(stmt, index, object, type); ! } ! } ! /** ! * Provide functionality for Oracle specific types, such as ROWID. ! */ ! public PyObject getPyObject(ResultSet set, int col, int type) throws SQLException { ! PyObject obj = Py.None; ! switch (type) { ! case Types.BLOB: ! BLOB blob = ((OracleResultSet) set).getBLOB(col); ! if (blob == null) { ! return Py.None; ! } ! InputStream stream = new BufferedInputStream(blob.getBinaryStream()); ! obj = Py.java2py(DataHandler.read(stream)); ! break; ! case OracleTypes.ROWID: ! ROWID rowid = ((OracleResultSet) set).getROWID(col); ! if (rowid != null) { ! obj = Py.java2py(rowid.stringValue()); ! } ! break; ! default : ! obj = super.getPyObject(set, col, type); ! } ! return (set.wasNull() ? Py.None : obj); ! } ! /** ! * Called when a stored procedure or function is executed and OUT parameters ! * need to be registered with the statement. ! * ! * @param statement ! * @param index the JDBC offset column number ! * @param colType the column as from DatabaseMetaData (eg, procedureColumnOut) ! * @param dataType the JDBC datatype from Types ! * @param dataTypeName the JDBC datatype name ! * @throws SQLException ! */ ! public void registerOut(CallableStatement statement, int index, int colType, int dataType, String dataTypeName) throws SQLException { ! if (dataType == Types.OTHER) { ! if ("REF CURSOR".equals(dataTypeName)) { ! statement.registerOutParameter(index, OracleTypes.CURSOR); ! return; ! } else if ("PL/SQL RECORD".equals(dataTypeName)) { ! statement.registerOutParameter(index, OracleTypes.CURSOR); ! return; ! } ! } ! super.registerOut(statement, index, colType, dataType, dataTypeName); ! } } Index: SQLServerDataHandler.java =================================================================== RCS file: /cvsroot/jython/jython/com/ziclix/python/sql/handler/SQLServerDataHandler.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** SQLServerDataHandler.java 9 Apr 2003 13:49:15 -0000 1.3 --- SQLServerDataHandler.java 23 Feb 2005 04:26:19 -0000 1.4 *************** *** 1,3 **** - /* * Jython Database Specification API 2.0 --- 1,2 ---- *************** *** 31,76 **** public class SQLServerDataHandler extends FilterDataHandler { ! /** Field UNICODE_VARCHAR */ ! public static final int UNICODE_VARCHAR = -9; ! /** ! * Decorator for handling SQLServer specific issues. ! * ! * @param datahandler the delegate DataHandler ! */ ! public SQLServerDataHandler(DataHandler datahandler) { ! super(datahandler); ! } ! public Procedure getProcedure(PyCursor cursor, PyObject name) throws SQLException { ! return new SQLServerProcedure(cursor, name); ! } ! /** ! * Given a ResultSet, column and type, return the appropriate ! * Jython object. ! * ! * <p>Note: DO NOT iterate the ResultSet. ! * ! * @param set the current ResultSet set to the current row ! * @param col the column number (adjusted properly for JDBC) ! * @param type the column type ! * @throws SQLException if the type is unmappable ! */ ! public PyObject getPyObject(ResultSet set, int col, int type) throws SQLException { ! PyObject obj = Py.None; ! switch (type) { ! case UNICODE_VARCHAR : ! obj = super.getPyObject(set, col, Types.VARCHAR); ! break; ! default : ! obj = super.getPyObject(set, col, type); ! } ! return (set.wasNull() || (obj == null)) ? Py.None : obj; ! } } --- 30,77 ---- public class SQLServerDataHandler extends FilterDataHandler { ! /** ! * Field UNICODE_VARCHAR ! */ ! public static final int UNICODE_VARCHAR = -9; ! /** ! * Decorator for handling SQLServer specific issues. ! * ! * @param datahandler the delegate DataHandler ! */ ! public SQLServerDataHandler(DataHandler datahandler) { ! super(datahandler); ! } ! public Procedure getProcedure(PyCursor cursor, PyObject name) throws SQLException { ! return new SQLServerProcedure(cursor, name); ! } ! /** ! * Given a ResultSet, column and type, return the appropriate ! * Jython object. ! * <p/> ! * <p>Note: DO NOT iterate the ResultSet. ! * ! * @param set the current ResultSet set to the current row ! * @param col the column number (adjusted properly for JDBC) ! * @param type the column type ! * @throws SQLException if the type is unmappable ! */ ! public PyObject getPyObject(ResultSet set, int col, int type) throws SQLException { ! PyObject obj = Py.None; ! switch (type) { ! case UNICODE_VARCHAR: ! obj = super.getPyObject(set, col, Types.VARCHAR); ! break; ! default : ! obj = super.getPyObject(set, col, type); ! } ! return (set.wasNull() || (obj == null)) ? Py.None : obj; ! } } Index: UpdateCountDataHandler.java =================================================================== RCS file: /cvsroot/jython/jython/com/ziclix/python/sql/handler/UpdateCountDataHandler.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** UpdateCountDataHandler.java 9 Apr 2003 13:49:15 -0000 1.3 --- UpdateCountDataHandler.java 23 Feb 2005 04:26:19 -0000 1.4 *************** *** 1,3 **** - /* * Jython Database Specification API 2.0 --- 1,2 ---- *************** *** 21,25 **** * A data handler that keeps track of the update count for each execution of a * Statement. ! * * <p><b>Note:</b> MySql does not return the correct count for a * <a href="http://www.mysql.com/doc/D/E/DELETE.html">delete</a> statement that has --- 20,24 ---- * A data handler that keeps track of the update count for each execution of a * Statement. ! * <p/> * <p><b>Note:</b> MySql does not return the correct count for a * <a href="http://www.mysql.com/doc/D/E/DELETE.html">delete</a> statement that has *************** *** 35,80 **** public class UpdateCountDataHandler extends FilterDataHandler { ! private static boolean once = false; ! /** ! * The update count for the last executed statement. ! */ ! public int updateCount; ! /** ! * Handle capturing the update count. The initial value of the updateCount is ! * <code>-1</code>. ! * ! */ ! public UpdateCountDataHandler(DataHandler datahandler) { ! super(datahandler); ! if (!once) { ! Py.writeError("UpdateCountDataHandler", zxJDBC.getString("updateCountDeprecation")); ! once = true; ! } ! this.updateCount = -1; ! } ! /** ! * Sets the update count to <code>-1</code> prior to the statement being executed. ! */ ! public void preExecute(Statement stmt) throws SQLException { ! super.preExecute(stmt); ! this.updateCount = -1; ! } ! /** ! * Gets the update count from the statement after successfully executing. ! */ ! public void postExecute(Statement stmt) throws SQLException { ! super.postExecute(stmt); ! this.updateCount = stmt.getUpdateCount(); ! } } --- 34,78 ---- public class UpdateCountDataHandler extends FilterDataHandler { ! private static boolean once = false; ! /** ! * The update count for the last executed statement. ! */ ! public int updateCount; ! /** ! * Handle capturing the update count. The initial value of the updateCount is ! * <code>-1</code>. ! */ ! public UpdateCountDataHandler(DataHandler datahandler) { ! super(datahandler); ! if (!once) { ! Py.writeError("UpdateCountDataHandler", zxJDBC.getString("updateCountDeprecation")); ! once = true; ! } ! this.updateCount = -1; ! } ! /** ! * Sets the update count to <code>-1</code> prior to the statement being executed. ! */ ! public void preExecute(Statement stmt) throws SQLException { ! super.preExecute(stmt); ! this.updateCount = -1; ! } ! /** ! * Gets the update count from the statement after successfully executing. ! */ ! public void postExecute(Statement stmt) throws SQLException { ! super.postExecute(stmt); ! this.updateCount = stmt.getUpdateCount(); ! } } |