Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/ikvm-fork.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsmallsql <smallsql>2009-01-25 12:03:24 +0300
committersmallsql <smallsql>2009-01-25 12:03:24 +0300
commit3a129bd71d3c66dd755840a709c9647c299df72d (patch)
treedd3fe352e96ecd20ce6a1c029068af30bde4ae13 /openjdk/sun/jdbc/odbc/JdbcOdbcObject.java
parenta5d7e8fb37b7d334dffe79f7cced646306669c10 (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.java650
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;
+ }
+
+}