home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Notes / 50b2wic.exe / DATA1.CAB / NotesProgramFilesJavaSupport / rt.jar / sun / jdbc / odbc / JdbcOdbcResultSet.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-04-23  |  15.8 KB  |  1,042 lines

  1. package sun.jdbc.odbc;
  2.  
  3. import java.io.InputStream;
  4. import java.math.BigDecimal;
  5. import java.sql.Date;
  6. import java.sql.ResultSetMetaData;
  7. import java.sql.SQLException;
  8. import java.sql.SQLWarning;
  9. import java.sql.Statement;
  10. import java.sql.Time;
  11. import java.sql.Timestamp;
  12. import java.util.Hashtable;
  13.  
  14. public class JdbcOdbcResultSet extends JdbcOdbcObject implements JdbcOdbcResultSetInterface {
  15.    protected JdbcOdbc OdbcApi = null;
  16.    protected int hDbc = 0;
  17.    protected int hStmt = 0;
  18.    protected SQLWarning lastWarning = null;
  19.    protected boolean keepHSTMT = false;
  20.    protected JdbcOdbcBoundCol[] boundCols;
  21.    protected int numberOfCols;
  22.    protected int numResultCols = -1;
  23.    protected int firstPseudoCol;
  24.    protected int lastPseudoCol;
  25.    protected JdbcOdbcPseudoCol[] pseudoCols;
  26.    protected int[] colMappings;
  27.    protected ResultSetMetaData rsmd;
  28.    private Hashtable colNameToNum;
  29.    private Hashtable colNumToName;
  30.    private boolean lastColumnNull = false;
  31.    private boolean closed;
  32.    private int sqlTypeColumn;
  33.    private boolean freed;
  34.    protected Statement ownerStatement;
  35.  
  36.    protected void finalize() {
  37.       if (JdbcOdbcObject.isTracing()) {
  38.          JdbcOdbcObject.trace("ResultSet.finalize " + this);
  39.       }
  40.  
  41.       try {
  42.          this.close();
  43.       } catch (SQLException var1) {
  44.       }
  45.    }
  46.  
  47.    public void initialize(JdbcOdbc var1, int var2, int var3, boolean var4, Statement var5) throws SQLException {
  48.       this.OdbcApi = var1;
  49.       this.hDbc = var2;
  50.       this.hStmt = var3;
  51.       this.keepHSTMT = var4;
  52.       this.numberOfCols = this.getColumnCount();
  53.       this.boundCols = new JdbcOdbcBoundCol[this.numberOfCols];
  54.  
  55.       for(int var6 = 0; var6 < this.numberOfCols; ++var6) {
  56.          this.boundCols[var6] = new JdbcOdbcBoundCol();
  57.       }
  58.  
  59.       this.ownerStatement = var5;
  60.    }
  61.  
  62.    public boolean wasNull() throws SQLException {
  63.       return this.lastColumnNull;
  64.    }
  65.  
  66.    public String getString(int var1) throws SQLException {
  67.       this.clearWarnings();
  68.       this.lastColumnNull = false;
  69.       var1 = this.mapColumn(var1);
  70.       if (this.getPseudoCol(var1) != null) {
  71.          this.lastColumnNull = true;
  72.          return null;
  73.       } else {
  74.          int var2 = this.getMaxCharLen(var1);
  75.          if (var2 == -1) {
  76.             return null;
  77.          } else {
  78.             boolean var3 = true;
  79.             int var4 = this.getColumnType(var1);
  80.             switch (var4) {
  81.                case -1:
  82.                case 1:
  83.                   var3 = false;
  84.                case 0:
  85.             }
  86.  
  87.             ++var2;
  88.             String var5 = this.getDataString(var1, var2, var3);
  89.             if (var5 == null) {
  90.                return var5;
  91.             } else {
  92.                int var6 = var5.length();
  93.                if (var6 == var2 && !var3) {
  94.                   var5 = var5.substring(0, var2 - 1);
  95.                }
  96.  
  97.                if ((var4 == -1 || var4 == -4) && var6 == var2) {
  98.                   String var7 = var5;
  99.  
  100.                   while(var7.length() == JdbcOdbcLimits.MAX_GET_DATA_LENGTH) {
  101.                      var7 = this.getDataString(var1, var2, var3);
  102.                      if (var7 == null) {
  103.                         break;
  104.                      }
  105.  
  106.                      if (JdbcOdbcObject.isTracing()) {
  107.                         JdbcOdbcObject.trace(var7.length() + " byte(s) read");
  108.                      }
  109.  
  110.                      if (var7.length() == var2) {
  111.                         var7 = var7.substring(0, var2 - 1);
  112.                      }
  113.  
  114.                      var5 = var5 + var7;
  115.                      if (JdbcOdbcObject.isTracing()) {
  116.                         JdbcOdbcObject.trace(var5.length() + " bytes total");
  117.                      }
  118.                   }
  119.                }
  120.  
  121.                return var5;
  122.             }
  123.          }
  124.       }
  125.    }
  126.  
  127.    public String getString(String var1) throws SQLException {
  128.       return this.getString(this.findColumn(var1));
  129.    }
  130.  
  131.    public boolean getBoolean(int var1) throws SQLException {
  132.       boolean var2 = false;
  133.       this.clearWarnings();
  134.       this.lastColumnNull = false;
  135.       var1 = this.mapColumn(var1);
  136.       if (this.getPseudoCol(var1) == null) {
  137.          var2 = this.getInt(var1) != 0;
  138.       } else {
  139.          this.lastColumnNull = true;
  140.       }
  141.  
  142.       return var2;
  143.    }
  144.  
  145.    public boolean getBoolean(String var1) throws SQLException {
  146.       return this.getBoolean(this.findColumn(var1));
  147.    }
  148.  
  149.    public byte getByte(int var1) throws SQLException {
  150.       byte var2 = 0;
  151.       this.clearWarnings();
  152.       this.lastColumnNull = false;
  153.       var1 = this.mapColumn(var1);
  154.       if (this.getPseudoCol(var1) == null) {
  155.          var2 = (byte)this.getInt(var1);
  156.       } else {
  157.          this.lastColumnNull = true;
  158.       }
  159.  
  160.       return var2;
  161.    }
  162.  
  163.    public byte getByte(String var1) throws SQLException {
  164.       return this.getByte(this.findColumn(var1));
  165.    }
  166.  
  167.    public short getShort(int var1) throws SQLException {
  168.       short var2 = 0;
  169.       this.clearWarnings();
  170.       this.lastColumnNull = false;
  171.       var1 = this.mapColumn(var1);
  172.       if (this.getPseudoCol(var1) == null) {
  173.          var2 = (short)this.getInt(var1);
  174.       } else {
  175.          this.lastColumnNull = true;
  176.       }
  177.  
  178.       return var2;
  179.    }
  180.  
  181.    public short getShort(String var1) throws SQLException {
  182.       return this.getShort(this.findColumn(var1));
  183.    }
  184.  
  185.    public int getInt(int var1) throws SQLException {
  186.       int var2 = 0;
  187.       this.clearWarnings();
  188.       this.lastColumnNull = false;
  189.       var1 = this.mapColumn(var1);
  190.       if (this.getPseudoCol(var1) == null) {
  191.          Integer var3 = this.getDataInteger(var1);
  192.          if (var3 != null) {
  193.             var2 = var3;
  194.          }
  195.       } else {
  196.          this.lastColumnNull = true;
  197.       }
  198.  
  199.       return var2;
  200.    }
  201.  
  202.    public int getInt(String var1) throws SQLException {
  203.       return this.getInt(this.findColumn(var1));
  204.    }
  205.  
  206.    public long getLong(int var1) throws SQLException {
  207.       long var2 = 0L;
  208.       this.clearWarnings();
  209.       this.lastColumnNull = false;
  210.       var1 = this.mapColumn(var1);
  211.       if (this.getPseudoCol(var1) == null) {
  212.          Double var4 = this.getDataDouble(var1);
  213.          if (var4 != null) {
  214.             var2 = var4.longValue();
  215.          }
  216.       } else {
  217.          this.lastColumnNull = true;
  218.       }
  219.  
  220.       return var2;
  221.    }
  222.  
  223.    public long getLong(String var1) throws SQLException {
  224.       return this.getLong(this.findColumn(var1));
  225.    }
  226.  
  227.    public float getFloat(int var1) throws SQLException {
  228.       float var2 = 0.0F;
  229.       this.clearWarnings();
  230.       this.lastColumnNull = false;
  231.       var1 = this.mapColumn(var1);
  232.       if (this.getPseudoCol(var1) == null) {
  233.          Float var3 = this.getDataFloat(var1);
  234.          if (var3 != null) {
  235.             var2 = var3;
  236.          }
  237.       } else {
  238.          this.lastColumnNull = true;
  239.       }
  240.  
  241.       return var2;
  242.    }
  243.  
  244.    public float getFloat(String var1) throws SQLException {
  245.       return this.getFloat(this.findColumn(var1));
  246.    }
  247.  
  248.    public double getDouble(int var1) throws SQLException {
  249.       double var2 = (double)0.0F;
  250.       this.clearWarnings();
  251.       this.lastColumnNull = false;
  252.       var1 = this.mapColumn(var1);
  253.       if (this.getPseudoCol(var1) == null) {
  254.          Double var4 = this.getDataDouble(var1);
  255.          if (var4 != null) {
  256.             var2 = var4;
  257.          }
  258.       } else {
  259.          this.lastColumnNull = true;
  260.       }
  261.  
  262.       return var2;
  263.    }
  264.  
  265.    public double getDouble(String var1) throws SQLException {
  266.       return this.getDouble(this.findColumn(var1));
  267.    }
  268.  
  269.    public BigDecimal getBigDecimal(int var1, int var2) throws SQLException {
  270.       BigDecimal var3 = null;
  271.       this.clearWarnings();
  272.       this.lastColumnNull = false;
  273.       var1 = this.mapColumn(var1);
  274.       if (this.getPseudoCol(var1) == null) {
  275.          String var4 = this.getDataString(var1, 300, true);
  276.          if (var4 != null) {
  277.             var3 = new BigDecimal(var4);
  278.             var3 = var3.setScale(var2, 6);
  279.          }
  280.       } else {
  281.          this.lastColumnNull = true;
  282.       }
  283.  
  284.       return var3;
  285.    }
  286.  
  287.    public BigDecimal getBigDecimal(String var1, int var2) throws SQLException {
  288.       return this.getBigDecimal(this.findColumn(var1), var2);
  289.    }
  290.  
  291.    public synchronized byte[] getBytes(int var1) throws SQLException {
  292.       this.clearWarnings();
  293.       this.lastColumnNull = false;
  294.       var1 = this.mapColumn(var1);
  295.       if (this.getPseudoCol(var1) != null) {
  296.          this.lastColumnNull = true;
  297.          return null;
  298.       } else {
  299.          int var2 = this.getMaxBinaryLen(var1);
  300.          if (var2 == -1) {
  301.             return null;
  302.          } else {
  303.             int var3 = this.getColumnType(var1);
  304.             byte[] var4 = new byte[var2];
  305.  
  306.             int var5;
  307.             try {
  308.                var5 = this.OdbcApi.SQLGetDataBinary(this.hStmt, var1, var4);
  309.             } catch (JdbcOdbcSQLWarning var13) {
  310.                Integer var7 = (Integer)var13.value;
  311.                var5 = var7;
  312.             }
  313.  
  314.             if (var5 == -1) {
  315.                this.lastColumnNull = true;
  316.                var4 = null;
  317.             }
  318.  
  319.             if (var3 != -2 && var5 != var2) {
  320.                byte[] var17 = new byte[var5];
  321.                System.arraycopy(var4, 0, var17, 0, var5);
  322.                return var17;
  323.             } else if (var5 < JdbcOdbcLimits.MAX_GET_DATA_LENGTH) {
  324.                return var4;
  325.             } else {
  326.                Hashtable var6 = new Hashtable();
  327.                int var18 = 0;
  328.                int var8 = 0;
  329.  
  330.                while(var5 != -1) {
  331.                   var8 += var5;
  332.                   var6.put(new Integer(var18++), var4);
  333.  
  334.                   try {
  335.                      var5 = this.OdbcApi.SQLGetDataBinary(this.hStmt, var1, var4);
  336.                   } catch (JdbcOdbcSQLWarning var12) {
  337.                      Integer var10 = (Integer)var12.value;
  338.                      var5 = var10;
  339.                   }
  340.                }
  341.  
  342.                if (JdbcOdbcObject.isTracing()) {
  343.                   JdbcOdbcObject.trace("Total bytes read: " + var8 + ".  Creating buffer");
  344.                }
  345.  
  346.                byte[] var9 = new byte[var8];
  347.                int var19 = 0;
  348.  
  349.                for(int var11 = 0; var11 < var18; ++var11) {
  350.                   var4 = (byte[])var6.get(new Integer(var11));
  351.                   var5 = var8;
  352.                   if (var8 > JdbcOdbcLimits.MAX_GET_DATA_LENGTH) {
  353.                      var5 = JdbcOdbcLimits.MAX_GET_DATA_LENGTH;
  354.                   }
  355.  
  356.                   var8 -= var5;
  357.                   System.arraycopy(var4, 0, var9, var19, var5);
  358.                   var19 += var5;
  359.                }
  360.  
  361.                return var9;
  362.             }
  363.          }
  364.       }
  365.    }
  366.  
  367.    public byte[] getBytes(String var1) throws SQLException {
  368.       return this.getBytes(this.findColumn(var1));
  369.    }
  370.  
  371.    public Date getDate(int var1) throws SQLException {
  372.       this.clearWarnings();
  373.       this.lastColumnNull = false;
  374.       var1 = this.mapColumn(var1);
  375.       if (this.getPseudoCol(var1) != null) {
  376.          this.lastColumnNull = true;
  377.          return null;
  378.       } else {
  379.          String var2 = this.getDataStringDate(var1);
  380.          return var2 == null ? null : Date.valueOf(var2);
  381.       }
  382.    }
  383.  
  384.    public Date getDate(String var1) throws SQLException {
  385.       return this.getDate(this.findColumn(var1));
  386.    }
  387.  
  388.    public Time getTime(int var1) throws SQLException {
  389.       this.clearWarnings();
  390.       this.lastColumnNull = false;
  391.       var1 = this.mapColumn(var1);
  392.       if (this.getPseudoCol(var1) != null) {
  393.          this.lastColumnNull = true;
  394.          return null;
  395.       } else {
  396.          String var2 = this.getDataStringTime(var1);
  397.          return var2 == null ? null : Time.valueOf(var2);
  398.       }
  399.    }
  400.  
  401.    public Time getTime(String var1) throws SQLException {
  402.       return this.getTime(this.findColumn(var1));
  403.    }
  404.  
  405.    public Timestamp getTimestamp(int var1) throws SQLException {
  406.       this.clearWarnings();
  407.       this.lastColumnNull = false;
  408.       var1 = this.mapColumn(var1);
  409.       if (this.getPseudoCol(var1) != null) {
  410.          this.lastColumnNull = true;
  411.          return null;
  412.       } else {
  413.          String var2 = this.getDataStringTimestamp(var1);
  414.          if (var2 == null) {
  415.             return null;
  416.          } else {
  417.             if (var2.length() == 10) {
  418.                var2 = var2 + " 00:00:00";
  419.             }
  420.  
  421.             return Timestamp.valueOf(var2);
  422.          }
  423.       }
  424.    }
  425.  
  426.    public Timestamp getTimestamp(String var1) throws SQLException {
  427.       return this.getTimestamp(this.findColumn(var1));
  428.    }
  429.  
  430.    public InputStream getAsciiStream(int var1) throws SQLException {
  431.       this.clearWarnings();
  432.       this.lastColumnNull = false;
  433.       var1 = this.mapColumn(var1);
  434.       int var2 = this.getColumnType(var1);
  435.       byte var3 = -2;
  436.       switch (var2) {
  437.          case -1:
  438.          case 1:
  439.          case 12:
  440.             var3 = 1;
  441.          default:
  442.             JdbcOdbcInputStream var4 = new JdbcOdbcInputStream(this.OdbcApi, this.hStmt, var1, (short)1, var3, this.ownerStatement);
  443.             this.setInputStream(var1, var4);
  444.             return var4;
  445.       }
  446.    }
  447.  
  448.    public InputStream getAsciiStream(String var1) throws SQLException {
  449.       return this.getAsciiStream(this.findColumn(var1));
  450.    }
  451.  
  452.    public InputStream getUnicodeStream(int var1) throws SQLException {
  453.       this.clearWarnings();
  454.       this.lastColumnNull = false;
  455.       var1 = this.mapColumn(var1);
  456.       int var2 = this.getColumnType(var1);
  457.       byte var3 = -2;
  458.       switch (var2) {
  459.          case -1:
  460.          case 1:
  461.          case 12:
  462.             var3 = 1;
  463.          default:
  464.             JdbcOdbcInputStream var4 = new JdbcOdbcInputStream(this.OdbcApi, this.hStmt, var1, (short)2, var3, this.ownerStatement);
  465.             this.setInputStream(var1, var4);
  466.             return var4;
  467.       }
  468.    }
  469.  
  470.    public InputStream getUnicodeStream(String var1) throws SQLException {
  471.       return this.getUnicodeStream(this.findColumn(var1));
  472.    }
  473.  
  474.    public InputStream getBinaryStream(int var1) throws SQLException {
  475.       this.clearWarnings();
  476.       this.lastColumnNull = false;
  477.       var1 = this.mapColumn(var1);
  478.       int var2 = this.getColumnType(var1);
  479.       byte var3 = -2;
  480.       switch (var2) {
  481.          case -1:
  482.          case 1:
  483.          case 12:
  484.             var3 = 1;
  485.          default:
  486.             JdbcOdbcInputStream var4 = new JdbcOdbcInputStream(this.OdbcApi, this.hStmt, var1, (short)3, var3, this.ownerStatement);
  487.             this.setInputStream(var1, var4);
  488.             return var4;
  489.       }
  490.    }
  491.  
  492.    public InputStream getBinaryStream(String var1) throws SQLException {
  493.       return this.getBinaryStream(this.findColumn(var1));
  494.    }
  495.  
  496.    public boolean next() throws SQLException {
  497.       boolean var1 = true;
  498.       this.lastColumnNull = false;
  499.       this.closeInputStreams();
  500.       this.clearWarnings();
  501.  
  502.       try {
  503.          var1 = this.OdbcApi.SQLFetch(this.hStmt);
  504.       } catch (SQLWarning var3) {
  505.          this.setWarning(var3);
  506.       }
  507.  
  508.       return var1;
  509.    }
  510.  
  511.    public int getRowNumber() throws SQLException {
  512.       int var1 = 0;
  513.       this.clearWarnings();
  514.  
  515.       try {
  516.          var1 = this.OdbcApi.SQLGetStmtOption(this.hStmt, (short)14);
  517.       } catch (JdbcOdbcSQLWarning var4) {
  518.          BigDecimal var3 = (BigDecimal)var4.value;
  519.          var1 = var3.intValue();
  520.          this.setWarning(JdbcOdbc.convertWarning(var4));
  521.       }
  522.  
  523.       return var1;
  524.    }
  525.  
  526.    public int getColumnCount() throws SQLException {
  527.       int var1 = 0;
  528.       this.clearWarnings();
  529.       if (this.lastPseudoCol > 0) {
  530.          return this.lastPseudoCol;
  531.       } else if (this.colMappings != null) {
  532.          return this.colMappings.length;
  533.       } else {
  534.          try {
  535.             if (this.numResultCols == -1) {
  536.                this.numResultCols = this.OdbcApi.SQLNumResultCols(this.hStmt);
  537.             }
  538.  
  539.             var1 = this.numResultCols;
  540.          } catch (JdbcOdbcSQLWarning var4) {
  541.             BigDecimal var3 = (BigDecimal)var4.value;
  542.             var1 = var3.intValue();
  543.             this.setWarning(JdbcOdbc.convertWarning(var4));
  544.          }
  545.  
  546.          return var1;
  547.       }
  548.    }
  549.  
  550.    public int getRowCount() throws SQLException {
  551.       int var1 = 0;
  552.       this.clearWarnings();
  553.  
  554.       try {
  555.          var1 = this.OdbcApi.SQLRowCount(this.hStmt);
  556.       } catch (JdbcOdbcSQLWarning var4) {
  557.          BigDecimal var3 = (BigDecimal)var4.value;
  558.          var1 = var3.intValue();
  559.          this.setWarning(JdbcOdbc.convertWarning(var4));
  560.       }
  561.  
  562.       return var1;
  563.    }
  564.  
  565.    public synchronized void close() throws SQLException {
  566.       this.closeInputStreams();
  567.       this.clearWarnings();
  568.       this.lastColumnNull = false;
  569.       if (this.OdbcApi != null && this.hStmt != 0) {
  570.          if (this.keepHSTMT) {
  571.             if (!this.freed) {
  572.                this.OdbcApi.SQLFreeStmt(this.hStmt, 0);
  573.                this.freed = true;
  574.             }
  575.          } else {
  576.             this.OdbcApi.SQLFreeStmt(this.hStmt, 1);
  577.             this.hStmt = 0;
  578.          }
  579.  
  580.          this.closed = true;
  581.       }
  582.  
  583.    }
  584.  
  585.    public String getCursorName() throws SQLException {
  586.       String var1 = "";
  587.       this.clearWarnings();
  588.  
  589.       try {
  590.          var1 = this.OdbcApi.SQLGetCursorName(this.hStmt);
  591.       } catch (JdbcOdbcSQLWarning var3) {
  592.          var1 = (String)var3.value;
  593.          this.setWarning(JdbcOdbc.convertWarning(var3));
  594.       }
  595.  
  596.       return var1.trim();
  597.    }
  598.  
  599.    public ResultSetMetaData getMetaData() throws SQLException {
  600.       if (JdbcOdbcObject.isTracing()) {
  601.          JdbcOdbcObject.trace("*ResultSet.getMetaData");
  602.       }
  603.  
  604.       if (this.closed) {
  605.          throw new SQLException("ResultSet is closed");
  606.       } else {
  607.          return new JdbcOdbcResultSetMetaData(this.OdbcApi, this);
  608.       }
  609.    }
  610.  
  611.    public Object getObject(int var1) throws SQLException {
  612.       Object var2 = null;
  613.       int var3 = this.getColumnType(var1);
  614.       int var4 = var1;
  615.       this.clearWarnings();
  616.       this.lastColumnNull = false;
  617.       var1 = this.mapColumn(var1);
  618.       if (this.getPseudoCol(var1) != null) {
  619.          this.lastColumnNull = true;
  620.          return null;
  621.       } else {
  622.          switch (var3) {
  623.             case -7:
  624.                var2 = new Boolean(this.getBoolean(var1));
  625.                break;
  626.             case -6:
  627.             case 4:
  628.             case 5:
  629.                var2 = new Integer(this.getInt(var1));
  630.                break;
  631.             case -5:
  632.                var2 = new Long(this.getLong(var1));
  633.                break;
  634.             case -4:
  635.             case -3:
  636.             case -2:
  637.                var2 = this.getBytes(var1);
  638.                break;
  639.             case -1:
  640.             case 1:
  641.             case 12:
  642.                var2 = this.getString(var1);
  643.                break;
  644.             case 2:
  645.             case 3:
  646.                var2 = this.getBigDecimal(var1, this.getScale(var4));
  647.                break;
  648.             case 6:
  649.             case 8:
  650.                var2 = new Double(this.getDouble(var1));
  651.                break;
  652.             case 7:
  653.                var2 = new Float(this.getFloat(var1));
  654.                break;
  655.             case 91:
  656.                var2 = this.getDate(var1);
  657.                break;
  658.             case 92:
  659.                var2 = this.getTime(var1);
  660.                break;
  661.             case 93:
  662.                var2 = this.getTimestamp(var1);
  663.          }
  664.  
  665.          if (this.wasNull()) {
  666.             var2 = null;
  667.          }
  668.  
  669.          return var2;
  670.       }
  671.    }
  672.  
  673.    public Object getObject(String var1) throws SQLException {
  674.       return this.getObject(this.findColumn(var1));
  675.    }
  676.  
  677.    public SQLWarning getWarnings() throws SQLException {
  678.       return this.lastWarning;
  679.    }
  680.  
  681.    public void clearWarnings() throws SQLException {
  682.       this.lastWarning = null;
  683.    }
  684.  
  685.    public void setWarning(SQLWarning var1) throws SQLException {
  686.       this.lastWarning = var1;
  687.    }
  688.  
  689.    public int getHSTMT() {
  690.       return this.hStmt;
  691.    }
  692.  
  693.    public synchronized int findColumn(String var1) throws SQLException {
  694.       if (this.rsmd == null) {
  695.          this.rsmd = this.getMetaData();
  696.          this.colNameToNum = new Hashtable();
  697.          this.colNumToName = new Hashtable();
  698.       }
  699.  
  700.       Integer var2 = (Integer)this.colNameToNum.get(var1);
  701.       if (var2 == null) {
  702.          for(int var4 = 1; var4 <= this.rsmd.getColumnCount(); ++var4) {
  703.             String var3 = (String)this.colNumToName.get(new Integer(var4));
  704.             if (var3 == null) {
  705.                var3 = this.rsmd.getColumnName(var4);
  706.                this.colNameToNum.put(var3, new Integer(var4));
  707.                this.colNumToName.put(new Integer(var4), var3);
  708.             }
  709.  
  710.             if (var3.equalsIgnoreCase(var1)) {
  711.                return var4;
  712.             }
  713.          }
  714.  
  715.          throw new SQLException("Column not found", "S0022");
  716.       } else {
  717.          return var2;
  718.       }
  719.    }
  720.  
  721.    public int getColAttribute(int var1, int var2) throws SQLException {
  722.       int var3 = 0;
  723.       this.clearWarnings();
  724.  
  725.       try {
  726.          var3 = this.OdbcApi.SQLColAttributes(this.hStmt, var1, var2);
  727.       } catch (JdbcOdbcSQLWarning var6) {
  728.          BigDecimal var5 = (BigDecimal)var6.value;
  729.          var3 = var5.intValue();
  730.          this.setWarning(JdbcOdbc.convertWarning(var6));
  731.       }
  732.  
  733.       return var3;
  734.    }
  735.  
  736.    protected int getMaxCharLen(int var1) throws SQLException {
  737.       int var2 = this.getColumnType(var1);
  738.       int var3 = this.getColumnLength(var1);
  739.       if (var3 != -1) {
  740.          switch (var2) {
  741.             case -7:
  742.                var3 = 1;
  743.                break;
  744.             case -6:
  745.                var3 = 4;
  746.                break;
  747.             case -5:
  748.                var3 = 20;
  749.                break;
  750.             case -4:
  751.             case -3:
  752.             case -2:
  753.                var3 *= 2;
  754.                break;
  755.             case 2:
  756.             case 3:
  757.                var3 += 2;
  758.                break;
  759.             case 4:
  760.                var3 = 11;
  761.                break;
  762.             case 5:
  763.                var3 = 6;
  764.                break;
  765.             case 6:
  766.             case 8:
  767.                var3 = 22;
  768.                break;
  769.             case 7:
  770.                var3 = 13;
  771.                break;
  772.             case 91:
  773.                var3 = 10;
  774.                break;
  775.             case 92:
  776.                var3 = 8;
  777.                break;
  778.             case 93:
  779.                var3 = 29;
  780.          }
  781.  
  782.          if (var3 <= 0 || var3 > JdbcOdbcLimits.MAX_GET_DATA_LENGTH) {
  783.             var3 = JdbcOdbcLimits.MAX_GET_DATA_LENGTH;
  784.          }
  785.       }
  786.  
  787.       return var3;
  788.    }
  789.  
  790.    protected int getMaxBinaryLen(int var1) throws SQLException {
  791.       int var2 = this.getColumnLength(var1);
  792.       if (var2 != -1 && (var2 <= 0 || var2 > JdbcOdbcLimits.MAX_GET_DATA_LENGTH)) {
  793.          var2 = JdbcOdbcLimits.MAX_GET_DATA_LENGTH;
  794.       }
  795.  
  796.       return var2;
  797.    }
  798.  
  799.    public Double getDataDouble(int var1) throws SQLException {
  800.       this.lastColumnNull = false;
  801.  
  802.       Double var2;
  803.       try {
  804.          var2 = this.OdbcApi.SQLGetDataDouble(this.hStmt, var1);
  805.       } catch (JdbcOdbcSQLWarning var4) {
  806.          var2 = (Double)var4.value;
  807.          this.setWarning(JdbcOdbc.convertWarning(var4));
  808.       }
  809.  
  810.       if (var2 == null) {
  811.          this.lastColumnNull = true;
  812.       }
  813.  
  814.       return var2;
  815.    }
  816.  
  817.    public Float getDataFloat(int var1) throws SQLException {
  818.       this.lastColumnNull = false;
  819.  
  820.       Float var2;
  821.       try {
  822.          var2 = this.OdbcApi.SQLGetDataFloat(this.hStmt, var1);
  823.       } catch (JdbcOdbcSQLWarning var4) {
  824.          var2 = (Float)var4.value;
  825.          this.setWarning(JdbcOdbc.convertWarning(var4));
  826.       }
  827.  
  828.       if (var2 == null) {
  829.          this.lastColumnNull = true;
  830.       }
  831.  
  832.       return var2;
  833.    }
  834.  
  835.    public Integer getDataInteger(int var1) throws SQLException {
  836.       this.lastColumnNull = false;
  837.  
  838.       Integer var2;
  839.       try {
  840.          var2 = this.OdbcApi.SQLGetDataInteger(this.hStmt, var1);
  841.       } catch (JdbcOdbcSQLWarning var4) {
  842.          var2 = (Integer)var4.value;
  843.          this.setWarning(JdbcOdbc.convertWarning(var4));
  844.       }
  845.  
  846.       if (var2 == null) {
  847.          this.lastColumnNull = true;
  848.       } else if (var1 == this.sqlTypeColumn) {
  849.          var2 = new Integer(OdbcDef.odbcTypeToJdbc(var2));
  850.       }
  851.  
  852.       return var2;
  853.    }
  854.  
  855.    public Long getDataLong(int var1) throws SQLException {
  856.       Long var2 = null;
  857.       Double var3 = this.getDataDouble(var1);
  858.       if (var3 != null) {
  859.          var2 = new Long(var3.longValue());
  860.       }
  861.  
  862.       return var2;
  863.    }
  864.  
  865.    public String getDataString(int var1, int var2, boolean var3) throws SQLException {
  866.       this.lastColumnNull = false;
  867.  
  868.       String var4;
  869.       try {
  870.          var4 = this.OdbcApi.SQLGetDataString(this.hStmt, var1, var2, var3);
  871.       } catch (JdbcOdbcSQLWarning var7) {
  872.          var4 = (String)var7.value;
  873.          this.setWarning(JdbcOdbc.convertWarning(var7));
  874.       }
  875.  
  876.       if (var4 == null) {
  877.          this.lastColumnNull = true;
  878.       } else if (var1 == this.sqlTypeColumn) {
  879.          try {
  880.             int var5 = OdbcDef.odbcTypeToJdbc(Integer.valueOf(var4));
  881.             var4 = String.valueOf(var5);
  882.          } catch (Exception var6) {
  883.          }
  884.       }
  885.  
  886.       return var4;
  887.    }
  888.  
  889.    public String getDataStringDate(int var1) throws SQLException {
  890.       this.lastColumnNull = false;
  891.  
  892.       String var2;
  893.       try {
  894.          var2 = this.OdbcApi.SQLGetDataStringDate(this.hStmt, var1);
  895.       } catch (JdbcOdbcSQLWarning var4) {
  896.          var2 = (String)var4.value;
  897.          this.setWarning(JdbcOdbc.convertWarning(var4));
  898.       }
  899.  
  900.       if (var2 == null) {
  901.          this.lastColumnNull = true;
  902.       }
  903.  
  904.       return var2;
  905.    }
  906.  
  907.    public String getDataStringTime(int var1) throws SQLException {
  908.       this.lastColumnNull = false;
  909.  
  910.       String var2;
  911.       try {
  912.          var2 = this.OdbcApi.SQLGetDataStringTime(this.hStmt, var1);
  913.       } catch (JdbcOdbcSQLWarning var4) {
  914.          var2 = (String)var4.value;
  915.          this.setWarning(JdbcOdbc.convertWarning(var4));
  916.       }
  917.  
  918.       if (var2 == null) {
  919.          this.lastColumnNull = true;
  920.       }
  921.  
  922.       return var2;
  923.    }
  924.  
  925.    public String getDataStringTimestamp(int var1) throws SQLException {
  926.       this.lastColumnNull = false;
  927.  
  928.       String var2;
  929.       try {
  930.          var2 = this.OdbcApi.SQLGetDataStringTimestamp(this.hStmt, var1);
  931.       } catch (JdbcOdbcSQLWarning var4) {
  932.          var2 = (String)var4.value;
  933.          this.setWarning(JdbcOdbc.convertWarning(var4));
  934.       }
  935.  
  936.       if (var2 == null) {
  937.          this.lastColumnNull = true;
  938.       }
  939.  
  940.       return var2;
  941.    }
  942.  
  943.    public int getColumnLength(int var1) throws SQLException {
  944.       int var2 = -1;
  945.       if (var1 > 0 && var1 <= this.numberOfCols) {
  946.          var2 = this.boundCols[var1 - 1].getLength();
  947.       }
  948.  
  949.       if (var2 == -1) {
  950.          var2 = this.getColAttribute(var1, 3);
  951.          if (var1 > 0 && var1 <= this.numberOfCols) {
  952.             this.boundCols[var1 - 1].setLength(var2);
  953.          }
  954.       }
  955.  
  956.       return var2;
  957.    }
  958.  
  959.    public int getScale(int var1) throws SQLException {
  960.       int var2;
  961.       if (this.getPseudoCol(var1) != null) {
  962.          this.lastColumnNull = true;
  963.          var2 = 0;
  964.       } else {
  965.          var2 = this.getColAttribute(var1, 5);
  966.       }
  967.  
  968.       return var2;
  969.    }
  970.  
  971.    public int getColumnType(int var1) throws SQLException {
  972.       int var2 = 9999;
  973.       if (var1 > 0 && var1 <= this.numberOfCols) {
  974.          var2 = this.boundCols[var1 - 1].getType();
  975.       }
  976.  
  977.       if (var2 == 9999) {
  978.          var2 = this.getColAttribute(var1, 2);
  979.          var2 = OdbcDef.odbcTypeToJdbc(var2);
  980.          if (var1 > 0 && var1 <= this.numberOfCols) {
  981.             this.boundCols[var1 - 1].setType(var2);
  982.          }
  983.       }
  984.  
  985.       return var2;
  986.    }
  987.  
  988.    public void setPseudoCols(int var1, int var2, JdbcOdbcPseudoCol[] var3) {
  989.       if (JdbcOdbcObject.isTracing()) {
  990.          JdbcOdbcObject.trace("Setting pseudo columns, first=" + var1 + ", last=" + var2);
  991.       }
  992.  
  993.       this.firstPseudoCol = var1;
  994.       this.lastPseudoCol = var2;
  995.       this.pseudoCols = var3;
  996.    }
  997.  
  998.    public JdbcOdbcPseudoCol getPseudoCol(int var1) {
  999.       JdbcOdbcPseudoCol var2 = null;
  1000.       if (var1 > 0 && var1 >= this.firstPseudoCol && var1 <= this.lastPseudoCol) {
  1001.          var2 = this.pseudoCols[var1 - this.firstPseudoCol];
  1002.       }
  1003.  
  1004.       return var2;
  1005.    }
  1006.  
  1007.    public void setSQLTypeColumn(int var1) {
  1008.       this.sqlTypeColumn = var1;
  1009.    }
  1010.  
  1011.    protected void setInputStream(int var1, JdbcOdbcInputStream var2) {
  1012.       if (var1 > 0 && var1 <= this.numberOfCols) {
  1013.          this.boundCols[var1 - 1].setInputStream(var2);
  1014.       }
  1015.  
  1016.    }
  1017.  
  1018.    protected void closeInputStreams() {
  1019.       for(int var1 = 0; var1 < this.numberOfCols; ++var1) {
  1020.          this.boundCols[var1].closeInputStream();
  1021.       }
  1022.  
  1023.    }
  1024.  
  1025.    public void setColumnMappings(int[] var1) {
  1026.       this.colMappings = var1;
  1027.    }
  1028.  
  1029.    public int mapColumn(int var1) {
  1030.       int var2 = var1;
  1031.       if (this.colMappings != null) {
  1032.          if (var1 > 0 && var1 <= this.colMappings.length) {
  1033.             var2 = this.colMappings[var1 - 1];
  1034.          } else {
  1035.             var2 = -1;
  1036.          }
  1037.       }
  1038.  
  1039.       return var2;
  1040.    }
  1041. }
  1042.