tomdz       2004/12/07 10:15:28

  Modified:    sql/src/java/org/apache/commons/sql/model Column.java
               sql/src/java/org/apache/commons/sql/io JdbcModelReader.java
  Log:
  Fixed NPE that occurs when using JdbcModelReader with numeric column types in 
Hsqldb
  
  Revision  Changes    Path
  1.14      +12 -9     
jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/Column.java
  
  Index: Column.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/model/Column.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- Column.java       19 Jul 2004 22:14:00 -0000      1.13
  +++ Column.java       7 Dec 2004 18:15:28 -0000       1.14
  @@ -201,16 +201,19 @@
   
       public void setSize(String size)
       {
  -        int pos = size.indexOf(",");
  -
  -        if (pos < 0)
  +        if (size != null)
           {
  -            this.size = size;
  -        }
  -        else
  -        {
  -            this.size = size.substring(0, pos);
  -            scale     = Integer.parseInt(size.substring(pos + 1));
  +            int pos = size.indexOf(",");
  +    
  +            if (pos < 0)
  +            {
  +                this.size = size;
  +            }
  +            else
  +            {
  +                this.size = size.substring(0, pos);
  +                scale     = Integer.parseInt(size.substring(pos + 1));
  +            }
           }
       }
       
  
  
  
  1.10      +35 -13    
jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/io/JdbcModelReader.java
  
  Index: JdbcModelReader.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons-sandbox/sql/src/java/org/apache/commons/sql/io/JdbcModelReader.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- JdbcModelReader.java      10 Nov 2004 15:21:53 -0000      1.9
  +++ JdbcModelReader.java      7 Dec 2004 18:15:28 -0000       1.10
  @@ -21,6 +21,7 @@
   import java.sql.ResultSet;
   import java.sql.ResultSetMetaData;
   import java.sql.SQLException;
  +import java.sql.Types;
   import java.util.HashMap;
   import java.util.Iterator;
   import java.util.List;
  @@ -48,19 +49,38 @@
   public class JdbcModelReader {
   
       /** The Log to which logging calls will be made. */
  -    private static final Log log = LogFactory.getLog( JdbcModelReader.class 
);
  +    private final Log log = LogFactory.getLog( JdbcModelReader.class );
   
  -    Connection connection = null;
  -    String catalog = null;
  -    String schema = null;
  -    String[] tableTypes = { "TABLE", "VIEW" };
  -    Pattern defaultPattern = Pattern.compile("\\(\\'?(.*?)\\'?\\)"); //value 
with parenthesis and/or quotes around it
  -
  -    public JdbcModelReader() {
  +    /** Contains default column sizes (minimum sizes that a JDBC-compliant 
db must support) */
  +    private HashMap defaultSizes = new HashMap();
  +    
  +    private Connection connection = null;
  +    private String catalog = null;
  +    private String schema = null;
  +    private String[] tableTypes = { "TABLE", "VIEW" };
  +    private Pattern defaultPattern = Pattern.compile("\\(\\'?(.*?)\\'?\\)"); 
//value with parenthesis and/or quotes around it
  +
  +    public JdbcModelReader()
  +    {
  +        this(null);
       }
       
  -    public JdbcModelReader(Connection conn) {
  -        this.connection = conn;
  +    public JdbcModelReader(Connection conn)
  +    {
  +        connection = conn;
  +        defaultSizes.put(new Integer(Types.CHAR),          "254");
  +        defaultSizes.put(new Integer(Types.VARCHAR),       "254");
  +        defaultSizes.put(new Integer(Types.LONGVARCHAR),   "254");
  +        defaultSizes.put(new Integer(Types.BINARY),        "254");
  +        defaultSizes.put(new Integer(Types.VARBINARY),     "254");
  +        defaultSizes.put(new Integer(Types.LONGVARBINARY), "254");
  +        defaultSizes.put(new Integer(Types.INTEGER),       "32");
  +        defaultSizes.put(new Integer(Types.BIGINT),        "64");
  +        defaultSizes.put(new Integer(Types.REAL),          "7,0");
  +        defaultSizes.put(new Integer(Types.FLOAT),         "15,0");
  +        defaultSizes.put(new Integer(Types.DOUBLE),        "15,0");
  +        defaultSizes.put(new Integer(Types.DECIMAL),       "15,15");
  +        defaultSizes.put(new Integer(Types.NUMERIC),       "15,15");
       }
       
       public void setCatalog(String catalog) {
  @@ -243,7 +263,7 @@
                   String columnSize =
                       columnInfoColumns.contains("COLUMN_SIZE")
                           ? columnData.getString("COLUMN_SIZE")
  -                        : null;
  +                        : (String)defaultSizes.get(new Integer(columnType));
                   /* the number of fractional digits */
                   int columnScale =
                       columnInfoColumns.contains("DECIMAL_DIGITS")
  @@ -338,6 +358,10 @@
                   Column col = new Column();
                   col.setName(columnName);
                   col.setTypeCode(columnType);
  +                col.setPrecisionRadix(columnPrecision);
  +                col.setScale(columnScale);
  +                // we're setting the size after the precision and radix in 
case
  +                // the database prefers to return them in the size value 
                   col.setSize(columnSize);
                   col.setRequired(!columnIsNullable);
                   if (primaryKeys.contains(col.getName())) {
  @@ -355,8 +379,6 @@
                       }
                       col.setDefaultValue(columnDefaultValue);
                   }
  -                col.setPrecisionRadix(columnPrecision);
  -                col.setScale(columnScale);
                   columns.add(col);
               }
               return columns;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to