home *** CD-ROM | disk | FTP | other *** search
- package sun.jdbc.odbc;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.math.BigDecimal;
- import java.sql.Date;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.SQLWarning;
- import java.sql.Time;
- import java.sql.Timestamp;
- import java.util.Hashtable;
-
- public class JdbcOdbcPreparedStatement extends JdbcOdbcStatement implements PreparedStatement {
- protected int numParams;
- protected JdbcOdbcBoundParam[] boundParams;
-
- public JdbcOdbcPreparedStatement(JdbcOdbcConnectionInterface var1) {
- super(var1);
- }
-
- public void initialize(JdbcOdbc var1, int var2) throws SQLException {
- super.initialize(var1, var2);
- this.initBoundParam();
- }
-
- public void initialize(JdbcOdbc var1, int var2, int var3, Hashtable var4) throws SQLException {
- super.initialize(var1, var2, var3, var4);
- this.initBoundParam();
- }
-
- public ResultSet executeQuery() throws SQLException {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("*PreparedStatement.executeQuery");
- }
-
- Object var1 = null;
- if (this.execute()) {
- ResultSet var2 = ((JdbcOdbcStatement)this).getResultSet(false);
- return var2;
- } else {
- throw new SQLException("No ResultSet was produced");
- }
- }
-
- public ResultSet executeQuery(String var1) throws SQLException {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("*PreparedStatement.executeQuery (" + var1 + ")");
- }
-
- throw new SQLException("Driver does not support this function", "IM001");
- }
-
- public int executeUpdate() throws SQLException {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("*PreparedStatement.executeUpdate");
- }
-
- int var1 = -1;
- if (!this.execute()) {
- var1 = ((JdbcOdbcStatement)this).getUpdateCount();
- return var1;
- } else {
- throw new SQLException("No row count was produced");
- }
- }
-
- public int executeUpdate(String var1) throws SQLException {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("*PreparedStatement.executeUpdate (" + var1 + ")");
- }
-
- throw new SQLException("Driver does not support this function", "IM001");
- }
-
- public synchronized boolean execute() throws SQLException {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("*PreparedStatement.execute");
- }
-
- boolean var1 = false;
- Object var2 = null;
- boolean var3 = false;
- ((JdbcOdbcStatement)this).clearWarnings();
-
- try {
- var3 = super.OdbcApi.SQLExecute(super.hStmt);
-
- while(var3) {
- int var4 = super.OdbcApi.SQLParamData(super.hStmt);
- if (var4 == -1) {
- var3 = false;
- } else {
- this.putParamData(var4);
- }
- }
- } catch (SQLWarning var5) {
- }
-
- while(var3) {
- int var6 = super.OdbcApi.SQLParamData(super.hStmt);
- if (var6 == -1) {
- var3 = false;
- } else {
- this.putParamData(var6);
- }
- }
-
- if (((JdbcOdbcStatement)this).getColumnCount() > 0) {
- var1 = true;
- }
-
- return var1;
- }
-
- public void setNull(int var1, int var2) throws SQLException {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("*PreparedStatement.setNull (" + var1 + "," + var2 + ")");
- }
-
- byte[] var3 = this.getLengthBuf(var1);
- super.OdbcApi.SQLBindInParameterNull(super.hStmt, var1, var2, var3);
- }
-
- public void setBoolean(int var1, boolean var2) throws SQLException {
- byte var3 = 0;
- if (var2) {
- var3 = 1;
- }
-
- this.setInt(var1, var3);
- }
-
- public void setByte(int var1, byte var2) throws SQLException {
- byte[] var3 = this.allocBindBuf(var1, 4);
- super.OdbcApi.SQLBindInParameterInteger(super.hStmt, var1, -6, var2, var3);
- }
-
- public void setShort(int var1, short var2) throws SQLException {
- byte[] var3 = this.allocBindBuf(var1, 4);
- super.OdbcApi.SQLBindInParameterInteger(super.hStmt, var1, 5, var2, var3);
- }
-
- public void setInt(int var1, int var2) throws SQLException {
- byte[] var3 = this.allocBindBuf(var1, 4);
- super.OdbcApi.SQLBindInParameterInteger(super.hStmt, var1, 4, var2, var3);
- }
-
- public void setLong(int var1, long var2) throws SQLException {
- byte[] var4 = this.allocBindBuf(var1, 8);
- super.OdbcApi.SQLBindInParameterFloat(super.hStmt, var1, -5, 0, (float)var2, var4);
- }
-
- public void setReal(int var1, float var2) throws SQLException {
- byte[] var3 = this.allocBindBuf(var1, 8);
- super.OdbcApi.SQLBindInParameterFloat(super.hStmt, var1, 7, 0, var2, var3);
- }
-
- public void setFloat(int var1, float var2) throws SQLException {
- byte[] var3 = this.allocBindBuf(var1, 8);
- super.OdbcApi.SQLBindInParameterFloat(super.hStmt, var1, 6, 0, var2, var3);
- }
-
- public void setDouble(int var1, double var2) throws SQLException {
- byte[] var4 = this.allocBindBuf(var1, 8);
- super.OdbcApi.SQLBindInParameterDouble(super.hStmt, var1, 8, 0, var2, var4);
- }
-
- public void setBigDecimal(int var1, BigDecimal var2) throws SQLException {
- this.setChar(var1, 2, var2.scale(), var2.toString());
- }
-
- public void setDecimal(int var1, BigDecimal var2) throws SQLException {
- this.setChar(var1, 1, 0, var2.toString());
- }
-
- public void setString(int var1, String var2) throws SQLException {
- this.setChar(var1, 1, 0, var2);
- }
-
- public void setBytes(int var1, byte[] var2) throws SQLException {
- this.setBinary(var1, -2, var2);
- }
-
- public void setDate(int var1, Date var2) throws SQLException {
- byte[] var3 = this.allocBindBuf(var1, 32);
- super.OdbcApi.SQLBindInParameterDate(super.hStmt, var1, var2, var3);
- }
-
- public void setTime(int var1, Time var2) throws SQLException {
- byte[] var3 = this.allocBindBuf(var1, 32);
- super.OdbcApi.SQLBindInParameterTime(super.hStmt, var1, var2, var3);
- }
-
- public void setTimestamp(int var1, Timestamp var2) throws SQLException {
- byte[] var3 = this.allocBindBuf(var1, 32);
- super.OdbcApi.SQLBindInParameterTimestamp(super.hStmt, var1, var2, var3);
- }
-
- public void setAsciiStream(int var1, InputStream var2, int var3) throws SQLException {
- this.setStream(var1, var2, var3, -1, 1);
- }
-
- public void setUnicodeStream(int var1, InputStream var2, int var3) throws SQLException {
- this.setStream(var1, var2, var3, -1, 2);
- }
-
- public void setBinaryStream(int var1, InputStream var2, int var3) throws SQLException {
- this.setStream(var1, var2, var3, -4, 3);
- }
-
- public void clearParameters() throws SQLException {
- super.OdbcApi.SQLFreeStmt(super.hStmt, 3);
- }
-
- public void setObject(int var1, Object var2) throws SQLException {
- this.setObject(var1, var2, getTypeFromObject(var2));
- }
-
- public void setObject(int var1, Object var2, int var3) throws SQLException {
- this.setObject(var1, var2, var3, 0);
- }
-
- public void setObject(int var1, Object var2, int var3, int var4) throws SQLException {
- switch (var3) {
- case -7:
- this.setBoolean(var1, (Boolean)var2);
- return;
- case -6:
- this.setByte(var1, (byte)(Integer)var2);
- return;
- case -5:
- this.setLong(var1, ((Integer)var2).longValue());
- return;
- case -4:
- this.setBinary(var1, var3, (byte[])var2);
- return;
- case -3:
- this.setBinary(var1, var3, (byte[])var2);
- return;
- case -2:
- this.setBytes(var1, (byte[])var2);
- return;
- case -1:
- this.setChar(var1, var3, 0, (String)var2);
- return;
- case 1:
- this.setString(var1, (String)var2);
- return;
- case 2:
- this.setBigDecimal(var1, (BigDecimal)var2);
- return;
- case 3:
- this.setDecimal(var1, (BigDecimal)var2);
- return;
- case 4:
- this.setInt(var1, (Integer)var2);
- return;
- case 5:
- this.setShort(var1, (short)(Integer)var2);
- return;
- case 6:
- this.setFloat(var1, (Float)var2);
- return;
- case 7:
- this.setReal(var1, (Float)var2);
- return;
- case 8:
- this.setDouble(var1, (Double)var2);
- return;
- case 12:
- this.setChar(var1, var3, 0, (String)var2);
- return;
- case 91:
- this.setDate(var1, (Date)var2);
- return;
- case 92:
- this.setTime(var1, (Time)var2);
- return;
- case 93:
- this.setTimestamp(var1, (Timestamp)var2);
- return;
- default:
- throw new SQLException("Unknown SQL Type for PreparedStatement.setObject (SQL Type=" + var3);
- }
- }
-
- protected void initBoundParam() throws SQLException {
- this.numParams = super.OdbcApi.SQLNumParams(super.hStmt);
- if (this.numParams > 0) {
- this.boundParams = new JdbcOdbcBoundParam[this.numParams];
-
- for(int var1 = 0; var1 < this.numParams; ++var1) {
- this.boundParams[var1] = new JdbcOdbcBoundParam();
- this.boundParams[var1].initialize();
- }
- }
-
- }
-
- protected byte[] allocBindBuf(int var1, int var2) {
- byte[] var3 = null;
- if (var1 >= 1 && var1 <= this.numParams) {
- var3 = this.boundParams[var1 - 1].allocBindDataBuffer(var2);
- }
-
- return var3;
- }
-
- protected byte[] getDataBuf(int var1) {
- byte[] var2 = null;
- if (var1 >= 1 && var1 <= this.numParams) {
- var2 = this.boundParams[var1 - 1].getBindDataBuffer();
- }
-
- return var2;
- }
-
- protected byte[] getLengthBuf(int var1) {
- byte[] var2 = null;
- if (var1 >= 1 && var1 <= this.numParams) {
- var2 = this.boundParams[var1 - 1].getBindLengthBuffer();
- }
-
- return var2;
- }
-
- public int getParamLength(int var1) {
- int var2 = -1;
- if (var1 >= 1 && var1 <= this.numParams) {
- var2 = super.OdbcApi.bufferToInt(this.boundParams[var1 - 1].getBindLengthBuffer());
- }
-
- return var2;
- }
-
- protected void putParamData(int var1) throws SQLException, JdbcOdbcSQLWarning {
- int var2 = JdbcOdbcLimits.MAX_PUT_DATA_LENGTH;
- byte[] var5 = new byte[var2];
- boolean var6 = false;
- if (var1 >= 1 && var1 <= this.numParams) {
- InputStream var7 = this.boundParams[var1 - 1].getInputStream();
- int var8 = this.boundParams[var1 - 1].getInputStreamLen();
- int var9 = this.boundParams[var1 - 1].getStreamType();
-
- while(!var6) {
- int var3;
- try {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("Reading from input stream");
- }
-
- var3 = var7.read(var5);
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("Bytes read: " + var3);
- }
- } catch (IOException var11) {
- throw new SQLException(((Throwable)var11).getMessage());
- }
-
- if (var3 == -1) {
- if (var8 != 0) {
- throw new SQLException("End of InputStream reached before satisfying length specified when InputStream was set");
- }
-
- var6 = true;
- return;
- }
-
- if (var3 > var8) {
- var3 = var8;
- var6 = true;
- }
-
- int var4 = var3;
- if (var9 == 2) {
- var4 = var3 / 2;
-
- for(int var10 = 0; var10 < var4; ++var10) {
- var5[var10] = var5[var10 * 2 + 1];
- }
- }
-
- super.OdbcApi.SQLPutData(super.hStmt, var5, var4);
- var8 -= var3;
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace(var8 + " bytes remaining");
- }
-
- if (var8 == 0) {
- var6 = true;
- }
- }
-
- } else {
- if (JdbcOdbcObject.isTracing()) {
- JdbcOdbcObject.trace("Invalid index for putParamData()");
- }
-
- }
- }
-
- public void setStream(int var1, InputStream var2, int var3, int var4, int var5) throws SQLException {
- byte[] var6 = this.getLengthBuf(var1);
- byte[] var7 = this.allocBindBuf(var1, 4);
- super.OdbcApi.SQLBindInParameterAtExec(super.hStmt, var1, var4, var3, var7, var6);
- this.boundParams[var1 - 1].setInputStream(var2, var3);
- this.boundParams[var1 - 1].setStreamType(var5);
- }
-
- protected void setChar(int var1, int var2, int var3, String var4) throws SQLException {
- byte[] var5 = this.allocBindBuf(var1, var4.length() + 1);
- int var6 = ((JdbcOdbcStatement)this).getPrecision(var2);
- if (var6 < 0 || var6 > JdbcOdbcLimits.DEFAULT_IN_PRECISION) {
- var6 = JdbcOdbcLimits.DEFAULT_IN_PRECISION;
- }
-
- super.OdbcApi.SQLBindInParameterString(super.hStmt, var1, var2, var6, var3, var4, var5);
- }
-
- protected void setBinary(int var1, int var2, byte[] var3) throws SQLException {
- byte[] var4 = this.allocBindBuf(var1, var3.length);
- byte[] var5 = this.getLengthBuf(var1);
- super.OdbcApi.SQLBindInParameterBinary(super.hStmt, var1, var2, var3, var4, var5);
- }
-
- public static int getTypeFromObject(Object var0) {
- if (var0 == null) {
- return 0;
- } else {
- try {
- if ((String)var0 != null) {
- return 12;
- }
- } catch (Exception var11) {
- }
-
- try {
- if ((BigDecimal)var0 != null) {
- return 2;
- }
- } catch (Exception var10) {
- }
-
- try {
- if ((Boolean)var0 != null) {
- return -7;
- }
- } catch (Exception var9) {
- }
-
- try {
- if ((Integer)var0 != null) {
- return 4;
- }
- } catch (Exception var8) {
- }
-
- try {
- if ((Long)var0 != null) {
- return -5;
- }
- } catch (Exception var7) {
- }
-
- try {
- if ((Float)var0 != null) {
- return 6;
- }
- } catch (Exception var6) {
- }
-
- try {
- if ((Double)var0 != null) {
- return 8;
- }
- } catch (Exception var5) {
- }
-
- try {
- if ((byte[])var0 != null) {
- return -3;
- }
- } catch (Exception var4) {
- }
-
- try {
- if ((Date)var0 != null) {
- return 91;
- }
- } catch (Exception var3) {
- }
-
- try {
- if ((Time)var0 != null) {
- return 92;
- }
- } catch (Exception var2) {
- }
-
- try {
- if ((Timestamp)var0 != null) {
- return 93;
- }
- } catch (Exception var1) {
- }
-
- return 1111;
- }
- }
- }
-