/* * (C) Copyright IBM Corp. 2010 * * LICENSE: Eclipse Public License v1.0 * http://www.eclipse.org/legal/epl-v10.html */ package com.ibm.gaiandb.udpdriver.client; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Types; import java.util.List; import com.ibm.gaiandb.Logger; import com.ibm.gaiandb.diags.GDBMessages; import com.ibm.gaiandb.udpdriver.common.protocol.MetaData; /** * Implementation of java.sql.ResultSetMetaData * * @author lengelle * */ public class UDPResultSetMetaData implements ResultSetMetaData { // Use PROPRIETARY notice if class contains a main() method, otherwise use COPYRIGHT notice. public static final String COPYRIGHT_NOTICE = "(c) Copyright IBM Corp. 2010"; private static final Logger logger = new Logger( "UDPResultSetMetaData", 25 ); private int numberOfColumns; private String[] columnNames; private int[] columnTypes; private List<Integer> nullableColumns; private int[] columnScale; private int[] columnPrecision; private int[] columnDisplaySize; /** * Creates a new UDPResultSetMetaData object from a UDP driver protocol message MetaData * * @param metaData */ public UDPResultSetMetaData( MetaData metaData ) { numberOfColumns = metaData.getNumberOfColumns(); columnNames = metaData.getColumnNames(); columnTypes = metaData.getColumnTypes(); nullableColumns = metaData.getNullableColumns(); columnScale = metaData.getColumnScale(); columnPrecision = metaData.getColumnPrecision(); columnDisplaySize = metaData.getColumnDisplaySize(); } /* (non-Javadoc) * @see java.sql.ResultSetMetaData#getColumnCount() */ public int getColumnCount() throws SQLException { return numberOfColumns; } /* (non-Javadoc) * @see java.sql.ResultSetMetaData#getColumnName(int) */ public String getColumnName( int column ) throws SQLException { if ( columnNames!=null && column<=columnNames.length ) { return columnNames[column-1]; } throw new SQLException( "UDPResultSetMetaData : getColumnName() It is not possible to get the column names." ); } /* (non-Javadoc) * @see java.sql.ResultSetMetaData#getColumnType(int) */ public int getColumnType( int column ) throws SQLException { if ( columnTypes!=null && column<=columnTypes.length ) { return columnTypes[column-1]; } throw new SQLException( "UDPResultSetMetaData : getColumnType() It is not possible to get the column type." ); } /* (non-Javadoc) * @see java.sql.ResultSetMetaData#isNullable(int) */ public int isNullable( int column ) throws SQLException { if ( nullableColumns!=null ) { if ( nullableColumns.contains( column ) ) { return 1; } else { return 0; } } throw new SQLException( "UDPResultSetMetaData : isNullable() It is not possible to know if the column is nullable." ); } /* (non-Javadoc) * @see java.sql.ResultSetMetaData#getColumnTypeName(int) */ public String getColumnTypeName( int column ) throws SQLException { try { int type = columnTypes[ column-1 ]; String columnName = this.lookupColumnTypeName( type ); return columnName; } catch( Exception e ) { throw new SQLException( "UDPResultSetMetaData : getColumnTypeName( int column ) failed. "+ e ); } } private String lookupColumnTypeName( int type ) throws SQLException { switch ( type ) { case Types.CHAR: return "CHAR"; case Types.VARCHAR: return "VARCHAR"; case Types.LONGVARCHAR: return "LONGVARCHAR"; case Types.LONGVARBINARY: return "LONGVARBINARY"; case Types.DECIMAL: return "DECIMAL"; case Types.NUMERIC: return "NUMERIC"; case Types.FLOAT: return "FLOAT"; case Types.BINARY: return "BINARY"; case Types.VARBINARY: return "VARBINARY"; case Types.BIT: return "BIT"; case Types.BOOLEAN: return "BOOLEAN"; case Types.BLOB: return "BLOB"; case Types.CLOB: return "CLOB"; case Types.DATE: return "DATE"; case Types.TIME: return "TIME"; case Types.TIMESTAMP: return "TIMESTAMP"; case Types.INTEGER: return "INTEGER"; case Types.BIGINT: return "BIGINT"; case Types.SMALLINT: return "SMALLINT"; case Types.TINYINT: return "TINYINT"; case Types.DOUBLE: return "DOUBLE"; case Types.REAL: return "REAL"; case Types.NULL: return "NULL"; // case Types.ARRAY: // case Types.JAVA_OBJECT: // case Types.STRUCT: // case Types.REF: // case Types.ARRAY: // case Types.DATALINK: // case Types.REF: // case Types.DISTINCT: // case Types.OTHER: default: String w = "Unsupported JDBC type: " + type; logger.logWarning(GDBMessages.NETDRIVER_COLUMN_LOOKUP_JDBC_TYPE_UNSUPPORTED, w); throw new SQLException(w); } } /* (non-Javadoc) * @see java.sql.ResultSetMetaData#getColumnDisplaySize(int) */ public int getColumnDisplaySize( int column ) throws SQLException { if ( columnDisplaySize!=null && column<=columnDisplaySize.length ) { return columnDisplaySize[column-1]; } throw new SQLException( "UDPResultSetMetaData : getColumnDisplaySize() It is not possible to get the column display size." ); } /* (non-Javadoc) * @see java.sql.ResultSetMetaData#getPrecision(int) */ public int getPrecision( int column ) throws SQLException { if ( columnPrecision!=null && column<=columnPrecision.length ) { return columnPrecision[column-1]; } throw new SQLException( "UDPResultSetMetaData : getPrecision() It is not possible to get the column precision." ); } /* (non-Javadoc) * @see java.sql.ResultSetMetaData#getScale(int) */ public int getScale( int column ) throws SQLException { if ( columnScale!=null && column<=columnScale.length ) { return columnScale[column-1]; } throw new SQLException( "UDPResultSetMetaData : getScale() It is not possible to get the column scale." ); } public String getCatalogName( int column ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "getCatalogName( int column ) : Unimplemented method." ); return null; } public String getColumnClassName( int column ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "getColumnClassName( int column ) : Unimplemented method." ); return null; } public String getSchemaName( int column ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "getSchemaName( int column ) : Unimplemented method." ); return null; } public String getTableName( int column ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "getTableName( int column ) : Unimplemented method." ); return null; } public boolean isAutoIncrement( int column ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "isAutoIncrement( int column ) : Unimplemented method." ); return false; } public boolean isCaseSensitive( int column ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "isCaseSensitive( int column ) : Unimplemented method." ); return false; } public boolean isCurrency( int column ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "isCurrency( int column ) : Unimplemented method." ); return false; } public boolean isDefinitelyWritable( int column ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "isDefinitelyWritable( int column ) : Unimplemented method." ); return false; } public boolean isReadOnly( int column ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "isReadOnly( int column ) : Unimplemented method." ); return false; } public boolean isSearchable( int column ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "isSearchable( int column ) : Unimplemented method." ); return false; } public boolean isSigned( int column ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "isSigned( int column ) : Unimplemented method." ); return false; } public boolean isWritable( int column ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "isWritable( int column ) : Unimplemented method." ); return false; } public boolean isWrapperFor( Class<?> iface ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "isWrapperFor( Class<?> iface ) : Unimplemented method." ); return false; } public <T> T unwrap( Class<T> iface ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "unwrap( Class<T> iface ) : Unimplemented method." ); return null; } public String getColumnLabel( int column ) throws SQLException { logger.logWarning( GDBMessages.NETDRIVER_UNIMPLEMENTED_METHOD, "getColumnLabel( int column ) : Unimplemented method." ); return null; } }