diff options
author | smallsql <smallsql> | 2009-01-25 12:03:24 +0300 |
---|---|---|
committer | smallsql <smallsql> | 2009-01-25 12:03:24 +0300 |
commit | 3a129bd71d3c66dd755840a709c9647c299df72d (patch) | |
tree | dd3fe352e96ecd20ce6a1c029068af30bde4ae13 /openjdk/sun/jdbc/odbc/JdbcOdbcObject.java | |
parent | a5d7e8fb37b7d334dffe79f7cced646306669c10 (diff) |
250 TODO in JDBC-ODBC-Bridge fixt
Diffstat (limited to 'openjdk/sun/jdbc/odbc/JdbcOdbcObject.java')
-rw-r--r-- | openjdk/sun/jdbc/odbc/JdbcOdbcObject.java | 650 |
1 files changed, 650 insertions, 0 deletions
diff --git a/openjdk/sun/jdbc/odbc/JdbcOdbcObject.java b/openjdk/sun/jdbc/odbc/JdbcOdbcObject.java new file mode 100644 index 00000000..a4a72bd2 --- /dev/null +++ b/openjdk/sun/jdbc/odbc/JdbcOdbcObject.java @@ -0,0 +1,650 @@ +/* + Copyright (C) 2009 Volker Berlin (i-net software) + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jeroen Frijters + jeroen@frijters.net + + */ +package sun.jdbc.odbc; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.Reader; +import java.io.StringReader; +import java.math.BigDecimal; +import java.net.URL; +import java.sql.Array; +import java.sql.Blob; +import java.sql.Clob; +import java.sql.Date; +import java.sql.NClob; +import java.sql.Ref; +import java.sql.RowId; +import java.sql.SQLException; +import java.sql.SQLXML; +import java.sql.Time; +import java.sql.Timestamp; +import java.util.Calendar; +import java.util.Map; + +import cli.System.Convert; +import cli.System.DBNull; +import cli.System.IConvertible; +import cli.System.Int16; +import cli.System.Int32; +import cli.System.Int64; +import cli.System.Single; + +/** + * @author Volker Berlin + */ +public abstract class JdbcOdbcObject{ + + private boolean wasNull; + + + /** + * Maps the given ResultSet column label to its ResultSet column index or the given CallableStatment parameter name + * to the parameter index. + * + * @param columnLabel + * the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, + * then the label is the name of the column + * @return the column index of the given column name + * @throws SQLException + * if the ResultSet object does not contain a column labeled columnLabel, a database access error occurs + * or this method is called on a closed result set + */ + public abstract int findColumn(String columnLabel) throws SQLException; + + + /** + * Read an Object from the current row store at the current row on the given column. + * + * @param columnIndex + * a JDBC column index starting with 1 + * @return a .NET Object, DBNull or null + * @throws SQLException + * if the result is closed or any other error occur. + */ + protected abstract Object getObjectImpl(int columnIndex) throws SQLException; + + + /** + * Read an Object from the current row store at the current row on the given column. Set the flag wasNull. + * + * @param columnIndex + * a JDBC column index starting with 1 + * @return a .NET Object or null + * @throws SQLException + * if the result is closed or any other error occur. + */ + private final Object getObjectSetWasNull(int columnIndex) throws SQLException{ + Object obj = getObjectImpl(columnIndex); + if(obj == null || obj == DBNull.Value){ + wasNull = true; + return null; + } + wasNull = false; + return obj; + } + + + public final Array getArray(int columnIndex){ + throw new UnsupportedOperationException(); + } + + + public final Array getArray(String columnLabel) throws SQLException{ + return getArray(findColumn(columnLabel)); + } + + + public final InputStream getAsciiStream(int columnIndex) throws SQLException{ + try{ + String str = getString(columnIndex); + if(str == null){ + return null; + } + return new ByteArrayInputStream(str.getBytes("Ascii")); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final InputStream getAsciiStream(String columnLabel) throws SQLException{ + return getAsciiStream(findColumn(columnLabel)); + } + + + public final BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException{ + BigDecimal dec = getBigDecimal(columnIndex); + if(dec == null){ + return null; + } + if(dec.scale() != scale){ + return dec.setScale(scale, BigDecimal.ROUND_HALF_EVEN); + } + return dec; + } + + + public final BigDecimal getBigDecimal(String columnLabel, int scale) throws SQLException{ + return getBigDecimal(findColumn(columnLabel), scale); + } + + + public final BigDecimal getBigDecimal(int columnIndex) throws SQLException{ + try{ + Object obj = getObjectSetWasNull(columnIndex); + if(wasNull){ + return null; + } + String str = obj.toString(); + return new BigDecimal(str); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final BigDecimal getBigDecimal(String columnLabel) throws SQLException{ + return getBigDecimal(findColumn(columnLabel)); + } + + + public final InputStream getBinaryStream(int columnIndex) throws SQLException{ + byte[] data = getBytes(columnIndex); + if(data == null){ + return null; + } + return new ByteArrayInputStream(data); + } + + + public final InputStream getBinaryStream(String columnLabel) throws SQLException{ + return getBinaryStream(findColumn(columnLabel)); + } + + + public final Blob getBlob(int columnIndex){ + throw new UnsupportedOperationException(); + } + + + public final Blob getBlob(String columnLabel) throws SQLException{ + return getBlob(findColumn(columnLabel)); + } + + + public final boolean getBoolean(int columnIndex) throws SQLException{ + try{ + Object obj = getObjectSetWasNull(columnIndex); + if(wasNull){ + return false; + } + if(obj instanceof IConvertible){ + return Convert.ToBoolean(obj); + } + String str = obj.toString(); + if(str.length() > 0){ + // special handling for boolean representation in old databases + char ch = str.charAt(0); + if(ch == 'T' || ch == 't'){ + return true; + } + if(ch == 'F' || ch == 'f'){ + return true; + } + } + return cli.System.Boolean.Parse(str); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final boolean getBoolean(String columnLabel) throws SQLException{ + return getBoolean(findColumn(columnLabel)); + } + + + public final byte getByte(int columnIndex) throws SQLException{ + try{ + Object obj = getObjectSetWasNull(columnIndex); + if(wasNull){ + return 0; + } + if(obj instanceof IConvertible){ + return Convert.ToByte(obj); + } + String str = obj.toString(); + return cli.System.Byte.Parse(str); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final byte getByte(String columnLabel) throws SQLException{ + return getByte(findColumn(columnLabel)); + } + + + public final byte[] getBytes(int columnIndex) throws SQLException{ + try{ + Object obj = getObjectSetWasNull(columnIndex); + if(wasNull){ + return null; + } + if(obj instanceof byte[]){ + return (byte[])obj; + } + String str = obj.toString(); + return str.getBytes(); // which encoding? + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final byte[] getBytes(String columnLabel) throws SQLException{ + return getBytes(findColumn(columnLabel)); + } + + + public final Reader getCharacterStream(int columnIndex) throws SQLException{ + String str = getString(columnIndex); + if(str == null){ + return null; + } + return new StringReader(str); + } + + + public final Reader getCharacterStream(String columnLabel) throws SQLException{ + return getCharacterStream(findColumn(columnLabel)); + } + + + public final Clob getClob(int columnIndex){ + throw new UnsupportedOperationException(); + } + + + public final Clob getClob(String columnLabel) throws SQLException{ + return getClob(findColumn(columnLabel)); + } + + + public final Date getDate(int columnIndex) throws SQLException{ + try{ + Object obj = getObjectSetWasNull(columnIndex); + if(wasNull){ + return null; + } + if(obj instanceof cli.System.DateTime){ + cli.System.DateTime dt = (cli.System.DateTime)obj; + return new Date(dt.get_Year() - 1900, dt.get_Month() - 1, dt.get_Day()); + } + String str = obj.toString(); + return Date.valueOf(str); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final Date getDate(String columnLabel) throws SQLException{ + return getDate(findColumn(columnLabel)); + } + + + public final Date getDate(int columnIndex, Calendar cal) throws SQLException{ + Date date = getDate(columnIndex); + JdbcOdbcUtils.convertLocalToCalendarDate(date, cal); + return date; + } + + + public final Date getDate(String columnLabel, Calendar cal) throws SQLException{ + return getDate(findColumn(columnLabel), cal); + } + + + public final double getDouble(int columnIndex) throws SQLException{ + try{ + Object obj = getObjectSetWasNull(columnIndex); + if(wasNull){ + return 0; + } + if(obj instanceof IConvertible){ + return Convert.ToDouble(obj); + } + String str = obj.toString(); + return cli.System.Double.Parse(str); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final double getDouble(String columnLabel) throws SQLException{ + return getDouble(findColumn(columnLabel)); + } + + + public final float getFloat(int columnIndex) throws SQLException{ + try{ + Object obj = getObjectSetWasNull(columnIndex); + if(wasNull){ + return 0; + } + if(obj instanceof IConvertible){ + return Convert.ToSingle(obj); + } + String str = obj.toString(); + return Single.Parse(str); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final float getFloat(String columnLabel) throws SQLException{ + return getFloat(findColumn(columnLabel)); + } + + + public final int getInt(int columnIndex) throws SQLException{ + try{ + Object obj = getObjectSetWasNull(columnIndex); + if(wasNull){ + return 0; + } + if(obj instanceof IConvertible){ + return Convert.ToInt32(obj); + } + String str = obj.toString(); + return Int32.Parse(str); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final int getInt(String columnLabel) throws SQLException{ + return getInt(findColumn(columnLabel)); + } + + + public final long getLong(int columnIndex) throws SQLException{ + try{ + Object obj = getObjectSetWasNull(columnIndex); + if(wasNull){ + return 0; + } + if(obj instanceof IConvertible){ + return Convert.ToInt64(obj); + } + String str = obj.toString(); + return Int64.Parse(str); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final long getLong(String columnLabel) throws SQLException{ + return getLong(findColumn(columnLabel)); + } + + + public final Reader getNCharacterStream(int columnIndex) throws SQLException{ + return getCharacterStream(columnIndex); + } + + + public final Reader getNCharacterStream(String columnLabel) throws SQLException{ + return getCharacterStream(columnLabel); + } + + + public final NClob getNClob(int columnIndex){ + throw new UnsupportedOperationException(); + } + + + public final NClob getNClob(String columnLabel) throws SQLException{ + return getNClob(findColumn(columnLabel)); + } + + + public final String getNString(int columnIndex) throws SQLException{ + return getString(columnIndex); + } + + + public final String getNString(String columnLabel) throws SQLException{ + return getString(columnLabel); + } + + + public final Object getObject(int columnIndex) throws SQLException{ + return JdbcOdbcUtils.convertNet2Java(getObjectSetWasNull(columnIndex)); + } + + + public final Object getObject(String columnLabel) throws SQLException{ + return getObject(findColumn(columnLabel)); + } + + + public final Object getObject(int columnIndex, Map<String, Class<?>> map){ + throw new UnsupportedOperationException(); + } + + + public final Object getObject(String columnLabel, Map<String, Class<?>> map) throws SQLException{ + return getObject(findColumn(columnLabel), map); + } + + + public final Ref getRef(int columnIndex){ + throw new UnsupportedOperationException(); + } + + + public final Ref getRef(String columnLabel) throws SQLException{ + return getRef(findColumn(columnLabel)); + } + + + public final RowId getRowId(int columnIndex){ + throw new UnsupportedOperationException(); + } + + + public final RowId getRowId(String columnLabel) throws SQLException{ + return getRowId(findColumn(columnLabel)); + } + + + public final SQLXML getSQLXML(int columnIndex){ + throw new UnsupportedOperationException(); + } + + + public final SQLXML getSQLXML(String columnLabel) throws SQLException{ + return getSQLXML(findColumn(columnLabel)); + } + + + public final short getShort(int columnIndex) throws SQLException{ + try{ + Object obj = getObjectSetWasNull(columnIndex); + if(wasNull){ + return 0; + } + if(obj instanceof IConvertible){ + return Convert.ToInt16(obj); + } + String str = obj.toString(); + return Int16.Parse(str); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final short getShort(String columnLabel) throws SQLException{ + return getShort(findColumn(columnLabel)); + } + + + public final String getString(int columnIndex) throws SQLException{ + try{ + Object obj = getObjectSetWasNull(columnIndex); + if(wasNull){ + return null; + } + return obj.toString(); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final String getString(String columnLabel) throws SQLException{ + return getString(findColumn(columnLabel)); + } + + + public final Time getTime(int columnIndex) throws SQLException{ + try{ + Object obj = getObjectSetWasNull(columnIndex); + if(wasNull){ + return null; + } + if(obj instanceof cli.System.DateTime){ + cli.System.DateTime dt = (cli.System.DateTime)obj; + return new Time(dt.get_Hour(), dt.get_Minute() - 1, dt.get_Second()); + } + if(obj instanceof cli.System.TimeSpan){ + cli.System.TimeSpan ts = (cli.System.TimeSpan)obj; + return new Time(ts.get_Hours(), ts.get_Minutes() - 1, ts.get_Seconds()); + } + String str = obj.toString(); + return Time.valueOf(str); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final Time getTime(String columnLabel) throws SQLException{ + return getTime(findColumn(columnLabel)); + } + + + public final Time getTime(int columnIndex, Calendar cal) throws SQLException{ + Time time = getTime(columnIndex); + JdbcOdbcUtils.convertLocalToCalendarDate(time, cal); + return time; + } + + + public final Time getTime(String columnLabel, Calendar cal) throws SQLException{ + return getTime(findColumn(columnLabel), cal); + } + + + public final Timestamp getTimestamp(int columnIndex) throws SQLException{ + try{ + Object obj = getObjectSetWasNull(columnIndex); + if(wasNull){ + return null; + } + if(obj instanceof cli.System.DateTime){ + cli.System.DateTime dt = (cli.System.DateTime)obj; + return new Timestamp(JdbcOdbcUtils.getJavaMillis(dt)); + } + String str = obj.toString(); + return Timestamp.valueOf(str); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final Timestamp getTimestamp(String columnLabel) throws SQLException{ + return getTimestamp(findColumn(columnLabel)); + } + + + public final Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException{ + Timestamp ts = getTimestamp(columnIndex); + JdbcOdbcUtils.convertLocalToCalendarDate(ts, cal); + return ts; + } + + + public final Timestamp getTimestamp(String columnLabel, Calendar cal) throws SQLException{ + return getTimestamp(findColumn(columnLabel), cal); + } + + + public final URL getURL(int columnIndex) throws SQLException{ + try{ + String url = getString(columnIndex); + if(wasNull){ + return null; + } + return new URL(url); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final URL getURL(String columnLabel) throws SQLException{ + return getURL(findColumn(columnLabel)); + } + + + public final InputStream getUnicodeStream(int columnIndex) throws SQLException{ + try{ + return new ByteArrayInputStream(getString(columnIndex).getBytes("UTF16")); + }catch(Throwable th){ + throw JdbcOdbcUtils.createSQLException(th); + } + } + + + public final InputStream getUnicodeStream(String columnLabel) throws SQLException{ + return getUnicodeStream(findColumn(columnLabel)); + } + + + public final boolean wasNull(){ + return wasNull; + } + +} |