001: package org.mandarax.jdbc;
002:
003: /*
004: * Copyright (C) 1999-2004 <a href="mailto:mandarax@jbdietrich.com">Jens Dietrich</a>
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2 of the License, or (at your option) any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
019: */
020:
021: import java.sql.ResultSetMetaData;
022: import java.sql.SQLException;
023: import java.sql.Types;
024: import java.util.List;
025:
026: //import org.mandarax.jdbc.server.DatabaseMetaDataImpl;
027:
028: /**
029: * Class providing meta information about the result set.
030: * @author <A HREF="mailto:mandarax@jbdietrich.com">Jens Dietrich</A>
031: * @version 3.3.2 <29 December 2004>
032: * @since 3.0
033: */
034: class StaticResultSetMetaData implements ResultSetMetaData {
035: private java.sql.ResultSet result = null;
036: private List columnNames = null;
037: private int[] columnTypes = null;
038:
039: /**
040: * Constructor.
041: * @param result the jdbc result set
042: */
043: StaticResultSetMetaData(StaticResultSet result) {
044: super ();
045: this .result = result;
046: this .columnTypes = result.getColumnTypes();
047: this .columnNames = result.getColumnNames();
048:
049: }
050:
051: /**
052: * Get the number of columns.
053: * @return an integer
054: */
055:
056: public int getColumnCount() throws SQLException {
057: return columnNames.size();
058: }
059:
060: /**
061: * Indicates whether the respective column supports auto increment.
062: * @return false
063: */
064: public boolean isAutoIncrement(int column) throws SQLException {
065: return false;
066: }
067:
068: /**
069: * Indicates whether the respective column is case sensitive.
070: * @return true
071: */
072: public boolean isCaseSensitive(int column) throws SQLException {
073: return true;
074: }
075:
076: /**
077: * Indicates whether the designated column can be used in a where clause.
078: * @return true
079: */
080: public boolean isSearchable(int column) throws SQLException {
081: return true;
082: }
083:
084: /**
085: * Indicates whether the designated column is a cash value.
086: * @return false
087: */
088: public boolean isCurrency(int column) throws SQLException {
089: return false;
090: }
091:
092: /**
093: * Indicates the nullability of values in the designated column.
094: * @return an integer (one of the constants from ResultSetMetaData)
095: * @see java.sql.ResultSetMetaData#isNullable(int)
096: */
097: public int isNullable(int column) throws SQLException {
098: return columnNoNulls;
099: }
100:
101: /*
102: * Indicates whether values in the designated column are signed numbers.
103: * @return false
104: */
105: public boolean isSigned(int column) throws SQLException {
106: return false;
107: }
108:
109: /**
110: * Indicates the designated column's normal maximum width in characters.
111: * @return the display size - difficult to guess the right value !
112: */
113: public int getColumnDisplaySize(int column) throws SQLException {
114: return 100;
115: }
116:
117: /**
118: * Gets the designated column's suggested title for use in printouts and displays.
119: * @return a column label
120: */
121: public String getColumnLabel(int column) throws SQLException {
122: return getColumnName(column);
123: }
124:
125: /**
126: * Get the designated column's name.
127: * @return a column name
128: */
129: public String getColumnName(int column) throws SQLException {
130: return (String) columnNames.get(column - 1);
131: }
132:
133: /**
134: * Get the designated column's table's schema.
135: * @see java.sql.ResultSetMetaData#getSchemaName(int)
136: * @return a schema name
137: */
138: public String getSchemaName(int column) throws SQLException {
139: return AbstractDatabaseMetaDataImpl.DEFAULT_SCHEMA;
140: }
141:
142: /**
143: * Get the designated column's number of decimal digits.
144: * @return the precision
145: */
146: public int getPrecision(int column) throws SQLException {
147: return 0;
148: }
149:
150: /**
151: * Gets the designated column's number of digits to right of the decimal point.
152: * @todo
153: */
154: public int getScale(int column) throws SQLException {
155: return 0;
156: }
157:
158: /**
159: * Gets the designated column's table name.
160: * @see java.sql.ResultSetMetaData#getTableName(int)
161: */
162: public String getTableName(int column) throws SQLException {
163: return "CATALOG";
164: }
165:
166: /**
167: * Gets the designated column's table's catalog name.
168: * @see java.sql.ResultSetMetaData#getCatalogName(int)
169: */
170: public String getCatalogName(int column) throws SQLException {
171: return AbstractDatabaseMetaDataImpl.DEFAULT_CATALOG;
172: }
173:
174: /**
175: * Retrieves the designated column's SQL type.
176: * @see java.sql.Types
177: * @see java.sql.ResultSetMetaData#getColumnType(int)
178: * @return SQL type from java.sql.Types
179: */
180: public int getColumnType(int column) throws SQLException {
181: if (this .columnTypes == null)
182: return Types.VARCHAR;
183: else
184: return columnTypes[column - 1];
185: }
186:
187: /**
188: * Return the type name used by the database.
189: * @retun the type name
190: */
191: public String getColumnTypeName(int column) throws SQLException {
192: int sqlType = getColumnType(column);
193: return JDBCUtils.getSQLTypeName(sqlType);
194: }
195:
196: /**
197: * Indicates whether the designated column is definitely not writable.
198: * @see java.sql.ResultSetMetaData#isReadOnly(int)
199: * @return true
200: */
201: public boolean isReadOnly(int column) throws SQLException {
202: return true;
203: }
204:
205: /*
206: * Indicates whether it is possible for a write on the designated column to succeed.
207: * @see java.sql.ResultSetMetaData#isWritable(int)
208: * @return false
209: */
210: public boolean isWritable(int column) throws SQLException {
211: return false;
212: }
213:
214: /**
215: * Indicates whether a write on the designated column will definitely succeed.
216: * @see java.sql.ResultSetMetaData#isDefinitelyWritable(int)
217: * @return false
218: */
219: public boolean isDefinitelyWritable(int column) throws SQLException {
220: return false;
221: }
222:
223: /**
224: * Returns the fully-qualified name of the Java class whose instances are manufactured
225: * if the method ResultSet.getObject is called to retrieve a value from the column.
226: * ResultSet.getObject may return a subclass of the class returned by this method.
227: */
228: public String getColumnClassName(int column) throws SQLException {
229: int sqlType = getColumnType(column);
230: Class clazz = JDBCUtils.getClassName(sqlType);
231: return clazz == null ? Object.class.getName() : clazz.getName();
232: }
233:
234: }
|