annotate src/main/java/org/monetdb/jdbc/MonetResultSetMetaData.java @ 973:32f246853ec4 default tip

Optimisation, call connection.mapClobAsVarChar() and connection.mapBlobAsVarBinary() outside the for-loop, as it does not change.
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Thu, 10 Apr 2025 19:26:59 +0200 (8 days ago)
parents ff075ed5ce81
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1 /*
833
e890195256ac Update copyright for the new year, move to MonetDB Foundation, add SPDX.
Sjoerd Mullender <sjoerd@acm.org>
parents: 766
diff changeset
2 * SPDX-License-Identifier: MPL-2.0
e890195256ac Update copyright for the new year, move to MonetDB Foundation, add SPDX.
Sjoerd Mullender <sjoerd@acm.org>
parents: 766
diff changeset
3 *
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
4 * This Source Code Form is subject to the terms of the Mozilla Public
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
7 *
937
d416e9b6b3d0 Update Copyright year.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 888
diff changeset
8 * Copyright 2024, 2025 MonetDB Foundation;
833
e890195256ac Update copyright for the new year, move to MonetDB Foundation, add SPDX.
Sjoerd Mullender <sjoerd@acm.org>
parents: 766
diff changeset
9 * Copyright August 2008 - 2023 MonetDB B.V.;
e890195256ac Update copyright for the new year, move to MonetDB Foundation, add SPDX.
Sjoerd Mullender <sjoerd@acm.org>
parents: 766
diff changeset
10 * Copyright 1997 - July 2008 CWI.
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
11 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
12
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
13 package org.monetdb.jdbc;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
14
714
ad7b08ef7745 Moving static method getClassForType() from MonetResulSet to MonetDriver class which is a much more logical place.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 713
diff changeset
15 import java.sql.ResultSetMetaData;
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
16 import java.sql.SQLException;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
17 import java.sql.Types;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
18
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
19 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
20 *<pre>
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
21 * A {@link ResultSetMetaData} suitable for the MonetDB database.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
22 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
23 * An object that can be used to get information about the types and
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
24 * properties of the columns in a ResultSet object.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
25 *</pre>
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
26 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
27 * @author Martin van Dinther
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
28 * @version 1.0
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
29 */
718
7138bbc6952e Do not make this class public as it is to be used only within this package.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 717
diff changeset
30 final class MonetResultSetMetaData
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
31 extends MonetWrapper
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
32 implements ResultSetMetaData
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
33 {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
34 /** The parental Connection object */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
35 private final MonetConnection conn;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
36
717
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
37 /** The number of columns, it can be zero !! */
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
38 private final int colCount;
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
39
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
40 /** The schema names of the columns in this ResultSet */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
41 private final String[] schemas;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
42 /** The table names of the columns in this ResultSet */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
43 private final String[] tables;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
44 /** The names of the columns in this ResultSet */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
45 private final String[] columns;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
46 /** The MonetDB type names of the columns in this ResultSet */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
47 private final String[] types;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
48 /** The JDBC SQL type codes of the columns in this ResultSet.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
49 * The content will be derived once from the MonetDB String[] types */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
50 private final int[] JdbcSQLTypes;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
51 /** The lengths of the columns in this ResultSet */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
52 private final int[] lengths;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
53 /** The precisions of the columns in this ResultSet */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
54 private final int[] precisions;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
55 /** The scales of the columns in this ResultSet */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
56 private final int[] scales;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
57
720
99baab703566 Resolve some javac -Xdoclint warnings
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 718
diff changeset
58 /**
99baab703566 Resolve some javac -Xdoclint warnings
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 718
diff changeset
59 * For the methods: isNullable() and isAutoIncrement(), we need to query the server.
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
60 * To do this efficiently we query many columns combined in one SELECT
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
61 * query and cache the results in following arrays.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
62 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
63 private final int array_size;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
64 /** Whether info for a column is already queried or not */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
65 private final boolean[] _is_queried;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
66 /** Whether info for a column is already fetched or not */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
67 private final boolean[] _is_fetched;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
68 /** The nullability of the columns in this ResultSet */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
69 private final int[] _isNullable;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
70 /** The auto increment property of the columns in this ResultSet */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
71 private final boolean[] _isAutoincrement;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
72 /** an upper bound value to calculate the range of columns to query */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
73 private int nextUpperbound;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
74
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
75
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
76 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
77 * Main constructor backed by the given connection and header.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
78 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
79 * @param connection the parent connection
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
80 * @param header a ResultSetResponse containing the metadata
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
81 * @throws IllegalArgumentException if called with null for one of the arguments
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
82 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
83 MonetResultSetMetaData(
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
84 final MonetConnection connection,
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
85 final MonetConnection.ResultSetResponse header)
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
86 throws IllegalArgumentException
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
87 {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
88 if (connection == null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
89 throw new IllegalArgumentException("Connection may not be null!");
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
90 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
91 if (header == null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
92 throw new IllegalArgumentException("Header may not be null!");
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
93 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
94 this.conn = connection;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
95 schemas = header.getSchemaNames();
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
96 tables = header.getTableNames();
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
97 columns = header.getNames();
886
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
98 types = header.getTypes();
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
99 lengths = header.getColumnLengths();
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
100 precisions = header.getColumnPrecisions();
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
101 scales = header.getColumnScales();
886
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
102 if (schemas == null) {
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
103 throw new IllegalArgumentException("Schemas may not be null!");
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
104 }
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
105 if (tables == null) {
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
106 throw new IllegalArgumentException("Tables may not be null!");
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
107 }
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
108 if (columns == null) {
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
109 throw new IllegalArgumentException("Columns may not be null!");
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
110 }
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
111 if (types == null) {
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
112 throw new IllegalArgumentException("MonetDB Types may not be null!");
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
113 }
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
114 if (lengths == null) {
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
115 throw new IllegalArgumentException("Lengths may not be null!");
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
116 }
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
117 // Note: the precisions and scales arrays are null when the statement is a PLAN, EXPLAIN or TRACE statement !!
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
118
717
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
119 colCount = columns.length;
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
120 if (columns.length != tables.length || columns.length != types.length ) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
121 throw new IllegalArgumentException("Inconsistent Header metadata");
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
122 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
123
973
32f246853ec4 Optimisation, call connection.mapClobAsVarChar() and connection.mapBlobAsVarBinary() outside the for-loop, as it does not change.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 943
diff changeset
124 final boolean mapClobAsVarChar = connection.mapClobAsVarChar();
32f246853ec4 Optimisation, call connection.mapClobAsVarChar() and connection.mapBlobAsVarBinary() outside the for-loop, as it does not change.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 943
diff changeset
125 final boolean mapBlobAsVarBinary = connection.mapBlobAsVarBinary();
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
126 // derive the JDBC SQL type codes from the types[] names once
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
127 JdbcSQLTypes = new int[types.length];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
128 for (int i = 0; i < types.length; i++) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
129 int javaSQLtype = MonetDriver.getJdbcSQLType(types[i]);
973
32f246853ec4 Optimisation, call connection.mapClobAsVarChar() and connection.mapBlobAsVarBinary() outside the for-loop, as it does not change.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 943
diff changeset
130 if (javaSQLtype == Types.CLOB && mapClobAsVarChar) {
32f246853ec4 Optimisation, call connection.mapClobAsVarChar() and connection.mapBlobAsVarBinary() outside the for-loop, as it does not change.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 943
diff changeset
131 javaSQLtype = Types.VARCHAR;
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
132 } else
973
32f246853ec4 Optimisation, call connection.mapClobAsVarChar() and connection.mapBlobAsVarBinary() outside the for-loop, as it does not change.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 943
diff changeset
133 if (javaSQLtype == Types.BLOB && mapBlobAsVarBinary) {
32f246853ec4 Optimisation, call connection.mapClobAsVarChar() and connection.mapBlobAsVarBinary() outside the for-loop, as it does not change.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 943
diff changeset
134 javaSQLtype = Types.VARBINARY;
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
135 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
136 JdbcSQLTypes[i] = javaSQLtype;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
137 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
138
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
139 // initialize structures for storing columns info on nullability and autoincrement
717
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
140 array_size = colCount + 1; // add 1 as in JDBC columns start from 1 (array from 0).
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
141 _is_queried = new boolean[array_size];
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
142 _is_fetched = new boolean[array_size];
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
143 _isNullable = new int[array_size];
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
144 _isAutoincrement = new boolean[array_size];
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
145 nextUpperbound = array_size;
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
146 }
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
147
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
148 /**
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
149 * Alternative constructor backed by the given connection and metadata arrays.
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
150 * It is used by MonetPreparedStatement.
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
151 *
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
152 * @param connection the parent connection
720
99baab703566 Resolve some javac -Xdoclint warnings
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 718
diff changeset
153 * @param colcount the number of result columns, it can be zero !!
717
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
154 * @param schemas the schema names
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
155 * @param tables the table names
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
156 * @param columns the column names
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
157 * @param types the MonetDB type names
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
158 * @param jdbcTypes the JDBC SQL type codes
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
159 * @param lengths the maximum display length for each column
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
160 * @param precisions the precision for each column
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
161 * @param scales the scale for each column
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
162 * @throws IllegalArgumentException if called with null for one of the arguments
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
163 */
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
164 MonetResultSetMetaData(
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
165 final MonetConnection connection,
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
166 final int colcount,
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
167 final String[] schemas,
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
168 final String[] tables,
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
169 final String[] columns,
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
170 final String[] types,
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
171 final int[] jdbcTypes,
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
172 final int[] lengths,
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
173 final int[] precisions,
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
174 final int[] scales)
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
175 throws IllegalArgumentException
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
176 {
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
177 if (connection == null) {
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
178 throw new IllegalArgumentException("Connection may not be null!");
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
179 }
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
180 if (schemas == null) {
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
181 throw new IllegalArgumentException("Schemas may not be null!");
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
182 }
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
183 if (tables == null) {
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
184 throw new IllegalArgumentException("Tables may not be null!");
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
185 }
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
186 if (columns == null) {
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
187 throw new IllegalArgumentException("Columns may not be null!");
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
188 }
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
189 if (types == null) {
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
190 throw new IllegalArgumentException("MonetDB Types may not be null!");
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
191 }
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
192 if (jdbcTypes == null) {
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
193 throw new IllegalArgumentException("JDBC Types may not be null!");
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
194 }
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
195 if (lengths == null) {
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
196 throw new IllegalArgumentException("Lengths may not be null!");
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
197 }
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
198 if (precisions == null) {
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
199 throw new IllegalArgumentException("Precisions may not be null!");
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
200 }
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
201 if (scales == null) {
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
202 throw new IllegalArgumentException("Scales may not be null!");
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
203 }
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
204 if (columns.length != tables.length || columns.length != types.length ) {
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
205 throw new IllegalArgumentException("Inconsistent Header metadata");
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
206 }
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
207 this.conn = connection;
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
208 this.colCount = colcount;
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
209 this.schemas = schemas;
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
210 this.tables = tables;
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
211 this.columns = columns;
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
212 this.lengths = lengths;
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
213 this.types = types;
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
214 this.JdbcSQLTypes = jdbcTypes;
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
215 this.precisions = precisions;
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
216 this.scales = scales;
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
217
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
218 // initialize structures for storing columns info on nullability and autoincrement
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
219 array_size = colCount + 1; // add 1 as in JDBC columns start from 1 (array from 0).
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
220 _is_queried = new boolean[array_size];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
221 _is_fetched = new boolean[array_size];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
222 _isNullable = new int[array_size];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
223 _isAutoincrement = new boolean[array_size];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
224 nextUpperbound = array_size;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
225 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
226
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
227 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
228 * Returns the number of columns in this ResultSet object.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
229 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
230 * @return the number of columns
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
231 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
232 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
233 public int getColumnCount() {
717
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
234 // for debug: System.out.println("In rsmd.getColumnCount() = " + colCount + ". this rsmd object = " + this.toString());
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
235 return colCount;
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
236 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
237
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
238 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
239 * Indicates whether the designated column is automatically numbered.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
240 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
241 * This method is currently very expensive for BIGINT,
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
242 * INTEGER, SMALLINT and TINYINT result column types
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
243 * as it needs to retrieve the information from the
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
244 * database using an SQL meta data query.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
245 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
246 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
247 * @return true if so; false otherwise
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
248 * @throws SQLException if there is no such column or a database access error occurs
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
249 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
250 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
251 public boolean isAutoIncrement(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
252 // only few integer types can be auto incrementable in MonetDB
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
253 // see: https://www.monetdb.org/Documentation/SQLReference/DataTypes/SerialDatatypes
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
254 switch (getColumnType(column)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
255 case Types.BIGINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
256 case Types.INTEGER:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
257 case Types.SMALLINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
258 case Types.TINYINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
259 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
260 if (_is_fetched[column] != true) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
261 fetchColumnInfo(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
262 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
263 return _isAutoincrement[column];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
264 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
265 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
266 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
267 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
268
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
269 return false;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
270 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
271
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
272 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
273 * Indicates whether a column's case matters.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
274 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
275 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
276 * @return true for all character string columns else false
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
277 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
278 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
279 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
280 public boolean isCaseSensitive(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
281 switch (getColumnType(column)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
282 case Types.CHAR:
735
3dd0d43014e8 Disable checks for Types.LONGVARCHAR and Types.LONGVARBINARY as MonetDB server does not support these data types, and no mappings exists to these JDBC Types and thus these cases will never be reached in JDBC Driver.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 726
diff changeset
283 /* case Types.LONGVARCHAR: // MonetDB doesn't use type LONGVARCHAR */
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
284 case Types.CLOB:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
285 return true;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
286 case Types.VARCHAR:
766
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
287 try {
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
288 final String monettype = types[column - 1];
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
289 // data of type inet or uuid is not case sensitive
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
290 if ("inet".equals(monettype)
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
291 || "uuid".equals(monettype))
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
292 return false;
766
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
293 } catch (IndexOutOfBoundsException e) {
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
294 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
295 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
296 return true;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
297 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
298
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
299 return false;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
300 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
301
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
302 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
303 * Indicates whether the designated column can be used in a
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
304 * where clause.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
305 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
306 * Returning true for all here, even for CLOB, BLOB.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
307 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
308 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
309 * @return true
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
310 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
311 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
312 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
313 public boolean isSearchable(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
314 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
315 return true;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
316 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
317
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
318 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
319 * Indicates whether the designated column is a cash value.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
320 * From the MonetDB database perspective it is by definition
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
321 * unknown whether the value is a currency, because there are
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
322 * no currency datatypes such as MONEY. With this knowledge
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
323 * we can always return false here.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
324 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
325 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
326 * @return false
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
327 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
328 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
329 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
330 public boolean isCurrency(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
331 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
332 return false;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
333 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
334
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
335 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
336 * Indicates the nullability of values in the designated column.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
337 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
338 * This method is currently very expensive as it needs to
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
339 * retrieve the information from the database using an SQL
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
340 * meta data query.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
341 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
342 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
343 * @return the nullability status of the given column; one of
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
344 * columnNoNulls, columnNullable or columnNullableUnknown
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
345 * @throws SQLException if there is no such column or a database access error occurs
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
346 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
347 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
348 public int isNullable(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
349 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
350 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
351 if (_is_fetched[column] != true) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
352 fetchColumnInfo(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
353 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
354 return _isNullable[column];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
355 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
356 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
357 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
358 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
359
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
360 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
361 * Indicates whether values in the designated column are signed
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
362 * numbers.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
363 * Within MonetDB all numeric types (except oid and ptr) are signed.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
364 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
365 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
366 * @return true if so; false otherwise
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
367 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
368 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
369 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
370 public boolean isSigned(final int column) throws SQLException {
943
ff075ed5ce81 Spell check.
Sjoerd Mullender <sjoerd@acm.org>
parents: 937
diff changeset
371 // we can hardcode this, based on the column type
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
372 switch (getColumnType(column)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
373 case Types.TINYINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
374 case Types.SMALLINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
375 case Types.INTEGER:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
376 case Types.REAL:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
377 case Types.FLOAT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
378 case Types.DOUBLE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
379 case Types.DECIMAL:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
380 case Types.NUMERIC:
885
e1f00e0e3598 Improve isSigned() information on result columns and parameters of Types.DATE, Types.TIMESTAMP and Types.TIMESTAMP_WITH_TIMEZONE. These can have a negative year.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 833
diff changeset
381 case Types.DATE: // year can be negative
e1f00e0e3598 Improve isSigned() information on result columns and parameters of Types.DATE, Types.TIMESTAMP and Types.TIMESTAMP_WITH_TIMEZONE. These can have a negative year.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 833
diff changeset
382 case Types.TIMESTAMP: // year can be negative
e1f00e0e3598 Improve isSigned() information on result columns and parameters of Types.DATE, Types.TIMESTAMP and Types.TIMESTAMP_WITH_TIMEZONE. These can have a negative year.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 833
diff changeset
383 case Types.TIMESTAMP_WITH_TIMEZONE:
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
384 return true;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
385 case Types.BIGINT:
766
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
386 try {
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
387 final String monettype = types[column - 1];
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
388 // data of type oid or ptr is not signed
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
389 if ("oid".equals(monettype)
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
390 || "ptr".equals(monettype))
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
391 return false;
766
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
392 } catch (IndexOutOfBoundsException e) {
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
393 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
394 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
395 return true;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
396 default:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
397 return false;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
398 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
399 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
400
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
401 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
402 * Indicates the designated column's normal maximum width in
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
403 * characters.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
404 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
405 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
406 * @return the normal maximum number of characters allowed as the
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
407 * width of the designated column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
408 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
409 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
410 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
411 public int getColumnDisplaySize(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
412 checkColumnIndexValidity(column);
886
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
413 try {
888
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
414 // Special handling for interval types
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
415 final String monettype = types[column - 1];
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
416 if (monettype != null && monettype.endsWith("_interval")) {
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
417 /* for interval types, precisions[] contains the interval subtype code */
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
418 int prec = -1;
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
419 if (precisions != null) {
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
420 prec = precisions[column - 1];
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
421 }
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
422 switch (prec) {
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
423 case 1: return 4; // interval year
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
424 case 2: return 6; // interval year to month
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
425 case 3: return 6; // interval month
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
426 case 4: return 9; // interval day
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
427 case 5: return 11; // interval day to hour
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
428 case 6: return 13; // interval day to minute
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
429 case 7: return 15; // interval day to second
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
430 case 8: return 11; // interval hour
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
431 case 9: return 13; // interval hour to minute
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
432 case 10: return 15; // interval hour to second
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
433 case 11: return 13; // interval minute
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
434 case 12: return 15; // interval minute to second
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
435 case 13: return 15; // interval second
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
436 default:
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
437 { // fall back to the 3 available monettype names
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
438 if ("sec_interval".equals(monettype))
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
439 return 15;
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
440 if ("day_interval".equals(monettype))
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
441 return 9;
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
442 if ("month_interval".equals(monettype))
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
443 return 6;
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
444 }
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
445 }
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
446 }
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
447 final int len = lengths[column - 1];
886
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
448 if (len == 0) {
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
449 // in case of inet it always has 0 as length. we need to correct it.
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
450 if ("inet".equals(monettype)) {
888
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
451 return 18; // 128.127.126.125/24
726
89bbd04036cd For type inet we always get 0 as length from the server. As inet has a maximum display length of 18 we should return that more useful value instead.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 725
diff changeset
452 }
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
453 }
886
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
454 return len;
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
455 } catch (IndexOutOfBoundsException e) {
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
456 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
457 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
458 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
459
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
460 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
461 * Gets the designated column's suggested title for use in
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
462 * printouts and displays. The suggested title is usually
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
463 * specified by the SQL AS clause. If a SQL AS is not specified,
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
464 * the value returned from getColumnLabel will be the same as
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
465 * the value returned by the getColumnName method.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
466 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
467 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
468 * @return the suggested column title
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
469 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
470 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
471 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
472 public String getColumnLabel(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
473 return getColumnName(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
474 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
475
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
476 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
477 * Gets the designated column's name
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
478 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
479 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
480 * @return the column name
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
481 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
482 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
483 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
484 public String getColumnName(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
485 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
486 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
487 return columns[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
488 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
489 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
490 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
491 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
492
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
493 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
494 * Gets the designated column's table's catalog name.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
495 * MonetDB does not support the catalog naming concept as in: catalog.schema.table naming scheme
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
496 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
497 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
498 * @return null or the name of the catalog for the table in which the given
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
499 * column appears or "" if not applicable
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
500 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
501 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
502 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
503 public String getCatalogName(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
504 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
505 return null; // MonetDB does NOT support catalog qualifiers
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
506
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
507 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
508
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
509 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
510 * Get the designated column's schema name.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
511 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
512 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
513 * @return schema name or "" if not applicable
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
514 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
515 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
516 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
517 public String getSchemaName(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
518 checkColumnIndexValidity(column);
886
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
519 try {
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
520 return schemas[column - 1];
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
521 } catch (IndexOutOfBoundsException e) {
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
522 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
523 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
524 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
525
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
526 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
527 * Gets the designated column's table name.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
528 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
529 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
530 * @return table name or "" if not applicable
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
531 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
532 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
533 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
534 public String getTableName(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
535 checkColumnIndexValidity(column);
886
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
536 try {
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
537 return tables[column - 1];
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
538 } catch (IndexOutOfBoundsException e) {
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
539 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
540 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
541 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
542
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
543 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
544 * Retrieves the designated column's SQL type.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
545 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
546 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
547 * @return SQL type from java.sql.Types
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
548 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
549 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
550 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
551 public int getColumnType(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
552 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
553 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
554 return JdbcSQLTypes[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
555 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
556 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
557 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
558 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
559
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
560 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
561 * Retrieves the designated column's database-specific type name.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
562 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
563 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
564 * @return type name used by the database. If the column type is a
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
565 * user-defined type, then a fully-qualified type name is
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
566 * returned.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
567 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
568 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
569 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
570 public String getColumnTypeName(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
571 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
572 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
573 final String monettype = types[column - 1];
725
224d73363dc9 Fixed issue when you create a new Statement, call getGeneratedKeys().getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 720
diff changeset
574 if (monettype != null && monettype.endsWith("_interval")) {
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
575 /* convert the interval type names to valid SQL data type names,
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
576 * such that generic applications can use them in create table statements
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
577 */
888
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
578 /* for interval types, precisions[] contains the interval subtype code */
887
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
579 int prec = -1;
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
580 if (precisions != null) {
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
581 prec = precisions[column - 1];
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
582 }
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
583 switch (prec) {
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
584 case 1: return "interval year";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
585 case 2: return "interval year to month";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
586 case 3: return "interval month";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
587 case 4: return "interval day";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
588 case 5: return "interval day to hour";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
589 case 6: return "interval day to minute";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
590 case 7: return "interval day to second";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
591 case 8: return "interval hour";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
592 case 9: return "interval hour to minute";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
593 case 10: return "interval hour to second";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
594 case 11: return "interval minute";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
595 case 12: return "interval minute to second";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
596 case 13: return "interval second";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
597 default: // when no precisions array was available
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
598 { // fall back to the 3 available monettype names
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
599 if ("day_interval".equals(monettype))
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
600 return "interval day";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
601 if ("month_interval".equals(monettype))
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
602 return "interval month";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
603 if ("sec_interval".equals(monettype))
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
604 return "interval second";
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
605 }
674f9ed21308 Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 886
diff changeset
606 }
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
607 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
608 return monettype;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
609 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
610 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
611 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
612 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
613
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
614 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
615 * Get the designated column's specified column size.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
616 * For numeric data, this is the maximum precision.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
617 * For character data, this is the length in characters.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
618 * For datetime datatypes, this is the length in characters
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
619 * of the String representation (assuming the maximum
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
620 * allowed precision of the fractional seconds component).
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
621 * For binary data, this is the length in bytes.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
622 * For the ROWID datatype, this is the length in bytes.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
623 * 0 is returned for data types where the column size is not applicable.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
624 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
625 * @param column the first column is 1, the second is 2, ...
717
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
626 * @return maximum precision or length in characters
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
627 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
628 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
629 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
630 public int getPrecision(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
631 switch (getColumnType(column)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
632 case Types.BIGINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
633 return 19;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
634 case Types.INTEGER:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
635 return 10;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
636 case Types.SMALLINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
637 return 5;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
638 case Types.TINYINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
639 return 3;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
640 case Types.REAL:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
641 return 7;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
642 case Types.FLOAT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
643 case Types.DOUBLE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
644 return 15;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
645 case Types.DECIMAL:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
646 case Types.NUMERIC:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
647 // these data types have a variable precision (max precision is 38)
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
648 if (precisions != null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
649 try {
888
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
650 // Special handling for: day_interval and sec_interval as they are
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
651 // mapped to Types.NUMERIC and Types.DECIMAL types (see MonetDriver typeMap)
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
652 final String monettype = types[column - 1];
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
653 if (monettype != null && monettype.endsWith("_interval")) {
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
654 /* for interval types, precisions[] contains the interval subtype code */
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
655 switch (precisions[column - 1]) {
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
656 case 1: return 4; // interval year
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
657 case 2: return 6; // interval year to month
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
658 case 3: return 6; // interval month
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
659 case 4: return 9; // interval day
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
660 case 5: return 11; // interval day to hour
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
661 case 6: return 13; // interval day to minute
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
662 case 7: return 15; // interval day to second
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
663 case 8: return 11; // interval hour
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
664 case 9: return 13; // interval hour to minute
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
665 case 10: return 15; // interval hour to second
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
666 case 11: return 13; // interval minute
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
667 case 12: return 15; // interval minute to second
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
668 case 13: return 15; // interval second
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
669 default:
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
670 { // fall back to the 3 available monettype names
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
671 if ("sec_interval".equals(monettype))
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
672 return 15;
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
673 if ("day_interval".equals(monettype))
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
674 return 9;
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
675 if ("month_interval".equals(monettype))
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
676 return 6;
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
677 }
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
678 }
549225b7be85 Corrected ResultSetMetaData methods getPrecision(), getColumnDisplaySize() and ParameterMetaData method getPrecision() for the interval data types. They now return more precise information for the 13 possible interval data types.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 887
diff changeset
679 }
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
680 return precisions[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
681 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
682 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
683 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
684 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
685 return 18;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
686 case Types.CHAR:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
687 case Types.VARCHAR:
735
3dd0d43014e8 Disable checks for Types.LONGVARCHAR and Types.LONGVARBINARY as MonetDB server does not support these data types, and no mappings exists to these JDBC Types and thus these cases will never be reached in JDBC Driver.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 726
diff changeset
688 /* case Types.LONGVARCHAR: // MonetDB doesn't use type LONGVARCHAR */
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
689 case Types.CLOB:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
690 // these data types have a variable length
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
691 if (precisions != null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
692 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
693 int prec = precisions[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
694 if (prec <= 0) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
695 // apparently no positive precision or max length could be fetched
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
696 // use columnDisplaySize() value as fallback
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
697 prec = getColumnDisplaySize(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
698 precisions[column - 1] = prec;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
699 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
700 return prec;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
701 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
702 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
703 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
704 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
705 // apparently no precisions array is available
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
706 // use columnDisplaySize() value as alternative
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
707 return getColumnDisplaySize(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
708 case Types.BINARY:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
709 case Types.VARBINARY:
735
3dd0d43014e8 Disable checks for Types.LONGVARCHAR and Types.LONGVARBINARY as MonetDB server does not support these data types, and no mappings exists to these JDBC Types and thus these cases will never be reached in JDBC Driver.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 726
diff changeset
710 /* case Types.LONGVARBINARY: // MonetDB doesn't use type LONGVARBINARY */
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
711 case Types.BLOB:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
712 // these data types have a variable length
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
713 if (precisions != null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
714 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
715 int prec = precisions[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
716 if (prec <= 0) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
717 // apparently no positive precision or max length could be fetched
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
718 // use columnDisplaySize() value as fallback
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
719 // It expect number of bytes, not number of hex chars
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
720 prec = (getColumnDisplaySize(column) / 2) +1;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
721 precisions[column - 1] = prec;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
722 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
723 return prec;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
724 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
725 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
726 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
727 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
728 // apparently no precisions array is available
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
729 // use columnDisplaySize() value as alternative
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
730 // It expect number of bytes, not number of hex chars
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
731 return (getColumnDisplaySize(column) / 2) +1;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
732 case Types.DATE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
733 return 10; // 2020-10-08
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
734 case Types.TIME:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
735 return 15; // 21:51:34.399753
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
736 case Types.TIME_WITH_TIMEZONE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
737 return 21; // 21:51:34.399753+02:00
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
738 case Types.TIMESTAMP:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
739 return 26; // 2020-10-08 21:51:34.399753
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
740 case Types.TIMESTAMP_WITH_TIMEZONE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
741 return 32; // 2020-10-08 21:51:34.399753+02:00
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
742 case Types.BOOLEAN:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
743 return 1;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
744 default:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
745 // All other types should return 0
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
746 return 0;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
747 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
748 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
749
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
750 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
751 * Gets the designated column's number of digits to right of
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
752 * the decimal point.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
753 * 0 is returned for data types where the scale is not applicable.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
754 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
755 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
756 * @return scale
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
757 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
758 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
759 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
760 public int getScale(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
761 switch (getColumnType(column)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
762 case Types.DECIMAL:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
763 case Types.NUMERIC:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
764 // these data types may have a variable scale, max scale is 38
766
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
765 try {
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
766 // Special handling for: day_interval and sec_interval as they are
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
767 // mapped to Types.NUMERIC and Types.DECIMAL types (see MonetDriver typeMap)
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
768 // They appear to have a fixed scale (tested against Oct2020)
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
769 final String monettype = types[column - 1];
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
770 if ("day_interval".equals(monettype))
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
771 return 0;
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
772 if ("sec_interval".equals(monettype))
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
773 return 3;
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
774
766
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
775 if (scales != null) {
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
776 return scales[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
777 }
886
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
778 return 0;
766
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
779 } catch (IndexOutOfBoundsException e) {
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
780 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
781 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
782 case Types.TIME:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
783 case Types.TIME_WITH_TIMEZONE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
784 case Types.TIMESTAMP:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
785 case Types.TIMESTAMP_WITH_TIMEZONE:
886
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
786 try {
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
787 if (scales != null) {
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
788 return scales[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
789 }
886
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
790 // support microseconds, so scale 6
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
791 return 6; // 21:51:34.399753
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
792 } catch (IndexOutOfBoundsException e) {
4f50019b2cf8 Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 885
diff changeset
793 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
794 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
795
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
796 // All other types should return 0
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
797 // case Types.BIGINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
798 // case Types.INTEGER:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
799 // case Types.SMALLINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
800 // case Types.TINYINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
801 // case Types.REAL:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
802 // case Types.FLOAT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
803 // case Types.DOUBLE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
804 // case Types.CHAR:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
805 // case Types.VARCHAR:
735
3dd0d43014e8 Disable checks for Types.LONGVARCHAR and Types.LONGVARBINARY as MonetDB server does not support these data types, and no mappings exists to these JDBC Types and thus these cases will never be reached in JDBC Driver.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 726
diff changeset
806 // case Types.LONGVARCHAR: // MonetDB doesn't use type LONGVARCHAR
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
807 // case Types.CLOB:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
808 // case Types.BINARY:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
809 // case Types.VARBINARY:
735
3dd0d43014e8 Disable checks for Types.LONGVARCHAR and Types.LONGVARBINARY as MonetDB server does not support these data types, and no mappings exists to these JDBC Types and thus these cases will never be reached in JDBC Driver.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 726
diff changeset
810 // case Types.LONGVARBINARY: // MonetDB doesn't use type LONGVARBINARY
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
811 // case Types.BLOB:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
812 // case Types.DATE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
813 // case Types.BOOLEAN:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
814 default:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
815 return 0;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
816 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
817 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
818
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
819 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
820 * Indicates whether the designated column is definitely not
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
821 * writable. MonetDB does not support cursor updates, so
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
822 * nothing is writable.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
823 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
824 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
825 * @return true if so; false otherwise
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
826 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
827 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
828 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
829 public boolean isReadOnly(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
830 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
831 return true;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
832 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
833
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
834 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
835 * Indicates whether it is possible for a write on the
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
836 * designated column to succeed.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
837 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
838 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
839 * @return true if so; false otherwise
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
840 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
841 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
842 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
843 public boolean isWritable(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
844 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
845 return false;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
846 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
847
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
848 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
849 * Indicates whether a write on the designated column will
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
850 * definitely succeed.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
851 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
852 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
853 * @return true if so; false otherwise
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
854 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
855 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
856 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
857 public boolean isDefinitelyWritable(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
858 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
859 return false;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
860 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
861
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
862 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
863 * Returns the fully-qualified name of the Java class whose instances
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
864 * are manufactured if the method ResultSet.getObject is called to
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
865 * retrieve a value from the column.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
866 * ResultSet.getObject may return a subclass of the class returned by
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
867 * this method.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
868 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
869 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
870 * @return the fully-qualified name of the class in the Java programming
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
871 * language that would be used by the method ResultSet.getObject
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
872 * to retrieve the value in the specified column. This is the
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
873 * class name used for custom mapping.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
874 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
875 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
876 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
877 public String getColumnClassName(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
878 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
879 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
880 final String MonetDBType = types[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
881 Class<?> type = null;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
882 if (conn != null) {
714
ad7b08ef7745 Moving static method getClassForType() from MonetResulSet to MonetDriver class which is a much more logical place.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 713
diff changeset
883 final java.util.Map<String,Class<?>> map = conn.getTypeMap();
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
884 if (map != null && map.containsKey(MonetDBType)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
885 type = (Class)map.get(MonetDBType);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
886 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
887 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
888 if (type == null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
889 // fallback to the standard SQL type Class mappings
714
ad7b08ef7745 Moving static method getClassForType() from MonetResulSet to MonetDriver class which is a much more logical place.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 713
diff changeset
890 type = MonetDriver.getClassForType(JdbcSQLTypes[column - 1]);
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
891 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
892 if (type != null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
893 return type.getCanonicalName();
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
894 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
895 throw new SQLException("column type mapping null: " + MonetDBType, "M0M03");
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
896 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
897 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
898 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
899 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
900
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
901
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
902 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
903 * A private utility method to check validity of column index number
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
904 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
905 * @param column the first column is 1, the second is 2, ...
720
99baab703566 Resolve some javac -Xdoclint warnings
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 718
diff changeset
906 * @throws java.sql.SQLDataException when invalid column index number
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
907 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
908 private final void checkColumnIndexValidity(final int column) throws java.sql.SQLDataException {
717
7240d2dd369f Improved implementation of PreparedStatement.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 714
diff changeset
909 if (column < 1 || column > colCount)
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
910 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
911 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
912
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
913 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
914 * A private method to fetch the isNullable and isAutoincrement values
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
915 * combined for a specific column.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
916 * The fetched values are stored in the array caches.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
917 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
918 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
919 * @throws SQLException if there is no such column
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
920 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
921 private final void fetchColumnInfo(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
922 // for debug: System.out.println("fetchColumnInfo(" + column + ")");
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
923 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
924 if (_is_fetched[column] != true) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
925 // fetch column info for multiple columns combined in one go
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
926 fetchManyColumnsInfo(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
927 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
928 if (_is_fetched[column])
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
929 return;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
930
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
931 // apparently no data could be fetched for this resultset column, fall back to defaults
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
932 _isNullable[column] = columnNullableUnknown;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
933 _isAutoincrement[column] = false;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
934 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
935
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
936 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
937 * A private method to fetch the isNullable and isAutoincrement values
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
938 * for many fully qualified columns combined in one SQL query to reduce the number of queries sent.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
939 * As fetching this meta information from the server per column is costly we combine the querying of
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
940 * the isNullable and isAutoincrement values and cache it in internal arrays.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
941 * We also do this for many columns combined in one query to reduce
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
942 * the number of queries needed for fetching this metadata for all resultset columns.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
943 * Many generic JDBC database tools (e.g. SQuirreL, DBeaver) request this meta data for each
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
944 * column of each resultset, so these optimisations reduces the number of meta data queries significantly.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
945 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
946 * @param column the first column is 1, the second is 2, ...
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
947 * @throws SQLException if a database access error occurs
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
948 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
949 private final void fetchManyColumnsInfo(final int column) throws SQLException {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
950 // for debug: System.out.println("fetchManyColumnsInfo(" + column + ")");
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
951
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
952 // Most queries have less than 80 resultset columns
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
953 // So 80 is a good balance between speedup (up to 79x) and size of generated query sent to server
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
954 final int MAX_COLUMNS_PER_QUERY = 80;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
955
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
956 // Determine the optimal startcol to make use of fetching up to 80 columns in one query.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
957 int startcol = column;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
958 if ((startcol > 1) && (startcol + MAX_COLUMNS_PER_QUERY >= nextUpperbound)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
959 // we can fetch info from more columns in one query if we start with a lower startcol
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
960 startcol = nextUpperbound - MAX_COLUMNS_PER_QUERY;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
961 if (startcol < 1) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
962 startcol = 1;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
963 } else
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
964 if (startcol > column) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
965 startcol = column;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
966 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
967 nextUpperbound = startcol; // next time this nextUpperbound value will be used
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
968 // for debug: System.out.println("fetchManyColumnsInfo(" + column + ")" + (startcol != column ? " changed into startcol: " + startcol : "") + " nextUpperbound: " + nextUpperbound);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
969 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
970
760
f2f7039f93b1 Optimization: When number of resultcolumns is less than MAX_COLUMNS_PER_QUERY (which is 80) we can make a StringBuilder with a smaller initial capacity.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 759
diff changeset
971 final StringBuilder query = new StringBuilder(410 + (java.lang.Math.min(MAX_COLUMNS_PER_QUERY, colCount) * 150));
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
972 /* next SQL query is a simplified version of query in MonetDatabaseMetaData.getColumns(), to fetch only the needed attributes of a column */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
973 query.append("SELECT " +
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
974 "s.\"name\" AS schnm, " +
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
975 "t.\"name\" AS tblnm, " +
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
976 "c.\"name\" AS colnm, " +
759
846a456f0f0c Remove append() calls for static int values in construction of Strings.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 735
diff changeset
977 "cast(CASE c.\"null\" WHEN true THEN " + ResultSetMetaData.columnNullable +
846a456f0f0c Remove append() calls for static int values in construction of Strings.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 735
diff changeset
978 " WHEN false THEN " + ResultSetMetaData.columnNoNulls +
846a456f0f0c Remove append() calls for static int values in construction of Strings.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 735
diff changeset
979 " ELSE " + ResultSetMetaData.columnNullableUnknown +
846a456f0f0c Remove append() calls for static int values in construction of Strings.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 735
diff changeset
980 " END AS int) AS nullable, " +
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
981 "cast(CASE WHEN c.\"default\" IS NOT NULL AND c.\"default\" LIKE 'next value for %' THEN true ELSE false END AS boolean) AS isautoincrement " +
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
982 "FROM \"sys\".\"columns\" c " +
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
983 "JOIN \"sys\".\"tables\" t ON c.\"table_id\" = t.\"id\" " +
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
984 "JOIN \"sys\".\"schemas\" s ON t.\"schema_id\" = s.\"id\" " +
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
985 "WHERE ");
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
986
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
987 /* combine the conditions for multiple (up to 80) columns into the WHERE-clause */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
988 String schName = null;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
989 String tblName = null;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
990 String colName = null;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
991 int queriedcolcount = 0;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
992 for (int col = startcol; col < array_size && queriedcolcount < MAX_COLUMNS_PER_QUERY; col++) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
993 if (_is_fetched[col] != true) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
994 if (_is_queried[col] != true) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
995 _isNullable[col] = columnNullableUnknown;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
996 _isAutoincrement[col] = false;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
997 schName = getSchemaName(col);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
998 if (schName != null && !schName.isEmpty()) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
999 tblName = getTableName(col);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1000 if (tblName != null && !tblName.isEmpty()) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1001 colName = getColumnName(col);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1002 if (colName != null && !colName.isEmpty()) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1003 if (queriedcolcount > 0)
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1004 query.append(" OR ");
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1005 query.append("(s.\"name\" = ").append(MonetWrapper.sq(schName));
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1006 query.append(" AND t.\"name\" = ").append(MonetWrapper.sq(tblName));
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1007 query.append(" AND c.\"name\" = ").append(MonetWrapper.sq(colName));
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1008 query.append(")");
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1009 _is_queried[col] = true; // flag it
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1010 queriedcolcount++;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1011 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1012 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1013 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1014 if (_is_queried[col] != true) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1015 // make sure we do not try to query it again next time as it is not queryable
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1016 _is_fetched[col] = true;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1017 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1018 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1019 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1020 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1021
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1022 if (queriedcolcount == 0)
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1023 return;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1024
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1025 // execute query to get information on queriedcolcount (or less) columns.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1026 final java.sql.Statement stmt = conn.createStatement();
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1027 if (stmt != null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1028 // for debug: System.out.println("SQL (len " + query.length() + "): " + query.toString());
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1029 final java.sql.ResultSet rs = stmt.executeQuery(query.toString());
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1030 if (rs != null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1031 String rsSchema = null;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1032 String rsTable = null;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1033 String rsColumn = null;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1034 while (rs.next()) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1035 rsSchema = rs.getString(1); // col 1 is schnm
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1036 rsTable = rs.getString(2); // col 2 is tblnm
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1037 rsColumn = rs.getString(3); // col 3 is colnm
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1038 // find the matching schema.table.column entry in the array
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1039 for (int col = 1; col < array_size; col++) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1040 if (_is_fetched[col] != true && _is_queried[col]) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1041 colName = getColumnName(col);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1042 if (colName != null && colName.equals(rsColumn)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1043 tblName = getTableName(col);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1044 if (tblName != null && tblName.equals(rsTable)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1045 schName = getSchemaName(col);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1046 if (schName != null && schName.equals(rsSchema)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1047 // found matching entry
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1048 // for debug: System.out.println("Found match at [" + col + "] for " + schName + "." + tblName + "." + colName);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1049 _isNullable[col] = rs.getInt(4); // col 4 is nullable (or "NULLABLE")
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1050 _isAutoincrement[col] = rs.getBoolean(5); // col 5 is isautoincrement (or "IS_AUTOINCREMENT")
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1051 _is_fetched[col] = true;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1052 queriedcolcount--;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1053 // we found the match, exit the for-loop
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1054 col = array_size;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1055 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1056 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1057 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1058 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1059 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1060 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1061 rs.close();
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1062 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1063 stmt.close();
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1064 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1065
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1066 if (queriedcolcount != 0) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1067 // not all queried columns have resulted in a returned data row.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1068 // make sure we do not match those columns again next run
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1069 for (int col = startcol; col < array_size; col++) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1070 if (_is_fetched[col] != true && _is_queried[col]) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1071 _is_fetched[col] = true;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1072 // for debug: System.out.println("Found NO match at [" + col + "] for " + getSchemaName(col) + "." + getTableName(col) + "." + getColumnName(col));
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1073 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1074 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1075 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1076 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1077 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1078