internal static object JavaResultSetToClrWrapper(CallableStatement results, int columnIndex, JavaSqlTypes javaSqlType, int maxLength, ResultSetMetaData resultsMetaData) { object returnValue = null; sbyte[] sbyteArray; long milliseconds; long ticks; string s; columnIndex++; //jdbc style switch (javaSqlType) { case JavaSqlTypes.ARRAY: returnValue = results.getArray(columnIndex); break; case JavaSqlTypes.BIGINT: returnValue = results.getLong(columnIndex); break; case JavaSqlTypes.BINARY: case JavaSqlTypes.VARBINARY: case JavaSqlTypes.LONGVARBINARY: // FIXME : comsider using maxLength sbyteArray = results.getBytes(columnIndex); if (sbyteArray != null) { returnValue = vmw.common.TypeUtils.ToByteArray(sbyteArray); } break; case JavaSqlTypes.BIT: returnValue = results.getBoolean(columnIndex); break; case JavaSqlTypes.BLOB: // FIXME : comsider using maxLength java.sql.Blob blob = results.getBlob(columnIndex); if (blob != null) { InputStream input = blob.getBinaryStream(); if (input == null) { returnValue = new byte[0]; } else { long length = blob.length(); byte[] byteValue = new byte[length]; sbyte[] sbyteValue = vmw.common.TypeUtils.ToSByteArray(byteValue); input.read(sbyteValue); returnValue = byteValue; } } break; case JavaSqlTypes.CHAR: if (resultsMetaData != null && "uniqueidentifier".Equals(resultsMetaData.getColumnTypeName(columnIndex))) { returnValue = new Guid(results.getString(columnIndex)); } else { // Oracle Jdbc driver returns extra trailing 0 chars for NCHAR columns, so we threat this at parameter.Size level s = results.getString(columnIndex); if ((s != null) && (maxLength < s.Length)) { s = s.Substring(0, maxLength); } returnValue = s; } break; case JavaSqlTypes.CLOB: // FIXME : comsider using maxLength java.sql.Clob clob = results.getClob(columnIndex); if (clob != null) { java.io.Reader reader = clob.getCharacterStream(); if (reader == null) { returnValue = String.Empty; } else { long length = clob.length(); char[] charValue = new char[length]; reader.read(charValue); returnValue = new string(charValue); } } break; case JavaSqlTypes.TIME: Time t = results.getTime(columnIndex); if (t != null) { returnValue = new TimeSpan(JavaTimeToClrTicks(t)); } break; case JavaSqlTypes.DATE: Date d = results.getDate(columnIndex); if (d != null) { returnValue = new DateTime(JavaDateToClrTicks(d)); } break; case JavaSqlTypes.TIMESTAMP: Timestamp ts = results.getTimestamp(columnIndex); if (ts != null) { returnValue = new DateTime(JavaTimestampToClrTicks(ts)); } break; case JavaSqlTypes.DECIMAL: case JavaSqlTypes.NUMERIC: // java.sql.Types.NUMERIC (2), columnTypeName NUMBER, columnClassName java.math.BigDecimal // therefore we rely on scale if (resultsMetaData != null && resultsMetaData.getScale(columnIndex) == -127) { // Oracle db type FLOAT returnValue = results.getDouble(columnIndex); } else { java.math.BigDecimal bigDecimal = results.getBigDecimal(columnIndex); if (bigDecimal != null) { returnValue = vmw.common.PrimitiveTypeUtils.BigDecimalToDecimal(bigDecimal); } } break; case JavaSqlTypes.DISTINCT: returnValue = results.getObject(columnIndex); break; case JavaSqlTypes.DOUBLE: returnValue = results.getDouble(columnIndex); break; case JavaSqlTypes.FLOAT: //float f = results.getFloat(columnIndex); returnValue = results.getDouble(columnIndex); break; case JavaSqlTypes.INTEGER: returnValue = results.getInt(columnIndex); break; case JavaSqlTypes.JAVA_OBJECT: returnValue = results.getObject(columnIndex); break; case JavaSqlTypes.LONGVARCHAR: returnValue = results.getString(columnIndex); break; case JavaSqlTypes.NULL: returnValue = DBNull.Value; break; case JavaSqlTypes.OTHER: returnValue = results.getObject(columnIndex); break; case JavaSqlTypes.REAL: returnValue = results.getFloat(columnIndex); break; case JavaSqlTypes.REF: returnValue = results.getRef(columnIndex); break; case JavaSqlTypes.SMALLINT: returnValue = results.getShort(columnIndex); break; case JavaSqlTypes.STRUCT: returnValue = results.getObject(columnIndex); break; case JavaSqlTypes.TINYINT: returnValue = Convert.ToByte(results.getByte(columnIndex)); break; case JavaSqlTypes.VARCHAR: s = results.getString(columnIndex); if ((s != null) && (maxLength < s.Length)) { s = s.Substring(0, maxLength); } returnValue = s; break; default: returnValue = results.getObject(columnIndex); break; } if (results.wasNull() || results == null) { return(DBNull.Value); } return(returnValue); }
internal static object JavaResultSetToClrWrapper(CallableStatement results,int columnIndex,JavaSqlTypes javaSqlType,int maxLength ,ResultSetMetaData resultsMetaData) { object returnValue = null; sbyte[] sbyteArray; long milliseconds; long ticks; string s; columnIndex++; //jdbc style switch (javaSqlType) { case JavaSqlTypes.ARRAY : returnValue = results.getArray(columnIndex); break; case JavaSqlTypes.BIGINT : returnValue = results.getLong(columnIndex); break; case JavaSqlTypes.BINARY : case JavaSqlTypes.VARBINARY : case JavaSqlTypes.LONGVARBINARY : // FIXME : comsider using maxLength sbyteArray = results.getBytes(columnIndex); if (sbyteArray != null) { returnValue = vmw.common.TypeUtils.ToByteArray(sbyteArray); } break; case JavaSqlTypes.BIT : returnValue = results.getBoolean(columnIndex); break; case JavaSqlTypes.BLOB : // FIXME : comsider using maxLength java.sql.Blob blob = results.getBlob(columnIndex); if (blob != null) { InputStream input = blob.getBinaryStream(); if (input == null) { returnValue = new byte[0]; } else { long length = blob.length(); byte[] byteValue = new byte[length]; sbyte[] sbyteValue = vmw.common.TypeUtils.ToSByteArray(byteValue); input.read(sbyteValue); returnValue = byteValue; } } break; case JavaSqlTypes.CHAR : if (resultsMetaData != null && "uniqueidentifier".Equals(resultsMetaData.getColumnTypeName(columnIndex))) { returnValue = new Guid(results.getString(columnIndex)); } else { // Oracle Jdbc driver returns extra trailing 0 chars for NCHAR columns, so we threat this at parameter.Size level s = results.getString(columnIndex); if ((s != null) && (maxLength < s.Length)) { s = s.Substring(0,maxLength); } returnValue = s; } break; case JavaSqlTypes.CLOB : // FIXME : comsider using maxLength java.sql.Clob clob = results.getClob(columnIndex); if (clob != null) { java.io.Reader reader = clob.getCharacterStream(); if (reader == null) { returnValue = String.Empty; } else { long length = clob.length(); char[] charValue = new char[length]; reader.read(charValue); returnValue = new string(charValue); } } break; case JavaSqlTypes.TIME : Time t = results.getTime(columnIndex); if (t != null) { returnValue = new TimeSpan(JavaTimeToClrTicks(t)); } break; case JavaSqlTypes.DATE : Date d = results.getDate(columnIndex); if (d != null) { returnValue = new DateTime(JavaDateToClrTicks(d)); } break; case JavaSqlTypes.TIMESTAMP : Timestamp ts = results.getTimestamp(columnIndex); if (ts != null) { returnValue = new DateTime(JavaTimestampToClrTicks(ts)); } break; case JavaSqlTypes.DECIMAL : case JavaSqlTypes.NUMERIC : // java.sql.Types.NUMERIC (2), columnTypeName NUMBER, columnClassName java.math.BigDecimal // therefore we rely on scale if (resultsMetaData != null && resultsMetaData.getScale(columnIndex) == -127) { // Oracle db type FLOAT returnValue = results.getDouble(columnIndex); } else { java.math.BigDecimal bigDecimal = results.getBigDecimal(columnIndex); if (bigDecimal != null) { returnValue = vmw.common.PrimitiveTypeUtils.BigDecimalToDecimal(bigDecimal); } } break; case JavaSqlTypes.DISTINCT : returnValue = results.getObject(columnIndex); break; case JavaSqlTypes.DOUBLE : returnValue = results.getDouble(columnIndex); break; case JavaSqlTypes.FLOAT : //float f = results.getFloat(columnIndex); returnValue = results.getDouble(columnIndex); break; case JavaSqlTypes.INTEGER : returnValue = results.getInt(columnIndex); break; case JavaSqlTypes.JAVA_OBJECT : returnValue = results.getObject(columnIndex); break; case JavaSqlTypes.LONGVARCHAR : returnValue = results.getString(columnIndex); break; case JavaSqlTypes.NULL : returnValue = DBNull.Value; break; case JavaSqlTypes.OTHER : returnValue = results.getObject(columnIndex); break; case JavaSqlTypes.REAL : returnValue = results.getFloat(columnIndex); break; case JavaSqlTypes.REF : returnValue = results.getRef(columnIndex); break; case JavaSqlTypes.SMALLINT : returnValue = results.getShort(columnIndex); break; case JavaSqlTypes.STRUCT : returnValue = results.getObject(columnIndex); break; case JavaSqlTypes.TINYINT : returnValue = Convert.ToByte(results.getByte(columnIndex)); break; case JavaSqlTypes.VARCHAR : s = results.getString(columnIndex); if ((s != null) && (maxLength < s.Length)) { s = s.Substring(0,maxLength); } returnValue = s; break; default : returnValue = results.getObject(columnIndex); break; } if (results.wasNull() || results == null) { return DBNull.Value; } return returnValue; }
protected bool execute(Env env, int mode) { try { // Scenarios for oci_execute. // // // 1. Simple query: oci_parse / oci_execute // // $query = 'SELECT * FROM TEST'; // // $stmt = oci_parse($conn, $query); // // oci_execute($stmt, OCI_DEFAULT); // // $result = oci_fetch_array($stid, OCI_BOTH); // // // 2. Define by name: oci_parse / oci_define_by_name / oci_execute // // $stmt = oci_parse($conn, "SELECT id, data FROM test"); // // /* the define MUST be done BEFORE oci_execute! */ // // oci_define_by_name($stmt, "ID", $myid); // oci_define_by_name($stmt, "DATA", $mydata); // // oci_execute($stmt, OCI_DEFAULT); // // while ($row = oci_fetch($stmt)) { // echo "id:" . $myid . "\n"; // echo "data:" . $mydata . "\n"; // } // // // 3. Cursors: oci_new_cursor / oci_parse / // oci_bind_by_name / oci_execute($stmt) / oci_execute($cursor) // // $stmt = oci_parse($conn, // "CREATE OR REPLACE PACKAGE cauchopkgtestoci AS ". // "TYPE refcur @is REF CURSOR; ". // "PROCEDURE testproc (var_result @out cauchopkgtestoci.refcur); ". // "END cauchopkgtestoci; "); // // oci_execute($stmt); // // $stmt = oci_parse($conn, // "CREATE OR REPLACE PACKAGE BODY cauchopkgtestoci @is ". // "PROCEDURE testproc (var_result @out cauchopkgtestoci.refcur) @is ". // "BEGIN ". // "OPEN var_result FOR SELECT data FROM caucho.test; ". // "END testproc; ". // "END; "); // // oci_execute($stmt); // // $curs = oci_new_cursor($conn); // // $stmt = oci_parse($conn, // "begin cauchopkgtestoci.testproc(:dataCursor); end;"); // // oci_bind_by_name($stmt, "dataCursor", $curs, 255, SQLT_RSET); // // oci_execute($stmt); // // oci_execute($curs); // // while ($data = oci_fetch_row($curs)) { // var_dump($data); // } // Get the underlying JDBC connection. Connection conn = getJavaConnection(env); // Large Objects can not be used in auto-commit mode. conn.setAutoCommit(false); // Use the underlying callable statement to check different scenarios. CallableStatement callableStatement = getCallableStatement(); // Check for case (3) oci_execute($cursor); // A previous statement has been executed and holds the result set. Object cursorResult = null; try { cursorResult = callableStatement.getObject(1); if ((cursorResult != null) && (cursorResult instanceof ResultSet)) { ResultSet rs = (ResultSet)cursorResult; setResultSet(rs); return(true); } } catch (Exception e) { // We assume this @is not case (3). No error. } // Case (1) or executing a more complex query. execute(env, false); OracleOciLob ociLob = getOutParameter(); if (ociLob != null) { // Ex: java.sql.Clob outParameter = callableStatement.getClob(1); ociLob.setLob(callableStatement.getObject(1)); } // Fetch and assign values to corresponding binded variables // This @is necessary for LOB support and // should be reworked calling a private fetch method instead. // oci_fetch(env, stmt); if (mode == OracleModule.OCI_COMMIT_ON_SUCCESS) { conn.commit(); } return(true); } catch (SQLException e) { env.warning(e); resetBindingVariables(); resetByNameVariables(); return(false); } }