// Decompiled by Jad v1.5.7f. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) braces deadcode fieldsfirst 
// Source File Name:   ArrayDescriptor.java
// Class Version:      45.3

package oracle.sql;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintStream;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.Map;
import oracle.jdbc.OracleConnection;
import oracle.jdbc.OraclePreparedStatement;
import oracle.jdbc.OracleResultSet;
import oracle.jdbc.OracleTypes;
import oracle.jdbc.dbaccess.DBError;
import oracle.jdbc.driver.ArrayDataResultSet;
import oracle.jdbc.driver.ArrayLocatorResultSet;
import oracle.jdbc.oracore.OracleNamedType;
import oracle.jdbc.oracore.OracleType;
import oracle.jdbc.oracore.OracleTypeADT;
import oracle.jdbc.oracore.OracleTypeCOLLECTION;
import oracle.jdbc.oracore.OracleTypeFLOAT;
import oracle.jdbc.oracore.OracleTypeNUMBER;
import oracle.jdbc.oracore.OracleTypeREF;

// Referenced classes of package oracle.sql:
//            TypeDescriptor, ARRAY, BFILE, BLOB, 
//            CLOB, Datum, NUMBER, OpaqueDescriptor, 
//            REF, SQLName, STRUCT, StructDescriptor

// flag ACC_SUPER is set
public class ArrayDescriptor extends TypeDescriptor
    implements Serializable
{
    // Constants:          564
    // Interfaces:         1
    // Fields:             6
    // Methods:            42
    // Class Attributes:   1


    public static final int TYPE_VARRAY = 3;
    public static final int TYPE_NESTED_TABLE = 2;
    public static final int CACHE_NONE = 0;
    public static final int CACHE_ALL = 1;
    public static final int CACHE_LAST = 2;
    static final long serialVersionUID = 0x3543b0856088d591L;

    // Decompiling method: <init>  Signature: (Ljava/lang/String;Ljava/sql/Connection;)V
    // Max stack: 3, #locals: 3, #params: 3
    // Code length: 11 bytes, Code offset: 7764
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 11 Range 0 10 Init 0 fixed
    // Parameter  1 added: Name s Type Ljava/lang/String; At 0 11 Range 0 10 Init 0
    // Parameter  2 added: Name connection Type Ljava/sql/Connection; At 0 11 Range 0 10 Init 0
    // RetValue   3 added: Name <returnValue> Type V At 0 11 Range 0 10 Init 0 fixed
    public ArrayDescriptor(String s, Connection connection)
        throws SQLException
    {
        super(s, connection);
        initPickler();
        return;
    }

    // Decompiling method: <init>  Signature: (Loracle/jdbc/oracore/OracleTypeCOLLECTION;Ljava/sql/Connection;)V
    // Max stack: 3, #locals: 3, #params: 3
    // Code length: 7 bytes, Code offset: 7831
    // Line Number Table found: 2 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 7 Range 0 6 Init 0 fixed
    // Parameter  1 added: Name oracletypecollection Type Loracle/jdbc/oracore/OracleTypeCOLLECTION; At 0 7 Range 0 6 Init 0
    // Parameter  2 added: Name connection Type Ljava/sql/Connection; At 0 7 Range 0 6 Init 0
    // RetValue   3 added: Name <returnValue> Type V At 0 7 Range 0 6 Init 0 fixed
    public ArrayDescriptor(OracleTypeCOLLECTION oracletypecollection, Connection connection)
        throws SQLException
    {
        super(oracletypecollection, connection);
        return;
    }

    // Decompiling method: <init>  Signature: (Loracle/sql/SQLName;Ljava/sql/Connection;)V
    // Max stack: 3, #locals: 3, #params: 3
    // Code length: 11 bytes, Code offset: 7890
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 11 Range 0 10 Init 0 fixed
    // Parameter  1 added: Name sqlname Type Loracle/sql/SQLName; At 0 11 Range 0 10 Init 0
    // Parameter  2 added: Name connection Type Ljava/sql/Connection; At 0 11 Range 0 10 Init 0
    // RetValue   3 added: Name <returnValue> Type V At 0 11 Range 0 10 Init 0 fixed
    public ArrayDescriptor(SQLName sqlname, Connection connection)
        throws SQLException
    {
        super(sqlname, connection);
        initPickler();
        return;
    }

    // Decompiling method: <init>  Signature: (Loracle/sql/SQLName;Loracle/jdbc/oracore/OracleTypeCOLLECTION;Ljava/sql/Connection;)V
    // Max stack: 4, #locals: 4, #params: 4
    // Code length: 8 bytes, Code offset: 7957
    // Line Number Table found: 2 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 8 Range 0 7 Init 0 fixed
    // Parameter  1 added: Name sqlname Type Loracle/sql/SQLName; At 0 8 Range 0 7 Init 0
    // Parameter  2 added: Name oracletypecollection Type Loracle/jdbc/oracore/OracleTypeCOLLECTION; At 0 8 Range 0 7 Init 0
    // Parameter  3 added: Name connection Type Ljava/sql/Connection; At 0 8 Range 0 7 Init 0
    // RetValue   4 added: Name <returnValue> Type V At 0 8 Range 0 7 Init 0 fixed
    public ArrayDescriptor(SQLName sqlname, OracleTypeCOLLECTION oracletypecollection, Connection connection)
        throws SQLException
    {
        super(sqlname, oracletypecollection, connection);
        return;
    }

    // Decompiling method: createDescriptor  Signature: (Ljava/lang/String;Ljava/sql/Connection;)Loracle/sql/ArrayDescriptor;
    // Max stack: 4, #locals: 5, #params: 2
    // Code length: 86 bytes, Code offset: 8017
    // Line Number Table found: 10 entries
    // Parameter  0 added: Name s Type Ljava/lang/String; At 0 86 Range 0 85 Init 0
    // Parameter  1 added: Name connection Type Ljava/sql/Connection; At 0 86 Range 0 85 Init 0
    // RetValue   5 added: Name <returnValue> Type Loracle/sql/ArrayDescriptor; At 0 86 Range 0 85 Init 0 fixed
    // LocalVar   2 added: Name sqlname Type Loracle/sql/SQLName; At 34 31 Range 34 64 Init 34
    // LocalVar   3 added: Name s1 Type Ljava/lang/String; At 39 37 Range 39 75 Init 39
    // LocalVar   4 added: Name arraydescriptor Type Loracle/sql/ArrayDescriptor; At 53 32 Range 53 84 Init 53
    public static ArrayDescriptor createDescriptor(String s, Connection connection)
        throws SQLException
    {
        if(s == null || s.length() == 0 || connection == null)
        {
            DBError.check_error(60, "Invalid arguments");
        }
        SQLName sqlname = new SQLName(s, (OracleConnection)connection);
        String s1 = sqlname.getName();
        ArrayDescriptor arraydescriptor = (ArrayDescriptor)((OracleConnection)connection).getDescriptor(s1);
        if(arraydescriptor == null)
        {
            arraydescriptor = new ArrayDescriptor(sqlname, connection);
            ((OracleConnection)connection).putDescriptor(s1, arraydescriptor);
        }
        return arraydescriptor;
    }

    // Decompiling method: descType  Signature: ()Ljava/lang/String;
    // Max stack: 3, #locals: 2, #params: 1
    // Code length: 15 bytes, Code offset: 8187
    // Line Number Table found: 2 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 15 Range 0 14 Init 0 fixed
    // RetValue   2 added: Name <returnValue> Type Ljava/lang/String; At 0 15 Range 0 14 Init 0 fixed
    // LocalVar   1 added: Name stringbuffer Type Ljava/lang/StringBuffer; At 7 3 Range 7 9 Init 7
    public String descType()
        throws SQLException
    {
        StringBuffer stringbuffer = new StringBuffer();
        return descType(stringbuffer, 0);
    }

    // Decompiling method: descType  Signature: (Ljava/lang/StringBuffer;I)Ljava/lang/String;
    // Max stack: 4, #locals: 8, #params: 3
    // Code length: 225 bytes, Code offset: 8254
    // Line Number Table found: 27 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 225 Range 0 224 Init 0 fixed
    // Parameter  1 added: Name stringbuffer Type Ljava/lang/StringBuffer; At 0 225 Range 0 224 Init 0
    // Parameter  2 added: Name i Type I At 0 225 Range 0 224 Init 0
    // RetValue   8 added: Name <returnValue> Type Ljava/lang/String; At 0 225 Range 0 224 Init 0 fixed
    // LocalVar   3 added: Name s Type Ljava/lang/String; At 2 59 Range 2 60 Init 2
    // LocalVar   4 added: Name flag Type Z At 4 30 Range 4 33 Init 4
    // LocalVar   4 chged: Name j Oname flag Type I At 32 2 Range 4 33 Init 4
    // LocalVar   5 added: Name s1 Type Ljava/lang/String; At 57 143 Range 57 199 Init 57
    // LocalVar   6 added: Name k Type I At 85 80 Range 85 164 Init 85
    // LocalVar   7 added: Name structdescriptor Type Loracle/sql/StructDescriptor; At 114 4 Range 114 117 Init 114
    // LocalVar   7 added: Name arraydescriptor Type Loracle/sql/ArrayDescriptor; At 148 4 Range 148 151 Init 148
    // LocalVar   7 added: Name opaquedescriptor Type Loracle/sql/OpaqueDescriptor; At 182 4 Range 182 185 Init 182
    String descType(StringBuffer stringbuffer, int i)
        throws SQLException
    {
        String s = "";
        for(int j = 0; j < i; j++)
        {
            s = s + "  ";
        }

        String s1 = s + "  ";
        stringbuffer.append(s);
        stringbuffer.append(getTypeName());
        stringbuffer.append("\n");
        int k = getBaseType();
        if(k == 2002 || k == 2008)
        {
            StructDescriptor structdescriptor = StructDescriptor.createDescriptor(getBaseName(), m_conn);
            structdescriptor.descType(stringbuffer, i + 1);
        } else
        if(k == 2003)
        {
            ArrayDescriptor arraydescriptor = createDescriptor(getBaseName(), m_conn);
            arraydescriptor.descType(stringbuffer, i + 1);
        } else
        if(k == 2007)
        {
            OpaqueDescriptor opaquedescriptor = OpaqueDescriptor.createDescriptor(getBaseName(), m_conn);
            opaquedescriptor.descType(stringbuffer, i + 1);
        } else
        {
            stringbuffer.append(s1);
            stringbuffer.append(getBaseName());
            stringbuffer.append("\n");
        }
        return stringbuffer.toString();
    }

    // Decompiling method: getArrayType  Signature: ()I
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 11 bytes, Code offset: 8631
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 11 Range 0 10 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type I At 0 11 Range 0 10 Init 0 fixed
    public int getArrayType()
        throws SQLException
    {
        return ((OracleTypeCOLLECTION)m_pickler).getUserCode();
    }

    // Decompiling method: getBaseName  Signature: ()Ljava/lang/String;
    // Max stack: 3, #locals: 2, #params: 1
    // Code length: 243 bytes, Code offset: 8690
    // Line Number Table found: 19 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 243 Range 0 242 Init 0 fixed
    // RetValue   2 added: Name <returnValue> Type Ljava/lang/String; At 0 243 Range 0 242 Init 0 fixed
    // LocalVar   1 added: Name oraclenamedtype Type Loracle/jdbc/oracore/OracleNamedType; At 198 2 Range 198 199 Init 198
    // LocalVar   1 added: Name oraclenamedtype1 Type Loracle/jdbc/oracore/OracleNamedType; At 217 11 Range 217 227 Init 217
    public String getBaseName()
        throws SQLException
    {
        switch(getBaseType())
        {
        case 12: // '\f'
            return "VARCHAR";

        case 1: // '\001'
            return "CHAR";

        case -2: 
            return "RAW";

        case 6: // '\006'
            return "FLOAT";

        case 2: // '\002'
            return "NUMBER";

        case 8: // '\b'
            return "DOUBLE";

        case 3: // '\003'
            return "DECIMAL";

        case 91: // '['
            return "DATE";

        case 2004: 
            return "BLOB";

        case 2005: 
            return "CLOB";

        case -13: 
            return "BFILE";

        case 2002: 
        case 2003: 
        case 2007: 
        case 2008: 
            OracleNamedType oraclenamedtype = (OracleNamedType)((OracleTypeCOLLECTION)m_pickler).getElementType();
            return oraclenamedtype.getFullName();

        case 2006: 
            OracleNamedType oraclenamedtype1 = (OracleNamedType)((OracleTypeCOLLECTION)m_pickler).getElementType();
            return "REF " + ((OracleTypeREF)oraclenamedtype1).getFullName();

        case 1111: 
        default:
            return null;
        }
    }

    // Decompiling method: getBaseType  Signature: ()I
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 14 bytes, Code offset: 9053
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 14 Range 0 13 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type I At 0 14 Range 0 13 Init 0 fixed
    public int getBaseType()
        throws SQLException
    {
        return ((OracleTypeCOLLECTION)m_pickler).getElementType().getTypeCode();
    }

    // Decompiling method: getCacheStyle  Signature: (Loracle/sql/ARRAY;)I
    // Max stack: 2, #locals: 1, #params: 1
    // Code length: 27 bytes, Code offset: 9115
    // Line Number Table found: 5 entries
    // Parameter  0 added: Name array Type Loracle/sql/ARRAY; At 0 27 Range 0 26 Init 0
    // RetValue   1 added: Name <returnValue> Type I At 0 27 Range 0 26 Init 0 fixed
    public static int getCacheStyle(ARRAY array)
        throws SQLException
    {
        return !array.getAutoIndexing() || array.getAccessDirection() != 2 && array.getAccessDirection() != 3 ? 2 : 1;
    }

    // Decompiling method: getElementType  Signature: ()Loracle/jdbc/oracore/OracleType;
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 11 bytes, Code offset: 9206
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 11 Range 0 10 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type Loracle/jdbc/oracore/OracleType; At 0 11 Range 0 10 Init 0 fixed
    private OracleType getElementType()
        throws SQLException
    {
        return ((OracleTypeCOLLECTION)m_pickler).getElementType();
    }

    // Decompiling method: getMaxLength  Signature: ()J
    // Max stack: 2, #locals: 1, #params: 1
    // Code length: 23 bytes, Code offset: 9265
    // Line Number Table found: 5 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 23 Range 0 22 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type J At 0 23 Range 0 22 Init 0 fixed
    public long getMaxLength()
        throws SQLException
    {
        return getArrayType() != 3 ? 0L : ((OracleTypeCOLLECTION)m_pickler).getMaxLength();
    }

    // Decompiling method: getOracleTypeCOLLECTION  Signature: ()Loracle/jdbc/oracore/OracleTypeCOLLECTION;
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 8 bytes, Code offset: 9352
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 8 Range 0 7 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type Loracle/jdbc/oracore/OracleTypeCOLLECTION; At 0 8 Range 0 7 Init 0 fixed
    public OracleTypeCOLLECTION getOracleTypeCOLLECTION()
    {
        return (OracleTypeCOLLECTION)m_pickler;
    }

    // Decompiling method: getTypeCode  Signature: ()I
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 4 bytes, Code offset: 9398
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 4 Range 0 3 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type I At 0 4 Range 0 3 Init 0 fixed
    public int getTypeCode()
        throws SQLException
    {
        return 2003;
    }

    // Decompiling method: initPickler  Signature: ()V
    // Max stack: 4, #locals: 2, #params: 1
    // Code length: 92 bytes, Code offset: 9450
    // Exception table: 1 entries
    //           start  0 end 46 handler 49 type Exception
    // Line Number Table found: 13 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 92 Range 0 91 Init 0 fixed
    // RetValue   2 added: Name <returnValue> Type V At 0 92 Range 0 91 Init 0 fixed
    // LocalVar   1 added: Name oracletypeadt Type Loracle/jdbc/oracore/OracleTypeADT; At 15 14 Range 15 28 Init 15
    // LocalVar   1 added: Name exception Type Ljava/lang/Exception; At 49 9 Range 49 57 Init 49
    private void initPickler()
        throws SQLException
    {
        try
        {
            OracleTypeADT oracletypeadt = new OracleTypeADT(getName(), m_conn);
            oracletypeadt.init((oracle.jdbc.driver.OracleConnection)m_conn);
            m_pickler = (OracleTypeCOLLECTION)oracletypeadt.cleanup();
            m_pickler.setDescriptor(this);
        }
        catch(Exception exception)
        {
            if(exception instanceof SQLException)
            {
                throw (SQLException)exception;
            }
            DBError.throwSqlException(60, "Unable to resolve type: \"" + getName() + "\"");
        }
        return;
    }

    // Decompiling method: length  Signature: ([B)I
    // Max stack: 5, #locals: 3, #params: 2
    // Code length: 20 bytes, Code offset: 9646
    // Line Number Table found: 2 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 20 Range 0 19 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 20 Range 0 19 Init 0
    // RetValue   3 added: Name <returnValue> Type I At 0 20 Range 0 19 Init 0 fixed
    // LocalVar   2 added: Name array Type Loracle/sql/ARRAY; At 13 3 Range 13 15 Init 13
    public int length(byte abyte0[])
        throws SQLException
    {
        ARRAY array = new ARRAY(this, m_conn, abyte0);
        return toLength(array);
    }

    // Decompiling method: makeJavaArray  Signature: (II)[Ljava/lang/Object;
    // Max stack: 4, #locals: 2, #params: 2
    // Code length: 269 bytes, Code offset: 9718
    // Line Number Table found: 15 entries
    // Parameter  0 added: Name i Type I At 0 269 Range 0 268 Init 0
    // Parameter  1 added: Name j Type I At 0 269 Range 0 268 Init 0
    // RetValue   2 added: Name <returnValue> Type [Ljava/lang/Object; At 0 269 Range 0 268 Init 0 fixed
    public static Object[] makeJavaArray(int i, int j)
        throws SQLException
    {
        switch(j)
        {
        case -7: 
        case -6: 
        case -5: 
        case 2: // '\002'
        case 3: // '\003'
        case 4: // '\004'
        case 5: // '\005'
        case 6: // '\006'
        case 7: // '\007'
            return new BigDecimal[i];

        case 1: // '\001'
        case 12: // '\f'
            return new String[i];

        case 91: // '['
        case 92: // '\\'
        case 93: // ']'
            return new Timestamp[i];

        case 2002: 
        case 2008: 
            return new Object[i];

        case -13: 
            return new BFILE[i];

        case 2004: 
            return new BLOB[i];

        case 2005: 
            return new CLOB[i];

        case -3: 
        case -2: 
            return new byte[i][];

        case 2006: 
            return new REF[i];

        case 2003: 
            return new Object[i];
        }
        DBError.check_error(1, "makeJavaArray doesn't support type " + j);
        return null;
    }

    // Decompiling method: readObject  Signature: (Ljava/io/ObjectInputStream;)V
    // Max stack: 2, #locals: 2, #params: 2
    // Code length: 15 bytes, Code offset: 10091
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 15 Range 0 14 Init 0 fixed
    // Parameter  1 added: Name objectinputstream Type Ljava/io/ObjectInputStream; At 0 15 Range 0 14 Init 0
    // RetValue   2 added: Name <returnValue> Type V At 0 15 Range 0 14 Init 0 fixed
    private void readObject(ObjectInputStream objectinputstream)
        throws IOException, ClassNotFoundException
    {
        if(TypeDescriptor.DEBUG_SERIALIZATION)
        {
            System.out.println("ArrayDescriptor::readObject");
        }
        return;
    }

    // Decompiling method: toArray  Signature: (Ljava/lang/Object;)[Loracle/sql/Datum;
    // Max stack: 5, #locals: 2, #params: 2
    // Code length: 8 bytes, Code offset: 10164
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 8 Range 0 7 Init 0 fixed
    // Parameter  1 added: Name obj Type Ljava/lang/Object; At 0 8 Range 0 7 Init 0
    // RetValue   2 added: Name <returnValue> Type [Loracle/sql/Datum; At 0 8 Range 0 7 Init 0 fixed
    public Datum[] toArray(Object obj)
        throws SQLException
    {
        return toOracleArray(obj, 1L, -1);
    }

    // Decompiling method: toArray  Signature: ([B)[Loracle/sql/Datum;
    // Max stack: 6, #locals: 3, #params: 2
    // Code length: 29 bytes, Code offset: 10220
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 29 Range 0 28 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 29 Range 0 28 Init 0
    // RetValue   3 added: Name <returnValue> Type [Loracle/sql/Datum; At 0 29 Range 0 28 Init 0 fixed
    // LocalVar   2 added: Name array Type Loracle/sql/ARRAY; At 19 3 Range 19 21 Init 19
    public Datum[] toArray(byte abyte0[])
        throws SQLException
    {
        if(abyte0 == null)
        {
            return null;
        } else
        {
            ARRAY array = new ARRAY(this, m_conn, abyte0);
            return toOracleArray(array, 1L, -1, false);
        }
    }

    // Decompiling method: toArrayFromLocator  Signature: ([BJILjava/util/Map;)[Ljava/lang/Object;
    // Max stack: 6, #locals: 11, #params: 6
    // Code length: 123 bytes, Code offset: 10305
    // Line Number Table found: 14 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 123 Range 0 122 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 123 Range 0 122 Init 0
    // Parameter  2 added: Name l Type J At 0 123 Range 0 122 Init 0
    // Parameter  4 added: Name i Type I At 0 123 Range 0 122 Init 0
    // Parameter  5 added: Name map Type Ljava/util/Map; At 0 123 Range 0 122 Init 0
    // RetValue  11 added: Name <returnValue> Type [Ljava/lang/Object; At 0 123 Range 0 122 Init 0 fixed
    // LocalVar   6 added: Name j Type I At 5 20 Range 5 24 Init 5
    // LocalVar   7 added: Name k Type I At 37 18 Range 37 54 Init 37
    // LocalVar   8 added: Name aobj Type [Ljava/lang/Object; At 62 60 Range 62 121 Init 62
    // LocalVar   9 added: Name resultset Type Ljava/sql/ResultSet; At 74 41 Range 74 114 Init 74
    // LocalVar  10 added: Name flag Type Z At 77 26 Range 77 102 Init 77
    // LocalVar  10 chged: Name i1 Oname flag Type I At 84 2 Range 77 102 Init 77
    private Object[] toArrayFromLocator(byte abyte0[], long l, int i, Map map)
        throws SQLException
    {
        int j = toLengthFromLocator(abyte0);
        int k = (int)(i != -1 ? Math.min(((long)j - l) + 1L, i) : ((long)j - l) + 1L);
        if(k <= 0)
        {
            return makeJavaArray(0, getBaseType());
        }
        Object aobj[] = makeJavaArray(k, getBaseType());
        ResultSet resultset = toResultSetFromLocator(abyte0, l, i, map);
        for(int i1 = 0; resultset.next(); i1++)
        {
            aobj[i1] = ((OracleResultSet)resultset).getObject(2, map);
        }

        resultset.close();
        return aobj;
    }

    // Decompiling method: toBytes  Signature: (Loracle/sql/ARRAY;Z)[B
    // Max stack: 6, #locals: 5, #params: 3
    // Code length: 168 bytes, Code offset: 10528
    // Line Number Table found: 27 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 168 Range 0 167 Init 0 fixed
    // Parameter  1 added: Name array Type Loracle/sql/ARRAY; At 0 168 Range 0 167 Init 0
    // Parameter  2 added: Name flag Type Z At 0 168 Range 0 167 Init 0
    // RetValue   5 added: Name <returnValue> Type [B At 0 168 Range 0 167 Init 0 fixed
    // LocalVar   3 added: Name abyte0 Type [B At 4 163 Range 4 166 Init 4
    // LocalVar   4 added: Name abyte1 Type [B At 136 29 Range 136 164 Init 136
    byte[] toBytes(ARRAY array, boolean flag)
        throws SQLException
    {
        byte abyte0[] = array.shareBytes();
        if(abyte0 == null)
        {
            if(array.m_datumArray != null || array.m_locator != null)
            {
                abyte0 = m_pickler.linearize(array);
                if(!flag)
                {
                    array.setShareBytes(null);
                }
            } else
            if(array.m_objArray != null)
            {
                array.m_datumArray = toOracleArray(array.m_objArray, 1L, -1);
                abyte0 = m_pickler.linearize(array);
                if(!flag)
                {
                    array.m_datumArray = null;
                    array.setShareBytes(null);
                }
            } else
            {
                DBError.throwSqlException(1, "Array is in inconsistent status");
            }
        } else
        if(array.m_imgLength != 0L && (array.m_imgOffset != 0L || array.m_imgLength != (long)abyte0.length))
        {
            byte abyte1[] = new byte[(int)array.m_imgLength];
            System.arraycopy(abyte0, (int)array.m_imgOffset, abyte1, 0, (int)array.m_imgLength);
            array.setImage(abyte1, 0L, 0L);
            return abyte1;
        }
        return abyte0;
    }

    // Decompiling method: toBytes  Signature: ([Ljava/lang/Object;)[B
    // Max stack: 2, #locals: 3, #params: 2
    // Code length: 12 bytes, Code offset: 10848
    // Line Number Table found: 2 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 12 Range 0 11 Init 0 fixed
    // Parameter  1 added: Name aobj Type [Ljava/lang/Object; At 0 12 Range 0 11 Init 0
    // RetValue   3 added: Name <returnValue> Type [B At 0 12 Range 0 11 Init 0 fixed
    // LocalVar   2 added: Name adatum Type [Loracle/sql/Datum; At 5 3 Range 5 7 Init 5
    public byte[] toBytes(Object aobj[])
        throws SQLException
    {
        Datum adatum[] = toArray(((Object) (aobj)));
        return toBytes(adatum);
    }

    // Decompiling method: toBytes  Signature: ([Loracle/sql/Datum;)[B
    // Max stack: 5, #locals: 3, #params: 2
    // Code length: 23 bytes, Code offset: 10912
    // Line Number Table found: 2 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 23 Range 0 22 Init 0 fixed
    // Parameter  1 added: Name adatum Type [Loracle/sql/Datum; At 0 23 Range 0 22 Init 0
    // RetValue   3 added: Name <returnValue> Type [B At 0 23 Range 0 22 Init 0 fixed
    // LocalVar   2 added: Name array Type Loracle/sql/ARRAY; At 13 6 Range 13 18 Init 13
    public byte[] toBytes(Datum adatum[])
        throws SQLException
    {
        ARRAY array = new ARRAY(this, m_conn, adatum);
        return m_pickler.linearize(array);
    }

    // Decompiling method: toJavaArray  Signature: (Loracle/sql/ARRAY;JILjava/util/Map;Z)[Ljava/lang/Object;
    // Max stack: 10, #locals: 10, #params: 7
    // Code length: 281 bytes, Code offset: 10987
    // Line Number Table found: 34 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 281 Range 0 280 Init 0 fixed
    // Parameter  1 added: Name array Type Loracle/sql/ARRAY; At 0 281 Range 0 280 Init 0
    // Parameter  2 added: Name l Type J At 0 281 Range 0 280 Init 0
    // Parameter  4 added: Name i Type I At 0 281 Range 0 280 Init 0
    // Parameter  5 added: Name map Type Ljava/util/Map; At 0 281 Range 0 280 Init 0
    // Parameter  6 added: Name flag Type Z At 0 281 Range 0 280 Init 0
    // RetValue  10 added: Name <returnValue> Type [Ljava/lang/Object; At 0 281 Range 0 280 Init 0 fixed
    // LocalVar   7 added: Name obj Type A At 1 279 Range 1 279 Init 1
    // LocalVar   7 chged: Name aobj Oname obj Type [Ljava/lang/Object; At 23 4 Range 1 279 Init 1
    // LocalVar   8 added: Name j Type I At 28 20 Range 28 47 Init 28
    // LocalVar   9 added: Name k Type I At 60 41 Range 60 100 Init 60
    Object[] toJavaArray(ARRAY array, long l, int i, Map map, boolean flag)
        throws SQLException
    {
        Object aobj[] = null;
        if(array.m_objArray != null)
        {
            aobj = (Object[])((Object) ((Object[])array.m_objArray)).clone();
            int j = aobj.length;
            int k = (int)(i != -1 ? Math.min(((long)j - l) + 1L, i) : ((long)j - l) + 1L);
            if(k <= 0)
            {
                return makeJavaArray(k, getBaseType());
            }
            aobj = makeJavaArray(k, getBaseType());
            System.arraycopy(array.m_objArray, (int)l - 1, ((Object) (aobj)), 0, k);
        } else
        {
            if(array.m_datumArray != null)
            {
                aobj = (Object[])toJavaArray(array.m_datumArray, l, i, map);
            } else
            if(array.m_locator != null)
            {
                aobj = toArrayFromLocator(array.m_locator, l, i, map);
            } else
            if(array.shareBytes() != null)
            {
                m_pickler.unlinearize(array.shareBytes(), array.m_imgOffset, array, l, i, 2, map);
                if(array.m_locator != null)
                {
                    aobj = toArrayFromLocator(array.m_locator, l, i, map);
                } else
                {
                    aobj = (Object[])array.m_objArray;
                }
            } else
            {
                DBError.throwSqlException(1);
            }
            if(flag && getBaseType() != 2002 && getBaseType() != 2008 && aobj != null)
            {
                array.m_objArray = ((Object) (aobj)).clone();
            } else
            {
                array.m_objArray = null;
            }
        }
        return aobj;
    }

    // Decompiling method: toJavaArray  Signature: ([Loracle/sql/Datum;JILjava/util/Map;)Ljava/lang/Object;
    // Max stack: 4, #locals: 10, #params: 6
    // Code length: 170 bytes, Code offset: 11448
    // Line Number Table found: 20 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 170 Range 0 169 Init 0 fixed
    // Parameter  1 added: Name adatum Type [Loracle/sql/Datum; At 0 170 Range 0 169 Init 0
    // Parameter  2 added: Name l Type J At 0 170 Range 0 169 Init 0
    // Parameter  4 added: Name i Type I At 0 170 Range 0 169 Init 0
    // Parameter  5 added: Name map Type Ljava/util/Map; At 0 170 Range 0 169 Init 0
    // RetValue  10 added: Name <returnValue> Type Ljava/lang/Object; At 0 170 Range 0 169 Init 0 fixed
    // LocalVar   6 added: Name j Type I At 30 134 Range 30 163 Init 30
    // LocalVar   7 added: Name aobj Type [Ljava/lang/Object; At 49 120 Range 49 168 Init 49
    // LocalVar   8 added: Name obj Type A At 62 2 Range 62 63 Init 62
    // LocalVar   9 added: Name flag Type Z At 65 45 Range 65 109 Init 65
    // LocalVar   9 chged: Name k Oname flag Type I At 108 2 Range 65 109 Init 65
    // LocalVar   8 added: Name obj1 Type A At 119 2 Range 119 120 Init 119
    // LocalVar   9 added: Name flag Type Z At 122 40 Range 122 161 Init 122
    // LocalVar   9 chged: Name i1 Oname flag Type I At 160 2 Range 122 161 Init 122
    // LocalVar   8 added: Name struct Type Loracle/sql/STRUCT; At 82 13 Range 82 94 Init 82
    // LocalVar   8 added: Name datum Type Loracle/sql/Datum; At 136 13 Range 136 148 Init 136
    private Object toJavaArray(Datum adatum[], long l, int i, Map map)
        throws SQLException
    {
        int j = (int)(i != -1 ? Math.min(((long)adatum.length - l) + 1L, i) : ((long)adatum.length - l) + 1L);
        if(j < 0)
        {
            j = 0;
        }
        Object aobj[] = makeJavaArray(j, getBaseType());
        if(getBaseType() == 2002)
        {
            Object obj = null;
            for(int k = 0; k < j; k++)
            {
                STRUCT struct = (STRUCT)adatum[((int)l + k) - 1];
                aobj[k] = struct == null ? null : struct.toJdbc(map);
            }

        } else
        {
            Object obj1 = null;
            for(int i1 = 0; i1 < j; i1++)
            {
                Datum datum = adatum[((int)l + i1) - 1];
                aobj[i1] = datum == null ? null : datum.toJdbc();
            }

        }
        return ((Object) (aobj));
    }

    // Decompiling method: toLength  Signature: (Loracle/sql/ARRAY;)I
    // Max stack: 7, #locals: 2, #params: 2
    // Code length: 357 bytes, Code offset: 11742
    // Line Number Table found: 49 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 357 Range 0 356 Init 0 fixed
    // Parameter  1 added: Name array Type Loracle/sql/ARRAY; At 0 357 Range 0 356 Init 0
    // RetValue   2 added: Name <returnValue> Type I At 0 357 Range 0 356 Init 0 fixed
    int toLength(ARRAY array)
        throws SQLException
    {
        if(array.m_numElems == -1)
        {
            if(array.m_datumArray != null)
            {
                array.m_numElems = array.m_datumArray.length;
            } else
            if(array.m_objArray != null)
            {
                if(array.m_objArray instanceof Object[])
                {
                    array.m_numElems = ((Object[])array.m_objArray).length;
                } else
                if(array.m_objArray instanceof int[])
                {
                    array.m_numElems = ((long[])array.m_objArray).length;
                } else
                if(array.m_objArray instanceof long[])
                {
                    array.m_numElems = ((float[])array.m_objArray).length;
                } else
                if(array.m_objArray instanceof float[])
                {
                    array.m_numElems = ((double[])array.m_objArray).length;
                } else
                if(array.m_objArray instanceof double[])
                {
                    array.m_numElems = ((boolean[])array.m_objArray).length;
                } else
                if(array.m_objArray instanceof boolean[])
                {
                    array.m_numElems = ((int[])array.m_objArray).length;
                } else
                if(array.m_objArray instanceof byte[])
                {
                    array.m_numElems = ((byte[])array.m_objArray).length;
                } else
                if(array.m_objArray instanceof short[])
                {
                    array.m_numElems = ((short[])array.m_objArray).length;
                } else
                if(array.m_objArray instanceof char[])
                {
                    array.m_numElems = ((char[])array.m_objArray).length;
                }
            } else
            if(array.m_locator != null)
            {
                array.m_numElems = toLengthFromLocator(array.m_locator);
            } else
            if(array.shareBytes() != null)
            {
                m_pickler.unlinearize(array.shareBytes(), array.m_imgOffset, array, 0, null);
                if(array.m_numElems == -1)
                {
                    if(array.m_locator != null)
                    {
                        array.m_numElems = toLengthFromLocator(array.m_locator);
                    } else
                    {
                        DBError.throwSqlException(1, "Unable to get array length");
                    }
                }
            } else
            {
                DBError.check_error(1, "Array is in inconsistent status");
            }
        }
        return array.m_numElems;
    }

    // Decompiling method: toLengthFromLocator  Signature: ([B)I
    // Max stack: 5, #locals: 6, #params: 2
    // Code length: 130 bytes, Code offset: 12339
    // Line Number Table found: 19 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 130 Range 0 129 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 130 Range 0 129 Init 0
    // RetValue   6 added: Name <returnValue> Type I At 0 130 Range 0 129 Init 0 fixed
    // LocalVar   2 added: Name array Type Loracle/sql/ARRAY; At 13 56 Range 13 68 Init 13
    // LocalVar   3 added: Name flag Type Z At 20 109 Range 20 128 Init 20
    // LocalVar   4 added: Name obj Type A At 22 2 Range 22 23 Init 22
    // LocalVar   5 added: Name obj1 Type A At 25 2 Range 25 26 Init 25
    // LocalVar   4 added: Name oraclepreparedstatement Type Loracle/jdbc/OraclePreparedStatement; At 63 60 Range 63 122 Init 63
    // LocalVar   5 added: Name oracleresultset Type Loracle/jdbc/OracleResultSet; At 84 32 Range 84 115 Init 84
    // LocalVar   3 chged: Name i Oname flag Type I At 104 25 Range 20 128 Init 20
    // LocalVar   4 chged: Name oraclepreparedstatement1 Oname obj Type Loracle/jdbc/OraclePreparedStatement; At 22 2 Range 22 23 Init 22
    // LocalVar   4 name oraclepreparedstatement(Loracle/jdbc/OraclePreparedStatement;) merged out into oraclepreparedstatement1(Loracle/jdbc/OraclePreparedStatement;)
    // LocalVar   5 chged: Name oracleresultset1 Oname obj1 Type Loracle/jdbc/OracleResultSet; At 25 2 Range 25 26 Init 25
    // LocalVar   5 name oracleresultset(Loracle/jdbc/OracleResultSet;) merged out into oracleresultset1(Loracle/jdbc/OracleResultSet;)
    private int toLengthFromLocator(byte abyte0[])
        throws SQLException
    {
        ARRAY array = new ARRAY(this, m_conn, null);
        array.setLocator(abyte0);
        int i = 0;
        OraclePreparedStatement oraclepreparedstatement = null;
        OracleResultSet oracleresultset = null;
        oraclepreparedstatement = (OraclePreparedStatement)m_conn.prepareStatement("SELECT count(*) FROM TABLE( CAST(? AS " + getName() + ") )");
        oraclepreparedstatement.setArray(1, array);
        oracleresultset = (OracleResultSet)oraclepreparedstatement.executeQuery();
        if(oracleresultset.next())
        {
            i = oracleresultset.getInt(1);
        } else
        {
            DBError.check_error(1, "Fail to access array storage table");
        }
        oracleresultset.close();
        oraclepreparedstatement.close();
        return i;
    }

    // Decompiling method: toNumericArray  Signature: (Loracle/sql/ARRAY;JIIZ)Ljava/lang/Object;
    // Max stack: 10, #locals: 9, #params: 7
    // Code length: 644 bytes, Code offset: 12589
    // Line Number Table found: 56 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 644 Range 0 643 Init 0 fixed
    // Parameter  1 added: Name array Type Loracle/sql/ARRAY; At 0 644 Range 0 643 Init 0
    // Parameter  2 added: Name l Type J At 0 644 Range 0 643 Init 0
    // Parameter  4 added: Name i Type I At 0 644 Range 0 643 Init 0
    // Parameter  5 added: Name j Type I At 0 644 Range 0 643 Init 0
    // Parameter  6 added: Name flag Type Z At 0 644 Range 0 643 Init 0
    // RetValue   9 added: Name <returnValue> Type Ljava/lang/Object; At 0 644 Range 0 643 Init 0 fixed
    // LocalVar   7 added: Name k Type I At 56 32 Range 56 87 Init 56
    // LocalVar   7 added: Name i1 Type I At 100 21 Range 100 120 Init 100
    // LocalVar   8 added: Name ai Type [I At 106 20 Range 106 125 Init 106
    // LocalVar   7 added: Name j1 Type I At 151 32 Range 151 182 Init 151
    // LocalVar   7 added: Name k1 Type I At 195 21 Range 195 215 Init 195
    // LocalVar   8 added: Name ad Type [D At 201 20 Range 201 220 Init 201
    // LocalVar   7 added: Name l1 Type I At 247 32 Range 247 278 Init 247
    // LocalVar   7 added: Name i2 Type I At 291 21 Range 291 311 Init 291
    // LocalVar   8 added: Name af Type [F At 297 20 Range 297 316 Init 297
    // LocalVar   7 added: Name j2 Type I At 343 32 Range 343 374 Init 343
    // LocalVar   7 added: Name k2 Type I At 387 21 Range 387 407 Init 387
    // LocalVar   8 added: Name al Type [J At 393 20 Range 393 412 Init 393
    // LocalVar   7 added: Name l2 Type I At 439 32 Range 439 470 Init 439
    // LocalVar   7 added: Name i3 Type I At 483 21 Range 483 503 Init 483
    // LocalVar   8 added: Name aword0 Type [S At 489 20 Range 489 508 Init 489
    // LocalVar   7 added: Name obj Type A At 511 132 Range 511 642 Init 511
    // LocalVar   7 chged: Name obj Oname obj Type Ljava/lang/Object; At 533 110 Range 511 642 Init 511
    // LocalVar   7 name i1(I) merged out into k(I)
    // LocalVar   7 name k1(I) merged out into j1(I)
    // LocalVar   7 name i2(I) merged out into l1(I)
    // LocalVar   7 name k2(I) merged out into j2(I)
    // LocalVar   7 name i3(I) merged out into l2(I)
    Object toNumericArray(ARRAY array, long l, int i, int j, boolean flag)
        throws SQLException
    {
        if(!(getElementType() instanceof OracleTypeNUMBER) && !(getElementType() instanceof OracleTypeFLOAT))
        {
            DBError.throwSqlException(23);
        }
        if(array.m_objArray != null)
        {
            if(j == 4 && (array.m_objArray instanceof int[]))
            {
                int k = ((int[])array.m_objArray).length;
                if(l > (long)k)
                {
                    return new int[0];
                } else
                {
                    k = (int)(i != -1 ? Math.min(((long)k - l) + 1L, i) : ((long)k - l) + 1L);
                    int ai[] = new int[k];
                    System.arraycopy(array.m_objArray, (int)l - 1, ai, 0, k);
                    return ai;
                }
            }
            if(j == 5 && (array.m_objArray instanceof double[]))
            {
                int i1 = ((double[])array.m_objArray).length;
                if(l > (long)i1)
                {
                    return new double[0];
                } else
                {
                    i1 = (int)(i != -1 ? Math.min(((long)i1 - l) + 1L, i) : ((long)i1 - l) + 1L);
                    double ad[] = new double[i1];
                    System.arraycopy(array.m_objArray, (int)l - 1, ad, 0, i1);
                    return ad;
                }
            }
            if(j == 6 && (array.m_objArray instanceof float[]))
            {
                int j1 = ((float[])array.m_objArray).length;
                if(l > (long)j1)
                {
                    return new float[0];
                } else
                {
                    j1 = (int)(i != -1 ? Math.min(((long)j1 - l) + 1L, i) : ((long)j1 - l) + 1L);
                    float af[] = new float[j1];
                    System.arraycopy(array.m_objArray, (int)l - 1, af, 0, j1);
                    return af;
                }
            }
            if(j == 7 && (array.m_objArray instanceof long[]))
            {
                int k1 = ((long[])array.m_objArray).length;
                if(l > (long)k1)
                {
                    return new long[0];
                } else
                {
                    k1 = (int)(i != -1 ? Math.min(((long)k1 - l) + 1L, i) : ((long)k1 - l) + 1L);
                    long al[] = new long[k1];
                    System.arraycopy(array.m_objArray, (int)l - 1, al, 0, k1);
                    return al;
                }
            }
            if(j == 8 && (array.m_objArray instanceof short[]))
            {
                int l1 = ((short[])array.m_objArray).length;
                if(l > (long)l1)
                {
                    return new short[0];
                } else
                {
                    l1 = (int)(i != -1 ? Math.min(((long)l1 - l) + 1L, i) : ((long)l1 - l) + 1L);
                    short aword0[] = new short[l1];
                    System.arraycopy(array.m_objArray, (int)l - 1, aword0, 0, l1);
                    return aword0;
                }
            }
        }
        Object obj = null;
        if(array.m_datumArray != null)
        {
            obj = toNumericArray(array.m_datumArray, l, i, j);
        } else
        if(array.m_locator != null)
        {
            obj = toNumericArrayFromLocator(array.m_locator, l, i, j);
        } else
        if(array.shareBytes() != null)
        {
            m_pickler.unlinearize(array.shareBytes(), array.m_imgOffset, array, l, i, j, null);
            if(array.m_locator != null)
            {
                obj = toNumericArrayFromLocator(array.m_locator, l, i, j);
            } else
            {
                obj = array.m_objArray;
            }
        } else
        {
            DBError.throwSqlException(1);
        }
        if(!flag)
        {
            array.m_objArray = null;
        }
        return obj;
    }

    // Decompiling method: toNumericArray  Signature: ([Loracle/sql/Datum;JII)Ljava/lang/Object;
    // Max stack: 4, #locals: 10, #params: 6
    // Code length: 338 bytes, Code offset: 13501
    // Line Number Table found: 43 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 338 Range 0 337 Init 0 fixed
    // Parameter  1 added: Name adatum Type [Loracle/sql/Datum; At 0 338 Range 0 337 Init 0
    // Parameter  2 added: Name l Type J At 0 338 Range 0 337 Init 0
    // Parameter  4 added: Name i Type I At 0 338 Range 0 337 Init 0
    // Parameter  5 added: Name j Type I At 0 338 Range 0 337 Init 0
    // RetValue  10 added: Name <returnValue> Type Ljava/lang/Object; At 0 338 Range 0 337 Init 0 fixed
    // LocalVar   6 added: Name k Type I At 30 295 Range 30 324 Init 30
    // LocalVar   7 added: Name ai Type [I At 50 46 Range 50 95 Init 50
    // LocalVar   8 added: Name flag Type Z At 53 36 Range 53 88 Init 53
    // LocalVar   8 chged: Name i1 Oname flag Type I At 87 2 Range 53 88 Init 53
    // LocalVar   7 added: Name ad Type [D At 107 46 Range 107 152 Init 107
    // LocalVar   8 added: Name flag Type Z At 110 36 Range 110 145 Init 110
    // LocalVar   8 chged: Name j1 Oname flag Type I At 144 2 Range 110 145 Init 110
    // LocalVar   7 added: Name af Type [F At 165 46 Range 165 210 Init 165
    // LocalVar   8 added: Name flag Type Z At 168 36 Range 168 203 Init 168
    // LocalVar   8 chged: Name k1 Oname flag Type I At 202 2 Range 168 203 Init 168
    // LocalVar   7 added: Name al Type [J At 223 46 Range 223 268 Init 223
    // LocalVar   8 added: Name flag Type Z At 226 36 Range 226 261 Init 226
    // LocalVar   8 chged: Name l1 Oname flag Type I At 260 2 Range 226 261 Init 226
    // LocalVar   7 added: Name aword0 Type [S At 281 49 Range 281 329 Init 281
    // LocalVar   8 added: Name flag Type Z At 284 39 Range 284 322 Init 284
    // LocalVar   8 chged: Name i2 Oname flag Type I At 321 2 Range 284 322 Init 284
    // LocalVar   9 added: Name datum Type Loracle/sql/Datum; At 67 13 Range 67 79 Init 67
    // LocalVar   9 added: Name datum1 Type Loracle/sql/Datum; At 124 13 Range 124 136 Init 124
    // LocalVar   9 added: Name datum2 Type Loracle/sql/Datum; At 182 13 Range 182 194 Init 182
    // LocalVar   9 added: Name datum3 Type Loracle/sql/Datum; At 240 13 Range 240 252 Init 240
    // LocalVar   9 added: Name datum4 Type Loracle/sql/Datum; At 298 13 Range 298 310 Init 298
    private Object toNumericArray(Datum adatum[], long l, int i, int j)
        throws SQLException
    {
        int k = (int)(i != -1 ? Math.min(((long)adatum.length - l) + 1L, i) : ((long)adatum.length - l) + 1L);
        if(k < 0)
        {
            k = 0;
        }
        if(j == 4)
        {
            int ai[] = new int[k];
            for(int i1 = 0; i1 < k; i1++)
            {
                Datum datum = adatum[((int)l + i1) - 1];
                if(datum != null)
                {
                    ai[i1] = datum.intValue();
                }
            }

            return ai;
        }
        if(j == 5)
        {
            double ad[] = new double[k];
            for(int j1 = 0; j1 < k; j1++)
            {
                Datum datum1 = adatum[((int)l + j1) - 1];
                if(datum1 != null)
                {
                    ad[j1] = datum1.doubleValue();
                }
            }

            return ad;
        }
        if(j == 6)
        {
            float af[] = new float[k];
            for(int k1 = 0; k1 < k; k1++)
            {
                Datum datum2 = adatum[((int)l + k1) - 1];
                if(datum2 != null)
                {
                    af[k1] = datum2.floatValue();
                }
            }

            return af;
        }
        if(j == 7)
        {
            long al[] = new long[k];
            for(int l1 = 0; l1 < k; l1++)
            {
                Datum datum3 = adatum[((int)l + l1) - 1];
                if(datum3 != null)
                {
                    al[l1] = datum3.longValue();
                }
            }

            return al;
        }
        if(j == 8)
        {
            short aword0[] = new short[k];
            for(int i2 = 0; i2 < k; i2++)
            {
                Datum datum4 = adatum[((int)l + i2) - 1];
                if(datum4 != null)
                {
                    aword0[i2] = ((NUMBER)datum4).shortValue();
                }
            }

            return aword0;
        } else
        {
            DBError.throwSqlException(23);
            return null;
        }
    }

    // Decompiling method: toNumericArrayFromLocator  Signature: ([BJII)Ljava/lang/Object;
    // Max stack: 6, #locals: 10, #params: 6
    // Code length: 336 bytes, Code offset: 14055
    // Line Number Table found: 41 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 336 Range 0 335 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 336 Range 0 335 Init 0
    // Parameter  2 added: Name l Type J At 0 336 Range 0 335 Init 0
    // Parameter  4 added: Name i Type I At 0 336 Range 0 335 Init 0
    // Parameter  5 added: Name j Type I At 0 336 Range 0 335 Init 0
    // RetValue  10 added: Name <returnValue> Type Ljava/lang/Object; At 0 336 Range 0 335 Init 0 fixed
    // LocalVar   6 added: Name k Type I At 5 311 Range 5 315 Init 5
    // LocalVar   7 added: Name resultset Type Ljava/sql/ResultSet; At 16 305 Range 16 320 Init 16
    // LocalVar   8 added: Name flag Type Z At 19 295 Range 19 313 Init 19
    // LocalVar   9 added: Name ai Type [I At 31 50 Range 31 80 Init 31
    // LocalVar   8 chged: Name i1 Oname flag Type I At 65 2 Range 19 313 Init 19
    // LocalVar   9 added: Name ad Type [D At 92 50 Range 92 141 Init 92
    // LocalVar   9 added: Name af Type [F At 154 50 Range 154 203 Init 154
    // LocalVar   9 added: Name al Type [J At 216 50 Range 216 265 Init 216
    // LocalVar   9 added: Name aword0 Type [S At 278 50 Range 278 327 Init 278
    private Object toNumericArrayFromLocator(byte abyte0[], long l, int i, int j)
        throws SQLException
    {
        int k = toLengthFromLocator(abyte0);
        ResultSet resultset = toResultSetFromLocator(abyte0, l, i, null);
        int i1 = 0;
        if(j == 4)
        {
            int ai[] = new int[k];
            while(resultset.next() && i1 < k) 
            {
                ai[i1++] = ((OracleResultSet)resultset).getInt(2);
            }
            resultset.close();
            return ai;
        }
        if(j == 5)
        {
            double ad[] = new double[k];
            while(resultset.next() && i1 < k) 
            {
                ad[i1++] = ((OracleResultSet)resultset).getDouble(2);
            }
            resultset.close();
            return ad;
        }
        if(j == 6)
        {
            float af[] = new float[k];
            while(resultset.next() && i1 < k) 
            {
                af[i1++] = ((OracleResultSet)resultset).getFloat(2);
            }
            resultset.close();
            return af;
        }
        if(j == 7)
        {
            long al[] = new long[k];
            while(resultset.next() && i1 < k) 
            {
                al[i1++] = ((OracleResultSet)resultset).getLong(2);
            }
            resultset.close();
            return al;
        }
        if(j == 8)
        {
            short aword0[] = new short[k];
            while(resultset.next() && i1 < k) 
            {
                aword0[i1++] = ((OracleResultSet)resultset).getShort(2);
            }
            resultset.close();
            return aword0;
        } else
        {
            DBError.throwSqlException(23);
            return null;
        }
    }

    // Decompiling method: toOracleArray  Signature: (Ljava/lang/Object;JI)[Loracle/sql/Datum;
    // Max stack: 6, #locals: 6, #params: 5
    // Code length: 29 bytes, Code offset: 14599
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 29 Range 0 28 Init 0 fixed
    // Parameter  1 added: Name obj Type Ljava/lang/Object; At 0 29 Range 0 28 Init 0
    // Parameter  2 added: Name l Type J At 0 29 Range 0 28 Init 0
    // Parameter  4 added: Name i Type I At 0 29 Range 0 28 Init 0
    // RetValue   6 added: Name <returnValue> Type [Loracle/sql/Datum; At 0 29 Range 0 28 Init 0 fixed
    // LocalVar   5 added: Name oracletype Type Loracle/jdbc/oracore/OracleType; At 10 4 Range 10 13 Init 10
    Datum[] toOracleArray(Object obj, long l, int i)
        throws SQLException
    {
        if(obj == null)
        {
            return null;
        } else
        {
            OracleType oracletype = getElementType();
            return oracletype.toDatumArray(obj, (oracle.jdbc.driver.OracleConnection)m_conn, l, i);
        }
    }

    // Decompiling method: toOracleArray  Signature: (Loracle/sql/ARRAY;JIZ)[Loracle/sql/Datum;
    // Max stack: 10, #locals: 8, #params: 6
    // Code length: 231 bytes, Code offset: 14684
    // Line Number Table found: 30 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 231 Range 0 230 Init 0 fixed
    // Parameter  1 added: Name array Type Loracle/sql/ARRAY; At 0 231 Range 0 230 Init 0
    // Parameter  2 added: Name l Type J At 0 231 Range 0 230 Init 0
    // Parameter  4 added: Name i Type I At 0 231 Range 0 230 Init 0
    // Parameter  5 added: Name flag Type Z At 0 231 Range 0 230 Init 0
    // RetValue   8 added: Name <returnValue> Type [Loracle/sql/Datum; At 0 231 Range 0 230 Init 0 fixed
    // LocalVar   6 added: Name adatum Type [Loracle/sql/Datum; At 4 226 Range 4 229 Init 4
    // LocalVar   7 added: Name j Type I At 183 22 Range 183 204 Init 183
    Datum[] toOracleArray(ARRAY array, long l, int i, boolean flag)
        throws SQLException
    {
        Datum adatum[] = array.m_datumArray;
        if(adatum == null)
        {
            if(array.m_objArray != null)
            {
                adatum = toOracleArray(array.m_objArray, l, i);
            } else
            if(array.m_locator != null)
            {
                adatum = toOracleArrayFromLocator(array.m_locator, l, i, null);
            } else
            if(array.shareBytes() != null)
            {
                m_pickler.unlinearize(array.shareBytes(), array.m_imgOffset, array, l, i, 1, null);
                if(array.m_locator != null)
                {
                    adatum = toOracleArrayFromLocator(array.m_locator, l, i, null);
                } else
                {
                    adatum = array.m_datumArray;
                }
                if(!flag)
                {
                    array.m_datumArray = null;
                }
            } else
            {
                DBError.throwSqlException(1);
            }
        } else
        {
            if(l > (long)adatum.length)
            {
                return new Datum[0];
            }
            int j = (int)(i != -1 ? Math.min(((long)adatum.length - l) + 1L, i) : ((long)adatum.length - l) + 1L);
            adatum = new Datum[j];
            System.arraycopy(array.m_datumArray, (int)l - 1, adatum, 0, j);
        }
        if(flag)
        {
            array.m_datumArray = adatum;
            return (Datum[])adatum.clone();
        } else
        {
            return adatum;
        }
    }

    // Decompiling method: toOracleArrayFromLocator  Signature: ([BJILjava/util/Map;)[Loracle/sql/Datum;
    // Max stack: 6, #locals: 11, #params: 6
    // Code length: 113 bytes, Code offset: 15079
    // Line Number Table found: 14 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 113 Range 0 112 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 113 Range 0 112 Init 0
    // Parameter  2 added: Name l Type J At 0 113 Range 0 112 Init 0
    // Parameter  4 added: Name i Type I At 0 113 Range 0 112 Init 0
    // Parameter  5 added: Name map Type Ljava/util/Map; At 0 113 Range 0 112 Init 0
    // RetValue  11 added: Name <returnValue> Type [Loracle/sql/Datum; At 0 113 Range 0 112 Init 0 fixed
    // LocalVar   6 added: Name j Type I At 5 20 Range 5 24 Init 5
    // LocalVar   7 added: Name k Type I At 37 14 Range 37 50 Init 37
    // LocalVar   8 added: Name adatum Type [Loracle/sql/Datum; At 54 58 Range 54 111 Init 54
    // LocalVar   9 added: Name resultset Type Ljava/sql/ResultSet; At 66 39 Range 66 104 Init 66
    // LocalVar  10 added: Name flag Type Z At 69 24 Range 69 92 Init 69
    // LocalVar  10 chged: Name i1 Oname flag Type I At 76 2 Range 69 92 Init 69
    private Datum[] toOracleArrayFromLocator(byte abyte0[], long l, int i, Map map)
        throws SQLException
    {
        int j = toLengthFromLocator(abyte0);
        int k = (int)(i != -1 ? Math.min(((long)j - l) + 1L, i) : ((long)j - l) + 1L);
        if(k <= 0)
        {
            return new Datum[0];
        }
        Datum adatum[] = new Datum[k];
        ResultSet resultset = toResultSetFromLocator(abyte0, l, i, map);
        for(int i1 = 0; resultset.next(); i1++)
        {
            adatum[i1] = ((OracleResultSet)resultset).getOracleObject(2);
        }

        resultset.close();
        return adatum;
    }

    // Decompiling method: toResultSet  Signature: (Loracle/sql/ARRAY;JILjava/util/Map;Z)Ljava/sql/ResultSet;
    // Max stack: 7, #locals: 8, #params: 7
    // Code length: 185 bytes, Code offset: 15292
    // Line Number Table found: 24 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 185 Range 0 184 Init 0 fixed
    // Parameter  1 added: Name array Type Loracle/sql/ARRAY; At 0 185 Range 0 184 Init 0
    // Parameter  2 added: Name l Type J At 0 185 Range 0 184 Init 0
    // Parameter  4 added: Name i Type I At 0 185 Range 0 184 Init 0
    // Parameter  5 added: Name map Type Ljava/util/Map; At 0 185 Range 0 184 Init 0
    // Parameter  6 added: Name flag Type Z At 0 185 Range 0 184 Init 0
    // RetValue   8 added: Name <returnValue> Type Ljava/sql/ResultSet; At 0 185 Range 0 184 Init 0 fixed
    // LocalVar   7 added: Name obj Type A At 1 183 Range 1 183 Init 1
    // LocalVar   7 chged: Name resultset Oname obj Type Ljava/sql/ResultSet; At 23 161 Range 1 183 Init 1
    public ResultSet toResultSet(ARRAY array, long l, int i, Map map, boolean flag)
        throws SQLException
    {
        ResultSet resultset = null;
        if(array.m_datumArray != null)
        {
            resultset = toResultSet(array.m_datumArray, l, i, map);
        } else
        if(array.m_locator != null)
        {
            resultset = toResultSetFromLocator(array.m_locator, l, i, map);
        } else
        if(array.m_objArray != null)
        {
            resultset = toResultSet(toOracleArray(array.m_objArray, l, i), 1L, -1, map);
        } else
        if(array.shareBytes() != null)
        {
            if(((OracleTypeCOLLECTION)m_pickler).isInlineImage(array.shareBytes()))
            {
                resultset = toResultSetFromImage(array, l, i, map);
            } else
            {
                m_pickler.unlinearize(array.shareBytes(), array.m_imgOffset, array, 1, null);
                if(array.m_locator != null)
                {
                    resultset = toResultSetFromLocator(array.m_locator, l, i, map);
                } else
                {
                    DBError.throwSqlException(1);
                }
            }
        }
        if(resultset == null)
        {
            DBError.check_error(1, "Unable to create array ResultSet");
        }
        return resultset;
    }

    // Decompiling method: toResultSet  Signature: ([BJILjava/util/Map;)Ljava/sql/ResultSet;
    // Max stack: 7, #locals: 7, #params: 6
    // Code length: 36 bytes, Code offset: 15617
    // Line Number Table found: 4 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 36 Range 0 35 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 36 Range 0 35 Init 0
    // Parameter  2 added: Name l Type J At 0 36 Range 0 35 Init 0
    // Parameter  4 added: Name i Type I At 0 36 Range 0 35 Init 0
    // Parameter  5 added: Name map Type Ljava/util/Map; At 0 36 Range 0 35 Init 0
    // RetValue   7 added: Name <returnValue> Type Ljava/sql/ResultSet; At 0 36 Range 0 35 Init 0 fixed
    // LocalVar   6 added: Name array Type Loracle/sql/ARRAY; At 21 5 Range 21 25 Init 21
    public ResultSet toResultSet(byte abyte0[], long l, int i, Map map)
        throws SQLException
    {
        if(abyte0 == null)
        {
            return null;
        } else
        {
            ARRAY array = (ARRAY)m_pickler.unlinearize(abyte0, 0L, null, 1, null);
            return toResultSet(array, l, i, map, false);
        }
    }

    // Decompiling method: toResultSet  Signature: ([BLjava/util/Map;)Ljava/sql/ResultSet;
    // Max stack: 7, #locals: 4, #params: 3
    // Code length: 32 bytes, Code offset: 15713
    // Line Number Table found: 4 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 32 Range 0 31 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 32 Range 0 31 Init 0
    // Parameter  2 added: Name map Type Ljava/util/Map; At 0 32 Range 0 31 Init 0
    // RetValue   4 added: Name <returnValue> Type Ljava/sql/ResultSet; At 0 32 Range 0 31 Init 0 fixed
    // LocalVar   3 added: Name array Type Loracle/sql/ARRAY; At 21 3 Range 21 23 Init 21
    public ResultSet toResultSet(byte abyte0[], Map map)
        throws SQLException
    {
        if(abyte0 == null)
        {
            return null;
        } else
        {
            ARRAY array = (ARRAY)m_pickler.unlinearize(abyte0, 0L, null, 1, null);
            return toResultSet(array, 1L, -1, map, false);
        }
    }

    // Decompiling method: toResultSet  Signature: ([Loracle/sql/Datum;JILjava/util/Map;)Ljava/sql/ResultSet;
    // Max stack: 8, #locals: 6, #params: 6
    // Code length: 48 bytes, Code offset: 15805
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 48 Range 0 47 Init 0 fixed
    // Parameter  1 added: Name adatum Type [Loracle/sql/Datum; At 0 48 Range 0 47 Init 0
    // Parameter  2 added: Name l Type J At 0 48 Range 0 47 Init 0
    // Parameter  4 added: Name i Type I At 0 48 Range 0 47 Init 0
    // Parameter  5 added: Name map Type Ljava/util/Map; At 0 48 Range 0 47 Init 0
    // RetValue   6 added: Name <returnValue> Type Ljava/sql/ResultSet; At 0 48 Range 0 47 Init 0 fixed
    public ResultSet toResultSet(Datum adatum[], long l, int i, Map map)
        throws SQLException
    {
        if(i == -1)
        {
            return new ArrayDataResultSet((oracle.jdbc.driver.OracleConnection)m_conn, adatum, l, adatum.length, map);
        } else
        {
            return new ArrayDataResultSet((oracle.jdbc.driver.OracleConnection)m_conn, adatum, l, i, map);
        }
    }

    // Decompiling method: toResultSetFromImage  Signature: (Loracle/sql/ARRAY;JILjava/util/Map;)Ljava/sql/ResultSet;
    // Max stack: 8, #locals: 6, #params: 6
    // Code length: 21 bytes, Code offset: 15909
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 21 Range 0 20 Init 0 fixed
    // Parameter  1 added: Name array Type Loracle/sql/ARRAY; At 0 21 Range 0 20 Init 0
    // Parameter  2 added: Name l Type J At 0 21 Range 0 20 Init 0
    // Parameter  4 added: Name i Type I At 0 21 Range 0 20 Init 0
    // Parameter  5 added: Name map Type Ljava/util/Map; At 0 21 Range 0 20 Init 0
    // RetValue   6 added: Name <returnValue> Type Ljava/sql/ResultSet; At 0 21 Range 0 20 Init 0 fixed
    public ResultSet toResultSetFromImage(ARRAY array, long l, int i, Map map)
        throws SQLException
    {
        return new ArrayDataResultSet((oracle.jdbc.driver.OracleConnection)m_conn, array, l, i, map);
    }

    // Decompiling method: toResultSetFromLocator  Signature: ([BJILjava/util/Map;)Ljava/sql/ResultSet;
    // Max stack: 9, #locals: 6, #params: 6
    // Code length: 22 bytes, Code offset: 15986
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 22 Range 0 21 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 22 Range 0 21 Init 0
    // Parameter  2 added: Name l Type J At 0 22 Range 0 21 Init 0
    // Parameter  4 added: Name i Type I At 0 22 Range 0 21 Init 0
    // Parameter  5 added: Name map Type Ljava/util/Map; At 0 22 Range 0 21 Init 0
    // RetValue   6 added: Name <returnValue> Type Ljava/sql/ResultSet; At 0 22 Range 0 21 Init 0 fixed
    public ResultSet toResultSetFromLocator(byte abyte0[], long l, int i, Map map)
        throws SQLException
    {
        return new ArrayLocatorResultSet((oracle.jdbc.driver.OracleConnection)m_conn, this, abyte0, l, i, map);
    }

    // Decompiling method: writeObject  Signature: (Ljava/io/ObjectOutputStream;)V
    // Max stack: 2, #locals: 2, #params: 2
    // Code length: 15 bytes, Code offset: 16064
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/ArrayDescriptor; At 0 15 Range 0 14 Init 0 fixed
    // Parameter  1 added: Name objectoutputstream Type Ljava/io/ObjectOutputStream; At 0 15 Range 0 14 Init 0
    // RetValue   2 added: Name <returnValue> Type V At 0 15 Range 0 14 Init 0 fixed
    private void writeObject(ObjectOutputStream objectoutputstream)
        throws IOException
    {
        if(TypeDescriptor.DEBUG_SERIALIZATION)
        {
            System.out.println("ArrayDescriptor::writeObject");
        }
        return;
    }
}
