Changeset: 1956d8ba5ad3 for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java/rev/1956d8ba5ad3 Modified Files: src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java Branch: default Log Message:
Optimise getMetaData(). We can compute the number of result columns, so avoid to go through all metadata entries in column[] to test if it is a result column. diffs (105 lines): diff --git a/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java b/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java --- a/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java +++ b/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java @@ -357,14 +357,7 @@ public class MonetPreparedStatement if (rsmd == null) { // first use, construct the arrays with metadata and a // ResultSetMetaData object once and reuse it for all next calls - int rescolcount = 0; - for (int i = 0; i < size; i++) { - /* when column[i] == null it is a parameter, - when column[i] != null it is a result column of the prepared query */ - if (column[i] == null) - continue; - rescolcount++; - } + final int rescolcount = size - paramCount; int array_size = rescolcount; if (array_size == 0) { // there are no resultset columns for this prepared statement @@ -380,62 +373,56 @@ public class MonetPreparedStatement final int[] lengths = new int[array_size]; final int[] precisions = new int[array_size]; final int[] scales = new int[array_size]; - // now fill the arrays with only the resultset columns metadata - rescolcount = 0; - for (int i = 0; i < size; i++) { - /* when column[i] == null it is a parameter, - when column[i] != null it is a result column of the prepared query */ - if (column[i] == null) - continue; - schemas[rescolcount] = schema[i]; - tables[rescolcount] = table[i]; - columns[rescolcount] = column[i]; - types[rescolcount] = monetdbType[i]; - jdbcTypes[rescolcount] = javaType[i]; - switch (jdbcTypes[rescolcount]) { + // fill the arrays with the resultset columns metadata + for (int i = 0; i < rescolcount; i++) { + schemas[i] = schema[i]; + tables[i] = table[i]; + columns[i] = column[i]; + types[i] = monetdbType[i]; + jdbcTypes[i] = javaType[i]; + switch (jdbcTypes[i]) { case Types.BIGINT: - lengths[rescolcount] = 19; + lengths[i] = 19; break; case Types.INTEGER: - lengths[rescolcount] = 10; + lengths[i] = 10; break; case Types.SMALLINT: - lengths[rescolcount] = 5; + lengths[i] = 5; break; case Types.TINYINT: - lengths[rescolcount] = 3; + lengths[i] = 3; break; case Types.REAL: - lengths[rescolcount] = 7; + lengths[i] = 7; break; case Types.FLOAT: case Types.DOUBLE: - lengths[rescolcount] = 15; + lengths[i] = 15; break; case Types.DATE: - lengths[rescolcount] = 10; // 2020-10-08 + lengths[i] = 10; // 2020-10-08 break; case Types.TIME: - lengths[rescolcount] = 15; // 21:51:34.399753 + lengths[i] = 15; // 21:51:34.399753 break; case Types.TIME_WITH_TIMEZONE: - lengths[rescolcount] = 21; // 21:51:34.399753+02:00 + lengths[i] = 21; // 21:51:34.399753+02:00 break; case Types.TIMESTAMP: - lengths[rescolcount] = 26; // 2020-10-08 21:51:34.399753 + lengths[i] = 26; // 2020-10-08 21:51:34.399753 break; case Types.TIMESTAMP_WITH_TIMEZONE: - lengths[rescolcount] = 32; // 2020-10-08 21:51:34.399753+02:00 + lengths[i] = 32; // 2020-10-08 21:51:34.399753+02:00 break; case Types.BOOLEAN: - lengths[rescolcount] = 5; // true or false + lengths[i] = 5; // true or false break; default: - lengths[rescolcount] = digits[i]; + lengths[i] = digits[i]; } - precisions[rescolcount] = digits[i]; - scales[rescolcount] = scale[i]; - rescolcount++; + precisions[i] = digits[i]; + scales[i] = scale[i]; } rsmd = new MonetResultSetMetaData((MonetConnection) getConnection(), rescolcount, _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org