示例#1
0
        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);
        }
示例#2
0
		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);
            }
        }