annotate src/main/java/org/monetdb/jdbc/MonetResultSetMetaData.java @ 887:674f9ed21308

Improved ResultSetMetaData.getColumnTypeName() and ParameterMetaData.getParameterTypeName() for interval types. It now returns more precise information for the 13 possible interval data types. Also extended test Test_Interval_Types() to test all 13 interval types, both as result column and as parameter.
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Thu, 04 Apr 2024 12:56:33 +0200 (13 months ago)
parents 4f50019b2cf8
children 549225b7be85
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 *
833
e890195256ac Update copyright for the new year, move to MonetDB Foundation, add SPDX.
Sjoerd Mullender <sjoerd@acm.org>
parents: 766
diff changeset
8 * Copyright 2024 MonetDB Foundation;
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
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
124 // 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
125 JdbcSQLTypes = new int[types.length];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
126 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
127 int javaSQLtype = MonetDriver.getJdbcSQLType(types[i]);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
128 if (javaSQLtype == Types.CLOB) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
129 if (connection.mapClobAsVarChar())
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
130 javaSQLtype = Types.VARCHAR;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
131 } else
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
132 if (javaSQLtype == Types.BLOB) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
133 if (connection.mapBlobAsVarBinary())
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
134 javaSQLtype = Types.VARBINARY;
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 {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
371 // we can hardcode this, based on the colum type
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 {
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
414 int len = lengths[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
415 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
416 final String monettype = types[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
417 // 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
418 if ("inet".equals(monettype)) {
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
419 len = 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
420 }
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
421 }
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
422 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
423 } 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
424 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
425 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
426 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
427
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
428 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
429 * 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
430 * 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
431 * 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
432 * 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
433 * the value returned by the getColumnName method.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
434 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
435 * @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
436 * @return the suggested column title
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
437 * @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
438 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
439 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
440 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
441 return getColumnName(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
442 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
443
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
444 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
445 * Gets the designated column's name
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
446 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
447 * @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
448 * @return the column name
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
449 * @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
450 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
451 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
452 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
453 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
454 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
455 return columns[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
456 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
457 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
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 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
462 * 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
463 * 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
464 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
465 * @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
466 * @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
467 * column appears or "" if not applicable
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
468 * @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
469 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
470 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
471 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
472 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
473 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
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 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
478 * Get the designated column's schema name.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
479 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
480 * @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
481 * @return schema name or "" if not applicable
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
482 * @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
483 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
484 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
485 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
486 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
487 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
488 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
489 } 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
490 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
713
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 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
495 * Gets the designated column's table name.
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 table name or "" if not applicable
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
499 * @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
500 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
501 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
502 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
503 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
504 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
505 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
506 } 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
507 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
713
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
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 * Retrieves the designated column's SQL type.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
513 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
514 * @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
515 * @return SQL type from java.sql.Types
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
516 * @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
517 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
518 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
519 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
520 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
521 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
522 return JdbcSQLTypes[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
523 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
524 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
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
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 * 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
530 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
531 * @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
532 * @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
533 * 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
534 * returned.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
535 * @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
536 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
537 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
538 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
539 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
540 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
541 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
542 if (monettype != null && monettype.endsWith("_interval")) {
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
543 /* 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
544 * 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
545 */
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
546 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
547 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
548 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
549 }
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
550 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
551 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
552 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
553 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
554 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
555 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
556 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
557 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
558 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
559 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
560 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
561 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
562 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
563 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
564 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
565 { // 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
566 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
567 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
568 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
569 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
570 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
571 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
572 }
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
573 }
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
574 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
575 return monettype;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
576 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
577 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
578 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
579 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
580
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
581 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
582 * 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
583 * 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
584 * 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
585 * 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
586 * of the String representation (assuming the maximum
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
587 * allowed precision of the fractional seconds component).
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
588 * 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
589 * 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
590 * 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
591 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
592 * @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
593 * @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
594 * @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
595 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
596 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
597 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
598 switch (getColumnType(column)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
599 case Types.BIGINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
600 return 19;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
601 case Types.INTEGER:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
602 return 10;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
603 case Types.SMALLINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
604 return 5;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
605 case Types.TINYINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
606 return 3;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
607 case Types.REAL:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
608 return 7;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
609 case Types.FLOAT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
610 case Types.DOUBLE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
611 return 15;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
612 case Types.DECIMAL:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
613 case Types.NUMERIC:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
614 // 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
615 if (precisions != null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
616 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
617 return precisions[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
618 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
619 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
620 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
621 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
622 return 18;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
623 case Types.CHAR:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
624 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
625 /* 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
626 case Types.CLOB:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
627 // these data types have a variable length
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
628 if (precisions != null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
629 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
630 int prec = precisions[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
631 if (prec <= 0) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
632 // 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
633 // use columnDisplaySize() value as fallback
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
634 prec = getColumnDisplaySize(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
635 precisions[column - 1] = prec;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
636 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
637 return prec;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
638 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
639 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
640 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
641 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
642 // apparently no precisions array is available
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
643 // use columnDisplaySize() value as alternative
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
644 return getColumnDisplaySize(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
645 case Types.BINARY:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
646 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
647 /* 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
648 case Types.BLOB:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
649 // these data types have a variable length
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
650 if (precisions != null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
651 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
652 int prec = precisions[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
653 if (prec <= 0) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
654 // 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
655 // use columnDisplaySize() value as fallback
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
656 // 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
657 prec = (getColumnDisplaySize(column) / 2) +1;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
658 precisions[column - 1] = prec;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
659 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
660 return prec;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
661 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
662 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
663 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
664 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
665 // apparently no precisions array is available
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
666 // use columnDisplaySize() value as alternative
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
667 // 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
668 return (getColumnDisplaySize(column) / 2) +1;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
669 case Types.DATE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
670 return 10; // 2020-10-08
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
671 case Types.TIME:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
672 return 15; // 21:51:34.399753
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
673 case Types.TIME_WITH_TIMEZONE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
674 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
675 case Types.TIMESTAMP:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
676 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
677 case Types.TIMESTAMP_WITH_TIMEZONE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
678 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
679 case Types.BOOLEAN:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
680 return 1;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
681 default:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
682 // All other types should return 0
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
683 return 0;
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 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
686
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
687 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
688 * 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
689 * the decimal point.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
690 * 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
691 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
692 * @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
693 * @return scale
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
694 * @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
695 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
696 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
697 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
698 switch (getColumnType(column)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
699 case Types.DECIMAL:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
700 case Types.NUMERIC:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
701 // 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
702 try {
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
703 // 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
704 // 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
705 // 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
706 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
707 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
708 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
709 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
710 return 3;
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
711
766
32dd608f9169 2 more places of optimization by avoiding calling getColumnTypeName(column)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 763
diff changeset
712 if (scales != null) {
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
713 return scales[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
714 }
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
715 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
716 } 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
717 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
718 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
719 case Types.TIME:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
720 case Types.TIME_WITH_TIMEZONE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
721 case Types.TIMESTAMP:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
722 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
723 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
724 if (scales != null) {
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
725 return scales[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
726 }
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
727 // 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
728 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
729 } 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
730 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
731 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
732
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
733 // All other types should return 0
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
734 // case Types.BIGINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
735 // case Types.INTEGER:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
736 // case Types.SMALLINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
737 // case Types.TINYINT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
738 // case Types.REAL:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
739 // case Types.FLOAT:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
740 // case Types.DOUBLE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
741 // case Types.CHAR:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
742 // 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
743 // 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
744 // case Types.CLOB:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
745 // case Types.BINARY:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
746 // 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
747 // 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
748 // case Types.BLOB:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
749 // case Types.DATE:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
750 // case Types.BOOLEAN:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
751 default:
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
752 return 0;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
753 }
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
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
756 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
757 * 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
758 * 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
759 * nothing is writable.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
760 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
761 * @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
762 * @return true if so; false otherwise
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
763 * @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
764 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
765 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
766 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
767 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
768 return true;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
769 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
770
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
771 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
772 * 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
773 * designated column to succeed.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
774 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
775 * @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
776 * @return true if so; false otherwise
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
777 * @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
778 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
779 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
780 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
781 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
782 return false;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
783 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
784
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
785 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
786 * 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
787 * definitely succeed.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
788 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
789 * @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
790 * @return true if so; false otherwise
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
791 * @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
792 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
793 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
794 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
795 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
796 return false;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
797 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
798
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
799 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
800 * 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
801 * 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
802 * retrieve a value from the column.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
803 * 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
804 * this method.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
805 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
806 * @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
807 * @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
808 * 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
809 * 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
810 * class name used for custom mapping.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
811 * @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
812 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
813 @Override
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
814 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
815 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
816 try {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
817 final String MonetDBType = types[column - 1];
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
818 Class<?> type = null;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
819 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
820 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
821 if (map != null && map.containsKey(MonetDBType)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
822 type = (Class)map.get(MonetDBType);
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 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
825 if (type == null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
826 // 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
827 type = MonetDriver.getClassForType(JdbcSQLTypes[column - 1]);
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
828 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
829 if (type != null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
830 return type.getCanonicalName();
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
831 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
832 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
833 } catch (IndexOutOfBoundsException e) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
834 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
835 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
836 }
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
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
839 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
840 * 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
841 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
842 * @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
843 * @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
844 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
845 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
846 if (column < 1 || column > colCount)
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
847 throw MonetResultSet.newSQLInvalidColumnIndexException(column);
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
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
850 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
851 * 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
852 * combined for a specific column.
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
853 * 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
854 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
855 * @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
856 * @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
857 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
858 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
859 // for debug: System.out.println("fetchColumnInfo(" + column + ")");
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
860 checkColumnIndexValidity(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
861 if (_is_fetched[column] != true) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
862 // 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
863 fetchManyColumnsInfo(column);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
864 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
865 if (_is_fetched[column])
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
866 return;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
867
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
868 // 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
869 _isNullable[column] = columnNullableUnknown;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
870 _isAutoincrement[column] = false;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
871 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
872
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
873 /**
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
874 * 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
875 * 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
876 * 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
877 * 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
878 * 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
879 * 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
880 * 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
881 * 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
882 *
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
883 * @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
884 * @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
885 */
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
886 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
887 // for debug: System.out.println("fetchManyColumnsInfo(" + column + ")");
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
888
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
889 // 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
890 // 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
891 final int MAX_COLUMNS_PER_QUERY = 80;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
892
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
893 // 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
894 int startcol = column;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
895 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
896 // 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
897 startcol = nextUpperbound - MAX_COLUMNS_PER_QUERY;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
898 if (startcol < 1) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
899 startcol = 1;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
900 } else
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
901 if (startcol > column) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
902 startcol = column;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
903 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
904 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
905 // 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
906 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
907
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
908 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
909 /* 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
910 query.append("SELECT " +
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
911 "s.\"name\" AS schnm, " +
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
912 "t.\"name\" AS tblnm, " +
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
913 "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
914 "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
915 " 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
916 " 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
917 " END AS int) AS nullable, " +
713
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
918 "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
919 "FROM \"sys\".\"columns\" c " +
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
920 "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
921 "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
922 "WHERE ");
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
923
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
924 /* 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
925 String schName = null;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
926 String tblName = null;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
927 String colName = null;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
928 int queriedcolcount = 0;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
929 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
930 if (_is_fetched[col] != true) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
931 if (_is_queried[col] != true) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
932 _isNullable[col] = columnNullableUnknown;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
933 _isAutoincrement[col] = false;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
934 schName = getSchemaName(col);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
935 if (schName != null && !schName.isEmpty()) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
936 tblName = getTableName(col);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
937 if (tblName != null && !tblName.isEmpty()) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
938 colName = getColumnName(col);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
939 if (colName != null && !colName.isEmpty()) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
940 if (queriedcolcount > 0)
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
941 query.append(" OR ");
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
942 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
943 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
944 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
945 query.append(")");
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
946 _is_queried[col] = true; // flag it
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
947 queriedcolcount++;
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 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
950 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
951 if (_is_queried[col] != true) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
952 // 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
953 _is_fetched[col] = true;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
954 }
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 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
957 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
958
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
959 if (queriedcolcount == 0)
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
960 return;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
961
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
962 // 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
963 final java.sql.Statement stmt = conn.createStatement();
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
964 if (stmt != null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
965 // 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
966 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
967 if (rs != null) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
968 String rsSchema = null;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
969 String rsTable = null;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
970 String rsColumn = null;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
971 while (rs.next()) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
972 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
973 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
974 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
975 // 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
976 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
977 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
978 colName = getColumnName(col);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
979 if (colName != null && colName.equals(rsColumn)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
980 tblName = getTableName(col);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
981 if (tblName != null && tblName.equals(rsTable)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
982 schName = getSchemaName(col);
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
983 if (schName != null && schName.equals(rsSchema)) {
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
984 // found matching entry
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
985 // 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
986 _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
987 _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
988 _is_fetched[col] = true;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
989 queriedcolcount--;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
990 // 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
991 col = array_size;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
992 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
993 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
994 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
995 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
996 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
997 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
998 rs.close();
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
999 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1000 stmt.close();
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1001 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1002
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 // 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
1005 // 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
1006 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
1007 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
1008 _is_fetched[col] = true;
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1009 // 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
1010 }
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 }
c3c424a90a42 Improve implementation of ResultSet.getMetaData().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
diff changeset
1015