/*------------------------------------------------------------------------- * * Copyright (c) 2005, PostgreSQL Global Development Group * * IDENTIFICATION * $PostgreSQL: pgjdbc/org/postgresql/jdbc2/TypeInfoCache.java,v 1.1 2005/04/10 21:54:16 jurka Exp $ * *------------------------------------------------------------------------- */ package org.postgresql.jdbc2; import java.util.Map; import java.util.HashMap; import java.util.Iterator; import java.util.Collections; import java.sql.Types; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.PreparedStatement; import org.postgresql.core.Oid; import org.postgresql.core.BaseStatement; import org.postgresql.core.BaseConnection; import org.postgresql.core.QueryExecutor; import org.postgresql.util.GT; import org.postgresql.util.PGobject; import org.postgresql.util.PSQLState; import org.postgresql.util.PSQLException; public class TypeInfoCache { // pgname (String) -> java.sql.Types (Integer) private Map _pgNameToSQLType; // pgname (String) -> java class name (String) // ie "text" -> "java.lang.String" private Map _pgNameToJavaClass; // oid (Integer) -> pgname (String) private Map _oidToPgName; // pgname (String) -> oid (Integer) private Map _pgNameToOid; // pgname (String) -> extension pgobject (Class) private Map _pgNameToPgObject; private BaseConnection _conn; private PreparedStatement _getOidStatement; private PreparedStatement _getNameStatement; private static Object types[][] = { {"int2", new Integer(Oid.INT2), new Integer(Types.SMALLINT), "java.lang.Short"}, {"int4", new Integer(Oid.INT4), new Integer(Types.INTEGER), "java.lang.Integer"}, {"oid", new Integer(Oid.OID), new Integer(Types.INTEGER), "java.lang.Integer"}, {"int8", new Integer(Oid.INT8), new Integer(Types.BIGINT), "java.lang.Long"}, {"money", new Integer(Oid.MONEY), new Integer(Types.DOUBLE), "java.lang.Double"}, {"numeric", new Integer(Oid.NUMERIC), new Integer(Types.NUMERIC), "java.math.BigDecimal"}, {"float4", new Integer(Oid.FLOAT4), new Integer(Types.REAL), "java.lang.Float"}, {"float8", new Integer(Oid.FLOAT8), new Integer(Types.DOUBLE), "java.lang.Double"}, {"bpchar", new Integer(Oid.BPCHAR), new Integer(Types.CHAR), "java.lang.String"}, {"varchar", new Integer(Oid.VARCHAR), new Integer(Types.VARCHAR), "java.lang.String"}, {"text", new Integer(Oid.TEXT), new Integer(Types.VARCHAR), "java.lang.String"}, {"name", new Integer(Oid.NAME), new Integer(Types.VARCHAR), "java.lang.String"}, {"bytea", new Integer(Oid.BYTEA), new Integer(Types.BINARY), "java.io.InputStream"}, {"bool", new Integer(Oid.BOOL), new Integer(Types.BIT), "java.lang.Boolean"}, {"bit", new Integer(Oid.BIT), new Integer(Types.BIT), "java.lang.Boolean"}, {"date", new Integer(Oid.DATE), new Integer(Types.DATE), "java.sql.Date"}, {"time", new Integer(Oid.TIME), new Integer(Types.TIME), "java.sql.Time"}, {"timetz", new Integer(Oid.TIMETZ), new Integer(Types.TIME), "java.sql.Time"}, {"timestamp", new Integer(Oid.TIMESTAMP), new Integer(Types.TIMESTAMP), "java.sql.Timestamp"}, {"timestamptz", new Integer(Oid.TIMESTAMPTZ), new Integer(Types.TIMESTAMP), "java.sql.Timestamp"} }; public TypeInfoCache(BaseConnection conn) { _conn = conn; _oidToPgName = new HashMap(); _pgNameToOid = new HashMap(); _pgNameToSQLType = new HashMap(); _pgNameToJavaClass = new HashMap(); _pgNameToPgObject = new HashMap(); for (int i=0; i