Update of /cvsroot/squirrel-sql/sql12/fw/src/net/sourceforge/squirrel_sql/fw/datasetviewer
In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv6842/fw/src/net/sourceforge/squirrel_sql/fw/datasetviewer
Modified Files:
ResultSetMetaDataDataSet.java
Log Message:
Improved display of SQL result metadata
Index: ResultSetMetaDataDataSet.java
===================================================================
RCS file: /cvsroot/squirrel-sql/sql12/fw/src/net/sourceforge/squirrel_sql/fw/datasetviewer/ResultSetMetaDataDataSet.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** ResultSetMetaDataDataSet.java 7 Aug 2007 01:03:26 -0000 1.4
--- ResultSetMetaDataDataSet.java 22 Jan 2010 22:08:01 -0000 1.5
***************
*** 22,30 ****
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
! import java.util.ArrayList;
! import java.util.HashMap;
! import java.util.Iterator;
! import java.util.List;
! import java.util.Map;
import net.sourceforge.squirrel_sql.fw.util.IMessageHandler;
--- 22,26 ----
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
! import java.util.*;
import net.sourceforge.squirrel_sql.fw.util.IMessageHandler;
***************
*** 41,45 ****
! private interface i18n
{
String UNSUPPORTED = "<Unsupported>";
--- 37,41 ----
! private interface i18n
{
String UNSUPPORTED = "<Unsupported>";
***************
*** 56,60 ****
private DataSetDefinition _dsDef;
- private boolean[] _propertyMethodIndicators;
private Iterator<Object[]> _rowsIter;
private Object[] _row;
--- 52,55 ----
***************
*** 70,101 ****
* "properties" of the <TT>ResultSetMetaData</TT> class.
*/
! private static final Map<String, Object> s_propNames =
! new HashMap<String, Object>();
! static
! {
! s_propNames.put("getCatalogName", null);
! s_propNames.put("getColumnClassName", null);
! s_propNames.put("getColumnDisplaySize", null);
! s_propNames.put("getColumnLabel", null);
! s_propNames.put("getColumnName", null);
! s_propNames.put("getColumnType", null);
! s_propNames.put("getColumnTypeName", null);
! s_propNames.put("getPrecision", null);
! s_propNames.put("getScale", null);
! s_propNames.put("getSchemaName", null);
! s_propNames.put("getTableName", null);
! s_propNames.put("isAutoIncrement", null);
! s_propNames.put("isCaseSensitive", null);
! s_propNames.put("isCurrency", null);
! s_propNames.put("isDefinitelyWritable", null);
! s_propNames.put("isNullable", null);
! s_propNames.put("isReadOnly", null);
! s_propNames.put("isSearchable", null);
! s_propNames.put("isSigned", null);
! s_propNames.put("isWritable", null);
! }
! public ResultSetMetaDataDataSet(ResultSet rs)
throws IllegalArgumentException, DataSetException
{
--- 65,105 ----
* "properties" of the <TT>ResultSetMetaData</TT> class.
*/
! private static final Method[] s_methods = createMetaDataMethodArray();
! private static Method[] createMetaDataMethodArray()
! {
! try
! {
! return new Method[]
! {
! ResultSetMetaData.class.getMethod("getColumnName", Integer.TYPE),
! ResultSetMetaData.class.getMethod("getColumnTypeName", Integer.TYPE),
! ResultSetMetaData.class.getMethod("getPrecision", Integer.TYPE),
! ResultSetMetaData.class.getMethod("getScale", Integer.TYPE),
! ResultSetMetaData.class.getMethod("isNullable", Integer.TYPE),
! ResultSetMetaData.class.getMethod("getTableName", Integer.TYPE),
! ResultSetMetaData.class.getMethod("getSchemaName", Integer.TYPE),
! ResultSetMetaData.class.getMethod("getCatalogName", Integer.TYPE),
! ResultSetMetaData.class.getMethod("getColumnClassName", Integer.TYPE),
! ResultSetMetaData.class.getMethod("getColumnDisplaySize", Integer.TYPE),
! ResultSetMetaData.class.getMethod("getColumnLabel", Integer.TYPE),
! ResultSetMetaData.class.getMethod("getColumnType", Integer.TYPE),
! ResultSetMetaData.class.getMethod("isAutoIncrement", Integer.TYPE),
! ResultSetMetaData.class.getMethod("isCaseSensitive", Integer.TYPE),
! ResultSetMetaData.class.getMethod("isCurrency", Integer.TYPE),
! ResultSetMetaData.class.getMethod("isDefinitelyWritable", Integer.TYPE),
! ResultSetMetaData.class.getMethod("isReadOnly", Integer.TYPE),
! ResultSetMetaData.class.getMethod("isSearchable", Integer.TYPE),
! ResultSetMetaData.class.getMethod("isSigned", Integer.TYPE),
! ResultSetMetaData.class.getMethod("isWritable", Integer.TYPE)
! };
! }
! catch (NoSuchMethodException e)
! {
! throw new RuntimeException(e);
! }
! }
! public ResultSetMetaDataDataSet(ResultSet rs)
throws IllegalArgumentException, DataSetException
{
***************
*** 148,168 ****
private ColumnDisplayDefinition[] createColumnDefinitions()
{
! final Method[] methods = ResultSetMetaData.class.getMethods();
! _propertyMethodIndicators = new boolean[methods.length];
! final List<ColumnDisplayDefinition> colDefs =
! new ArrayList<ColumnDisplayDefinition>();
! for (int i = 0; i < methods.length; ++i)
! {
! if (isPropertyMethod(methods[i]))
! {
! colDefs.add(new ColumnDisplayDefinition(200, methods[i].getName()));
! _propertyMethodIndicators[i] = true;
! }
! else
! {
! _propertyMethodIndicators[i] = false;
! }
! }
! return colDefs.toArray(new ColumnDisplayDefinition[colDefs.size()]);
}
--- 152,165 ----
private ColumnDisplayDefinition[] createColumnDefinitions()
{
! ColumnDisplayDefinition[] colDefs = new ColumnDisplayDefinition[s_methods.length + 1];
!
! colDefs[0] = new ColumnDisplayDefinition(25, "ColumnIndex");
!
! for (int i = 0; i < s_methods.length; i++)
! {
! colDefs[i+1] = new ColumnDisplayDefinition(25, s_methods[i].getName());
! }
!
! return colDefs;
}
***************
*** 171,204 ****
try
{
! final Method[] methods = ResultSetMetaData.class.getMethods();
! final ArrayList<Object> line = new ArrayList<Object>();
! for (int metaIdx = 1, metaLimit = md.getColumnCount() + 1;
! metaIdx < metaLimit;
! ++metaIdx)
! {
! Object[] methodParms = new Object[] { Integer.valueOf(metaIdx), };
! line.clear();
! line.ensureCapacity(methods.length);
! for (int methodIdx = 0; methodIdx < methods.length; ++methodIdx)
! {
! try
! {
!
! if (_propertyMethodIndicators[methodIdx])
! {
! Object obj = executeGetter(md, methods[methodIdx], methodParms);
! line.add(obj);// != null ? obj.toString() : i18n.NULL);
! }
! }
! catch (Throwable th)
! {
! line.add("<Error>");
! s_log.error("Error reading column metadata", th);
! }
!
! }
! _data.add(line.toArray(new Object[line.size()]));
! }
_rowsIter = _data.iterator();
--- 168,183 ----
try
{
! for (int i = 1; i < md.getColumnCount() + 1; ++i)
! {
! Object[] line = new Object[s_methods.length + 1];
! line[0] = i;
! Object[] methodParms = new Object[] { Integer.valueOf(i) };
! for (int j = 0; j < s_methods.length; j++)
! {
! line[j+1] = executeGetter(md, s_methods[j], methodParms);
! }
! _data.add(line);
! }
_rowsIter = _data.iterator();
***************
*** 211,229 ****
}
! /**
! * A valid method for a property in <TT>ResultSetMetaData</TT> is one that
! * has a non-void ouput and takes a single integer parameter (the column index).
! *
! * @return <TT>true</TT> if method is a property getter else <TT>false</TT>.
! */
! protected boolean isPropertyMethod(Method method)
! {
! return s_propNames.containsKey(method.getName());
! // return method.getParameterTypes().length == 1
! // && method.getParameterTypes()[0] == int.class
! // && method.getReturnType() != Void.TYPE;
! }
!
! protected Object executeGetter(Object bean, Method getter, Object[] parms)
{
try
--- 190,194 ----
}
! protected Object executeGetter(Object bean, Method getter, Object[] parms)
{
try
|