Hi,

I think I found two bugs (and I hope I am not wasting everyone's time). One is minor: the base type of a boolean[] is java.sql.Types.BIT instead or java.sql.Types.BOOLEAN. At the very least shouldn't these be aliases for the same type?

And secondly the returned type from a smallint[] is an Integer[] instead of a Short[].



So running this code:



The running of the supplied code also gives the same results with PostgreSQL 8.3.3

results:
========================================
sun.jdbc.odbc.jdbcodbcdri...@fc9944: 2.1
org.postgresql.dri...@8b819f: 8.4
PostgreSQL 8.3.3 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.6
Integer[]
1 2
int4: 4 4
END  Integer[]
Boolean[]
false true
bool: 16 -7   -7
END  Boolean[]
Short[]
java.lang.ClassCastException: [Ljava.lang.Integer; cannot be cast to [Ljava.lang.Short;
========================================

The 8.4 JDBC Driver though does gives a consistent result as past versions via the
tableMetaData.getColumnClassName() & tableMetaData.getColumnTypeName()
for the base types, integer, smallint, and boolean.

System.out.println(i + " " + colNameString + " " +
           columnClass + " " + columnType + " " +
           columnSize);

3 int_type java.lang.Integer int4 11
2 smallint_type java.lang.Integer int2 6
21 boolean_type java.lang.Boolean bool 1

1 ia java.sql.Array _int4 11
2 sa java.sql.Array _int2 6
3 ba java.sql.Array _bool 1

Attached slight modification to NewClass to correctly compile and drop table if run
more than once.

danap.


public class NewClass2
{
   public static void main(String[] args)
   {
      try
      {

         Class.forName("org.postgresql.Driver");
         java.sql.Connection conn = java.sql.DriverManager.getConnection(
            "jdbc:postgresql://192.168.157.32:5432/dev", "dev", "devmm");
         java.util.Enumeration<java.sql.Driver> drivers = 
java.sql.DriverManager.getDrivers();
         while (drivers.hasMoreElements())
         {
            java.sql.Driver d = drivers.nextElement();
            System.out.println(d.toString() + ": " + d.getMajorVersion() + "." 
+ d.getMinorVersion());
         }

         java.sql.PreparedStatement ps_ver = conn.prepareStatement("SELECT 
version()");
         java.sql.ResultSet rs = ps_ver.executeQuery();
         while (rs.next())
            System.out.println(rs.getString(1));
         
         
         java.sql.Statement dbStatement = conn.createStatement();
         dbStatement.executeUpdate("DROP TABLE IF EXISTS public.aab");
         
         java.sql.PreparedStatement ps_create = conn.prepareStatement("CREATE 
TABLE public.aab ("
                                           + "ia integer[], " + "sa smallint[], 
"
                                           + "ba boolean[] )");
         ps_create.executeUpdate();

         java.sql.PreparedStatement ps_insert = conn
               .prepareStatement("INSERT INTO public.aab (ia,sa,ba) VALUES 
(?,?,?)");
         ps_insert.setArray(1, conn.createArrayOf("int4", new Integer[] {1, 
2}));
         ps_insert.setArray(2, conn.createArrayOf("int2", new Short[] {100, 
200}));
         ps_insert.setArray(3, conn.createArrayOf("bool", new Boolean[] {false, 
true}));
         ps_insert.executeUpdate();

         java.sql.PreparedStatement ps_select = conn.prepareStatement("SELECT 
ia,sa,ba FROM public.aab");

         rs = ps_select.executeQuery();

         java.sql.Array jdbcArr;

         while (rs.next())
         {

            System.out.println("Integer[]");
            jdbcArr = rs.getArray("ia");
            Integer[] javaIntArr = (Integer[]) jdbcArr.getArray();
            System.out.println(javaIntArr[0] + " " + javaIntArr[1]);
            System.out.println(String.format("%s: %d %d", 
jdbcArr.getBaseTypeName(), java.sql.Types.INTEGER,
               jdbcArr.getBaseType()));
            System.out.println("END  Integer[]");

            System.out.println("Boolean[]");
            jdbcArr = rs.getArray("ba");
            Boolean[] javaBooArr = (Boolean[]) jdbcArr.getArray();
            System.out.println(javaBooArr[0] + " " + javaBooArr[1]);
            System.out.println(String.format("%s: %d %d   %d", 
jdbcArr.getBaseTypeName(),
               java.sql.Types.BOOLEAN, jdbcArr.getBaseType(), 
java.sql.Types.BIT));
            System.out.println("END  Boolean[]");

            System.out.println("Short[]");
            jdbcArr = rs.getArray("sa");
            Short[] javaShoArr = (Short[]) jdbcArr.getArray();
            System.out.println(javaShoArr[0] + " " + javaShoArr[1]);
            System.out.println(String.format("%s: %d %d", 
jdbcArr.getBaseTypeName(), java.sql.Types.SMALLINT,
               jdbcArr.getBaseType()));
            System.out.println("END  Short[]");
         }
         rs.close();
         dbStatement.close();
         conn.close();
      }
      catch (Exception e)
      {
         System.out.println(e.toString());
      }
   } // main
} // class
-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to