Changeset: 46dde2b2c991 for monetdb-java URL: http://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=46dde2b2c991 Modified Files: src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java Branch: default Log Message:
Small code improvements diffs (266 lines): diff --git a/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java b/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java --- a/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java +++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java @@ -83,7 +83,7 @@ public class MonetResultSet extends Mone /** The JDBC SQL types of the columns in this ResultSet. The content will be derived from the MonetDB types[] */ private final int[] JdbcSQLTypes; /** The number of rows in this ResultSet */ - final int tupleCount; // default for the MonetVirtualResultSet + final int tupleCount; /** The parental Statement object */ private final Statement statement; @@ -326,7 +326,7 @@ public class MonetResultSet extends Mone */ @Override public int findColumn(String columnName) throws SQLException { - if (columnName != null && columns != null) { + if (columnName != null) { final int array_size = columns.length; for (int i = 0; i < array_size; i++) { if (columnName.equals(columns[i])) @@ -1354,7 +1354,7 @@ public class MonetResultSet extends Mone return true; case Types.VARCHAR: String monettype = getColumnTypeName(column); - if (monettype != null) { + if (monettype != null && monettype.length() == 4) { // data of type inet or uuid is not case sensitive if ("inet".equals(monettype) || "uuid".equals(monettype)) @@ -1421,7 +1421,7 @@ public class MonetResultSet extends Mone return true; case Types.BIGINT: String monettype = getColumnTypeName(column); - if (monettype != null) { + if (monettype != null && monettype.length() == 3) { // data of type oid or ptr is not signed if ("oid".equals(monettype) || "ptr".equals(monettype)) @@ -1450,16 +1450,13 @@ public class MonetResultSet extends Mone @Override public int getColumnDisplaySize(int column) throws SQLException { int ret = 1; - - if (header == null) - return ret; - - try { - ret = header.getColumnLengths()[column - 1]; - } catch (IndexOutOfBoundsException e) { - throw newSQLInvalidColumnIndexException(column); + if (header != null) { + try { + ret = header.getColumnLengths()[column - 1]; + } catch (IndexOutOfBoundsException e) { + throw newSQLInvalidColumnIndexException(column); + } } - return ret; } @@ -1472,22 +1469,18 @@ public class MonetResultSet extends Mone */ @Override public String getSchemaName(int column) throws SQLException { - String schema = ""; - - if (header == null) - return schema; - - // figure the name out - try { - schema = header.getTableNames()[column - 1]; - if (schema != null) { - int dot = schema.indexOf('.'); - return (dot >= 0) ? schema.substring(0, dot) : ""; + if (header != null) { + // figure the name out + try { + String schema = header.getTableNames()[column - 1]; + if (schema != null) { + int dot = schema.indexOf('.'); + return (dot >= 0) ? schema.substring(0, dot) : ""; + } + } catch (IndexOutOfBoundsException e) { + throw newSQLInvalidColumnIndexException(column); } - } catch (IndexOutOfBoundsException e) { - throw newSQLInvalidColumnIndexException(column); } - return ""; } @@ -1499,22 +1492,18 @@ public class MonetResultSet extends Mone */ @Override public String getTableName(int column) throws SQLException { - String table = ""; - - if (header == null) - return table; - - // figure the name out - try { - table = header.getTableNames()[column - 1]; - if (table != null) { - int dot = table.indexOf('.'); - return (dot >= 0) ? table.substring(dot + 1) : table; + if (header != null) { + // figure the name out + try { + String table = header.getTableNames()[column - 1]; + if (table != null) { + int dot = table.indexOf('.'); + return (dot >= 0) ? table.substring(dot + 1) : table; + } + } catch (IndexOutOfBoundsException e) { + throw newSQLInvalidColumnIndexException(column); } - } catch (IndexOutOfBoundsException e) { - throw newSQLInvalidColumnIndexException(column); } - return ""; } @@ -1709,11 +1698,12 @@ public class MonetResultSet extends Mone conn = getStatement().getConnection(); } try { + String MonetDBType = types[column - 1]; Class<?> type = null; if (conn != null) { Map<String,Class<?>> map = conn.getTypeMap(); - if (map != null && map.containsKey(types[column - 1])) { - type = (Class)map.get(types[column - 1]); + if (map != null && map.containsKey(MonetDBType)) { + type = (Class)map.get(MonetDBType); } } if (type == null) { @@ -1723,7 +1713,7 @@ public class MonetResultSet extends Mone if (type != null) { return type.getName(); } - throw new SQLException("column type mapping null: " + types[column - 1], "M0M03"); + throw new SQLException("column type mapping null: " + MonetDBType, "M0M03"); } catch (IndexOutOfBoundsException e) { throw newSQLInvalidColumnIndexException(column); } @@ -1820,7 +1810,6 @@ public class MonetResultSet extends Mone public Object getObject(int columnIndex) throws SQLException { // Many generic JDBC programs use getObject(colnr) to retrieve value objects from a resultset // For speed the implementation should be as fast as possible, so avoid method calls (by inlining code) where possible - final String MonetDBType; final int JdbcType; final String val; try { @@ -1830,7 +1819,6 @@ public class MonetResultSet extends Mone return null; } lastReadWasNull = false; - MonetDBType = types[columnIndex - 1]; JdbcType = JdbcSQLTypes[columnIndex - 1]; } catch (IndexOutOfBoundsException e) { throw newSQLInvalidColumnIndexException(columnIndex); @@ -1881,24 +1869,12 @@ public class MonetResultSet extends Mone return Boolean.valueOf(val); case Types.VARCHAR: { + // The MonetDB types: inet, json, url and uuid are all mapped to Types.VARCHAR in MonetDriver.typeMap // For these MonetDB types (except json, see comments below) we try to create objects of the corresponding class. - // As in most cases when we get here the MonetDBtype will be "varchar". For efficiency we compare - // the MonetDBtype first letter to see if we can skip the three .equals(MonetDBType) method calls. - char firstletter = MonetDBType.charAt(0); - if (firstletter == 'i') { - if ("inet".equals(MonetDBType)) { - try { - nl.cwi.monetdb.jdbc.types.INET inet_obj = new nl.cwi.monetdb.jdbc.types.INET(); - inet_obj.fromString(val); - return inet_obj; - } catch (Exception exc) { - // ignore exception and just return the val String object - return val; - } - } - } - else if (firstletter == 'u') { + String MonetDBType = types[columnIndex - 1]; + switch (MonetDBType.length()) { + case 3: if ("url".equals(MonetDBType)) { try { nl.cwi.monetdb.jdbc.types.URL url_obj = new nl.cwi.monetdb.jdbc.types.URL(); @@ -1912,6 +1888,18 @@ public class MonetResultSet extends Mone return val; } } + break; + case 4: + if ("inet".equals(MonetDBType)) { + try { + nl.cwi.monetdb.jdbc.types.INET inet_obj = new nl.cwi.monetdb.jdbc.types.INET(); + inet_obj.fromString(val); + return inet_obj; + } catch (Exception exc) { + // ignore exception and just return the val String object + return val; + } + } else if ("uuid".equals(MonetDBType)) { try { return java.util.UUID.fromString(val); @@ -1919,9 +1907,7 @@ public class MonetResultSet extends Mone // ignore exception and just return the val String object return val; } - } - } -// else if (firstletter == 'j') { +// } else // if ("json".equals(MonetDBType)) { // There is no support for JSON in standard java class libraries. // Possibly we could use org.json.simple.JSONObject or other/faster libs @@ -1930,8 +1916,9 @@ public class MonetResultSet extends Mone // Note that it would make our JDBC driver dependent of an external jar // and we don't want that so simply return it as String object // return val; -// } -// } + } + break; + } return val; } case Types.CHAR: @@ -2636,20 +2623,17 @@ public class MonetResultSet extends Mone throw newSQLInvalidColumnIndexException(columnIndex); } - // we know whether we have a time with or without - // time zone if the monet type ends with "tz" - boolean hasTimeZone = (MonetDBType != null) ? MonetDBType.endsWith("tz") : false; TimeZone ptz = cal.getTimeZone(); // it is important to parse the time in the given timezone in // order to get a correct (UTC) time value, hence we need to // parse it first - if (hasTimeZone) { - // MonetDB/SQL99: Sign TwoDigitHours : Minutes - ptz = TimeZone.getTimeZone("GMT" + - monetDate.substring( - monetDate.length() - 6, - monetDate.length())); + if (MonetDBType != null && ("timetz".equals(MonetDBType) || "timestamptz".equals(MonetDBType))) { + int vallen = monetDate.length(); + if (vallen >= 6) { + // MonetDB/SQL99: Sign TwoDigitHours : Minutes + ptz = TimeZone.getTimeZone("GMT" + monetDate.substring(vallen - 6, vallen)); + } } java.util.Date pdate = null; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list