annotate src/main/java/org/monetdb/jdbc/MonetConnection.java @ 833:e890195256ac

Update copyright for the new year, move to MonetDB Foundation, add SPDX.
author Sjoerd Mullender <sjoerd@acm.org>
date Fri, 29 Dec 2023 14:37:42 +0100 (16 months ago)
parents 726a1d7b168c
children d9a45743536d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1 /*
833
e890195256ac Update copyright for the new year, move to MonetDB Foundation, add SPDX.
Sjoerd Mullender <sjoerd@acm.org>
parents: 819
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: 819
diff changeset
3 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
4 * This Source Code Form is subject to the terms of the Mozilla Public
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
7 *
833
e890195256ac Update copyright for the new year, move to MonetDB Foundation, add SPDX.
Sjoerd Mullender <sjoerd@acm.org>
parents: 819
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: 819
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: 819
diff changeset
10 * Copyright 1997 - July 2008 CWI.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
11 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
12
391
f523727db392 Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 381
diff changeset
13 package org.monetdb.jdbc;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
14
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
15 import java.io.*;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
16 import java.net.SocketException;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
17 import java.net.SocketTimeoutException;
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
18 import java.nio.charset.StandardCharsets;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
19 import java.sql.CallableStatement;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
20 import java.sql.Connection;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
21 import java.sql.DatabaseMetaData;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
22 import java.sql.PreparedStatement;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
23 import java.sql.ResultSet;
194
1296dbcc4958 Resolved javadoc many errors and warnings, such as:
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 186
diff changeset
24 import java.sql.SQLClientInfoException;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
25 import java.sql.SQLException;
266
eefa7f625673 Resolve javadoc errors:
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 262
diff changeset
26 import java.sql.SQLFeatureNotSupportedException;
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
27 import java.sql.SQLNonTransientConnectionException;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
28 import java.sql.SQLWarning;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
29 import java.sql.Savepoint;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
30 import java.sql.Statement;
814
1344603ee8af Use intrinsics rather than manual flow control
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 771
diff changeset
31 import java.util.*;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
32 import java.util.Map.Entry;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
33 import java.util.concurrent.Executor;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
34
391
f523727db392 Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 381
diff changeset
35 import org.monetdb.mcl.io.BufferedMCLReader;
f523727db392 Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 381
diff changeset
36 import org.monetdb.mcl.io.BufferedMCLWriter;
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
37 import org.monetdb.mcl.io.LineType;
671
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
38 import org.monetdb.mcl.net.HandshakeOption;
391
f523727db392 Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 381
diff changeset
39 import org.monetdb.mcl.net.MapiSocket;
f523727db392 Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 381
diff changeset
40 import org.monetdb.mcl.parser.HeaderLineParser;
f523727db392 Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 381
diff changeset
41 import org.monetdb.mcl.parser.MCLParseException;
f523727db392 Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 381
diff changeset
42 import org.monetdb.mcl.parser.StartOfHeaderParser;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
43
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
44 /**
451
3dfcd06fd8ba Correcting typos in documentation text. Also improved the readability of the generated javadoc documents.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 441
diff changeset
45 *<pre>
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
46 * A {@link Connection} suitable for the MonetDB database.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
47 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
48 * This connection represents a connection (session) to a MonetDB
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
49 * database. SQL statements are executed and results are returned within
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
50 * the context of a connection. This Connection object holds a physical
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
51 * connection to the MonetDB database.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
52 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
53 * A Connection object's database should able to provide information
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
54 * describing its tables, its supported SQL grammar, its stored
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
55 * procedures, the capabilities of this connection, and so on. This
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
56 * information is obtained with the getMetaData method.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
57 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
58 * Note: By default a Connection object is in auto-commit mode, which
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
59 * means that it automatically commits changes after executing each
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
60 * statement. If auto-commit mode has been disabled, the method commit
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
61 * must be called explicitly in order to commit changes; otherwise,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
62 * database changes will not be saved.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
63 *
451
3dfcd06fd8ba Correcting typos in documentation text. Also improved the readability of the generated javadoc documents.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 441
diff changeset
64 * The current state of this class is that it nearly implements the
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
65 * whole Connection interface.
451
3dfcd06fd8ba Correcting typos in documentation text. Also improved the readability of the generated javadoc documents.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 441
diff changeset
66 *</pre>
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
67 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
68 * @author Fabian Groffen
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
69 * @author Martin van Dinther
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
70 * @version 1.7
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
71 */
164
7c9e386fe49a As of Java 1.7 implementations of JDBC interfaces Connection, Statement, PreparedStatement,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 144
diff changeset
72 public class MonetConnection
7c9e386fe49a As of Java 1.7 implementations of JDBC interfaces Connection, Statement, PreparedStatement,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 144
diff changeset
73 extends MonetWrapper
7c9e386fe49a As of Java 1.7 implementations of JDBC interfaces Connection, Statement, PreparedStatement,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 144
diff changeset
74 implements Connection, AutoCloseable
7c9e386fe49a As of Java 1.7 implementations of JDBC interfaces Connection, Statement, PreparedStatement,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 144
diff changeset
75 {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
76 /** The hostname to connect to */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
77 private final String hostname;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
78 /** The port to connect on the host to */
407
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
79 private int port;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
80 /** The database to use (currently not used) */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
81 private final String database;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
82 /** The username to use when authenticating */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
83 private final String username;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
84 /** The password to use when authenticating */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
85 private final String password;
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
86
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
87 /** A connection to mserver5 using a TCP socket */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
88 private final MapiSocket server;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
89 /** The Reader from the server */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
90 private final BufferedMCLReader in;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
91 /** The Writer to the server */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
92 private final BufferedMCLWriter out;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
93
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
94 /** A StartOfHeaderParser declared for reuse. */
414
1e278695fe54 Small improvements: adding some final keywords, removing unnecesary initialisations, improve comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 408
diff changeset
95 private final StartOfHeaderParser sohp = new StartOfHeaderParser();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
96
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
97 /** Whether this Connection is closed (and cannot be used anymore) */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
98 private boolean closed;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
99
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
100 /** Whether this Connection is in autocommit mode */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
101 private boolean autoCommit = true;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
102
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
103 /** The stack of warnings for this Connection object */
407
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
104 private SQLWarning warnings;
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
105
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
106 /** The Connection specific mapping of user defined types to Java types */
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
107 private Map<String,Class<?>> typeMap = new HashMap<String,Class<?>>() {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
108 private static final long serialVersionUID = 1L;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
109 {
391
f523727db392 Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 381
diff changeset
110 put("inet", org.monetdb.jdbc.types.INET.class);
f523727db392 Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 381
diff changeset
111 put("url", org.monetdb.jdbc.types.URL.class);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
112 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
113 };
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
114
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
115 // See javadoc for documentation about WeakHashMap if you don't know what
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
116 // it does !!!NOW!!! (only when you deal with it of course)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
117 /** A Map containing all (active) Statements created from this Connection */
414
1e278695fe54 Small improvements: adding some final keywords, removing unnecesary initialisations, improve comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 408
diff changeset
118 private final WeakHashMap<Statement,?> statements = new WeakHashMap<Statement, Object>();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
119
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
120 /** The number of results we receive from the server at once */
434
57d46c34c649 default server reply size is 100, not -1
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 433
diff changeset
121 private int curReplySize = 100; // server default
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
122
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
123 /** A template to apply to each query (like pre and post fixes), filled in constructor */
336
5826913bdc6d commandTempl[2] is never used, so no need to allocate and initialise it.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 335
diff changeset
124 // note: it is made public to the package as queryTempl[2] is used from MonetStatement
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
125 final String[] queryTempl = new String[3]; // pre, post, sep
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
126
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
127 /** A template to apply to each command (like pre and post fixes), filled in constructor */
336
5826913bdc6d commandTempl[2] is never used, so no need to allocate and initialise it.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 335
diff changeset
128 private final String[] commandTempl = new String[2]; // pre, post
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
129
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
130 /** the SQL language */
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
131 private static final int LANG_SQL = 0;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
132 /** the MAL language (officially *NOT* supported) */
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
133 private static final int LANG_MAL = 3;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
134 /** an unknown language */
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
135 private static final int LANG_UNKNOWN = -1;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
136 /** The language which is used */
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
137 private final int lang;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
138
175
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
139 /** Whether or not BLOB is mapped to Types.VARBINARY instead of Types.BLOB within this connection */
474
d414e5c4470c Correct comment, we never released version 2.30. It was 3.0.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 472
diff changeset
140 private boolean treatBlobAsVarBinary = true; // turned on by default for optimal performance (from JDBC Driver release 3.0 onwards)
175
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
141 /** Whether or not CLOB is mapped to Types.VARCHAR instead of Types.CLOB within this connection */
474
d414e5c4470c Correct comment, we never released version 2.30. It was 3.0.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 472
diff changeset
142 private boolean treatClobAsVarChar = true; // turned on by default for optimal performance (from JDBC Driver release 3.0 onwards)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
143
271
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
144 /** The last set query timeout on the server as used by Statement, PreparedStatement and CallableStatement */
751
1566dbfaa13b Correct setQueryTimeout(secs) implementation. It was changed to match the web documentation (see https://dev.monetdb.org/hg/monetdb-java/rev/849f99124e32 ) but it appears the web documentation was wrong. So revert the changes made.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 736
diff changeset
145 protected int lastSetQueryTimeout = 0; // 0 means no timeout, which is the default on the server
249
46385d8ff8c9 Improve the implementation of Statement methods getQueryTimeout() and setQueryTimeout().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 243
diff changeset
146
472
0e21097f438b Reduce the number of MonetDatabaseMetaData objects created via getMetaData() to maximum 1 per connection as it can be reused.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 451
diff changeset
147 /** A cache to reduce the number of DatabaseMetaData objects created by getMetaData() to maximum 1 per connection */
0e21097f438b Reduce the number of MonetDatabaseMetaData objects created via getMetaData() to maximum 1 per connection as it can be reused.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 451
diff changeset
148 private DatabaseMetaData dbmd;
0e21097f438b Reduce the number of MonetDatabaseMetaData objects created via getMetaData() to maximum 1 per connection as it can be reused.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 451
diff changeset
149
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
150 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
151 * Constructor of a Connection for MonetDB. At this moment the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
152 * current implementation limits itself to storing the given host,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
153 * database, username and password for later use by the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
154 * createStatement() call. This constructor is only accessible to
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
155 * classes from the jdbc package.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
156 *
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
157 * @param props a Property hashtable holding the properties needed for connecting
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
158 * @throws SQLException if a database error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
159 * @throws IllegalArgumentException is one of the arguments is null or empty
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
160 */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
161 MonetConnection(final Properties props)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
162 throws SQLException, IllegalArgumentException
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
163 {
671
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
164 HandshakeOption.AutoCommit autoCommitSetting = new HandshakeOption.AutoCommit(true);
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
165 HandshakeOption.ReplySize replySizeSetting = new HandshakeOption.ReplySize(DEF_FETCHSIZE);
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
166 HandshakeOption.SizeHeader sizeHeaderSetting = new HandshakeOption.SizeHeader(true);
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
167 HandshakeOption.TimeZone timeZoneSetting = new HandshakeOption.TimeZone(0);
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
168
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
169 // for debug: System.out.println("New connection object. Received properties are: " + props.toString());
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
170 // get supported property values from the props argument.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
171 this.hostname = props.getProperty("host");
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
172
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
173 final String port_prop = props.getProperty("port");
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
174 if (port_prop != null) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
175 try {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
176 this.port = Integer.parseInt(port_prop);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
177 } catch (NumberFormatException e) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
178 addWarning("Unable to parse port number from: " + port_prop, "M1M05");
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
179 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
180 }
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
181
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
182 this.database = props.getProperty("database");
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
183 this.username = props.getProperty("user");
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
184 this.password = props.getProperty("password");
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
185 String language = props.getProperty("language");
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
186
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
187 boolean debug = false;
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
188 String debug_prop = props.getProperty("debug");
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
189 if (debug_prop != null) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
190 debug = Boolean.parseBoolean(debug_prop);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
191 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
192
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
193 final String hash = props.getProperty("hash");
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
194
658
108123ca6889 Add autocommit=true/false option to jdbc url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 657
diff changeset
195 String autocommit_prop = props.getProperty("autocommit");
108123ca6889 Add autocommit=true/false option to jdbc url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 657
diff changeset
196 if (autocommit_prop != null) {
671
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
197 boolean ac = Boolean.parseBoolean(autocommit_prop);
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
198 autoCommitSetting.set(ac);
658
108123ca6889 Add autocommit=true/false option to jdbc url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 657
diff changeset
199 }
108123ca6889 Add autocommit=true/false option to jdbc url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 657
diff changeset
200
423
de2ef68b672f Allow to set fetchsize from the connection url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 422
diff changeset
201 final String fetchsize_prop = props.getProperty("fetchsize");
de2ef68b672f Allow to set fetchsize from the connection url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 422
diff changeset
202 if (fetchsize_prop != null) {
428
0b808a4d4f1f Catch and warn about invalid fetch sizes.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 425
diff changeset
203 try {
0b808a4d4f1f Catch and warn about invalid fetch sizes.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 425
diff changeset
204 int fetchsize = Integer.parseInt(fetchsize_prop);
433
b31eaa9e958f fetchsize is allowed to be -1
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 432
diff changeset
205 if (fetchsize > 0 || fetchsize == -1) {
671
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
206 replySizeSetting.set(fetchsize);
428
0b808a4d4f1f Catch and warn about invalid fetch sizes.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 425
diff changeset
207 } else {
433
b31eaa9e958f fetchsize is allowed to be -1
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 432
diff changeset
208 addWarning("Fetch size must either be positive or -1. Value " + fetchsize + " ignored", "M1M05");
428
0b808a4d4f1f Catch and warn about invalid fetch sizes.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 425
diff changeset
209 }
441
84f6d86ed590 Optimise composing the "SET TIME ZONE ..." string by using a StringBuilder. Less String copying.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 434
diff changeset
210 } catch (NumberFormatException e) {
84f6d86ed590 Optimise composing the "SET TIME ZONE ..." string by using a StringBuilder. Less String copying.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 434
diff changeset
211 addWarning("Unable to parse fetch size number from: " + fetchsize_prop, "M1M05");
423
de2ef68b672f Allow to set fetchsize from the connection url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 422
diff changeset
212 }
de2ef68b672f Allow to set fetchsize from the connection url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 422
diff changeset
213 }
de2ef68b672f Allow to set fetchsize from the connection url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 422
diff changeset
214
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
215 final String treatBlobAsVarBinary_prop = props.getProperty("treat_blob_as_binary");
175
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
216 if (treatBlobAsVarBinary_prop != null) {
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
217 treatBlobAsVarBinary = Boolean.parseBoolean(treatBlobAsVarBinary_prop);
178
dd12348c41cf Improvement: only extend typeMap when the property was set to true.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 175
diff changeset
218 if (treatBlobAsVarBinary)
dd12348c41cf Improvement: only extend typeMap when the property was set to true.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 175
diff changeset
219 typeMap.put("blob", Byte[].class);
175
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
220 }
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
221
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
222 final String treatClobAsVarChar_prop = props.getProperty("treat_clob_as_varchar");
175
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
223 if (treatClobAsVarChar_prop != null) {
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
224 treatClobAsVarChar = Boolean.parseBoolean(treatClobAsVarChar_prop);
178
dd12348c41cf Improvement: only extend typeMap when the property was set to true.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 175
diff changeset
225 if (treatClobAsVarChar)
dd12348c41cf Improvement: only extend typeMap when the property was set to true.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 175
diff changeset
226 typeMap.put("clob", String.class);
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
227 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
228
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
229 int sockTimeout = 0;
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
230 final String so_timeout_prop = props.getProperty("so_timeout");
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
231 if (so_timeout_prop != null) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
232 try {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
233 sockTimeout = Integer.parseInt(so_timeout_prop);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
234 if (sockTimeout < 0) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
235 addWarning("Negative socket timeout not allowed. Value ignored", "M1M05");
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
236 sockTimeout = 0;
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
237 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
238 } catch (NumberFormatException e) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
239 addWarning("Unable to parse socket timeout number from: " + so_timeout_prop, "M1M05");
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
240 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
241 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
242
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
243 // check mandatory input arguments
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
244 if (hostname == null || hostname.isEmpty())
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
245 throw new IllegalArgumentException("Missing or empty host name");
225
5ddb1f20d5d5 Socket may also throw an UnknownHostException. Add it to MapiSocket.connect() and catch it in MonetConnection(Properties props).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 219
diff changeset
246 if (port <= 0 || port > 65535)
348
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
247 throw new IllegalArgumentException("Invalid port number: " + port
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
248 + ". It should not be " + (port < 0 ? "negative" : (port > 65535 ? "larger than 65535" : "0")));
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
249 if (username == null || username.isEmpty())
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
250 throw new IllegalArgumentException("Missing or empty user name");
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
251 if (password == null || password.isEmpty())
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
252 throw new IllegalArgumentException("Missing or empty password");
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
253 if (language == null || language.isEmpty()) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
254 // fallback to default language: sql
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
255 language = "sql";
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
256 addWarning("No language specified, defaulting to 'sql'", "M1M05");
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
257 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
258
764
052c23fbfab2 Corrected implementation of Connection methods getClientInfo() and setClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 751
diff changeset
259 // warn about unrecognized property names
429
e4e104f8146c Add fetchsize to the list of valid client props
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 428
diff changeset
260 for (Entry<Object,Object> e: props.entrySet()) {
e4e104f8146c Add fetchsize to the list of valid client props
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 428
diff changeset
261 checkValidProperty(e.getKey().toString(), "MonetConnection");
e4e104f8146c Add fetchsize to the list of valid client props
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 428
diff changeset
262 }
e4e104f8146c Add fetchsize to the list of valid client props
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 428
diff changeset
263
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
264 server = new MapiSocket();
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
265 if (hash != null)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
266 server.setHash(hash);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
267 if (database != null)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
268 server.setDatabase(database);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
269 server.setLanguage(language);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
270
671
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
271 // calculate our time zone offset
422
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
272 final Calendar cal = Calendar.getInstance();
697
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
273 final int offsetMillis = cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET);
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
274 final int offsetSeconds = offsetMillis / 1000;
671
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
275 timeZoneSetting.set(offsetSeconds);
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
276
684
9cc67e98e9c6 Fix Xlint warnings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 673
diff changeset
277 server.setHandshakeOptions(new HandshakeOption<?>[] {
671
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
278 autoCommitSetting,
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
279 replySizeSetting,
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
280 sizeHeaderSetting,
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
281 timeZoneSetting,
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
282 });
422
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
283
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
284 // we're debugging here... uhm, should be off in real life
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
285 if (debug) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
286 try {
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
287 final String fname = props.getProperty("logfile", "monet_" + System.currentTimeMillis() + ".log");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
288 File f = new File(fname);
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
289
25
5ec116ba7d71 When single character use faster version of indexOf(<char>)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 8
diff changeset
290 int ext = fname.lastIndexOf('.');
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
291 if (ext < 0)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
292 ext = fname.length();
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
293 final String pre = fname.substring(0, ext);
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
294 final String suf = fname.substring(ext);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
295
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
296 for (int i = 1; f.exists(); i++) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
297 f = new File(pre + "-" + i + suf);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
298 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
299
278
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
300 server.debug(f.getAbsolutePath()); // enable logging on the MapiSocket level
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
301 } catch (IOException ex) {
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
302 throw new SQLNonTransientConnectionException("Opening logfile failed: " + ex.getMessage(), "08M01");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
303 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
304 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
305
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
306 try {
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
307 final java.util.List<String> warnings = server.connect(hostname, port, username, password);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
308 for (String warning : warnings) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
309 addWarning(warning, "01M02");
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
310 }
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
311
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
312 // apply NetworkTimeout value from legacy (pre 4.1) driver
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
313 // so_timeout calls
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
314 server.setSoTimeout(sockTimeout);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
315
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
316 in = server.getReader();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
317 out = server.getWriter();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
318
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
319 final String error = in.discardRemainder();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
320 if (error != null)
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
321 throw new SQLNonTransientConnectionException((error.length() > 6) ? error.substring(6) : error, "08001");
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
322 } catch (java.net.UnknownHostException e) {
225
5ddb1f20d5d5 Socket may also throw an UnknownHostException. Add it to MapiSocket.connect() and catch it in MonetConnection(Properties props).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 219
diff changeset
323 throw new SQLNonTransientConnectionException("Unknown Host (" + hostname + "): " + e.getMessage(), "08006");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
324 } catch (IOException e) {
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
325 throw new SQLNonTransientConnectionException("Unable to connect (" + hostname + ":" + port + "): " + e.getMessage(), "08006");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
326 } catch (MCLParseException e) {
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
327 throw new SQLNonTransientConnectionException(e.getMessage(), "08001");
391
f523727db392 Moved Java classes from packages starting with nl.cwi.monetdb.* to package org.monetdb.*
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 381
diff changeset
328 } catch (org.monetdb.mcl.MCLException e) {
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
329 final String[] connex = e.getMessage().split("\n");
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
330 final SQLException sqle = new SQLNonTransientConnectionException(connex[0], "08001", e);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
331 for (int i = 1; i < connex.length; i++) {
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
332 sqle.setNextException(new SQLNonTransientConnectionException(connex[1], "08001"));
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
333 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
334 throw sqle;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
335 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
336
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
337 // we seem to have managed to log in, let's store the
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
338 // language used and language specific query templates
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
339 if ("sql".equals(language)) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
340 lang = LANG_SQL;
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
341
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
342 queryTempl[0] = "s"; // pre
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
343 queryTempl[1] = "\n;"; // post
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
344 queryTempl[2] = "\n;\n"; // separator
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
345
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
346 commandTempl[0] = "X"; // pre
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
347 commandTempl[1] = ""; // post
336
5826913bdc6d commandTempl[2] is never used, so no need to allocate and initialise it.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 335
diff changeset
348 //commandTempl[2] = "\nX"; // separator (is not used)
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
349 } else if ("mal".equals(language)) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
350 lang = LANG_MAL;
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
351
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
352 queryTempl[0] = ""; // pre
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
353 queryTempl[1] = ";\n"; // post
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
354 queryTempl[2] = ";\n"; // separator
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
355
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
356 commandTempl[0] = ""; // pre
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
357 commandTempl[1] = ""; // post
336
5826913bdc6d commandTempl[2] is never used, so no need to allocate and initialise it.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 335
diff changeset
358 //commandTempl[2] = ""; // separator (is not used)
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
359 } else {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
360 lang = LANG_UNKNOWN;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
361 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
362
671
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
363 // Now take care of any handshake options not handled during the handshake
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
364 if (replySizeSetting.isSent()) {
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
365 this.curReplySize = replySizeSetting.get();
656
c6fe5dfecafc Refactor HandshakeOptions
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 650
diff changeset
366 }
671
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
367 this.defaultFetchSize = replySizeSetting.get();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
368 if (lang == LANG_SQL) {
671
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
369 if (autoCommitSetting.mustSend(autoCommit)) {
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
370 setAutoCommit(autoCommitSetting.get());
673
8464a17caedf Do not forget to update the autoCommit bookkeeping
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 671
diff changeset
371 } else {
8464a17caedf Do not forget to update the autoCommit bookkeeping
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 671
diff changeset
372 // update bookkeeping
8464a17caedf Do not forget to update the autoCommit bookkeeping
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 671
diff changeset
373 autoCommit = autoCommitSetting.get();
658
108123ca6889 Add autocommit=true/false option to jdbc url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 657
diff changeset
374 }
671
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
375 if (sizeHeaderSetting.mustSend(false)) {
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
376 sendControlCommand("sizeheader 1");
673
8464a17caedf Do not forget to update the autoCommit bookkeeping
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 671
diff changeset
377 } else {
8464a17caedf Do not forget to update the autoCommit bookkeeping
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 671
diff changeset
378 // no bookkeeping to update
422
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
379 }
671
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
380 if (timeZoneSetting.mustSend(0)) {
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
381 setTimezone(timeZoneSetting.get());
673
8464a17caedf Do not forget to update the autoCommit bookkeeping
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 671
diff changeset
382 } else {
8464a17caedf Do not forget to update the autoCommit bookkeeping
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 671
diff changeset
383 // no bookkeeping to update
671
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
384 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
385 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
386
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
387 // we're absolutely not closed, since we're brand new
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
388 closed = false;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
389 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
390
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
391 //== methods of interface Connection
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
392
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
393 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
394 * Clears all warnings reported for this Connection object. After a
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
395 * call to this method, the method getWarnings returns null until a
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
396 * new warning is reported for this Connection object.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
397 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
398 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
399 public void clearWarnings() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
400 warnings = null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
401 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
402
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
403 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
404 * Releases this Connection object's database and JDBC resources
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
405 * immediately instead of waiting for them to be automatically
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
406 * released. All Statements created from this Connection will be
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
407 * closed when this method is called.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
408 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
409 * Calling the method close on a Connection object that is already
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
410 * closed is a no-op.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
411 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
412 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
413 public void close() {
623
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
414 if (closed)
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
415 return;
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
416
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
417 clearWarnings();
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
418 dbmd = null;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
419 synchronized (server) {
623
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
420 // Note: An entry in a WeakHashMap will automatically be
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
421 // removed when its key is no longer in ordinary use.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
422 for (Statement st : statements.keySet()) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
423 try {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
424 st.close();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
425 } catch (SQLException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
426 // better luck next time!
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
427 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
428 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
429 // close the socket
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
430 server.close();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
431 // report ourselves as closed
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
432 closed = true;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
433 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
434 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
435
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
436 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
437 * Makes all changes made since the previous commit/rollback
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
438 * permanent and releases any database locks currently held by this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
439 * Connection object. This method should be used only when
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
440 * auto-commit mode has been disabled.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
441 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
442 * @throws SQLException if a database access error occurs or this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
443 * Connection object is in auto-commit mode
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
444 * @see #setAutoCommit(boolean)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
445 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
446 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
447 public void commit() throws SQLException {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
448 // note: can't use sendIndependentCommand here because we need
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
449 // to process the auto_commit state the server gives
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
450 sendTransactionCommand("COMMIT");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
451 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
452
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
453 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
454 * Creates a Statement object for sending SQL statements to the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
455 * database. SQL statements without parameters are normally
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
456 * executed using Statement objects. If the same SQL statement is
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
457 * executed many times, it may be more efficient to use a
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
458 * PreparedStatement object.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
459 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
460 * Result sets created using the returned Statement object will by
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
461 * default be type TYPE_FORWARD_ONLY and have a concurrency level of
292
b127164342c4 Introduce default general behavior settings DEF_... for MonetResultSets and use them
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 288
diff changeset
462 * CONCUR_READ_ONLY and a holdability of HOLD_CURSORS_OVER_COMMIT.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
463 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
464 * @return a new default Statement object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
465 * @throws SQLException if a database access error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
466 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
467 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
468 public Statement createStatement() throws SQLException {
292
b127164342c4 Introduce default general behavior settings DEF_... for MonetResultSets and use them
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 288
diff changeset
469 return createStatement(MonetResultSet.DEF_RESULTSETTYPE, MonetResultSet.DEF_CONCURRENCY, MonetResultSet.DEF_HOLDABILITY);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
470 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
471
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
472 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
473 * Creates a Statement object that will generate ResultSet objects
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
474 * with the given type and concurrency. This method is the same as
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
475 * the createStatement method above, but it allows the default
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
476 * result set type and concurrency to be overridden.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
477 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
478 * @param resultSetType a result set type; one of
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
479 * ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
480 * or ResultSet.TYPE_SCROLL_SENSITIVE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
481 * @param resultSetConcurrency a concurrency type; one of
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
482 * ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
483 * @return a new Statement object that will generate ResultSet objects with
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
484 * the given type and concurrency
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
485 * @throws SQLException if a database access error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
486 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
487 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
488 public Statement createStatement(final int resultSetType, final int resultSetConcurrency) throws SQLException {
292
b127164342c4 Introduce default general behavior settings DEF_... for MonetResultSets and use them
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 288
diff changeset
489 return createStatement(resultSetType, resultSetConcurrency, MonetResultSet.DEF_HOLDABILITY);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
490 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
491
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
492 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
493 * Creates a Statement object that will generate ResultSet objects
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
494 * with the given type, concurrency, and holdability. This method
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
495 * is the same as the createStatement method above, but it allows
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
496 * the default result set type, concurrency, and holdability to be
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
497 * overridden.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
498 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
499 * @param resultSetType one of the following ResultSet constants:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
500 * ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
501 * or ResultSet.TYPE_SCROLL_SENSITIVE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
502 * @param resultSetConcurrency one of the following ResultSet
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
503 * constants: ResultSet.CONCUR_READ_ONLY or
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
504 * ResultSet.CONCUR_UPDATABLE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
505 * @param resultSetHoldability one of the following ResultSet
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
506 * constants: ResultSet.HOLD_CURSORS_OVER_COMMIT or
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
507 * ResultSet.CLOSE_CURSORS_AT_COMMIT
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
508 *
697
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
509 * @return a new Statement object that will generate ResultSet
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
510 * objects with the given type, concurrency, and holdability
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
511 * @throws SQLException if a database access error occurs or the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
512 * given parameters are not ResultSet constants indicating type,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
513 * concurrency, and holdability
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
514 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
515 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
516 public Statement createStatement(final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability) throws SQLException {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
517 try {
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
518 final Statement ret = new MonetStatement(this, resultSetType, resultSetConcurrency, resultSetHoldability);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
519 // store it in the map for when we close...
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
520 statements.put(ret, null);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
521 return ret;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
522 } catch (IllegalArgumentException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
523 throw new SQLException(e.toString(), "M0M03");
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
524 }
271
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
525 // we don't have to catch SQLException because that is declared to be thrown
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
526 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
527
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
528 /**
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
529 * Retrieves the current auto-commit mode for this Connection object.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
530 *
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
531 * @return the current state of this Connection object's auto-commit mode
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
532 * @see #setAutoCommit(boolean)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
533 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
534 @Override
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
535 public boolean getAutoCommit() {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
536 return autoCommit;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
537 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
538
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
539 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
540 * Retrieves this Connection object's current catalog name.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
541 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
542 * @return the current catalog name or null if there is none
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
543 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
544 @Override
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
545 public String getCatalog() {
697
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
546 // MonetDB does NOT support catalog names or qualifiers
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
547 return null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
548 }
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
549
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
550 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
551 * Retrieves the current holdability of ResultSet objects created
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
552 * using this Connection object.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
553 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
554 * @return the holdability, one of
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
555 * ResultSet.HOLD_CURSORS_OVER_COMMIT or
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
556 * ResultSet.CLOSE_CURSORS_AT_COMMIT
194
1296dbcc4958 Resolved javadoc many errors and warnings, such as:
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 186
diff changeset
557 * @see #setHoldability(int)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
558 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
559 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
560 public int getHoldability() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
561 // TODO: perhaps it is better to have the server implement
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
562 // CLOSE_CURSORS_AT_COMMIT
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
563 return ResultSet.HOLD_CURSORS_OVER_COMMIT;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
564 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
565
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
566 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
567 * Retrieves a DatabaseMetaData object that contains metadata about
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
568 * the database to which this Connection object represents a
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
569 * connection. The metadata includes information about the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
570 * database's tables, its supported SQL grammar, its stored
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
571 * procedures, the capabilities of this connection, and so on.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
572 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
573 * @throws SQLException if the current language is not SQL
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
574 * @return a DatabaseMetaData object for this Connection object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
575 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
576 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
577 public DatabaseMetaData getMetaData() throws SQLException {
472
0e21097f438b Reduce the number of MonetDatabaseMetaData objects created via getMetaData() to maximum 1 per connection as it can be reused.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 451
diff changeset
578 // for debug: System.out.println("calling getMetaData()");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
579 if (lang != LANG_SQL)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
580 throw new SQLException("This method is only supported in SQL mode", "M0M04");
472
0e21097f438b Reduce the number of MonetDatabaseMetaData objects created via getMetaData() to maximum 1 per connection as it can be reused.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 451
diff changeset
581 if (dbmd == null) {
0e21097f438b Reduce the number of MonetDatabaseMetaData objects created via getMetaData() to maximum 1 per connection as it can be reused.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 451
diff changeset
582 // first use, construct it once and reuse it for all next calls
0e21097f438b Reduce the number of MonetDatabaseMetaData objects created via getMetaData() to maximum 1 per connection as it can be reused.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 451
diff changeset
583 dbmd = new MonetDatabaseMetaData(this);
0e21097f438b Reduce the number of MonetDatabaseMetaData objects created via getMetaData() to maximum 1 per connection as it can be reused.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 451
diff changeset
584 }
0e21097f438b Reduce the number of MonetDatabaseMetaData objects created via getMetaData() to maximum 1 per connection as it can be reused.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 451
diff changeset
585 return dbmd;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
586 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
587
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
588 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
589 * Retrieves this Connection object's current transaction isolation
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
590 * level.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
591 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
592 * @return the current transaction isolation level, which will be
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
593 * Connection.TRANSACTION_SERIALIZABLE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
594 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
595 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
596 public int getTransactionIsolation() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
597 return TRANSACTION_SERIALIZABLE;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
598 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
599
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
600 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
601 * Retrieves the Map object associated with this Connection object.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
602 * Unless the application has added an entry, the type map returned
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
603 * will be empty.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
604 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
605 * @return the java.util.Map object associated with this Connection
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
606 * object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
607 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
608 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
609 public Map<String,Class<?>> getTypeMap() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
610 return typeMap;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
611 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
612
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
613 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
614 * Retrieves the first warning reported by calls on this Connection
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
615 * object. If there is more than one warning, subsequent warnings
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
616 * will be chained to the first one and can be retrieved by calling
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
617 * the method SQLWarning.getNextWarning on the warning that was
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
618 * retrieved previously.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
619 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
620 * This method may not be called on a closed connection; doing so
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
621 * will cause an SQLException to be thrown.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
622 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
623 * Note: Subsequent warnings will be chained to this SQLWarning.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
624 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
625 * @return the first SQLWarning object or null if there are none
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
626 * @throws SQLException if a database access error occurs or this method is
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
627 * called on a closed connection
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
628 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
629 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
630 public SQLWarning getWarnings() throws SQLException {
348
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
631 checkNotClosed();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
632 // if there are no warnings, this will be null, which fits with the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
633 // specification.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
634 return warnings;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
635 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
636
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
637 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
638 * Retrieves whether this Connection object has been closed. A
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
639 * connection is closed if the method close has been called on it or
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
640 * if certain fatal errors have occurred. This method is guaranteed
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
641 * to return true only when it is called after the method
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
642 * Connection.close has been called.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
643 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
644 * This method generally cannot be called to determine whether a
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
645 * connection to a database is valid or invalid. A typical client
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
646 * can determine that a connection is invalid by catching any
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
647 * exceptions that might be thrown when an operation is attempted.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
648 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
649 * @return true if this Connection object is closed; false if it is
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
650 * still open
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
651 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
652 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
653 public boolean isClosed() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
654 return closed;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
655 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
656
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
657 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
658 * Retrieves whether this Connection object is in read-only mode.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
659 * MonetDB currently doesn't support updateable result sets, but
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
660 * updates are possible. Hence the Connection object is never in
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
661 * read-only mode.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
662 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
663 * @return true if this Connection object is read-only; false otherwise
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
664 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
665 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
666 public boolean isReadOnly() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
667 return false;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
668 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
669
184
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
670 /**
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
671 * Converts the given SQL statement into the system's native SQL grammar.
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
672 * A driver may convert the JDBC SQL grammar into its system's native SQL grammar prior to sending it.
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
673 * This method returns the native form of the statement that the driver would have sent.
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
674 *
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
675 * @param sql - an SQL statement that may contain one or more '?' parameter placeholders.
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
676 * @return the native form of this statement
184
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
677 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
678 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
679 public String nativeSQL(final String sql) {
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
680 /* there is currently no way to get the native MonetDB rewritten SQL string back, so just return the original string */
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
681 return sql;
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
682 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
683
184
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
684 /**
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
685 * Creates a CallableStatement object for calling database stored procedures.
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
686 * The CallableStatement object provides methods for setting up its IN and OUT parameters,
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
687 * and methods for executing the call to a stored procedure.
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
688 *
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
689 * Note: This method is optimized for handling stored procedure call statements.
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
690 * Some drivers may send the call statement to the database when the method prepareCall is done;
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
691 * others may wait until the CallableStatement object is executed. This has no direct effect
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
692 * on users; however, it does affect which method throws certain SQLExceptions.
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
693 *
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
694 * Result sets created using the returned CallableStatement object will by default be type TYPE_FORWARD_ONLY
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
695 * and have a concurrency level of CONCUR_READ_ONLY.
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
696 * The holdability of the created result sets can be determined by calling getHoldability().
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
697 *
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
698 * @param sql - an SQL statement that may contain one or more '?' parameter placeholders.
184
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
699 * Typically this statement is specified using JDBC call escape syntax.
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
700 * @return a new default CallableStatement object containing the pre-compiled SQL statement
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
701 * @throws SQLException - if a database access error occurs or this method is called on a closed connection
184
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
702 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
703 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
704 public CallableStatement prepareCall(final String sql) throws SQLException {
292
b127164342c4 Introduce default general behavior settings DEF_... for MonetResultSets and use them
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 288
diff changeset
705 return prepareCall(sql, MonetResultSet.DEF_RESULTSETTYPE, MonetResultSet.DEF_CONCURRENCY, MonetResultSet.DEF_HOLDABILITY);
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
706 }
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
707
184
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
708 /**
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
709 * Creates a CallableStatement object that will generate ResultSet objects with the given type and concurrency.
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
710 * This method is the same as the prepareCall method above, but it allows the default result set type and concurrency to be overridden.
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
711 * The holdability of the created result sets can be determined by calling getHoldability().
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
712 *
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
713 * @param sql - a String object that is the SQL statement to be sent to the database; may contain on or more '?' parameters
184
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
714 * Typically this statement is specified using JDBC call escape syntax.
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
715 * @param resultSetType - a result set type; one of ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE, or ResultSet.TYPE_SCROLL_SENSITIVE
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
716 * @param resultSetConcurrency - a concurrency type; one of ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
717 * @return a new CallableStatement object containing the pre-compiled SQL statement that
184
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
718 * will produce ResultSet objects with the given type and concurrency
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
719 * @throws SQLException - if a database access error occurs, this method is called on a closed connection or
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
720 * the given parameters are not ResultSet constants indicating type and concurrency
184
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
721 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
722 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
723 public CallableStatement prepareCall(final String sql, final int resultSetType, final int resultSetConcurrency) throws SQLException {
292
b127164342c4 Introduce default general behavior settings DEF_... for MonetResultSets and use them
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 288
diff changeset
724 return prepareCall(sql, resultSetType, resultSetConcurrency, MonetResultSet.DEF_HOLDABILITY);
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
725 }
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
726
184
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
727 /**
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
728 * Creates a CallableStatement object that will generate ResultSet objects with the given type and concurrency.
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
729 * This method is the same as the prepareCall method above, but it allows the default result set type, result set concurrency type and holdability to be overridden.
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
730 *
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
731 * @param sql - a String object that is the SQL statement to be sent to the database; may contain on or more '?' parameters
184
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
732 * Typically this statement is specified using JDBC call escape syntax.
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
733 * @param resultSetType - a result set type; one of ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE, or ResultSet.TYPE_SCROLL_SENSITIVE
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
734 * @param resultSetConcurrency - a concurrency type; one of ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
735 * @param resultSetHoldability - one of the following ResultSet constants: ResultSet.HOLD_CURSORS_OVER_COMMIT or ResultSet.CLOSE_CURSORS_AT_COMMIT
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
736 * @return a new CallableStatement object, containing the pre-compiled SQL statement, that will generate ResultSet objects with the given type, concurrency, and holdability
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
737 * @throws SQLException - if a database access error occurs, this method is called on a closed connection or
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
738 * the given parameters are not ResultSet constants indicating type, concurrency, and holdability
184
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
739 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
740 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
741 public CallableStatement prepareCall(final String sql, final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability)
184
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
742 throws SQLException
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
743 {
348
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
744 checkNotClosed();
692
2233b172e06d Add checks for sql String parameter to prevent NullPointerException or executing an empty sql String.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 690
diff changeset
745
2233b172e06d Add checks for sql String parameter to prevent NullPointerException or executing an empty sql String.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 690
diff changeset
746 if (sql == null || sql.isEmpty())
2233b172e06d Add checks for sql String parameter to prevent NullPointerException or executing an empty sql String.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 690
diff changeset
747 throw new SQLException("Missing SQL statement", "M1M05");
2233b172e06d Add checks for sql String parameter to prevent NullPointerException or executing an empty sql String.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 690
diff changeset
748
271
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
749 try {
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
750 final CallableStatement ret = new MonetCallableStatement(
271
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
751 this,
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
752 resultSetType,
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
753 resultSetConcurrency,
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
754 resultSetHoldability,
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
755 sql
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
756 );
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
757 // store it in the map for when we close...
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
758 statements.put(ret, null);
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
759 return ret;
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
760 } catch (IllegalArgumentException e) {
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
761 throw new SQLException(e.toString(), "M0M03");
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
762 }
4880267d0fe1 Added implementation of java.sql.CallableStatement interface, test program and updated the ChangeLog and release notes.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 266
diff changeset
763 // we don't have to catch SQLException because that is declared to be thrown
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
764 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
765
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
766 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
767 * Creates a PreparedStatement object for sending parameterized SQL
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
768 * statements to the database.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
769 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
770 * A SQL statement with or without IN parameters can be pre-compiled
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
771 * and stored in a PreparedStatement object. This object can then be
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
772 * used to efficiently execute this statement multiple times.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
773 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
774 * Note: This method is optimized for handling parametric SQL
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
775 * statements that benefit from precompilation. If the driver
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
776 * supports precompilation, the method prepareStatement will send
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
777 * the statement to the database for precompilation. Some drivers
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
778 * may not support precompilation. In this case, the statement may
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
779 * not be sent to the database until the PreparedStatement object is
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
780 * executed. This has no direct effect on users; however, it does
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
781 * affect which methods throw certain SQLException objects.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
782 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
783 * Result sets created using the returned PreparedStatement object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
784 * will by default be type TYPE_FORWARD_ONLY and have a concurrency
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
785 * level of CONCUR_READ_ONLY.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
786 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
787 * @param sql an SQL statement that may contain one or more '?' IN
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
788 * parameter placeholders
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
789 * @return a new default PreparedStatement object containing the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
790 * pre-compiled SQL statement
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
791 * @throws SQLException if a database access error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
792 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
793 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
794 public PreparedStatement prepareStatement(final String sql) throws SQLException {
292
b127164342c4 Introduce default general behavior settings DEF_... for MonetResultSets and use them
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 288
diff changeset
795 return prepareStatement(sql, MonetResultSet.DEF_RESULTSETTYPE, MonetResultSet.DEF_CONCURRENCY, MonetResultSet.DEF_HOLDABILITY);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
796 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
797
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
798 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
799 * Creates a PreparedStatement object that will generate ResultSet
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
800 * objects with the given type and concurrency. This method is the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
801 * same as the prepareStatement method above, but it allows the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
802 * default result set type and concurrency to be overridden.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
803 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
804 * @param sql a String object that is the SQL statement to be sent to the
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
805 * database; may contain one or more ? IN parameters
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
806 * @param resultSetType a result set type; one of
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
807 * ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
808 * or ResultSet.TYPE_SCROLL_SENSITIVE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
809 * @param resultSetConcurrency a concurrency type; one of
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
810 * ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
811 * @return a new PreparedStatement object containing the pre-compiled SQL
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
812 * statement that will produce ResultSet objects with the given
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
813 * type and concurrency
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
814 * @throws SQLException if a database access error occurs or the given
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
815 * parameters are not ResultSet constants indicating
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
816 * type and concurrency
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
817 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
818 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
819 public PreparedStatement prepareStatement(final String sql, final int resultSetType, final int resultSetConcurrency) throws SQLException {
292
b127164342c4 Introduce default general behavior settings DEF_... for MonetResultSets and use them
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 288
diff changeset
820 return prepareStatement(sql, resultSetType, resultSetConcurrency, MonetResultSet.DEF_HOLDABILITY);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
821 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
822
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
823 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
824 * Creates a PreparedStatement object that will generate ResultSet
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
825 * objects with the given type, concurrency, and holdability.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
826 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
827 * This method is the same as the prepareStatement method above, but
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
828 * it allows the default result set type, concurrency, and
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
829 * holdability to be overridden.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
830 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
831 * @param sql a String object that is the SQL statement to be sent
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
832 * to the database; may contain one or more ? IN parameters
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
833 * @param resultSetType one of the following ResultSet constants:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
834 * ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
835 * or ResultSet.TYPE_SCROLL_SENSITIVE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
836 * @param resultSetConcurrency one of the following ResultSet
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
837 * constants: ResultSet.CONCUR_READ_ONLY or
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
838 * ResultSet.CONCUR_UPDATABLE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
839 * @param resultSetHoldability one of the following ResultSet
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
840 * constants: ResultSet.HOLD_CURSORS_OVER_COMMIT or
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
841 * ResultSet.CLOSE_CURSORS_AT_COMMIT
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
842 * @return a new PreparedStatement object, containing the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
843 * pre-compiled SQL statement, that will generate ResultSet objects
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
844 * with the given type, concurrency, and holdability
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
845 * @throws SQLException if a database access error occurs or the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
846 * given parameters are not ResultSet constants indicating type,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
847 * concurrency, and holdability
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
848 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
849 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
850 public PreparedStatement prepareStatement(final String sql, final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
851 throws SQLException
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
852 {
348
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
853 checkNotClosed();
692
2233b172e06d Add checks for sql String parameter to prevent NullPointerException or executing an empty sql String.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 690
diff changeset
854
2233b172e06d Add checks for sql String parameter to prevent NullPointerException or executing an empty sql String.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 690
diff changeset
855 if (sql == null || sql.isEmpty())
2233b172e06d Add checks for sql String parameter to prevent NullPointerException or executing an empty sql String.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 690
diff changeset
856 throw new SQLException("Missing SQL statement", "M1M05");
2233b172e06d Add checks for sql String parameter to prevent NullPointerException or executing an empty sql String.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 690
diff changeset
857
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
858 try {
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
859 final PreparedStatement ret = new MonetPreparedStatement(
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
860 this,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
861 resultSetType,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
862 resultSetConcurrency,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
863 resultSetHoldability,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
864 sql
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
865 );
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
866 // store it in the map for when we close...
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
867 statements.put(ret, null);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
868 return ret;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
869 } catch (IllegalArgumentException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
870 throw new SQLException(e.toString(), "M0M03");
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
871 }
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
872 // we don't have to catch SQLException because that is declared to be thrown
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
873 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
874
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
875 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
876 * Creates a default PreparedStatement object that has the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
877 * capability to retrieve auto-generated keys. The given constant
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
878 * tells the driver whether it should make auto-generated keys
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
879 * available for retrieval. This parameter is ignored if the SQL
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
880 * statement is not an INSERT statement.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
881 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
882 * Note: This method is optimized for handling parametric SQL
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
883 * statements that benefit from precompilation. If the driver
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
884 * supports precompilation, the method prepareStatement will send
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
885 * the statement to the database for precompilation. Some drivers
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
886 * may not support precompilation. In this case, the statement may
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
887 * not be sent to the database until the PreparedStatement object is
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
888 * executed. This has no direct effect on users; however, it does
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
889 * affect which methods throw certain SQLExceptions.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
890 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
891 * Result sets created using the returned PreparedStatement object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
892 * will by default be type TYPE_FORWARD_ONLY and have a concurrency
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
893 * level of CONCUR_READ_ONLY.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
894 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
895 * @param sql an SQL statement that may contain one or more '?' IN
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
896 * parameter placeholders
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
897 * @param autoGeneratedKeys a flag indicating whether auto-generated
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
898 * keys should be returned; one of
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
899 * Statement.RETURN_GENERATED_KEYS or
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
900 * Statement.NO_GENERATED_KEYS
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
901 * @return a new PreparedStatement object, containing the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
902 * pre-compiled SQL statement, that will have the capability
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
903 * of returning auto-generated keys
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
904 * @throws SQLException - if a database access error occurs or the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
905 * given parameter is not a Statement constant indicating
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
906 * whether auto-generated keys should be returned
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
907 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
908 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
909 public PreparedStatement prepareStatement(final String sql, final int autoGeneratedKeys) throws SQLException {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
910 if (autoGeneratedKeys != Statement.RETURN_GENERATED_KEYS &&
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
911 autoGeneratedKeys != Statement.NO_GENERATED_KEYS)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
912 throw new SQLException("Invalid argument, expected RETURN_GENERATED_KEYS or NO_GENERATED_KEYS", "M1M05");
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
913
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
914 /* MonetDB has no way to disable this, so just do the normal thing ;) */
292
b127164342c4 Introduce default general behavior settings DEF_... for MonetResultSets and use them
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 288
diff changeset
915 return prepareStatement(sql, MonetResultSet.DEF_RESULTSETTYPE, MonetResultSet.DEF_CONCURRENCY, MonetResultSet.DEF_HOLDABILITY);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
916 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
917
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
918 /**
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
919 * Creates a default PreparedStatement object capable of returning the auto-generated keys designated by the given array.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
920 * This array contains the indexes of the columns in the target table that contain the auto-generated keys that should be made available.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
921 * The driver will ignore the array if the SQL statement is not an INSERT statement, or an SQL statement able to
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
922 * return auto-generated keys (the list of such statements is vendor-specific).
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
923 *
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
924 * An SQL statement with or without IN parameters can be pre-compiled and stored in a PreparedStatement object.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
925 * This object can then be used to efficiently execute this statement multiple times.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
926 *
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
927 * Note: This method is optimized for handling parametric SQL statements that benefit from precompilation.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
928 * If the driver supports precompilation, the method prepareStatement will send the statement to the database for precompilation.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
929 * Some drivers may not support precompilation. In this case, the statement may not be sent to the database until the PreparedStatement
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
930 * object is executed. This has no direct effect on users; however, it does affect which methods throw certain SQLExceptions.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
931 *
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
932 * Result sets created using the returned PreparedStatement object will by default be type TYPE_FORWARD_ONLY and have
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
933 * a concurrency level of CONCUR_READ_ONLY. The holdability of the created result sets can be determined by calling getHoldability().
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
934 *
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
935 * @param sql - an SQL statement that may contain one or more '?' IN parameter placeholders
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
936 * @param columnIndexes - an array of column indexes indicating the columns that should be returned from the inserted row or rows
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
937 * @return a new PreparedStatement object, containing the pre-compiled statement, that is capable of
414
1e278695fe54 Small improvements: adding some final keywords, removing unnecesary initialisations, improve comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 408
diff changeset
938 * returning the auto-generated keys designated by the given array of column indexes
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
939 * @throws SQLException - if a database access error occurs or this method is called on a closed connection
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
940 * @throws SQLFeatureNotSupportedException - if the JDBC driver does not support this method
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
941 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
942 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
943 public PreparedStatement prepareStatement(final String sql, final int[] columnIndexes) throws SQLException {
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
944 throw newSQLFeatureNotSupportedException("prepareStatement(String sql, int[] columnIndexes)");
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
945 }
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
946
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
947 /**
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
948 * Creates a default PreparedStatement object capable of returning the auto-generated keys designated by the given array.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
949 * This array contains the names of the columns in the target table that contain the auto-generated keys that should be returned.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
950 * The driver will ignore the array if the SQL statement is not an INSERT statement, or an SQL statement able to
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
951 * return auto-generated keys (the list of such statements is vendor-specific).
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
952 *
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
953 * An SQL statement with or without IN parameters can be pre-compiled and stored in a PreparedStatement object.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
954 * This object can then be used to efficiently execute this statement multiple times.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
955 *
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
956 * Note: This method is optimized for handling parametric SQL statements that benefit from precompilation.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
957 * If the driver supports precompilation, the method prepareStatement will send the statement to the database for precompilation.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
958 * Some drivers may not support precompilation. In this case, the statement may not be sent to the database until the PreparedStatement
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
959 * object is executed. This has no direct effect on users; however, it does affect which methods throw certain SQLExceptions.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
960 *
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
961 * Result sets created using the returned PreparedStatement object will by default be type TYPE_FORWARD_ONLY and have
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
962 * a concurrency level of CONCUR_READ_ONLY. The holdability of the created result sets can be determined by calling getHoldability().
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
963 *
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
964 * @param sql - an SQL statement that may contain one or more '?' IN parameter placeholders
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
965 * @param columnNames - an array of column names indicating the columns that should be returned from the inserted row or rows
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
966 * @return a new PreparedStatement object, containing the pre-compiled statement, that is capable of
414
1e278695fe54 Small improvements: adding some final keywords, removing unnecesary initialisations, improve comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 408
diff changeset
967 * returning the auto-generated keys designated by the given array of column names
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
968 * @throws SQLException - if a database access error occurs or this method is called on a closed connection
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
969 * @throws SQLFeatureNotSupportedException - if the JDBC driver does not support this method
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
970 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
971 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
972 public PreparedStatement prepareStatement(final String sql, final String[] columnNames) throws SQLException {
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
973 throw newSQLFeatureNotSupportedException("prepareStatement(String sql, String[] columnNames)");
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
974 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
975
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
976 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
977 * Removes the given Savepoint object from the current transaction.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
978 * Any reference to the savepoint after it have been removed will
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
979 * cause an SQLException to be thrown.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
980 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
981 * @param savepoint the Savepoint object to be removed
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
982 * @throws SQLException if a database access error occurs or the given
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
983 * Savepoint object is not a valid savepoint in the current
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
984 * transaction
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
985 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
986 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
987 public void releaseSavepoint(final Savepoint savepoint) throws SQLException {
348
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
988 checkNotClosed();
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
989 if (!(savepoint instanceof MonetSavepoint))
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
990 throw new SQLException("This driver can only handle savepoints it created itself", "M0M06");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
991
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
992 final MonetSavepoint sp = (MonetSavepoint)savepoint;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
993
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
994 // note: can't use sendIndependentCommand here because we need
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
995 // to process the auto_commit state the server gives
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
996 sendTransactionCommand("RELEASE SAVEPOINT " + sp.getName());
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
997 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
998
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
999 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1000 * Undoes all changes made in the current transaction and releases
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1001 * any database locks currently held by this Connection object.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1002 * This method should be used only when auto-commit mode has been disabled.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1003 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1004 * @throws SQLException if a database access error occurs or this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1005 * Connection object is in auto-commit mode
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1006 * @see #setAutoCommit(boolean)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1007 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1008 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1009 public void rollback() throws SQLException {
348
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
1010 checkNotClosed();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1011 // note: can't use sendIndependentCommand here because we need
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1012 // to process the auto_commit state the server gives
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
1013 sendTransactionCommand("ROLLBACK");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1014 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1015
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1016 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1017 * Undoes all changes made after the given Savepoint object was set.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1018 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1019 * This method should be used only when auto-commit has been disabled.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1020 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1021 * @param savepoint the Savepoint object to roll back to
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1022 * @throws SQLException if a database access error occurs, the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1023 * Savepoint object is no longer valid, or this Connection
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1024 * object is currently in auto-commit mode
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1025 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1026 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1027 public void rollback(final Savepoint savepoint) throws SQLException {
348
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
1028 checkNotClosed();
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1029 if (!(savepoint instanceof MonetSavepoint))
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1030 throw new SQLException("This driver can only handle savepoints it created itself", "M0M06");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1031
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1032 final MonetSavepoint sp = (MonetSavepoint)savepoint;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1033
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1034 // note: can't use sendIndependentCommand here because we need
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1035 // to process the auto_commit state the server gives
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
1036 sendTransactionCommand("ROLLBACK TO SAVEPOINT " + sp.getName());
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1037 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1038
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1039 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1040 * Sets this connection's auto-commit mode to the given state. If a
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1041 * connection is in auto-commit mode, then all its SQL statements
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1042 * will be executed and committed as individual transactions.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1043 * Otherwise, its SQL statements are grouped into transactions that
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1044 * are terminated by a call to either the method commit or the
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1045 * method rollback. By default, new connections are in auto-commit mode.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1046 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1047 * The commit occurs when the statement completes or the next
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1048 * execute occurs, whichever comes first. In the case of statements
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1049 * returning a ResultSet object, the statement completes when the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1050 * last row of the ResultSet object has been retrieved or the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1051 * ResultSet object has been closed. In advanced cases, a single
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1052 * statement may return multiple results as well as output parameter
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1053 * values. In these cases, the commit occurs when all results and
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1054 * output parameter values have been retrieved.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1055 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1056 * NOTE: If this method is called during a transaction, the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1057 * transaction is committed.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1058 *
8
a27ee2cb14a0 Replace String methods equals("") and "".equals( with isEmpty()
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 0
diff changeset
1059 * @param autoCommit true to enable auto-commit mode; false to disable it
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1060 * @throws SQLException if a database access error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1061 * @see #getAutoCommit()
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1062 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1063 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1064 public void setAutoCommit(final boolean autoCommit) throws SQLException {
348
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
1065 checkNotClosed();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1066 if (this.autoCommit != autoCommit) {
407
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1067 sendControlCommand(autoCommit ? "auto_commit 1" : "auto_commit 0");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1068 this.autoCommit = autoCommit;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1069 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1070 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1071
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1072 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1073 * Sets the given catalog name in order to select a subspace of this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1074 * Connection object's database in which to work. If the driver
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1075 * does not support catalogs, it will silently ignore this request.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1076 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1077 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1078 public void setCatalog(final String catalog) {
697
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1079 // silently ignore this request as MonetDB does not support catalog names
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1080 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1081
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1082 /**
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1083 * Changes the default holdability of ResultSet objects created using this
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1084 * Connection object to the given holdability. The default holdability of
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1085 * ResultSet objects can be be determined by invoking DatabaseMetaData.getResultSetHoldability().
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1086 *
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1087 * @param holdability - a ResultSet holdability constant; one of
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1088 * ResultSet.HOLD_CURSORS_OVER_COMMIT or
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1089 * ResultSet.CLOSE_CURSORS_AT_COMMIT
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
1090 * @throws SQLException - if a database access error occurs or this method is called on a closed connection
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
1091 * @throws SQLFeatureNotSupportedException - if the JDBC driver does not support this method or argument
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1092 * @see #getHoldability()
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1093 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1094 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1095 public void setHoldability(final int holdability) throws SQLException {
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1096 // we only support ResultSet.HOLD_CURSORS_OVER_COMMIT
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1097 if (holdability != ResultSet.HOLD_CURSORS_OVER_COMMIT)
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
1098 throw newSQLFeatureNotSupportedException("setHoldability(CLOSE_CURSORS_AT_COMMIT)");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1099 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1100
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1101 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1102 * Puts this connection in read-only mode as a hint to the driver to
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1103 * enable database optimizations. MonetDB doesn't support any mode
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1104 * here, hence an SQLWarning is generated if attempted to set
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1105 * to true here.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1106 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1107 * @param readOnly true enables read-only mode; false disables it
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1108 * @throws SQLException if a database access error occurs or this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1109 * method is called during a transaction.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1110 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1111 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1112 public void setReadOnly(final boolean readOnly) throws SQLException {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1113 if (readOnly == true)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1114 addWarning("cannot setReadOnly(true): read-only Connection mode not supported", "01M08");
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1115 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1116
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1117 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1118 * Creates an unnamed savepoint in the current transaction and
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1119 * returns the new Savepoint object that represents it.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1120 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1121 * @return the new Savepoint object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1122 * @throws SQLException if a database access error occurs or this Connection
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1123 * object is currently in auto-commit mode
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1124 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1125 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1126 public Savepoint setSavepoint() throws SQLException {
407
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1127 return setSavepoint(null);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1128 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1129
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1130 /**
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1131 * Creates a savepoint with the given name in the current transaction
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1132 * and returns the new Savepoint object that represents it.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1133 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1134 * @param name a String containing the name of the savepoint
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1135 * @return the new Savepoint object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1136 * @throws SQLException if a database access error occurs or this Connection
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1137 * object is currently in auto-commit mode
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1138 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1139 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1140 public Savepoint setSavepoint(final String name) throws SQLException {
348
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
1141 checkNotClosed();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1142 // create a new Savepoint object
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1143 final MonetSavepoint sp;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1144 try {
407
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1145 sp = (name != null) ? new MonetSavepoint(name) : new MonetSavepoint();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1146 } catch (IllegalArgumentException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1147 throw new SQLException(e.getMessage(), "M0M03");
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1148 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1149
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1150 // note: can't use sendIndependentCommand here because we need
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1151 // to process the auto_commit state the server gives
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
1152 sendTransactionCommand("SAVEPOINT " + sp.getName());
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1153 return sp;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1154 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1155
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1156 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1157 * Attempts to change the transaction isolation level for this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1158 * Connection object to the one given. The constants defined in the
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1159 * interface Connection are the possible transaction isolation levels.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1160 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1161 * @param level one of the following Connection constants:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1162 * Connection.TRANSACTION_READ_UNCOMMITTED,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1163 * Connection.TRANSACTION_READ_COMMITTED,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1164 * Connection.TRANSACTION_REPEATABLE_READ, or
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1165 * Connection.TRANSACTION_SERIALIZABLE.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1166 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1167 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1168 public void setTransactionIsolation(final int level) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1169 if (level != TRANSACTION_SERIALIZABLE) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1170 addWarning("MonetDB only supports fully serializable " +
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1171 "transactions, continuing with transaction level " +
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1172 "raised to TRANSACTION_SERIALIZABLE", "01M09");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1173 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1174 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1175
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1176 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1177 * Installs the given TypeMap object as the type map for this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1178 * Connection object. The type map will be used for the custom
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1179 * mapping of SQL structured types and distinct types.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1180 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1181 * @param map the java.util.Map object to install as the replacement for
697
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1182 * this Connection object's default type map
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1183 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1184 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1185 public void setTypeMap(final Map<String, Class<?>> map) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1186 typeMap = map;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1187 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1188
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1189 /**
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1190 * Returns a string identifying this Connection to the MonetDB server.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1191 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1192 * @return a String representing this Object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1193 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1194 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1195 public String toString() {
480
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
1196 return "MonetDB Connection (" + getJDBCURL()
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
1197 + (closed ? ") disconnected" : ") connected");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1198 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1199
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1200 //== Java 1.6 methods (JDBC 4.0)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1201
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1202 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1203 * Factory method for creating Array objects.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1204 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1205 * Note: When createArrayOf is used to create an array object that
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1206 * maps to a primitive data type, then it is implementation-defined
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1207 * whether the Array object is an array of that primitive data type
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1208 * or an array of Object.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1209 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1210 * Note: The JDBC driver is responsible for mapping the elements
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1211 * Object array to the default JDBC SQL type defined in
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1212 * java.sql.Types for the given class of Object. The default mapping
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1213 * is specified in Appendix B of the JDBC specification. If the
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1214 * resulting JDBC type is not the appropriate type for the given
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1215 * typeName then it is implementation defined whether an
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1216 * SQLException is thrown or the driver supports the resulting conversion.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1217 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1218 * @param typeName the SQL name of the type the elements of the
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1219 * array map to. The typeName is a database-specific name
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1220 * which may be the name of a built-in type, a user-defined
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1221 * type or a standard SQL type supported by this database.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1222 * This is the value returned by Array.getBaseTypeName
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1223 * @return an Array object whose elements map to the specified SQL type
89
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1224 * @throws SQLException - if a database error occurs, the JDBC type is not appropriate for the typeName and
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1225 * the conversion is not supported, the typeName is null or this method is called on a closed connection
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1226 * @throws SQLFeatureNotSupportedException - if the JDBC driver does not support this data type
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1227 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1228 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1229 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1230 public java.sql.Array createArrayOf(final String typeName, final Object[] elements) throws SQLException {
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
1231 throw newSQLFeatureNotSupportedException("createArrayOf");
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1232 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1233
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1234 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1235 * Constructs an object that implements the Clob interface. The
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1236 * object returned initially contains no data. The setAsciiStream,
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1237 * setCharacterStream and setString methods of the Clob interface
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1238 * may be used to add data to the Clob.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1239 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1240 * @return a MonetClob instance
89
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1241 * @throws SQLException - if an object that implements the Clob interface can not be constructed,
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1242 * this method is called on a closed connection or a database access error occurs.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1243 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1244 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1245 @Override
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1246 public java.sql.Clob createClob() throws SQLException {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1247 return new MonetClob("");
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1248 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1249
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1250 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1251 * Constructs an object that implements the Blob interface. The
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1252 * object returned initially contains no data. The setBinaryStream
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1253 * and setBytes methods of the Blob interface may be used to add
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1254 * data to the Blob.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1255 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1256 * @return a MonetBlob instance
89
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1257 * @throws SQLException - if an object that implements the Blob interface can not be constructed,
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1258 * this method is called on a closed connection or a database access error occurs.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1259 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1260 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1261 @Override
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1262 public java.sql.Blob createBlob() throws SQLException {
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1263 return new MonetBlob(new byte[1]);
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1264 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1265
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1266 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1267 * Constructs an object that implements the NClob interface. The
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1268 * object returned initially contains no data. The setAsciiStream,
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1269 * setCharacterStream and setString methods of the NClob interface
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1270 * may be used to add data to the NClob.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1271 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1272 * @return an NClob instance
89
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1273 * @throws SQLException - if an object that implements the NClob interface can not be constructed,
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1274 * this method is called on a closed connection or a database access error occurs.
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1275 * @throws SQLFeatureNotSupportedException - if the JDBC driver does not support this data type
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1276 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1277 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1278 @Override
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1279 public java.sql.NClob createNClob() throws SQLException {
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
1280 throw newSQLFeatureNotSupportedException("createNClob");
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1281 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1282
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1283 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1284 * Factory method for creating Struct objects.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1285 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1286 * @param typeName the SQL type name of the SQL structured type that
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1287 * this Struct object maps to. The typeName is the name of a
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1288 * user-defined type that has been defined for this database.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1289 * It is the value returned by Struct.getSQLTypeName.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1290 * @param attributes the attributes that populate the returned object
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1291 * @return a Struct object that maps to the given SQL type and is
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1292 * populated with the given attributes
89
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1293 * @throws SQLException - if an object that implements the Struct interface can not be constructed,
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1294 * this method is called on a closed connection or a database access error occurs.
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1295 * @throws SQLFeatureNotSupportedException - if the JDBC driver does not support this data type
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1296 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1297 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1298 @Override
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
1299 public java.sql.Struct createStruct(String typeName, Object[] attributes) throws SQLException {
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
1300 throw newSQLFeatureNotSupportedException("createStruct");
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1301 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1302
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1303 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1304 * Constructs an object that implements the SQLXML interface. The
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1305 * object returned initially contains no data. The
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1306 * createXmlStreamWriter object and setString method of the SQLXML
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1307 * interface may be used to add data to the SQLXML object.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1308 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1309 * @return An object that implements the SQLXML interface
89
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1310 * @throws SQLException - if an object that implements the SQLXML interface can not be constructed,
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1311 * this method is called on a closed connection or a database access error occurs.
a6608e9581c1 Moved content of ChangeLog to ChangeLog-Archive.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 77
diff changeset
1312 * @throws SQLFeatureNotSupportedException - if the JDBC driver does not support this data type
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1313 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1314 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1315 @Override
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1316 public java.sql.SQLXML createSQLXML() throws SQLException {
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
1317 throw newSQLFeatureNotSupportedException("createSQLXML");
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1318 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1319
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1320 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1321 * Returns true if the connection has not been closed and is still
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1322 * valid. The driver shall submit a query on the connection or use
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1323 * some other mechanism that positively verifies the connection is
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1324 * still valid when this method is called.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1325 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1326 * The query submitted by the driver to validate the connection
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1327 * shall be executed in the context of the current transaction.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1328 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1329 * @param timeout The time in seconds to wait for the database
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1330 * operation used to validate the connection to complete. If
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1331 * the timeout period expires before the operation completes,
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1332 * this method returns false. A value of 0 indicates a
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1333 * timeout is not applied to the database operation.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1334 * @return true if the connection is valid, false otherwise
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1335 * @throws SQLException if the value supplied for timeout is less than 0
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1336 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1337 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1338 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1339 public boolean isValid(final int timeout) throws SQLException {
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1340 if (timeout < 0)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1341 throw new SQLException("timeout is less than 0", "M1M05");
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1342 if (closed)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1343 return false;
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1344
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1345 // ping monetdb server using query: select 1;
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1346 Statement stmt = null;
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1347 ResultSet rs = null;
167
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1348 boolean isValid = false;
345
45155894aece Remove catch code from finally part where original timeout is reset on server.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 343
diff changeset
1349 final int original_timeout = this.lastSetQueryTimeout;
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1350 try {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1351 stmt = createStatement();
167
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1352 if (stmt != null) {
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1353 if (timeout > 0 && original_timeout != timeout) {
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1354 // we need to change the requested timeout for this test query
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1355 stmt.setQueryTimeout(timeout);
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1356 }
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1357 rs = stmt.executeQuery("SELECT 1");
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1358 if (rs != null && rs.next()) {
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1359 isValid = true;
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1360 }
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1361 }
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1362 } catch (SQLException se) {
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1363 final String msg = se.getMessage();
175
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
1364 // System.out.println(se.getSQLState() + " Con.isValid(): " + msg);
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
1365 if (msg != null && msg.equalsIgnoreCase("Current transaction is aborted (please ROLLBACK)")) {
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
1366 // Must use equalsIgnoreCase() here because up to Jul2017 release 'Current' was 'current' so with lowercase c.
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
1367 // It changed to 'Current' after Jul2017 release. We need to support all server versions.
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
1368 // SQLState = 25005
167
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1369 isValid = true;
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1370 }
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1371 /* ignore stmt errors/exceptions, we are only testing if the connection is still alive and usable */
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1372 } finally {
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1373 closeResultsetStatement(rs, stmt);
345
45155894aece Remove catch code from finally part where original timeout is reset on server.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 343
diff changeset
1374 /* when changed, reset the original server timeout value on the server */
45155894aece Remove catch code from finally part where original timeout is reset on server.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 343
diff changeset
1375 if (timeout > 0 && original_timeout != this.lastSetQueryTimeout) {
45155894aece Remove catch code from finally part where original timeout is reset on server.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 343
diff changeset
1376 this.lastSetQueryTimeout = original_timeout;
343
48ee2ca98975 Added test and fix for bug 6782, ie set the connection's query timeout explicitly at the end of isValid method.
Pedro Ferreira <pedro.ferreira@monetdbsolutions.com>
parents: 336
diff changeset
1377 try {
414
1e278695fe54 Small improvements: adding some final keywords, removing unnecesary initialisations, improve comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 408
diff changeset
1378 /* we have to set in the server explicitly, because the test 'queryTimeout != connection.lastSetQueryTimeout'
345
45155894aece Remove catch code from finally part where original timeout is reset on server.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 343
diff changeset
1379 on MonetStatement.internalExecute(sql) won't pass and the server won't be set back */
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1380 setQueryTimeout(original_timeout);
343
48ee2ca98975 Added test and fix for bug 6782, ie set the connection's query timeout explicitly at the end of isValid method.
Pedro Ferreira <pedro.ferreira@monetdbsolutions.com>
parents: 336
diff changeset
1381 } catch (SQLException se) {
345
45155894aece Remove catch code from finally part where original timeout is reset on server.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 343
diff changeset
1382 /* ignore stmt errors/exceptions, we are only testing if the connection is still alive and usable */
343
48ee2ca98975 Added test and fix for bug 6782, ie set the connection's query timeout explicitly at the end of isValid method.
Pedro Ferreira <pedro.ferreira@monetdbsolutions.com>
parents: 336
diff changeset
1383 }
48ee2ca98975 Added test and fix for bug 6782, ie set the connection's query timeout explicitly at the end of isValid method.
Pedro Ferreira <pedro.ferreira@monetdbsolutions.com>
parents: 336
diff changeset
1384 }
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1385 }
167
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1386 return isValid;
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1387 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1388
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1389 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1390 * Returns the value of the client info property specified by name.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1391 * This method may return null if the specified client info property
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1392 * has not been set and does not have a default value.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1393 * This method will also return null if the specified client info
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1394 * property name is not supported by the driver.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1395 * Applications may use the DatabaseMetaData.getClientInfoProperties method
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1396 * to determine the client info properties supported by the driver.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1397 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1398 * @param name - The name of the client info property to retrieve
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1399 * @return The value of the client info property specified or null
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1400 * @throws SQLException - if the database server returns an error
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1401 * when fetching the client info value from the database
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1402 * or this method is called on a closed connection
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1403 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1404 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1405 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1406 public String getClientInfo(final String name) throws SQLException {
764
052c23fbfab2 Corrected implementation of Connection methods getClientInfo() and setClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 751
diff changeset
1407 // MonetDB doesn't support any Client Info Properties yet
052c23fbfab2 Corrected implementation of Connection methods getClientInfo() and setClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 751
diff changeset
1408 return null;
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1409 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1410
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1411 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1412 * Returns a list containing the name and current value of each client info
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1413 * property supported by the driver. The value of a client info property may
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1414 * be null if the property has not been set and does not have a default value.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1415 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1416 * @return A Properties object that contains the name and current value
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1417 * of each of the client info properties supported by the driver.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1418 * @throws SQLException - if the database server returns an error
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1419 * when fetching the client info value from the database
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1420 * or this method is called on a closed connection
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1421 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1422 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1423 @Override
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1424 public Properties getClientInfo() throws SQLException {
764
052c23fbfab2 Corrected implementation of Connection methods getClientInfo() and setClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 751
diff changeset
1425 // MonetDB doesn't support any Client Info Properties yet
052c23fbfab2 Corrected implementation of Connection methods getClientInfo() and setClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 751
diff changeset
1426 return new Properties();
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1427 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1428
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1429 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1430 * Sets the value of the client info property specified by name to the value specified by value.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1431 * Applications may use the DatabaseMetaData.getClientInfoProperties method to determine
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1432 * the client info properties supported by the driver and the maximum length that may be specified
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1433 * for each property.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1434 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1435 * The driver stores the value specified in a suitable location in the database. For example
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1436 * in a special register, session parameter, or system table column. For efficiency the driver
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1437 * may defer setting the value in the database until the next time a statement is executed
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1438 * or prepared. Other than storing the client information in the appropriate place in the
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1439 * database, these methods shall not alter the behavior of the connection in anyway.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1440 * The values supplied to these methods are used for accounting, diagnostics and debugging purposes only.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1441 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1442 * The driver shall generate a warning if the client info name specified is not recognized by the driver.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1443 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1444 * If the value specified to this method is greater than the maximum length for the property
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1445 * the driver may either truncate the value and generate a warning or generate a SQLClientInfoException.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1446 * If the driver generates a SQLClientInfoException, the value specified was not set on the connection.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1447 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1448 * The following are standard client info properties. Drivers are not required to support these
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1449 * properties however if the driver supports a client info property that can be described by one
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1450 * of the standard properties, the standard property name should be used.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1451 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1452 * ApplicationName - The name of the application currently utilizing the connection
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1453 * ClientUser - The name of the user that the application using the connection is performing work for.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1454 * This may not be the same as the user name that was used in establishing the connection.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1455 * ClientHostname - The hostname of the computer the application using the connection is running on.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1456 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1457 * @param name - The name of the client info property to set
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1458 * @param value - The value to set the client info property to. If the
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1459 * value is null, the current value of the specified property is cleared.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1460 * @throws SQLClientInfoException - if the database server returns an error
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1461 * while setting the clientInfo values on the database server
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1462 * or this method is called on a closed connection
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1463 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1464 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1465 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1466 public void setClientInfo(final String name, final String value) throws SQLClientInfoException {
764
052c23fbfab2 Corrected implementation of Connection methods getClientInfo() and setClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 751
diff changeset
1467 // MonetDB doesn't support any Client Info Properties yet
052c23fbfab2 Corrected implementation of Connection methods getClientInfo() and setClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 751
diff changeset
1468 addWarning("setClientInfo: client info property name not recognized", "01M07");
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1469 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1470
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1471 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1472 * Sets the value of the connection's client info properties.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1473 * The Properties object contains the names and values of the client info
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1474 * properties to be set. The set of client info properties contained in the
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1475 * properties list replaces the current set of client info properties on the connection.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1476 * If a property that is currently set on the connection is not present in the
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1477 * properties list, that property is cleared. Specifying an empty properties list
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1478 * will clear all of the properties on the connection.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1479 * See setClientInfo (String, String) for more information.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1480 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1481 * If an error occurs in setting any of the client info properties, a
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1482 * SQLClientInfoException is thrown. The SQLClientInfoException contains information
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1483 * indicating which client info properties were not set. The state of the client
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1484 * information is unknown because some databases do not allow multiple client info
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1485 * properties to be set atomically. For those databases, one or more properties may
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1486 * have been set before the error occurred.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1487 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1488 * @param props - The list of client info properties to set
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1489 * @throws SQLClientInfoException - if the database server returns an error
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1490 * while setting the clientInfo values on the database server
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1491 * or this method is called on a closed connection
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1492 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1493 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1494 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1495 public void setClientInfo(final Properties props) throws SQLClientInfoException {
47
562dbfb2fee8 Prevent null pointer exception by checking props argument
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 45
diff changeset
1496 if (props != null) {
562dbfb2fee8 Prevent null pointer exception by checking props argument
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 45
diff changeset
1497 for (Entry<Object, Object> entry : props.entrySet()) {
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1498 setClientInfo(entry.getKey().toString(), entry.getValue().toString());
47
562dbfb2fee8 Prevent null pointer exception by checking props argument
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 45
diff changeset
1499 }
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1500 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1501 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1502
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1503 //== Java 1.7 methods (JDBC 4.1)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1504
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1505 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1506 * Sets the given schema name to access.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1507 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1508 * @param schema the name of a schema in which to work
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1509 * @throws SQLException if a database access error occurs or this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1510 * method is called on a closed connection
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1511 * @since 1.7
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1512 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1513 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1514 public void setSchema(final String schema) throws SQLException {
348
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
1515 checkNotClosed();
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1516 if (schema == null || schema.isEmpty())
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1517 throw new SQLException("Missing schema name", "M1M05");
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1518
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1519 Statement st = null;
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1520 try {
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1521 st = createStatement();
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1522 if (st != null)
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1523 st.execute("SET SCHEMA \"" + schema + "\"");
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1524 // do not catch any Exception, just let it propagate
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1525 } finally {
300
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
1526 closeResultsetStatement(null, st);
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1527 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1528 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1529
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1530 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1531 * Retrieves this Connection object's current schema name.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1532 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1533 * @return the current schema name or null if there is none
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1534 * @throws SQLException if a database access error occurs or this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1535 * method is called on a closed connection
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1536 * @since 1.7
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1537 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1538 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1539 public String getSchema() throws SQLException {
348
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
1540 checkNotClosed();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1541
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1542 String cur_schema = null;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1543 Statement st = null;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1544 ResultSet rs = null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1545 try {
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1546 st = createStatement();
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1547 if (st != null) {
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1548 rs = st.executeQuery("SELECT CURRENT_SCHEMA");
703
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1549 if (rs != null && rs.next()) {
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1550 cur_schema = rs.getString(1);
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1551 }
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1552 }
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1553 // do not catch any Exception, just let it propagate
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1554 } finally {
300
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
1555 closeResultsetStatement(rs, st);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1556 }
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1557 if (cur_schema == null)
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1558 throw new SQLException("Failed to fetch schema name", "02000");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1559 return cur_schema;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1560 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1561
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1562 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1563 * Terminates an open connection. Calling abort results in:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1564 * * The connection marked as closed
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1565 * * Closes any physical connection to the database
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1566 * * Releases resources used by the connection
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1567 * * Insures that any thread that is currently accessing the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1568 * connection will either progress to completion or throw an
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1569 * SQLException.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1570 * Calling abort marks the connection closed and releases any
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1571 * resources. Calling abort on a closed connection is a no-op.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1572 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1573 * @param executor The Executor implementation which will be used by
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1574 * abort
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1575 * @throws SQLException if a database access error occurs or the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1576 * executor is null
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1577 * @throws SecurityException if a security manager exists and
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1578 * its checkPermission method denies calling abort
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1579 * @since 1.7
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1580 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1581 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1582 public void abort(final Executor executor) throws SQLException {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1583 if (closed)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1584 return;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1585 if (executor == null)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1586 throw new SQLException("executor is null", "M1M05");
771
c85c2d90d31f Improve the implementation of abort() by using the provided Executor object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 764
diff changeset
1587
c85c2d90d31f Improve the implementation of abort() by using the provided Executor object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 764
diff changeset
1588 executor.execute(new Runnable() {
c85c2d90d31f Improve the implementation of abort() by using the provided Executor object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 764
diff changeset
1589 @Override
c85c2d90d31f Improve the implementation of abort() by using the provided Executor object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 764
diff changeset
1590 public void run() {
c85c2d90d31f Improve the implementation of abort() by using the provided Executor object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 764
diff changeset
1591 // this is really the simplest thing to do, it destroys
c85c2d90d31f Improve the implementation of abort() by using the provided Executor object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 764
diff changeset
1592 // everything (in particular the server connection)
c85c2d90d31f Improve the implementation of abort() by using the provided Executor object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 764
diff changeset
1593 close();
c85c2d90d31f Improve the implementation of abort() by using the provided Executor object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 764
diff changeset
1594 }
c85c2d90d31f Improve the implementation of abort() by using the provided Executor object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 764
diff changeset
1595 });
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1596 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1597
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1598 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1599 * Sets the maximum period a Connection or objects created from the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1600 * Connection will wait for the database to reply to any one
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1601 * request. If any request remains unanswered, the waiting method
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1602 * will return with a SQLException, and the Connection or objects
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1603 * created from the Connection will be marked as closed. Any
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1604 * subsequent use of the objects, with the exception of the close,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1605 * isClosed or Connection.isValid methods, will result in a
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1606 * SQLException.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1607 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1608 * @param executor The Executor implementation which will be used by
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1609 * setNetworkTimeout
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1610 * @param millis The time in milliseconds to wait for the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1611 * database operation to complete
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1612 * @throws SQLException if a database access error occurs, this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1613 * method is called on a closed connection, the executor is
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1614 * null, or the value specified for seconds is less than 0.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1615 * @since 1.7
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1616 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1617 @Override
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
1618 public void setNetworkTimeout(final Executor executor, final int millis) throws SQLException {
348
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
1619 checkNotClosed();
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
1620 // executor object is not used yet, so no need to test it.
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
1621 // if (executor == null)
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
1622 // throw new SQLException("executor is null", "M1M05");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1623 if (millis < 0)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1624 throw new SQLException("milliseconds is less than zero", "M1M05");
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1625
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1626 try {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1627 server.setSoTimeout(millis);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1628 } catch (SocketException e) {
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
1629 throw new SQLNonTransientConnectionException(e.getMessage(), "08000");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1630 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1631 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1632
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1633 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1634 * Retrieves the number of milliseconds the driver will wait for a
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1635 * database request to complete. If the limit is exceeded, a
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1636 * SQLException is thrown.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1637 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1638 * @return the current timeout limit in milliseconds; zero means
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1639 * there is no limit
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1640 * @throws SQLException if a database access error occurs or
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1641 * this method is called on a closed Connection
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1642 * @since 1.7
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1643 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1644 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1645 public int getNetworkTimeout() throws SQLException {
348
bcb9a99d399d Add private checkNotClosed() method to check if the connection is not closed.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 345
diff changeset
1646 checkNotClosed();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1647 try {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1648 return server.getSoTimeout();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1649 } catch (SocketException e) {
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
1650 throw new SQLNonTransientConnectionException(e.getMessage(), "08000");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1651 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1652 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1653
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1654 //== end methods of interface java.sql.Connection
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1655
562
c640075da7c9 only comment improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 559
diff changeset
1656
c640075da7c9 only comment improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 559
diff changeset
1657 //== internal helper methods which do not belong to the JDBC interface
c640075da7c9 only comment improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 559
diff changeset
1658
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
1659 /** Handler for COPY ... INTO ... FROM 'data-file-name' ON CLIENT requests */
563
fa2493d924c8 Small updates
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 562
diff changeset
1660 private UploadHandler uploadHandler;
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
1661 /** Handler for COPY ... INTO 'data-file-name' ON CLIENT requests */
563
fa2493d924c8 Small updates
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 562
diff changeset
1662 private DownloadHandler downloadHandler;
fa2493d924c8 Small updates
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 562
diff changeset
1663
539
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1664 /**
563
fa2493d924c8 Small updates
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 562
diff changeset
1665 * Registers a {@link UploadHandler} to support for example COPY INTO mytable FROM 'data.csv' ON CLIENT
539
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1666 *
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1667 * @param uploadHandler the handler to register, or null to deregister
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1668 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
1669 public void setUploadHandler(final UploadHandler uploadHandler) {
539
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1670 this.uploadHandler = uploadHandler;
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1671 }
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1672
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1673 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1674 * Get the currently registerered {@link UploadHandler}, or null
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1675 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1676 * @return the currently registerered UploadHandler, or null
539
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1677 */
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
1678 public UploadHandler getUploadHandler() {
539
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1679 return uploadHandler;
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1680 }
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
1681
539
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1682 /**
563
fa2493d924c8 Small updates
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 562
diff changeset
1683 * Registers a {@link DownloadHandler} to support for example COPY select_result INTO 'data.csv' ON CLIENT
539
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1684 *
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1685 * @param downloadHandler the handler to register, or null to deregister
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1686 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
1687 public void setDownloadHandler(final DownloadHandler downloadHandler) {
539
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1688 this.downloadHandler = downloadHandler;
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1689 }
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1690
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1691 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1692 * Get the currently registerered {@link DownloadHandler} handler, or null
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1693 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1694 * @return the currently registerered DownloadHandler handler, or null
539
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1695 */
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
1696 public DownloadHandler getDownloadHandler() {
539
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1697 return downloadHandler;
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1698 }
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1699
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1700 /**
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1701 * Local helper method to set the time zone for this connection
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1702 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1703 * @param offsetSeconds Time Zone offset in seconds, can be negative or zero
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1704 * @throws SQLException if an IO exception or a database error occurs
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1705 */
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1706 private void setTimezone(int offsetSeconds) throws SQLException {
671
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1707 final StringBuilder tz = new StringBuilder(64);
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1708 tz.append("SET TIME ZONE INTERVAL '");
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1709 int offsetMinutes = offsetSeconds / 60;
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1710 if (offsetMinutes < 0) {
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1711 tz.append('-');
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1712 offsetMinutes = -offsetMinutes; // make it positive
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1713 } else {
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1714 tz.append('+');
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1715 }
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1716 int offsetHours = offsetMinutes / 60;
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1717 if (offsetHours < 10)
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1718 tz.append('0');
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1719 tz.append(offsetHours).append(':');
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1720 offsetMinutes -= offsetHours * 60;
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1721 if (offsetMinutes < 10)
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1722 tz.append('0');
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1723 tz.append(offsetMinutes).append("' HOUR TO MINUTE");
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1724 sendIndependentCommand(tz.toString());
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1725 }
fade6c6960cc Refactor Handshake options
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 666
diff changeset
1726
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1727 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1728 * Local helper method to check whether the Connection object is closed
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1729 * and throw an SQLExecption if it is closed.
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1730 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1731 * @throws SQLException if this connection is closed
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1732 */
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1733 private void checkNotClosed() throws SQLException {
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1734 if (closed)
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1735 throw new SQLException("Connection is closed", "M1M20");
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1736 }
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1737
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1738 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1739 * Utility method to call sys.setquerytimeout(int); procedure on the connected server
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1740 * or sys.settimeout(int); procedure on older servers which do not support the new procedure.
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1741 * It is called from: MonetConnection.isValid() and MonetStatement.internalExecute()
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1742 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1743 * @param seconds the time out time in seconds
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1744 * @throws SQLException if an IO exception or a database error occurs
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1745 */
650
849f99124e32 Correcting implementation of Statement.setQueryTimeout(int seconds).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 626
diff changeset
1746 void setQueryTimeout(final int seconds) throws SQLException {
849f99124e32 Correcting implementation of Statement.setQueryTimeout(int seconds).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 626
diff changeset
1747 if (seconds < 0)
849f99124e32 Correcting implementation of Statement.setQueryTimeout(int seconds).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 626
diff changeset
1748 throw new SQLException("query timeout seconds is less than zero", "M1M05");
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1749
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1750 checkNotClosed();
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1751 Statement st = null;
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1752 try {
480
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
1753 final String callstmt;
751
1566dbfaa13b Correct setQueryTimeout(secs) implementation. It was changed to match the web documentation (see https://dev.monetdb.org/hg/monetdb-java/rev/849f99124e32 ) but it appears the web documentation was wrong. So revert the changes made.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 736
diff changeset
1754
1566dbfaa13b Correct setQueryTimeout(secs) implementation. It was changed to match the web documentation (see https://dev.monetdb.org/hg/monetdb-java/rev/849f99124e32 ) but it appears the web documentation was wrong. So revert the changes made.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 736
diff changeset
1755 // as of release Jun2020 (11.37.7) the function sys.settimeout(secs bigint)
1566dbfaa13b Correct setQueryTimeout(secs) implementation. It was changed to match the web documentation (see https://dev.monetdb.org/hg/monetdb-java/rev/849f99124e32 ) but it appears the web documentation was wrong. So revert the changes made.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 736
diff changeset
1756 // is deprecated and replaced by new sys.setquerytimeout(secs int)
480
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
1757 if ((getDatabaseMajorVersion() == 11) && (getDatabaseMinorVersion() < 37))
751
1566dbfaa13b Correct setQueryTimeout(secs) implementation. It was changed to match the web documentation (see https://dev.monetdb.org/hg/monetdb-java/rev/849f99124e32 ) but it appears the web documentation was wrong. So revert the changes made.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 736
diff changeset
1758 callstmt = "CALL sys.\"settimeout\"(" + seconds + ")";
480
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
1759 else
751
1566dbfaa13b Correct setQueryTimeout(secs) implementation. It was changed to match the web documentation (see https://dev.monetdb.org/hg/monetdb-java/rev/849f99124e32 ) but it appears the web documentation was wrong. So revert the changes made.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 736
diff changeset
1760 callstmt = "CALL sys.\"setquerytimeout\"(" + seconds + ")";
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1761 // for debug: System.out.println("Before: " + callstmt);
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1762 st = createStatement();
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1763 st.execute(callstmt);
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1764 // for debug: System.out.println("After : " + callstmt);
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1765
650
849f99124e32 Correcting implementation of Statement.setQueryTimeout(int seconds).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 626
diff changeset
1766 this.lastSetQueryTimeout = seconds;
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1767 }
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1768 /* do not catch SQLException here, as we want to know it when it fails */
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1769 finally {
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1770 closeResultsetStatement(null, st);
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1771 }
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1772 }
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1773
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1774 /**
175
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
1775 * This allows generic JDBC programs to fetch Blob data via getBytes()
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
1776 * instead of getBlob() and Blob.getBinaryStream() to reduce overhead.
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1777 * It is called from: MonetResultSet and MonetPreparedStatement
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1778 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1779 * @return whether the JDBC BLOB type should be mapped to VARBINARY type.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1780 */
199
e87d89d371f1 Make some public non-JDBC methods accessable only to classes of the same package.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 194
diff changeset
1781 boolean mapBlobAsVarBinary() {
175
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
1782 return treatBlobAsVarBinary;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1783 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1784
175
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
1785 /**
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
1786 * This allows generic JDBC programs to fetch Clob data via getString()
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
1787 * instead of getClob() and Clob.getCharacterStream() to reduce overhead.
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1788 * It is called from: MonetResultSet and MonetPreparedStatement
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1789 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1790 * @return whether the JDBC CLOB type should be mapped to VARCHAR type.
175
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
1791 */
199
e87d89d371f1 Make some public non-JDBC methods accessable only to classes of the same package.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 194
diff changeset
1792 boolean mapClobAsVarChar() {
175
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
1793 return treatClobAsVarChar;
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
1794 }
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
1795
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
1796 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1797 * It is called from: getURL()in MonetDatabaseMetaData
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1798 *
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1799 * @return the MonetDB JDBC Connection URL (without user name and password).
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1800 */
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1801 String getJDBCURL() {
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1802 final StringBuilder sb = new StringBuilder(128);
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1803 sb.append(MonetDriver.MONETURL).append(hostname)
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1804 .append(':').append(port)
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1805 .append('/').append(database);
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1806 if (lang == LANG_MAL)
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1807 sb.append("?language=mal");
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1808 return sb.toString();
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1809 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1810
697
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1811 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1812 * Utility method to check if connection property name is supported.
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1813 * If it is not supported a warning is added to this Connection.
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1814 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1815 * @param name the connection property name to check
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1816 * @param context the method name from where this is called
697
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1817 * @return valid true or false
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1818 */
441
84f6d86ed590 Optimise composing the "SET TIME ZONE ..." string by using a StringBuilder. Less String copying.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 434
diff changeset
1819 private boolean checkValidProperty(String name, String context) {
697
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1820 // supported MonetDB connection properties.
764
052c23fbfab2 Corrected implementation of Connection methods getClientInfo() and setClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 751
diff changeset
1821 // See also MonetDriver.connect()
697
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1822 if (name.equals("host")
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1823 || name.equals("port")
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1824 || name.equals("user")
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1825 || name.equals("password")
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1826 || name.equals("language")
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1827 || name.equals("database")
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1828 || name.equals("debug")
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1829 || name.equals("logfile")
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1830 || name.equals("hash")
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1831 || name.equals("treat_blob_as_binary")
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1832 || name.equals("treat_clob_as_varchar")
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1833 || name.equals("autocommit")
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1834 || name.equals("so_timeout")
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1835 || name.equals("fetchsize")) // only supported by servers from version 11.41.1 onwards
441
84f6d86ed590 Optimise composing the "SET TIME ZONE ..." string by using a StringBuilder. Less String copying.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 434
diff changeset
1836 return true;
697
68422d7f3961 Inline isValidProperty() in checkValidProperty() as it is the only place the method is called. Also add javadoc comments.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 696
diff changeset
1837
764
052c23fbfab2 Corrected implementation of Connection methods getClientInfo() and setClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 751
diff changeset
1838 addWarning(context + " property name '" + name + "' is not recognized", "01M07");
441
84f6d86ed590 Optimise composing the "SET TIME ZONE ..." string by using a StringBuilder. Less String copying.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 434
diff changeset
1839 return false;
84f6d86ed590 Optimise composing the "SET TIME ZONE ..." string by using a StringBuilder. Less String copying.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 434
diff changeset
1840 }
84f6d86ed590 Optimise composing the "SET TIME ZONE ..." string by using a StringBuilder. Less String copying.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 434
diff changeset
1841
703
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1842 // Internal caches for 4 static mserver5 environment values
407
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1843 private String env_current_user;
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1844 private String env_monet_version;
703
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1845 private String env_raw_strings; // Note: this is only supported from Jun2020 (11.37) servers
407
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1846 private int maxConnections;
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1847
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1848 /**
703
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1849 * Utility method to fetch 4 mserver5 environment values combined in one query for efficiency.
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1850 * We fetch the env values of: current_user, monet_version, max_clients and raw_strings.
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1851 * We cache them such that we do not need to query the server again and again.
703
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1852 * Note: raw_strings is available in sys.env() result set since release Jun2020 (11.37)
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1853 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1854 * @throws SQLException if execution of query failed
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1855 */
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1856 private synchronized void getEnvValues() throws SQLException {
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1857 Statement st = null;
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1858 ResultSet rs = null;
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1859 try {
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1860 st = createStatement();
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1861 if (st != null) {
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1862 rs = st.executeQuery(
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1863 "SELECT \"name\", \"value\" FROM \"sys\".\"env\"()" +
703
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1864 " WHERE \"name\" IN ('monet_version', 'max_clients', 'raw_strings')" +
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1865 " UNION SELECT 'current_user' as \"name\", current_user as \"value\"");
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1866 if (rs != null) {
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1867 while (rs.next()) {
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1868 final String prop = rs.getString(1);
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1869 final String value = rs.getString(2);
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1870 if ("current_user".equals(prop)) {
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1871 env_current_user = value;
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1872 } else
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1873 if ("monet_version".equals(prop)) {
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1874 env_monet_version = value;
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1875 } else
703
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1876 if ("raw_strings".equals(prop)) {
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1877 env_raw_strings = value;
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1878 } else
407
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1879 if ("max_clients".equals(prop) && value != null) {
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1880 try {
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1881 maxConnections = Integer.parseInt(value);
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1882 } catch (NumberFormatException nfe) {
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1883 /* ignore */
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1884 }
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1885 if (maxConnections <= 0)
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1886 maxConnections = 1;
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1887 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1888 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1889 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1890 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1891 /* do not catch SQLException here, as we need to know it when it fails */
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1892 } finally {
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1893 closeResultsetStatement(rs, st);
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1894 }
703
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1895 // for debug: System.out.println("Read: env_current_user: " + env_current_user + " env_monet_version: " + env_monet_version + " env_max_clients: " + maxConnections + " env_raw_strings: " + env_raw_strings);
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1896 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1897
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1898 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1899 * Get user login name from the server.
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1900 * It is called from: MonetDatabaseMetaData
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1901 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1902 * @return the current User Name for this comnection
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1903 * @throws SQLException if fetching user name failed
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1904 */
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1905 String getUserName() throws SQLException {
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1906 if (env_current_user == null)
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1907 getEnvValues();
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1908 return env_current_user;
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1909 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1910
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1911 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1912 * Get the maximum number of allowed connections from the server.
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1913 * It is called from: MonetDatabaseMetaData
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1914 * A result of zero means that there is no limit or the limit is not known
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1915 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1916 * @return the maximum number of active connections possible at one time
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1917 * @throws SQLException if fetching maximum connections failed
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1918 */
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1919 int getMaxConnections() throws SQLException {
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1920 if (maxConnections == 0)
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1921 getEnvValues();
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1922 return maxConnections;
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1923 }
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1924
716
aeb268156580 Updated Copyright year.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 709
diff changeset
1925 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1926 * Get whether the server is started with raw_strings turned on.
703
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1927 * By default this is false (so C-style strings processing is used).
707
7752e15b6a23 Correcting a typo in comment
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 705
diff changeset
1928 * When a server is started with option: --set raw_strings=true
703
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1929 * then this will return true, else false.
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1930 * This startup option is supported only by servers since Jun2020 (11.37) onwards.
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1931 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1932 * @return whether the server is started with raw_strings processing enabled.
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1933 * @throws SQLException if fetching raw_strings setting failed
703
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1934 */
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1935 boolean inRawStringsMode() throws SQLException {
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1936 if (env_raw_strings == null) {
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1937 getEnvValues();
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1938 if (env_raw_strings == null) {
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1939 /* older servers (pre Jun2020 (11.37)) do not
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1940 * return this in the sys.env() view and did
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1941 * not yet support raw_strings.
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1942 * So set it to: false. */
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1943 env_raw_strings = "false";
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1944 }
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1945 }
722
9a243dce3b15 Small improvements.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 716
diff changeset
1946 return "true".equals(env_raw_strings);
703
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1947 }
1c9d4c2a6947 Add method boolean inRawStringsMode() to check if iconnected server is running in raw_strings mode.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 702
diff changeset
1948
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1949 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1950 * Get the product version of the connected MonetDB Database Server.
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1951 * It is called from: MonetDatabaseMetaData
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1952 *
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1953 * @return the MonetDB Database Server version string.
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1954 * @throws SQLException if fetching MonetDB server version string failed
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1955 */
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1956 String getDatabaseProductVersion() throws SQLException {
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1957 if (env_monet_version == null)
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1958 getEnvValues();
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1959 // always return a valid String to prevent NPE in getTables() and getTableTypes()
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1960 if (env_monet_version != null)
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1961 return env_monet_version;
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1962 return "";
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1963 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1964
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1965 private int databaseMajorVersion;
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1966 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1967 * Get the major product version of the connected MonetDB Database Server.
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1968 * The number is extracted from the env_monet_version the first time and cached for next calls.
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1969 * It is called from: MonetDatabaseMetaData and MonetConnection
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1970 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1971 * @return the MonetDB Database Server major version number.
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1972 * @throws SQLException if fetching MonetDB server version string failed
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1973 */
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1974 int getDatabaseMajorVersion() throws SQLException {
407
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1975 if (databaseMajorVersion == 0) {
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1976 if (env_monet_version == null)
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1977 getEnvValues();
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1978 if (env_monet_version != null) {
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1979 try {
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1980 // from version string such as 11.33.9 extract number: 11
480
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
1981 final int end = env_monet_version.indexOf('.');
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
1982 databaseMajorVersion = Integer.parseInt((end >= 0) ? env_monet_version.substring(0, end) : env_monet_version);
407
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1983 } catch (NumberFormatException nfe) {
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1984 // ignore
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1985 }
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1986 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1987 }
407
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
1988 return databaseMajorVersion;
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1989 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1990
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1991 private int databaseMinorVersion;
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1992 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1993 * Get the minor product version of the connected MonetDB Database Server.
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1994 * The number is extracted from the env_monet_version the first time and cached for next calls.
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
1995 * It is called from: MonetDatabaseMetaData and MonetConnection
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1996 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1997 * @return the MonetDB Database Server minor version number.
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
1998 * @throws SQLException if fetching MonetDB server version string failed
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1999 */
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2000 int getDatabaseMinorVersion() throws SQLException {
407
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2001 if (databaseMinorVersion == 0) {
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2002 if (env_monet_version == null)
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2003 getEnvValues();
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2004 if (env_monet_version != null) {
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2005 try {
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2006 // from version string such as 11.33.9 extract number: 33
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2007 int start = env_monet_version.indexOf('.');
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2008 if (start >= 0) {
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2009 start++;
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2010 final int end = env_monet_version.indexOf('.', start);
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2011 databaseMinorVersion = Integer.parseInt((end > 0) ? env_monet_version.substring(start, end) : env_monet_version.substring(start));
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2012 }
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2013 } catch (NumberFormatException nfe) {
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2014 // ignore
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2015 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2016 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2017 }
407
40a1db14dca5 Optimise code, reduce duplicate code, cache major and minor version nrs of connected database server and max nr of clients so conversion of strings to ints is only done once.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 406
diff changeset
2018 return databaseMinorVersion;
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2019 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2020
736
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2021 /**
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2022 * Get whether the MonetDB SQL parser supports ODBC/JDBC escape sequence syntax.
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2023 * See also: https://docs.oracle.com/javadb/10.6.2.1/ref/rrefjdbc1020262.html
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2024 * It does when the server version is 11.46 or higher.
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2025 * This method is called from: MonetDatabaseMetaData and MonetCallableStatement.
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2026 *
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2027 * @return true when the server supports ODBC/JDBC escape sequence syntax else false.
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2028 */
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2029 boolean supportsEscapeSequenceSyntax() {
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2030 try {
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2031 if ((getDatabaseMajorVersion() == 11) && (getDatabaseMinorVersion() <= 45))
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2032 // older servers do not support it
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2033 return false;
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2034 } catch (SQLException e) {
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2035 return false;
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2036 }
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2037 return true;
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2038 }
f317b37bad30 In MonetCallableStatement constructor skip calling removeEscapes() when the connected server supports ODBC/JDBC escape sequence syntax.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 722
diff changeset
2039
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2040
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2041 // Internal cache for determining if system table sys.privilege_codes (new as of Jul2017 release) exists on connected server
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2042 private boolean queriedPrivilege_codesTable = false;
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2043 private boolean hasPrivilege_codesTable = false;
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2044 /**
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2045 * Utility method to query the server to find out if it has
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2046 * the system table sys.privilege_codes (which is new as of Jul2017 release).
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2047 * The result is cached and reused, so that we only test the query once per connection.
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2048 * This method is used by methods from MonetDatabaseMetaData.
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
2049 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
2050 * @return whether the system table sys.privilege_codes exist in the connected server.
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2051 */
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2052 boolean privilege_codesTableExists() {
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2053 if (!queriedPrivilege_codesTable) {
685
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2054 querySysTable();
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2055 queriedPrivilege_codesTable = true; // set flag, so the querying is done only at first invocation.
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2056 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2057 return hasPrivilege_codesTable;
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2058 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2059
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2060 // Internal cache for determining if system table sys.comments (new as of Mar2018 release) exists on connected server
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2061 private boolean queriedCommentsTable = false;
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2062 private boolean hasCommentsTable = false;
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2063 /**
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2064 * Utility method to query the server to find out if it has
215
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2065 * the system table sys.comments (which is new as of Mar2018 release).
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2066 * The result is cached and reused, so that we only test the query once per connection.
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2067 * This method is used by methods from MonetDatabaseMetaData.
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
2068 *
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
2069 * @return whether the system table sys.comments exist in the connected server.
215
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2070 */
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2071 boolean commentsTableExists() {
219
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
2072 if (!queriedCommentsTable) {
685
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2073 querySysTable();
219
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
2074 queriedCommentsTable = true; // set flag, so the querying is done only at first invocation.
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
2075 }
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
2076 return hasCommentsTable;
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
2077 }
215
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2078
219
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
2079
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
2080 /**
708
5022a57f9d97 Resolve javadoc errors.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 707
diff changeset
2081 * Internal utility method to query the server to find out if it has a specific system tables.
219
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
2082 */
685
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2083 private void querySysTable() {
215
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2084 Statement stmt = null;
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2085 ResultSet rs = null;
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2086 try {
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2087 stmt = createStatement();
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2088 if (stmt != null) {
685
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2089 rs = stmt.executeQuery("SELECT name FROM sys._tables WHERE name in ('privilege_codes', 'comments')"
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2090 + " AND schema_id IN (SELECT id FROM sys.schemas WHERE name = 'sys')");
215
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2091 if (rs != null) {
685
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2092 while (rs.next()) {
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2093 String name = rs.getString(1);
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2094 // for debug: System.out.println("querySysTable() retrieved name: " + name);
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2095 if ("comments".equals(name)) {
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2096 hasCommentsTable = true;
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2097 queriedCommentsTable = true;
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2098 } else
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2099 if ("privilege_codes".equals(name)) {
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2100 hasPrivilege_codesTable = true;
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2101 queriedPrivilege_codesTable = true;
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2102 }
35653312f9cb Optimise check on existence of specific tables. Instead of doing a query per table name, combine them in one query.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 684
diff changeset
2103 }
215
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2104 }
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2105 }
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2106 } catch (SQLException se) {
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2107 /* ignore */
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2108 } finally {
300
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2109 closeResultsetStatement(rs, stmt);
215
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2110 }
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2111 }
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2112
71b039bc2d99 Added support for querying the sys.comments table for some meta data methods
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 214
diff changeset
2113 /**
300
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2114 * Closes a ResultSet and/or Statement object without throwing any SQLExceptions
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2115 * It can be used in the finally clause after creating a Statement and
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2116 * (optionally) executed a query which produced a ResultSet.
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2117 *
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2118 * @param rs ResultSet object to be closed. It may be null
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2119 * @param st Statement object to be closed. It may be null
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2120 */
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2121 static final void closeResultsetStatement(final ResultSet rs, final Statement st) {
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2122 if (rs != null) {
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2123 try {
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2124 rs.close();
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2125 } catch (SQLException e) { /* ignore */ }
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2126 }
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2127 if (st != null) {
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2128 try {
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2129 st.close();
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2130 } catch (SQLException e) { /* ignore */ }
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2131 }
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2132 }
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2133
8cc3b51d1984 Add a utility method to close objects ignoring any possible SQLExceptions thrown.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 296
diff changeset
2134 /**
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2135 * Sends the given string to MonetDB as special transaction command.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2136 * All possible returned information is discarded.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2137 * Encountered errors are reported.
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2138 *
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2139 * @param command the exact string to send to MonetDB
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2140 * @throws SQLException if an IO exception or a database error occurs
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2141 */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2142 private void sendTransactionCommand(final String command) throws SQLException {
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2143 // create a container for the result
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2144 final ResponseList l = new ResponseList(0, 0, ResultSet.FETCH_FORWARD, ResultSet.CONCUR_READ_ONLY);
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2145 // send the appropriate query string to the database
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2146 try {
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2147 l.processQuery(command);
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2148 } finally {
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2149 l.close();
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2150 }
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2151 }
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2152
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2153 /**
278
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2154 * Sends the given string to MonetDB as regular SQL statement/query using queryTempl
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2155 * Making sure there is a prompt after the command is sent. All possible
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2156 * returned information is discarded. Encountered errors are reported.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2157 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2158 * @param command the exact string to send to MonetDB
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2159 * @throws SQLException if an IO exception or a database error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2160 */
278
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2161 private void sendIndependentCommand(String command) throws SQLException {
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2162 sendCommand(command, true);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2163 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2164
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2165 /**
278
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2166 * Sends the given string to MonetDB as control statement using commandTempl
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2167 * Making sure there is a prompt after the command is sent. All possible
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2168 * returned information is discarded. Encountered errors are reported.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2169 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2170 * @param command the exact string to send to MonetDB
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2171 * @throws SQLException if an IO exception or a database error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2172 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2173 void sendControlCommand(String command) throws SQLException {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2174 // send X command
278
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2175 sendCommand(command, false);
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2176 }
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2177
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2178 /**
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2179 * Sends the given string to MonetDB as command/query using commandTempl or queryTempl
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2180 * Making sure there is a prompt after the command is sent. All possible
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2181 * returned information is discarded. Encountered errors are reported.
278
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2182 *
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2183 * @param command the exact string to send to MonetDB
332
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
2184 * @param usequeryTempl send the command using queryTempl or else using commandTempl
278
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2185 * @throws SQLException if an IO exception or a database error occurs
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2186 */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2187 private void sendCommand(final String command, final boolean usequeryTempl) throws SQLException {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2188 synchronized (server) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2189 try {
480
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
2190 if (usequeryTempl)
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
2191 out.writeLine(queryTempl[0] + command + queryTempl[1]);
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
2192 else
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
2193 out.writeLine(commandTempl[0] + command + commandTempl[1]);
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
2194 final String error = in.discardRemainder();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2195 if (error != null)
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
2196 throw new SQLException(error.substring(6), error.substring(0, 5));
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2197 } catch (SocketTimeoutException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2198 close(); // JDBC 4.1 semantics, abort()
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
2199 throw new SQLNonTransientConnectionException("connection timed out", "08M33");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2200 } catch (IOException e) {
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
2201 throw new SQLNonTransientConnectionException(e.getMessage(), "08000");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2202 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2203 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2204 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2205
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2206 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
2207 * Adds a warning to the pile of warnings this Connection object has.
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
2208 * If there were no warnings (or clearWarnings was called) this
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
2209 * warning will be the first, otherwise this warning will get
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2210 * appended to the current warning.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2211 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2212 * @param reason the warning message
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
2213 * @param sqlstate the SQLState code (5 characters)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2214 */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2215 private final void addWarning(final String reason, final String sqlstate) {
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2216 final SQLWarning warng = new SQLWarning(reason, sqlstate);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2217 if (warnings == null) {
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
2218 warnings = warng;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2219 } else {
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
2220 warnings.setNextWarning(warng);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2221 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2222 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2223
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2224 /** the default number of rows that are (attempted to) read at once */
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
2225 private static final int DEF_FETCHSIZE = 250;
423
de2ef68b672f Allow to set fetchsize from the connection url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 422
diff changeset
2226
de2ef68b672f Allow to set fetchsize from the connection url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 422
diff changeset
2227 /** the default number of rows to read at once from this connection */
de2ef68b672f Allow to set fetchsize from the connection url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 422
diff changeset
2228 private int defaultFetchSize = DEF_FETCHSIZE;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2229 /** The sequence counter */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2230 private static int seqCounter = 0;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2231
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2232 /**
696
07d60185eeb9 Eliminate hardcoded value 250 in the constructor of MonetPreparedStatement. For this an internal package method MonetConnection.getDefaultFetchSize() is added.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 692
diff changeset
2233 * returns default fetchSize as set at connection moment
07d60185eeb9 Eliminate hardcoded value 250 in the constructor of MonetPreparedStatement. For this an internal package method MonetConnection.getDefaultFetchSize() is added.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 692
diff changeset
2234 *
07d60185eeb9 Eliminate hardcoded value 250 in the constructor of MonetPreparedStatement. For this an internal package method MonetConnection.getDefaultFetchSize() is added.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 692
diff changeset
2235 * @return defaultFetchSize
07d60185eeb9 Eliminate hardcoded value 250 in the constructor of MonetPreparedStatement. For this an internal package method MonetConnection.getDefaultFetchSize() is added.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 692
diff changeset
2236 */
07d60185eeb9 Eliminate hardcoded value 250 in the constructor of MonetPreparedStatement. For this an internal package method MonetConnection.getDefaultFetchSize() is added.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 692
diff changeset
2237 protected int getDefaultFetchSize() {
07d60185eeb9 Eliminate hardcoded value 250 in the constructor of MonetPreparedStatement. For this an internal package method MonetConnection.getDefaultFetchSize() is added.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 692
diff changeset
2238 return defaultFetchSize;
07d60185eeb9 Eliminate hardcoded value 250 in the constructor of MonetPreparedStatement. For this an internal package method MonetConnection.getDefaultFetchSize() is added.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 692
diff changeset
2239 }
07d60185eeb9 Eliminate hardcoded value 250 in the constructor of MonetPreparedStatement. For this an internal package method MonetConnection.getDefaultFetchSize() is added.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 692
diff changeset
2240
07d60185eeb9 Eliminate hardcoded value 250 in the constructor of MonetPreparedStatement. For this an internal package method MonetConnection.getDefaultFetchSize() is added.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 692
diff changeset
2241 /**
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2242 * A Response is a message sent by the server to indicate some
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2243 * action has taken place, and possible results of that action.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2244 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2245 // {{{ interface Response
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2246 interface Response {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2247 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2248 * Adds a line to the underlying Response implementation.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2249 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2250 * @param line the header line as String
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2251 * @param linetype the line type according to the MAPI protocol
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2252 * @return a non-null String if the line is invalid,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2253 * or additional lines are not allowed.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2254 */
556
87feb93330a6 Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 554
diff changeset
2255 String addLine(String line, LineType linetype);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2256
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2257 /**
288
f412032e3b43 Correcting typo
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 286
diff changeset
2258 * Returns whether this Response expects more lines to be added
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2259 * to it.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2260 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2261 * @return true if a next line should be added, false otherwise
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2262 */
556
87feb93330a6 Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 554
diff changeset
2263 boolean wantsMore();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2264
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2265 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2266 * Indicates that no more header lines will be added to this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2267 * Response implementation.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2268 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2269 * @throws SQLException if the contents of the Response is not
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2270 * consistent or sufficient.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2271 */
324
0b01771d5f8a Method Response.complete() is never used or needed. Disabled the code from the interface and its implementations.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 300
diff changeset
2272 /* MvD: disabled not used/needed code
562
c640075da7c9 only comment improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 559
diff changeset
2273 void complete() throws SQLException;
324
0b01771d5f8a Method Response.complete() is never used or needed. Disabled the code from the interface and its implementations.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 300
diff changeset
2274 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2275
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2276 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2277 * Instructs the Response implementation to close and do the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2278 * necessary clean up procedures.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2279 */
556
87feb93330a6 Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 554
diff changeset
2280 void close();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2281 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2282 // }}}
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2283
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2284 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2285 * The ResultSetResponse represents a tabular result sent by the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2286 * server. This is typically an SQL table. The MAPI headers of the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2287 * Response look like:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2288 * <pre>
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2289 * &amp;1 1 28 2 10
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2290 * % sys.props, sys.props # table_name
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2291 * % name, value # name
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2292 * % varchar, int # type
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2293 * % 15, 3 # length
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2294 * % 60 0, 32 0 # typesizes
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2295 * </pre>
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2296 * there the first line consists out of<br />
708
5022a57f9d97 Resolve javadoc errors.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 707
diff changeset
2297 * <samp>&amp;"qt" "id" "tc" "cc" "rc"</samp>.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2298 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2299 // {{{ ResultSetResponse class implementation
296
c5efd6e661e5 Add "final" keyword to classes, method arguments and local variables where possible.`
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 295
diff changeset
2300 final class ResultSetResponse implements Response {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2301 /** The number of columns in this result */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2302 public final int columncount;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2303 /** The total number of rows this result set has */
377
8a813f5cef1b Extend StartOfHeaderParser with method getNextAsLong() and change type of tuplecount to long.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 376
diff changeset
2304 public final long tuplecount;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2305 /** The numbers of rows to retrieve per DataBlockResponse */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2306 private int cacheSize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2307 /** The table ID of this result */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2308 public final int id;
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2309
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2310 /** arrays for the resultset columns metadata */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2311 /** The names of the columns in this result */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2312 private String[] name;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2313 /** The types of the columns in this result */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2314 private String[] type;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2315 /** The max string length for each column in this result */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2316 private int[] columnLengths;
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2317 /** The precision for each column in this result */
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2318 private int[] colPrecisions;
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2319 /** The scale for each column in this result */
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2320 private int[] colScales;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2321 /** The table for each column in this result */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2322 private String[] tableNames;
416
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2323 /** The schema for each column in this result */
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2324 private String[] schemaNames;
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2325
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2326 /** The query sequence number */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2327 private final int seqnr;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2328 /** A List of result blocks (chunks of size fetchSize/cacheSize) */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2329 private DataBlockResponse[] resultBlocks;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2330
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2331 /** Whether this Response is closed */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2332 private boolean closed;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2333
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2334 /** The Connection that we should use when requesting a new block */
286
d430f8adbf1b Add keyword "final" to those variables which do not change after first assigment.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 285
diff changeset
2335 private final MonetConnection.ResponseList parent;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2336 /** Whether the fetchSize was explitly set by the user */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2337 private final boolean cacheSizeSetExplicitly;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2338 /** Whether we should send an Xclose command to the server
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2339 * if we close this Response */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2340 private boolean destroyOnClose;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2341 /** the offset to be used on Xexport queries */
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
2342 private int blockOffset;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2343
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2344 /** A parser for header lines */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2345 private final HeaderLineParser hlp;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2346
286
d430f8adbf1b Add keyword "final" to those variables which do not change after first assigment.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 285
diff changeset
2347 /** A boolean array telling whether the headers are set or not */
d430f8adbf1b Add keyword "final" to those variables which do not change after first assigment.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 285
diff changeset
2348 private final boolean[] isSet;
408
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
2349 private static final int NAMES = 0;
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
2350 private static final int TYPES = 1;
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
2351 private static final int TABLES = 2;
5540793628d6 Improve code when setting query timeout. It used to call the sys.settimeout(bigint) which is deprecated as of release Jun2020 (11.37.7) and replaced by new sys.setquerytimeout(int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 407
diff changeset
2352 private static final int LENS = 3;
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2353 private static final int TYPESIZES = 4;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2354
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2355 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2356 * Sole constructor, which requires a MonetConnection parent to
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2357 * be given.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2358 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2359 * @param id the ID of the result set
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2360 * @param tuplecount the total number of tuples in the result set
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2361 * @param columncount the number of columns in the result set
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2362 * @param rowcount the number of rows in the current block
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2363 * @param parent the parent that created this Response and will
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
2364 * supply new result blocks when necessary
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2365 * @param seq the query sequence number
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2366 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2367 ResultSetResponse(
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2368 final int id,
377
8a813f5cef1b Extend StartOfHeaderParser with method getNextAsLong() and change type of tuplecount to long.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 376
diff changeset
2369 final long tuplecount,
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2370 final int columncount,
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2371 final int rowcount,
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2372 final MonetConnection.ResponseList parent,
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2373 final int seq)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2374 {
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2375 isSet = new boolean[5];
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2376 this.parent = parent;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2377 if (parent.cachesize == 0) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2378 /* Below we have to calculate how many "chunks" we need
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2379 * to allocate to store the entire result. However, if
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2380 * the user didn't set a cache size, as in this case, we
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2381 * need to stick to our defaults. */
660
7ec8d469fd0b Adapt the cacheSize to the actual fetch size instead of using the default fetch size.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 658
diff changeset
2382 cacheSize = defaultFetchSize;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2383 cacheSizeSetExplicitly = false;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2384 } else {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2385 cacheSize = parent.cachesize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2386 cacheSizeSetExplicitly = true;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2387 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2388 /* So far, so good. Now the problem with EXPLAIN, DOT, etc
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2389 * queries is, that they don't support any block fetching,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2390 * so we need to always fetch everything at once. For that
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2391 * reason, the cache size is here set to the rowcount if
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2392 * it's larger, such that we do a full fetch at once.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2393 * (Because we always set a reply_size, we can only get a
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2394 * larger rowcount from the server if it doesn't paginate,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2395 * because it's a pseudo SQL result.) */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2396 if (rowcount > cacheSize)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2397 cacheSize = rowcount;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2398 seqnr = seq;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2399 closed = false;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2400 destroyOnClose = id > 0 && tuplecount > rowcount;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2401
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2402 this.id = id;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2403 this.tuplecount = tuplecount;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2404 this.columncount = columncount;
377
8a813f5cef1b Extend StartOfHeaderParser with method getNextAsLong() and change type of tuplecount to long.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 376
diff changeset
2405 this.resultBlocks = new DataBlockResponse[(int)(tuplecount / cacheSize) + 1];
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2406
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2407 hlp = new HeaderLineParser(columncount);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2408
286
d430f8adbf1b Add keyword "final" to those variables which do not change after first assigment.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 285
diff changeset
2409 resultBlocks[0] = new DataBlockResponse(rowcount, parent.rstype == ResultSet.TYPE_FORWARD_ONLY);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2410 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2411
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2412 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2413 * Parses the given string and changes the value of the matching
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2414 * header appropriately, or passes it on to the underlying
690
f7946d36d1dd Extend error messages with the linetype to give more info.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 685
diff changeset
2415 * DataBlockResponse.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2416 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2417 * @param tmpLine the string that contains the header
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2418 * @return a non-null String if the header cannot be parsed or
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2419 * is unknown
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2420 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2421 @Override
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
2422 public String addLine(final String tmpLine, final LineType linetype) {
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2423 // System.out.println("In ResultSetResponse.addLine(line, type: " + linetype + ") line: " + tmpLine);
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2424 if (linetype == LineType.RESULT ||
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2425 (isSet[LENS] && isSet[TYPES] && isSet[TABLES] && isSet[NAMES] && isSet[TYPESIZES])) {
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2426 if (!isSet[TYPESIZES])
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2427 // this is needed to get proper output when processing a: DEBUG SQL-statement
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2428 isSet[TYPESIZES] = true;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2429 return resultBlocks[0].addLine(tmpLine, linetype);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2430 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2431
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2432 if (linetype != LineType.HEADER) {
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2433 if (!isSet[TYPESIZES])
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2434 isSet[TYPESIZES] = true;
690
f7946d36d1dd Extend error messages with the linetype to give more info.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 685
diff changeset
2435 return "Header expected, got " + linetype + " line: " + tmpLine;
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2436 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2437
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2438 // depending on the name of the header, we continue
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2439 try {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2440 switch (hlp.parse(tmpLine)) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2441 case HeaderLineParser.NAME:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2442 name = hlp.values.clone();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2443 isSet[NAMES] = true;
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2444 break;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2445 case HeaderLineParser.LENGTH:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2446 columnLengths = hlp.intValues.clone();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2447 isSet[LENS] = true;
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2448 break;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2449 case HeaderLineParser.TYPE:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2450 type = hlp.values.clone();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2451 isSet[TYPES] = true;
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2452 break;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2453 case HeaderLineParser.TABLE:
416
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2454 {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2455 tableNames = hlp.values.clone();
416
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2456 final int array_size = tableNames.length;
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2457 schemaNames = new String[array_size];
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2458 // split the schema and table names from the cloned values array
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2459 for (int i = 0; i < array_size; i++) {
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2460 String qtable = tableNames[i];
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2461 if (qtable != null) {
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2462 int dot = qtable.indexOf('.');
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2463 if (dot >= 0) {
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2464 schemaNames[i] = qtable.substring(0, dot);
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2465 tableNames[i] = qtable.substring(dot +1);
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2466 } else {
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2467 schemaNames[i] = "";
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2468 }
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2469 } else {
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2470 schemaNames[i] = "";
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2471 tableNames[i] = "";
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2472 }
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2473 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2474 isSet[TABLES] = true;
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2475 break;
416
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2476 }
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2477 case HeaderLineParser.TYPESIZES:
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2478 {
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2479 // System.out.println("In ResultSetResponse.addLine() case HeaderLineParser.TYPESIZES: values: " + hlp.values[0]);
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2480 final int array_size = hlp.values.length;
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2481 colPrecisions = new int[array_size];
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2482 colScales = new int[array_size];
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2483 // extract the precision and scale integer numbers from the string
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2484 for (int i = 0; i < array_size; i++) {
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2485 String ps = hlp.values[i];
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2486 if (ps != null) {
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2487 try {
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2488 int separator = ps.indexOf(' ');
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2489 if (separator > 0) {
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2490 colPrecisions[i] = Integer.parseInt(ps.substring(0, separator));
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2491 colScales[i] = Integer.parseInt(ps.substring(separator +1));
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2492 } else {
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2493 colPrecisions[i] = Integer.parseInt(ps);
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2494 colScales[i] = 0;
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2495 }
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2496 } catch (NumberFormatException nfe) {
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2497 return nfe.getMessage();
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2498 }
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2499 } else {
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2500 colPrecisions[i] = 1;
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2501 colScales[i] = 0;
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2502 }
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2503 }
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2504 isSet[TYPESIZES] = true;
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2505 break;
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2506 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2507 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2508 } catch (MCLParseException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2509 return e.getMessage();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2510 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2511
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2512 // all is well
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2513 return null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2514 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2515
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2516 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2517 * Returns whether this ResultSetResponse needs more lines.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2518 * This method returns true if not all headers are set, or the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2519 * first DataBlockResponse reports to want more.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2520 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2521 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2522 public boolean wantsMore() {
701
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
2523 return resultBlocks[0].wantsMore();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2524 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2525
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2526 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2527 * Returns an array of Strings containing the values between
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2528 * ',\t' separators.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2529 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2530 * @param chrLine a character array holding the input data
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2531 * @param start where the relevant data starts
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2532 * @param stop where the relevant data stops
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2533 * @return an array of Strings
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2534 */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2535 private final String[] getValues(final char[] chrLine, int start, final int stop) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2536 int elem = 0;
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2537 final String[] values = new String[columncount];
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2538
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2539 for (int i = start; i < stop; i++) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2540 if (chrLine[i] == '\t' && chrLine[i - 1] == ',') {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2541 values[elem++] =
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2542 new String(chrLine, start, i - 1 - start);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2543 start = i + 1;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2544 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2545 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2546 // at the left over part
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2547 values[elem++] = new String(chrLine, start, stop - start);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2548
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2549 return values;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2550 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2551
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2552 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2553 * Adds the given DataBlockResponse to this ResultSetResponse at
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2554 * the given block position.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2555 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2556 * @param offset the offset number of rows for this block
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2557 * @param rr the DataBlockResponse to add
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2558 */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2559 void addDataBlockResponse(final int offset, final DataBlockResponse rr) {
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2560 final int block = (offset - blockOffset) / cacheSize;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2561 resultBlocks[block] = rr;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2562 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2563
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2564 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2565 * Marks this Response as being completed. A complete Response
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2566 * needs to be consistent with regard to its internal data.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2567 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2568 * @throws SQLException if the data currently in this Response is not
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
2569 * sufficient to be consistant
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2570 */
324
0b01771d5f8a Method Response.complete() is never used or needed. Disabled the code from the interface and its implementations.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 300
diff changeset
2571 /* MvD: disabled not used/needed code
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2572 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2573 public void complete() throws SQLException {
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2574 final StringBuilder err = new StringBuilder(99);
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2575 if (!isSet[NAMES]) err.append("name header missing\n");
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2576 if (!isSet[TYPES]) err.append("type header missing\n");
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2577 if (!isSet[TABLES]) err.append("table name header missing\n");
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2578 if (!isSet[LENS]) err.append("column width header missing\n");
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2579 if (!isSet[TYPESIZES]) err.append("column precision and scale header missing\n");
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2580 if (err.length() > 0)
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2581 throw new SQLException(err.toString(), "M0M10");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2582 }
324
0b01771d5f8a Method Response.complete() is never used or needed. Disabled the code from the interface and its implementations.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 300
diff changeset
2583 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2584
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2585 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2586 * Returns the names of the columns
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2587 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2588 * @return the names of the columns
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2589 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2590 String[] getNames() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2591 return name;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2592 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2593
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2594 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2595 * Returns the types of the columns
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2596 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2597 * @return the types of the columns
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2598 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2599 String[] getTypes() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2600 return type;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2601 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2602
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2603 /**
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2604 * Returns the table names of the columns
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2605 *
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2606 * @return the table names of the columns
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2607 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2608 String[] getTableNames() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2609 return tableNames;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2610 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2611
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2612 /**
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2613 * Returns the schema names of the columns
416
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2614 *
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2615 * @return the schema names of the columns
416
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2616 */
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2617 String[] getSchemaNames() {
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2618 return schemaNames;
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2619 }
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2620
b3c876a0d61f Improved performance of ResultSetMetaData methods getSchemaName(), getTableName(), getPrecision(), getScale(), isNullable() and isAutoIncrement().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 414
diff changeset
2621 /**
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2622 * Returns the display lengths of the columns
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2623 *
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2624 * @return the display lengths of the columns
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2625 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2626 int[] getColumnLengths() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2627 return columnLengths;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2628 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2629
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2630 /**
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2631 * Returns the precisions of the columns
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2632 *
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2633 * @return the precisions of the columns, it can return null
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2634 */
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2635 int[] getColumnPrecisions() {
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2636 return colPrecisions;
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2637 }
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2638
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2639 /**
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2640 * Returns the scales of the columns (0 when scale is not applicable)
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2641 *
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2642 * @return the scales of the columns, it can return null
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2643 */
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2644 int[] getColumnScales() {
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2645 return colScales;
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2646 }
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2647
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2648 /**
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2649 * Returns the cache size used within this Response
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2650 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2651 * @return the cache size
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2652 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2653 int getCacheSize() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2654 return cacheSize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2655 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2656
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2657 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2658 * Returns the current block offset
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2659 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2660 * @return the current block offset
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2661 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2662 int getBlockOffset() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2663 return blockOffset;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2664 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2665
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2666 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2667 * Returns the ResultSet type, FORWARD_ONLY or not.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2668 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2669 * @return the ResultSet type
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2670 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2671 int getRSType() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2672 return parent.rstype;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2673 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2674
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2675 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2676 * Returns the concurrency of the ResultSet.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2677 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2678 * @return the ResultSet concurrency
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2679 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2680 int getRSConcur() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2681 return parent.rsconcur;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2682 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2683
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2684 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2685 * Returns a line from the cache. If the line is already present in the
136
4320e6891536 Replace AssertionError() with SQLException().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 90
diff changeset
2686 * cache, it is returned, if not appropriate actions are taken to make
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2687 * sure the right block is being fetched and as soon as the requested
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2688 * line is fetched it is returned.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2689 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2690 * @param row the row in the result set to return
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2691 * @return the exact row read as requested or null if the requested row
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2692 * is out of the scope of the result set
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2693 * @throws SQLException if an database error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2694 */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2695 String getLine(final int row) throws SQLException {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2696 if (row >= tuplecount || row < 0)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2697 return null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2698
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2699 int block = (row - blockOffset) / cacheSize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2700 int blockLine = (row - blockOffset) % cacheSize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2701
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2702 // do we have the right block loaded? (optimistic try)
214
b8c007e86694 Improve readability
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 200
diff changeset
2703 DataBlockResponse rawr = resultBlocks[block];
b8c007e86694 Improve readability
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 200
diff changeset
2704 if (rawr == null) {
b8c007e86694 Improve readability
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 200
diff changeset
2705 // load block
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2706 /// TODO: ponder about a maximum number of blocks to keep
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2707 /// in memory when dealing with random access to
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2708 /// reduce memory blow-up
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2709
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2710 // if we're running forward only, we can discard the old
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2711 // block loaded
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2712 if (parent.rstype == ResultSet.TYPE_FORWARD_ONLY) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2713 for (int i = 0; i < block; i++)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2714 resultBlocks[i] = null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2715
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2716 if (MonetConnection.seqCounter - 1 == seqnr &&
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2717 !cacheSizeSetExplicitly &&
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2718 tuplecount - row > cacheSize &&
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2719 cacheSize < MonetConnection.DEF_FETCHSIZE * 10)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2720 {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2721 // there has no query been issued after this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2722 // one, so we can consider this an uninterrupted
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2723 // continuation request. Let's once increase
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2724 // the cacheSize as it was not explicitly set,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2725 // since the chances are high that we won't
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2726 // bother anyone else by doing so, and just
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2727 // gaining some performance.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2728
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2729 // store the previous position in the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2730 // blockOffset variable
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2731 blockOffset += cacheSize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2732
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2733 // increase the cache size (a lot)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2734 cacheSize *= 10;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2735
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2736 // by changing the cacheSize, we also
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2737 // change the block measures. Luckily
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2738 // we don't care about previous blocks
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2739 // because we have a forward running
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2740 // pointer only. However, we do have
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2741 // to recalculate the block number, to
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2742 // ensure the next call to find this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2743 // new block.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2744 block = (row - blockOffset) / cacheSize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2745 blockLine = (row - blockOffset) % cacheSize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2746 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2747 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2748
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2749 // ok, need to fetch cache block first
136
4320e6891536 Replace AssertionError() with SQLException().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 90
diff changeset
2750 parent.executeQuery(commandTempl,
4320e6891536 Replace AssertionError() with SQLException().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 90
diff changeset
2751 "export " + id + " " + ((block * cacheSize) + blockOffset) + " " + cacheSize);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2752 rawr = resultBlocks[block];
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2753 if (rawr == null)
136
4320e6891536 Replace AssertionError() with SQLException().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 90
diff changeset
2754 throw new SQLException("resultBlocks[" + block + "] should have been fetched by now", "M0M10");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2755 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2756
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2757 return rawr.getRow(blockLine);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2758 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2759
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2760 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2761 * Closes this Response by sending an Xclose to the server indicating
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2762 * that the result can be closed at the server side as well.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2763 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2764 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2765 public void close() {
623
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
2766 if (closed)
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
2767 return;
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2768
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2769 // send command to server indicating we're done with this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2770 // result only if we had an ID in the header and this result
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2771 // was larger than the reply size
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2772 try {
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2773 if (destroyOnClose)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2774 sendControlCommand("close " + id);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2775 } catch (SQLException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2776 // probably a connection error...
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2777 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2778
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2779 // close the data block associated with us
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2780 for (int i = 1; i < resultBlocks.length; i++) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2781 DataBlockResponse r = resultBlocks[i];
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2782 if (r != null)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2783 r.close();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2784 }
623
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
2785 name = null;
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
2786 type = null;
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
2787 columnLengths = null;
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2788 colPrecisions = null;
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
2789 colScales = null;
623
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
2790 tableNames = null;
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
2791 schemaNames = null;
1c3cdf0667d7 Do more cleanup in the close() methods such as calling clearWarnings(), clearParameters(), clearBatch() and dereferencing cached objects.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 620
diff changeset
2792 resultBlocks = null;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2793 closed = true;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2794 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2795
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2796 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2797 * Returns whether this Response is closed
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2798 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2799 * @return whether this Response is closed
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2800 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2801 boolean isClosed() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2802 return closed;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2803 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2804 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2805 // }}}
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2806
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2807 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2808 * The DataBlockResponse is tabular data belonging to a
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2809 * ResultSetResponse. Tabular data from the server typically looks
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2810 * like:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2811 * <pre>
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2812 * [ "value", 56 ]
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2813 * </pre>
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2814 * where each column is separated by ",\t" and each tuple surrounded
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2815 * by brackets ("[" and "]"). A DataBlockResponse object holds the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2816 * raw data as read from the server, in a parsed manner, ready for
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2817 * easy retrieval.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2818 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2819 * This object is not intended to be queried by multiple threads
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2820 * synchronously. It is designed to work for one thread retrieving
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2821 * rows from it. When multiple threads will retrieve rows from this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2822 * object, it is possible for threads to get the same data.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2823 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2824 // {{{ DataBlockResponse class implementation
296
c5efd6e661e5 Add "final" keyword to classes, method arguments and local variables where possible.`
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 295
diff changeset
2825 private final static class DataBlockResponse implements Response {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2826 /** The String array to keep the data in */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2827 private final String[] data;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2828
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2829 /** The counter which keeps the current position in the data array */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2830 private int pos;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2831 /** Whether we can discard lines as soon as we have read them */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2832 private final boolean forwardOnly;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2833
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2834 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2835 * Constructs a DataBlockResponse object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2836 * @param size the size of the data array to create
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2837 * @param forward whether this is a forward only result
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2838 */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2839 DataBlockResponse(final int size, final boolean forward) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2840 pos = -1;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2841 data = new String[size];
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2842 forwardOnly = forward;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2843 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2844
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2845 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2846 * addLine adds a String of data to this object's data array.
702
b4e968e5bd74 Some improvements.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 701
diff changeset
2847 * Note that an ArrayIndexOutOfBoundsException can be thrown when an
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2848 * attempt is made to add more than the original construction size
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2849 * specified.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2850 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2851 * @param line the header line as String
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2852 * @param linetype the line type according to the MAPI protocol
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2853 * @return a non-null String if the line is invalid,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2854 * or additional lines are not allowed.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2855 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2856 @Override
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
2857 public String addLine(final String line, final LineType linetype) {
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
2858 if (linetype != LineType.RESULT)
690
f7946d36d1dd Extend error messages with the linetype to give more info.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 685
diff changeset
2859 return "protocol violation: unexpected " + linetype + " line in data block: " + line;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2860 // add to the backing array
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2861 data[++pos] = line;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2862
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2863 // all is well
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2864 return null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2865 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2866
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2867 /**
288
f412032e3b43 Correcting typo
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 286
diff changeset
2868 * Returns whether this Response expects more lines to be added
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2869 * to it.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2870 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2871 * @return true if a next line should be added, false otherwise
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2872 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2873 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2874 public boolean wantsMore() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2875 // remember: pos is the value already stored
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2876 return pos + 1 < data.length;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2877 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2878
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2879 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2880 * Indicates that no more header lines will be added to this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2881 * Response implementation. In most cases this is a redundant
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2882 * operation because the data array is full. However... it can
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2883 * happen that this is NOT the case!
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2884 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2885 * @throws SQLException if not all rows are filled
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2886 */
324
0b01771d5f8a Method Response.complete() is never used or needed. Disabled the code from the interface and its implementations.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 300
diff changeset
2887 /* MvD: disabled not used/needed code
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2888 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2889 public void complete() throws SQLException {
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2890 if ((pos + 1) != data.length)
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2891 throw new SQLException("Inconsistent state detected! Current block capacity: "
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2892 + data.length + ", block usage: " + (pos + 1)
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2893 + ". Did MonetDB send what it promised to?", "M0M10");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2894 }
324
0b01771d5f8a Method Response.complete() is never used or needed. Disabled the code from the interface and its implementations.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 300
diff changeset
2895 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2896
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2897 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2898 * Instructs the Response implementation to close and do the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2899 * necessary clean up procedures.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2900 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2901 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2902 public void close() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2903 // feed all rows to the garbage collector
819
726a1d7b168c correct indentation
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 814
diff changeset
2904 Arrays.fill(data, null);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2905 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2906
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2907 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2908 * Retrieves the required row. Warning: if the requested rows
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2909 * is out of bounds, an IndexOutOfBoundsException will be
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2910 * thrown.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2911 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2912 * @param line the row to retrieve
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2913 * @return the requested row as String
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2914 */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2915 String getRow(final int line) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2916 if (forwardOnly) {
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2917 final String ret = data[line];
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2918 data[line] = null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2919 return ret;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2920 } else {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2921 return data[line];
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2922 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2923 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2924 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2925 // }}}
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2926
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2927 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2928 * The UpdateResponse represents an update statement response. It
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2929 * is issued on an UPDATE, INSERT or DELETE SQL statement. This
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2930 * response keeps a count field that represents the affected rows
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2931 * and a field that contains the last inserted auto-generated ID, or
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2932 * -1 if not applicable.<br />
708
5022a57f9d97 Resolve javadoc errors.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 707
diff changeset
2933 * <samp>&amp;2 0 -1</samp>
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2934 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2935 // {{{ UpdateResponse class implementation
296
c5efd6e661e5 Add "final" keyword to classes, method arguments and local variables where possible.`
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 295
diff changeset
2936 final static class UpdateResponse implements Response {
378
02f353f62abe Adjust UpdateResponse to allow for large updates (long instead of int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 377
diff changeset
2937 public final long count;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2938 public final String lastid;
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2939
378
02f353f62abe Adjust UpdateResponse to allow for large updates (long instead of int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 377
diff changeset
2940 public UpdateResponse(final long cnt, final String id) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2941 // fill the blank finals
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2942 this.count = cnt;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2943 this.lastid = id;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2944 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2945
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2946 @Override
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
2947 public String addLine(final String line, final LineType linetype) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2948 return "Header lines are not supported for an UpdateResponse";
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2949 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2950
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2951 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2952 public boolean wantsMore() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2953 return false;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2954 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2955
324
0b01771d5f8a Method Response.complete() is never used or needed. Disabled the code from the interface and its implementations.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 300
diff changeset
2956 /* MvD: disabled not used/needed code
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2957 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2958 public void complete() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2959 // empty, because there is nothing to check
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2960 }
324
0b01771d5f8a Method Response.complete() is never used or needed. Disabled the code from the interface and its implementations.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 300
diff changeset
2961 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2962
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2963 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2964 public void close() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2965 // nothing to do here...
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2966 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2967 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2968 // }}}
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2969
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2970 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2971 * The SchemaResponse represents an schema modification response.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2972 * It is issued on statements like CREATE, DROP or ALTER TABLE.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2973 * This response keeps a field that represents the success state, as
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2974 * defined by JDBC, which is currently in MonetDB's case alwats
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2975 * SUCCESS_NO_INFO. Note that this state is not sent by the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2976 * server.<br />
708
5022a57f9d97 Resolve javadoc errors.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 707
diff changeset
2977 * <samp>&amp;3</samp>
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2978 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2979 // {{{ SchemaResponse class implementation
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2980 class SchemaResponse implements Response {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2981 public final int state = Statement.SUCCESS_NO_INFO;
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
2982
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2983 @Override
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
2984 public String addLine(final String line, final LineType linetype) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2985 return "Header lines are not supported for a SchemaResponse";
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2986 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2987
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2988 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2989 public boolean wantsMore() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2990 return false;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2991 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2992
324
0b01771d5f8a Method Response.complete() is never used or needed. Disabled the code from the interface and its implementations.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 300
diff changeset
2993 /* MvD: disabled not used/needed code
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2994 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2995 public void complete() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2996 // empty, because there is nothing to check
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2997 }
324
0b01771d5f8a Method Response.complete() is never used or needed. Disabled the code from the interface and its implementations.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 300
diff changeset
2998 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2999
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3000 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3001 public void close() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3002 // nothing to do here...
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3003 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3004 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3005 // }}}
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3006
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3007 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3008 * The AutoCommitResponse represents a transaction message. It
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3009 * stores (a change in) the server side auto commit mode.<br />
708
5022a57f9d97 Resolve javadoc errors.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 707
diff changeset
3010 * <samp>&amp;4 (t|f)</samp>
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3011 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3012 // {{{ AutoCommitResponse class implementation
296
c5efd6e661e5 Add "final" keyword to classes, method arguments and local variables where possible.`
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 295
diff changeset
3013 private final class AutoCommitResponse extends SchemaResponse {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3014 public final boolean autocommit;
77
83aee4f60649 Added private method sendTransactionCommand(String); to reduce duplicate code in 6 methods.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 47
diff changeset
3015
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3016 public AutoCommitResponse(final boolean ac) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3017 // fill the blank final
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3018 this.autocommit = ac;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3019 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3020 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3021 // }}}
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3022
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3023 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3024 * A list of Response objects. Responses are added to this list.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3025 * Methods of this class are not synchronized. This is left as
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3026 * responsibility to the caller to prevent concurrent access.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3027 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3028 // {{{ ResponseList class implementation
296
c5efd6e661e5 Add "final" keyword to classes, method arguments and local variables where possible.`
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 295
diff changeset
3029 final class ResponseList {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3030 /** The cache size (number of rows in a DataBlockResponse object) */
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
3031 private final int cachesize;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3032 /** The maximum number of results for this query */
376
ffdc7b0e102d Updated JDBC driver to comply with JDBC 4.2 interface now we compile for Java 8. This includes:
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 370
diff changeset
3033 private final long maxrows;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3034 /** The ResultSet type to produce */
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
3035 private final int rstype;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3036 /** The ResultSet concurrency to produce */
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
3037 private final int rsconcur;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3038 /** The sequence number of this ResponseList */
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
3039 private final int seqnr;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3040 /** A list of the Responses associated with the query,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3041 * in the right order */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3042 private final ArrayList<Response> responses;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3043 /** A map of ResultSetResponses, used for additional
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3044 * DataBlockResponse mapping */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3045 private HashMap<Integer, ResultSetResponse> rsresponses;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3046
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3047 /** The current header returned by getNextResponse() */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3048 private int curResponse;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3049
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3050 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
3051 * Main constructor.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3052 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3053 * @param cachesize overall cachesize to use
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3054 * @param maxrows maximum number of rows to allow in the set
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3055 * @param rstype the type of result sets to produce
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3056 * @param rsconcur the concurrency of result sets to produce
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3057 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3058 ResponseList(
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3059 final int cachesize,
376
ffdc7b0e102d Updated JDBC driver to comply with JDBC 4.2 interface now we compile for Java 8. This includes:
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 370
diff changeset
3060 final long maxrows,
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3061 final int rstype,
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
3062 final int rsconcur)
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
3063 {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3064 this.cachesize = cachesize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3065 this.maxrows = maxrows;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3066 this.rstype = rstype;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3067 this.rsconcur = rsconcur;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3068 responses = new ArrayList<Response>();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3069 curResponse = -1;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3070 seqnr = MonetConnection.seqCounter++;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3071 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3072
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3073 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3074 * Retrieves the next available response, or null if there are
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3075 * no more responses.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3076 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3077 * @return the next Response available or null
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3078 */
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
3079 Response getNextResponse() {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3080 if (rstype == ResultSet.TYPE_FORWARD_ONLY) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3081 // free resources if we're running forward only
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3082 if (curResponse >= 0 && curResponse < responses.size()) {
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3083 final Response tmp = responses.get(curResponse);
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
3084 if (tmp != null)
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
3085 tmp.close();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3086 responses.set(curResponse, null);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3087 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3088 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3089 curResponse++;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3090 if (curResponse >= responses.size()) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3091 // ResponseList is obviously completed so, there are no
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3092 // more responses
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3093 return null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3094 } else {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3095 // return this response
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3096 return responses.get(curResponse);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3097 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3098 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3099
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3100 /**
288
f412032e3b43 Correcting typo
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 286
diff changeset
3101 * Closes the Response at index i, if not null.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3102 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3103 * @param i the index position of the header to close
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3104 */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3105 void closeResponse(final int i) {
262
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
3106 if (i < 0 || i >= responses.size())
2d62ca1f758b Moved utility method newSQLFeatureNotSupportedException(String name) from MonetPreparedStatement.java and MonetResultSet.java
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 261
diff changeset
3107 return;
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3108 final Response tmp = responses.set(i, null);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3109 if (tmp != null)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3110 tmp.close();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3111 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3112
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3113 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3114 * Closes the current response.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3115 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3116 void closeCurrentResponse() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3117 closeResponse(curResponse);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3118 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3119
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3120 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3121 * Closes the current and previous responses.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3122 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3123 void closeCurOldResponses() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3124 for (int i = curResponse; i >= 0; i--) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3125 closeResponse(i);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3126 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3127 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3128
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3129 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3130 * Closes this ResponseList by closing all the Responses in this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3131 * ResponseList.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3132 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3133 void close() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3134 for (int i = 0; i < responses.size(); i++) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3135 closeResponse(i);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3136 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3137 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3138
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3139 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3140 * Returns whether this ResponseList has still unclosed
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3141 * Responses.
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
3142 * @return whether there are unclosed Responses
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3143 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3144 boolean hasUnclosedResponses() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3145 for (Response r : responses) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3146 if (r != null)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3147 return true;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3148 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3149 return false;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3150 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3151
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3152 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3153 * Executes the query contained in this ResponseList, and
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3154 * stores the Responses resulting from this query in this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3155 * ResponseList.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3156 *
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
3157 * @param query the SQL query to execute
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3158 * @throws SQLException if a database error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3159 */
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3160 void processQuery(final String query) throws SQLException {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3161 executeQuery(queryTempl, query);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3162 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3163
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3164 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3165 * Internal executor of queries.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3166 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3167 * @param templ the template to fill in
552
7b320303b579 Doc comment improvements
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 551
diff changeset
3168 * @param query the query to execute
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3169 * @throws SQLException if a database error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3170 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3171 @SuppressWarnings("fallthrough")
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3172 void executeQuery(final String[] templ, final String query)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3173 throws SQLException
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3174 {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3175 String error = null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3176
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3177 try {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3178 synchronized (server) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3179 // make sure we're ready to send query; read data till we
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3180 // have the prompt it is possible (and most likely) that we
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3181 // already have the prompt and do not have to skip any
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3182 // lines. Ignore errors from previous result sets.
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3183 in.discardRemainder();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3184
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3185 // {{{ set reply size
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3186 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3187 * Change the reply size of the server. If the given
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3188 * value is the same as the current value known to use,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3189 * then ignore this call. If it is set to 0 we get a
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3190 * prompt after the server sent it's header.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3191 */
480
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
3192 int size = cachesize;
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
3193 if (size == 0)
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
3194 size = defaultFetchSize;
178
dd12348c41cf Improvement: only extend typeMap when the property was set to true.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 175
diff changeset
3195 if (maxrows > 0 && maxrows < size)
376
ffdc7b0e102d Updated JDBC driver to comply with JDBC 4.2 interface now we compile for Java 8. This includes:
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 370
diff changeset
3196 size = (int)maxrows;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3197 // don't do work if it's not needed
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3198 if (lang == LANG_SQL && size != curReplySize && templ != commandTempl) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3199 sendControlCommand("reply_size " + size);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3200
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3201 // store the reply size after a successful change
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3202 curReplySize = size;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3203 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3204 // }}} set reply size
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3205
285
637899bda602 Removed SendThread class and its usage from MonetConnection.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 284
diff changeset
3206 // send query to the server
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3207 out.writeLine(templ[0] + query + templ[1]);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3208
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3209 // go for new results
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3210 in.advance();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3211 Response res = null;
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3212 while (in.getLineType() != LineType.PROMPT) {
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3213 // each response should start with a start of header (or error)
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3214 switch (in.getLineType()) {
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
3215 case SOHEADER:
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3216 // make the response object, and fill it
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3217 try {
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3218 switch (sohp.parse(in.getLine())) {
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3219 case StartOfHeaderParser.Q_PARSE:
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3220 throw new MCLParseException("Q_PARSE header not allowed here", 1);
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3221 case StartOfHeaderParser.Q_TABLE:
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3222 case StartOfHeaderParser.Q_PREPARE: {
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3223 final int id = sohp.getNextAsInt();
377
8a813f5cef1b Extend StartOfHeaderParser with method getNextAsLong() and change type of tuplecount to long.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 376
diff changeset
3224 long tuplecount = sohp.getNextAsLong();
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3225 final int columncount = sohp.getNextAsInt();
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3226 final int rowcount = sohp.getNextAsInt();
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3227 // enforce the maxrows setting
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3228 if (maxrows != 0 && tuplecount > maxrows)
377
8a813f5cef1b Extend StartOfHeaderParser with method getNextAsLong() and change type of tuplecount to long.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 376
diff changeset
3229 tuplecount = maxrows;
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3230 res = new ResultSetResponse(id, tuplecount, columncount, rowcount, this, seqnr);
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3231 // only add this resultset to the hashmap if it can possibly have an additional datablock
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3232 if (rowcount < tuplecount) {
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3233 if (rsresponses == null)
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3234 rsresponses = new HashMap<Integer, ResultSetResponse>();
556
87feb93330a6 Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 554
diff changeset
3235 rsresponses.put(id, (ResultSetResponse) res);
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3236 }
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3237 } break;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3238 case StartOfHeaderParser.Q_UPDATE:
378
02f353f62abe Adjust UpdateResponse to allow for large updates (long instead of int).
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 377
diff changeset
3239 res = new UpdateResponse(sohp.getNextAsLong(), // count
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3240 sohp.getNextAsString() // key-id
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3241 );
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3242 break;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3243 case StartOfHeaderParser.Q_SCHEMA:
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3244 res = new SchemaResponse();
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3245 break;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3246 case StartOfHeaderParser.Q_TRANS:
480
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
3247 final boolean ac = sohp.getNextAsString().equals("t");
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3248 if (autoCommit && ac) {
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3249 addWarning("Server enabled auto commit mode " +
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3250 "while local state already was auto commit.", "01M11");
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3251 }
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3252 autoCommit = ac;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3253 res = new AutoCommitResponse(ac);
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3254 break;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3255 case StartOfHeaderParser.Q_BLOCK: {
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3256 // a new block of results for a response...
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3257 final int id = sohp.getNextAsInt();
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3258 sohp.getNextAsInt(); // columncount
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3259 final int rowcount = sohp.getNextAsInt();
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3260 final int offset = sohp.getNextAsInt();
480
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
3261 final ResultSetResponse t;
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
3262 if (rsresponses != null)
556
87feb93330a6 Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 554
diff changeset
3263 t = rsresponses.get(id);
480
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
3264 else
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
3265 t = null;
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3266 if (t == null) {
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3267 error = "M0M12!no ResultSetResponse with id " + id + " found";
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3268 break;
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3269 }
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3270 final DataBlockResponse r = new DataBlockResponse(rowcount, t.getRSType() == ResultSet.TYPE_FORWARD_ONLY);
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3271 t.addDataBlockResponse(offset, r);
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3272 res = r;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3273 } break;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3274 } // end of switch (sohp.parse(tmpLine))
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3275 } catch (MCLParseException e) {
480
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
3276 final int offset = e.getErrorOffset();
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3277 error = "M0M10!error while parsing start of header:\n" +
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3278 e.getMessage() +
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3279 " found: '" + in.getLine().charAt(offset) +
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3280 "' in: \"" + in.getLine() +
480
849af4b76b28 Optimise code by reducing local variables which are used only once, replacing complex string concatenation by using StringBuilder, replacing some ternairy operators.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 474
diff changeset
3281 "\" at pos: " + offset;
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3282 // flush all the rest
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3283 in.discardRemainder();
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3284 break;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3285 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3286
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3287 // immediately handle errors after parsing the header (res may be null)
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3288 if (error != null) {
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3289 in.discardRemainder();
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3290 break;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3291 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3292
701
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3293 // advance to the line after the header
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3294 in.advance();
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3295
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3296 // stuff all header lines into the res
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3297 while (error == null && in.getLineType() == LineType.HEADER) {
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3298 error = res.addLine(in.getLine(), in.getLineType());
701
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3299 in.advance();
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3300 }
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3301
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3302 // then feed it more lines until it is satisfied
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3303 while (error == null && res.wantsMore()) {
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3304 error = res.addLine(in.getLine(), in.getLineType());
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3305 in.advance();
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3306 }
701
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3307
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3308 if (error != null) {
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3309 // right, some protocol violation,
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3310 // skip the rest of the result
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3311 error = "M0M10!" + error;
702
b4e968e5bd74 Some improvements.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 701
diff changeset
3312 in.discardRemainder(error);
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3313 break;
701
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3314 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3315
288
f412032e3b43 Correcting typo
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 286
diff changeset
3316 // it is of no use to store DataBlockResponses, you never want to
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3317 // retrieve them directly anyway
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3318 if (!(res instanceof DataBlockResponse))
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3319 responses.add(res);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3320
701
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3321 // We have already advanced 'in' to the next line in the response
f89882b07614 Fix a problem with PREPARE INSERT
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 700
diff changeset
3322 // so we're ready to start the next iteration of the loop.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3323 break;
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
3324 case INFO:
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3325 addWarning(in.getLine().substring(1), "01000");
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3326 // read the next line (can be prompt, new result, error, etc.)
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3327 // before we start the loop over
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3328 in.advance();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3329 break;
500
95d1b0a38aed Stub implementation of FILETRANSFER handling
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 499
diff changeset
3330 case FILETRANSFER:
95d1b0a38aed Stub implementation of FILETRANSFER handling
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 499
diff changeset
3331 // Consume the command
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3332 in.advance();
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3333 final String transferCommand = in.getLine();
500
95d1b0a38aed Stub implementation of FILETRANSFER handling
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 499
diff changeset
3334 // Consume the fake prompt inserted by MapiSocket.
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3335 in.advance();
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3336 // Handle the request
540
d3a96675969e Handle case where in.readLine() returns null
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 539
diff changeset
3337 if (transferCommand != null)
d3a96675969e Handle case where in.readLine() returns null
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 539
diff changeset
3338 error = handleTransfer(transferCommand);
d3a96675969e Handle case where in.readLine() returns null
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 539
diff changeset
3339 else
566
eeea18f501b3 Remove SQLStates from error messages sent upstream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 563
diff changeset
3340 error = "Protocol violation, expected transfer command, got nothing";
506
2ae90050720c Improve flushing around error responses
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 505
diff changeset
3341 // Then prepare for the next iteration
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3342 if (error != null) {
566
eeea18f501b3 Remove SQLStates from error messages sent upstream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 563
diff changeset
3343 out.writeLine(error + "\n");
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3344 error = in.discardRemainder();
506
2ae90050720c Improve flushing around error responses
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 505
diff changeset
3345 } else {
705
ba226d5d3996 Fix file transfers
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 703
diff changeset
3346 in.resetLineType();
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3347 in.advance();
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3348 }
500
95d1b0a38aed Stub implementation of FILETRANSFER handling
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 499
diff changeset
3349 break;
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3350 default:
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3351 // we have something we don't expect/understand, let's make it an error message
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3352 String msg = "M0M10!protocol violation, unexpected " + in.getLineType() + " line: " + in.getLine();
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3353 error = in.discardRemainder(msg);
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3354 break;
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
3355 case ERROR:
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3356 // read everything till the prompt (should be
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3357 // error) we don't know if we ignore some
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3358 // garbage here... but the log should reveal that
700
940e266eeccd Refactor BufferedMCLReader
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 697
diff changeset
3359 error = in.discardRemainder(in.getLine().substring(1));
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3360 break;
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3361 } // end of switch (linetype)
665
8f7d51c478df Improved implementation of methods ResultSetMetaData.getPrecision() and ResultSetMetaData.getScale().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 660
diff changeset
3362 } // end of while (linetype != LineType.PROMPT)
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3363 } // end of synchronized (server)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3364
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3365 if (error != null) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3366 SQLException ret = null;
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3367 final String[] errors = error.split("\n");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3368 for (int i = 0; i < errors.length; i++) {
295
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
3369 final SQLException newErr;
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
3370 if (errors[i].length() >= 6) {
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
3371 newErr = new SQLException(errors[i].substring(6), errors[i].substring(0, 5));
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3372 } else {
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
3373 newErr = new SQLNonTransientConnectionException(errors[i], "08000");
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
3374 }
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
3375 if (ret == null) {
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
3376 ret = newErr;
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
3377 } else {
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
3378 ret.setNextException(newErr);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3379 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3380 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3381 throw ret;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3382 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3383 } catch (SocketTimeoutException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3384 close(); // JDBC 4.1 semantics, abort()
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
3385 throw new SQLNonTransientConnectionException("connection timed out", "08M33");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3386 } catch (IOException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3387 closed = true;
144
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
3388 throw new SQLNonTransientConnectionException(e.getMessage() + " (mserver5 still alive?)", "08006");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3389 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3390 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3391 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3392 // }}}
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3393
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3394 private String handleTransfer(final String transferCommand) throws IOException {
553
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3395 if (transferCommand.startsWith("r ")) {
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3396 final String[] parts = transferCommand.split(" ", 3);
553
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3397 if (parts.length == 3) {
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3398 final long offset;
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3399 try {
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3400 offset = Long.parseLong(parts[1]);
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3401 } catch (NumberFormatException e) {
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3402 return e.toString();
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3403 }
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3404 return handleUpload(parts[2], true, offset);
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3405 }
503
7e3987c16cde Succesful file uploading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 502
diff changeset
3406 } else if (transferCommand.startsWith("rb ")) {
7e3987c16cde Succesful file uploading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 502
diff changeset
3407 return handleUpload(transferCommand.substring(3), false, 0);
505
8a014286dac2 Add stub code for downloading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 504
diff changeset
3408 } else if (transferCommand.startsWith("w ")) {
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3409 return handleDownload(transferCommand.substring(2), true);
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3410 } else if (transferCommand.startsWith("wb ")) {
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3411 return handleDownload(transferCommand.substring(3), false);
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3412 }
553
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3413 return "JDBC does not support this file transfer yet: " + transferCommand;
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3414 }
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3415
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3416 private String handleUpload(final String path, final boolean textMode, final long offset) throws IOException {
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3417 if (uploadHandler == null) {
505
8a014286dac2 Add stub code for downloading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 504
diff changeset
3418 return "No file upload handler has been registered with the JDBC driver";
503
7e3987c16cde Succesful file uploading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 502
diff changeset
3419 }
7e3987c16cde Succesful file uploading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 502
diff changeset
3420
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3421 final long linesToSkip = offset >= 1 ? offset - 1 : 0;
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3422 final Upload handle = new Upload(server, uploadHandler::uploadCancelled, textMode);
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3423 final boolean wasFaking = server.setInsertFakePrompts(false);
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3424 try {
551
5ce6a942aff3 Last minute API fix: 'int offset' -> 'long linesToSkip'
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 546
diff changeset
3425 uploadHandler.handleUpload(handle, path, textMode, linesToSkip);
503
7e3987c16cde Succesful file uploading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 502
diff changeset
3426 if (!handle.hasBeenUsed()) {
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3427 throw new IOException("Call to " + uploadHandler.getClass().getCanonicalName() + ".handleUpload for path '" + path + "' sent neither data nor an error message");
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3428 }
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3429 } finally {
503
7e3987c16cde Succesful file uploading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 502
diff changeset
3430 handle.close();
511
bd860e850fe1 rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 510
diff changeset
3431 server.setInsertFakePrompts(wasFaking);
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3432 }
503
7e3987c16cde Succesful file uploading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 502
diff changeset
3433 return handle.getError();
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3434 }
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3435
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3436 private String handleDownload(final String path, final boolean textMode) throws IOException {
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3437 if (downloadHandler == null) {
505
8a014286dac2 Add stub code for downloading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 504
diff changeset
3438 return "No file download handler has been registered with the JDBC driver";
8a014286dac2 Add stub code for downloading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 504
diff changeset
3439 }
8a014286dac2 Add stub code for downloading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 504
diff changeset
3440
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3441 final Download handle = new Download(server, textMode);
546
eb7ecfbb48f2 Never forget to close the download handle
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 542
diff changeset
3442 try {
eb7ecfbb48f2 Never forget to close the download handle
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 542
diff changeset
3443 downloadHandler.handleDownload(handle, path, true);
eb7ecfbb48f2 Never forget to close the download handle
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 542
diff changeset
3444 if (!handle.hasBeenUsed()) {
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3445 handle.sendError("Call to " + downloadHandler.getClass().getSimpleName() + ".handleDownload sent neither data nor error");
546
eb7ecfbb48f2 Never forget to close the download handle
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 542
diff changeset
3446 }
eb7ecfbb48f2 Never forget to close the download handle
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 542
diff changeset
3447 } finally {
eb7ecfbb48f2 Never forget to close the download handle
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 542
diff changeset
3448 handle.close();
505
8a014286dac2 Add stub code for downloading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 504
diff changeset
3449 }
8a014286dac2 Add stub code for downloading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 504
diff changeset
3450 return handle.getError();
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3451 }
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3452
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3453 /**
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3454 * Callback for sending files for COPY INTO "table" FROM 'file-name' ON CLIENT commands
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3455 *
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3456 * To be registered with {@link MonetConnection#setUploadHandler(UploadHandler)}
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3457 *
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3458 * An example implementation can be found at ../util/FileTransferHandler.java
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3459 */
556
87feb93330a6 Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 554
diff changeset
3460 public interface UploadHandler {
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3461 /**
542
d462000fc410 Various changes suggested by Martin van Dinther
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 541
diff changeset
3462 * Called if the server sends a request to read file data.
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3463 *
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3464 * Use the given handle to receive data or send errors to the server.
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3465 *
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3466 * @param handle Handle to communicate with the server
542
d462000fc410 Various changes suggested by Martin van Dinther
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 541
diff changeset
3467 * @param name Name of the file the server would like to read. Make sure
d462000fc410 Various changes suggested by Martin van Dinther
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 541
diff changeset
3468 * to validate this before reading from the file system
559
7f10d662a788 fixup doc comment fixes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 557
diff changeset
3469 * @param textMode Whether to open the file as text or binary data.
551
5ce6a942aff3 Last minute API fix: 'int offset' -> 'long linesToSkip'
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 546
diff changeset
3470 * @param linesToSkip In text mode, number of initial lines to skip.
5ce6a942aff3 Last minute API fix: 'int offset' -> 'long linesToSkip'
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 546
diff changeset
3471 * 0 means upload everything, 1 means skip the first line, etc.
5ce6a942aff3 Last minute API fix: 'int offset' -> 'long linesToSkip'
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 546
diff changeset
3472 * Note: this is different from the OFFSET option of the COPY INTO,
5ce6a942aff3 Last minute API fix: 'int offset' -> 'long linesToSkip'
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 546
diff changeset
3473 * where both 0 and 1 mean 'upload everything'
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3474 * @throws IOException when I/O problem occurs
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3475 */
551
5ce6a942aff3 Last minute API fix: 'int offset' -> 'long linesToSkip'
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 546
diff changeset
3476 void handleUpload(Upload handle, String name, boolean textMode, long linesToSkip) throws IOException;
557
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3477
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3478 /**
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3479 * Called when the upload is cancelled halfway by the server.
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3480 *
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3481 * The default implementation does nothing.
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3482 */
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3483 default void uploadCancelled() {}
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3484 }
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3485
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3486 /**
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3487 * Callback for receiving files from COPY .. INTO 'file-name' ON CLIENT commands
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3488 *
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3489 * To be registered with {@link MonetConnection#setDownloadHandler(DownloadHandler)}
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3490 *
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3491 * An example implementation can be found at ../util/FileTransferHandler.java
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3492 */
556
87feb93330a6 Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 554
diff changeset
3493 public interface DownloadHandler {
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3494 /**
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3495 * Called if the server sends a request to write a file.
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3496 *
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3497 * Use the given handle to send data or errors to the server.
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3498 *
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3499 * @param handle Handle to communicate with the server
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3500 * @param name Name of the file the server would like to write. Make sure
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3501 * to validate this before writing to the file system
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3502 * @param textMode Whether this is text or binary data.
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3503 * @throws IOException when I/O problem occurs
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3504 */
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3505 void handleDownload(Download handle, String name, boolean textMode) throws IOException;
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3506 }
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3507
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3508 /**
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3509 * Handle passed to {@link UploadHandler} to allow communication with the server
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3510 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3511 public static class Upload {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3512 private final MapiSocket server;
557
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3513 private final Runnable cancellationCallback;
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3514 private final boolean textMode;
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3515 private PrintStream print = null;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3516 private String error = null;
521
72007c4f8f8a Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 516
diff changeset
3517 private int customChunkSize = -1;
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3518
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3519 Upload(MapiSocket server, Runnable cancellationCallback, boolean textMode) {
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3520 this.server = server;
557
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3521 this.cancellationCallback = cancellationCallback;
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3522 this.textMode = textMode;
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3523 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3524
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3525 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3526 * Send an error message to the server
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3527 *
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3528 * The server will generally let the currently executing statement fail
562
c640075da7c9 only comment improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 559
diff changeset
3529 * with this error message. The connection will remain usable.
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3530 *
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3531 * This method can only be sent if no data has been sent to the server
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3532 * yet. After data has been sent, you can still throw an
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3533 * {@link IOException} but this will terminate the connection.
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3534 *
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3535 * @param errorMessage the error message to send
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3536 * @throws IOException when error message is null
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3537 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3538 public void sendError(final String errorMessage) throws IOException {
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3539 if (error != null) {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3540 throw new IOException("another error has already been sent: " + error);
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3541 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3542 error = errorMessage;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3543 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3544
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3545 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3546 * After every {@code chunkSize} bytes, the server gets the opportunity to
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3547 * terminate the upload.
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3548 *
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3549 * @param chunkSize size of chunk
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3550 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3551 public void setChunkSize(final int chunkSize) {
521
72007c4f8f8a Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 516
diff changeset
3552 this.customChunkSize = chunkSize;
72007c4f8f8a Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 516
diff changeset
3553 }
72007c4f8f8a Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 516
diff changeset
3554
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3555 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3556 * Get a {@link PrintStream} to write data to.
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3557 *
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3558 * For text mode uploads, the data MUST be validly UTF-8 encoded.
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3559 *
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3560 * @return PrintStream a PrintStream
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3561 * @throws IOException when error message is null or I/O problem occurs
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3562 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3563 public PrintStream getStream() throws IOException {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3564 if (error != null) {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3565 throw new IOException("Cannot send data after an error has been sent");
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3566 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3567 if (print == null) {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3568 try {
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3569 final MapiSocket.UploadStream up = customChunkSize >= 0 ? server.uploadStream(customChunkSize) : server.uploadStream();
557
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3570 up.setCancellationCallback(cancellationCallback);
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3571 print = new PrintStream(textMode ? new StripCrLfStream(up) : up, false, "UTF-8");
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3572 up.write('\n');
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3573 } catch (UnsupportedEncodingException e) {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3574 throw new RuntimeException("The system is guaranteed to support the UTF-8 encoding but apparently it doesn't", e);
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3575 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3576 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3577 return print;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3578 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3579
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3580 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
3581 * Tell whether data or an error has been sent.
554
9fa67487f38a Doc comment fixes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 553
diff changeset
3582 * @return true if data or an error has been sent.
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3583 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3584 public boolean hasBeenUsed() {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3585 return print != null || error != null;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3586 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3587
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3588 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
3589 * Get the error string.
554
9fa67487f38a Doc comment fixes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 553
diff changeset
3590 * @return the error that was sent, if any
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3591 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3592 public String getError() {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3593 return error;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3594 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3595
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3596 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3597 * Read from the given input stream and write it to the server.
562
c640075da7c9 only comment improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 559
diff changeset
3598 *
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3599 * For text mode uploads, the data MUST be validly UTF-8 encoded.
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3600 *
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3601 * @param inputStream stream to read from
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3602 * @throws IOException when I/O problem occurs
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3603 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3604 public void uploadFrom(final InputStream inputStream) throws IOException {
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3605 final OutputStream s = getStream();
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3606 final byte[] buffer = new byte[64 * 1024];
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3607 while (true) {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3608 int nread = inputStream.read(buffer);
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3609 if (nread < 0) {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3610 break;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3611 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3612 s.write(buffer, 0, nread);
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3613 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3614 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3615
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3616 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3617 * Read data from the given buffered reader and send it to the server
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3618 *
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3619 * @param reader buffered reader to read from
551
5ce6a942aff3 Last minute API fix: 'int offset' -> 'long linesToSkip'
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 546
diff changeset
3620 * @param linesToSkip start uploading at line {@code offset}. Value 0 and 1
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3621 * both mean upload the whole file, value 2 means skip the first line, etc.
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3622 * @throws IOException when I/O problem occurs
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3623 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3624 public void uploadFrom(final BufferedReader reader, final long linesToSkip) throws IOException {
551
5ce6a942aff3 Last minute API fix: 'int offset' -> 'long linesToSkip'
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 546
diff changeset
3625 for (int i = 0; i < linesToSkip; i++) {
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3626 String line = reader.readLine();
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3627 if (line == null) {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3628 return;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3629 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3630 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3631
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3632 uploadFrom(reader);
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3633 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3634
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3635 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3636 * Read data from the given buffered reader and send it to the server
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3637 *
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3638 * @param reader reader to read from
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3639 * @throws IOException when ...
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3640 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3641 public void uploadFrom(final Reader reader) throws IOException {
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3642 final OutputStream s = getStream();
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3643 final OutputStreamWriter writer = new OutputStreamWriter(s, StandardCharsets.UTF_8);
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3644 final char[] buffer = new char[64 * 1024];
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3645 while (true) {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3646 int nread = reader.read(buffer, 0, buffer.length);
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3647 if (nread < 0) {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3648 break;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3649 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3650 writer.write(buffer, 0, nread);
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3651 }
617
15eb17b911a5 Only close the writer after the loop has finished
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 616
diff changeset
3652 writer.close();
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3653 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3654
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3655 /**
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3656 * Close opened {@link PrintStream}.
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3657 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3658 public void close() {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3659 if (print != null) {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3660 print.close();
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3661 print = null;
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3662 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3663 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3664 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3665
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3666 /**
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3667 * Handle passed to {@link DownloadHandler} to allow communication with the server
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3668 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3669 public static class Download {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3670 private final MapiSocket server;
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3671 private boolean prependCr;
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3672 private MapiSocket.DownloadStream stream = null;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3673 private String error = null;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3674
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3675 Download(MapiSocket server, boolean textMode) {
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3676 this.server = server;
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3677 prependCr = false;
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3678 if (textMode) {
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3679 setLineSeparator(System.lineSeparator());
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3680 }
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3681 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3682
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3683 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3684 * Send an error message to the server
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3685 *
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3686 * The server will generally let the currently executing statement fail
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3687 * with this error message. The connection will remain usable.
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3688 *
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3689 * This method can only be sent if no data has been received from the server
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3690 * yet. After data has been received, you can still throw an
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3691 * {@link IOException} but this will terminate the connection.
562
c640075da7c9 only comment improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 559
diff changeset
3692 *
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3693 * Note: as of MonetDB version Jul2021 the server always terminates the connection
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3694 * when this error is used. This will probably change in the future.
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3695 *
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3696 * @param errorMessage the error message to send
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3697 * @throws IOException when error message is null
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3698 */
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3699 public void sendError(final String errorMessage) throws IOException {
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3700 if (error != null) {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3701 throw new IOException("another error has already been sent: " + error);
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3702 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3703 error = errorMessage;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3704 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3705
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3706 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3707 * Get an {@link InputStream} to read data from.
562
c640075da7c9 only comment improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 559
diff changeset
3708 *
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3709 * Textual data is UTF-8 encoded. If the download is in text mode, line endings
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3710 * are converted according to {@link java.lang.System#lineSeparator()}.
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3711 * This can be overridden with {@link Download#setLineSeparator(String)}.
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3712 *
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3713 * @return InputStream the stream to read from
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3714 * @throws IOException when error message exist or I/O problem occurs
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3715 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3716 public InputStream getStream() throws IOException {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3717 if (error != null) {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3718 throw new IOException("cannot receive data after error has been sent");
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3719 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3720 if (stream == null) {
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3721 stream = server.downloadStream(prependCr);
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3722 server.getOutputStream().flush();
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3723 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3724 return stream;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3725 }
515
7bbcff2c775b Also implement downloadTo(), and use it in FileTransferHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 514
diff changeset
3726
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3727 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3728 * Write the data from the server to the given {@link OutputStream}.
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3729 *
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3730 * @param stream the OutputStream to write to
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3731 * @throws IOException when cannot read from InputStream or write to OutputStream
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3732 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3733 public void downloadTo(final OutputStream stream) throws IOException {
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3734 final InputStream s = getStream();
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3735 final byte[] buffer = new byte[65536];
515
7bbcff2c775b Also implement downloadTo(), and use it in FileTransferHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 514
diff changeset
3736 while (true) {
7bbcff2c775b Also implement downloadTo(), and use it in FileTransferHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 514
diff changeset
3737 int nread = s.read(buffer);
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3738 if (nread < 0) {
515
7bbcff2c775b Also implement downloadTo(), and use it in FileTransferHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 514
diff changeset
3739 break;
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3740 }
515
7bbcff2c775b Also implement downloadTo(), and use it in FileTransferHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 514
diff changeset
3741 stream.write(buffer, 0, nread);
7bbcff2c775b Also implement downloadTo(), and use it in FileTransferHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 514
diff changeset
3742 }
7bbcff2c775b Also implement downloadTo(), and use it in FileTransferHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 514
diff changeset
3743 }
7bbcff2c775b Also implement downloadTo(), and use it in FileTransferHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 514
diff changeset
3744
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3745 /**
579
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3746 * Write the textual data from the server to the given {@link Writer}
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3747 *
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3748 * @param writer to write to
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3749 * @throws IOException when cannot read from InputStreamReader or write to Writer
579
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3750 */
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3751 public void downloadTo(final Writer writer) throws IOException {
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3752 final InputStream s = getStream();
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3753 final InputStreamReader r = new InputStreamReader(s, StandardCharsets.UTF_8);
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3754 final char[] buffer = new char[65536];
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3755 while (true) {
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3756 final int nread = r.read(buffer);
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3757 if (nread < 0) {
579
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3758 break;
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3759 }
579
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3760 writer.write(buffer, 0, nread);
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3761 }
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3762 }
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3763
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3764 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
3765 * Tell whether data has been received or an error has been sent.
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3766 * @return true if data has been received or an error has been sent.
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3767 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3768 public boolean hasBeenUsed() {
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3769 return stream != null || error != null;
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3770 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3771
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3772 /**
709
bdeabbd46ec6 Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 708
diff changeset
3773 * Get the error string.
554
9fa67487f38a Doc comment fixes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 553
diff changeset
3774 * @return the error that was sent, if any
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3775 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3776 public String getError() {
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3777 return error;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3778 }
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3779
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3780 /**
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3781 * Close opened stream.
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3782 */
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3783 public void close() {
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3784 if (stream != null) {
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3785 try {
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3786 stream.close();
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3787 stream = null;
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3788 } catch (IOException e) {
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3789 /* ignore close error */
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3790 }
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3791 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3792 }
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3793
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3794 /**
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3795 * Set the line endings used in the stream returned by {@link Download#getStream()}
626
06d69b82d409 Resolve javadoc error and warnings :
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 623
diff changeset
3796 *
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3797 * @param sep separator to use
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3798 * @throws IllegalArgumentException if sep is neither "\n" nor "\r\n"
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3799 */
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3800 public void setLineSeparator(final String sep) {
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3801 if ("\n".equals(sep)) {
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3802 prependCr = false;
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3803 } else if ("\r\n".equals(sep)) {
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3804 prependCr = true;
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3805 } else {
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3806 throw new IllegalArgumentException("sep must be \\n or \\r\\n");
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3807 }
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3808 }
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3809 }
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3810
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3811 public static class StripCrLfStream extends FilterOutputStream {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3812 private boolean crPending = false;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3813
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3814 public StripCrLfStream(OutputStream out) {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3815 super(out);
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3816 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3817
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3818 public boolean pending() {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3819 return this.crPending;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3820 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3821
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3822 @Override
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3823 public void write(final int b) throws IOException {
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3824 if (crPending && b != '\n') {
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3825 out.write('\r');
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3826 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3827 if (b != '\r') {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3828 out.write(b);
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3829 crPending = false;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3830 } else {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3831 crPending = true;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3832 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3833 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3834
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3835 @Override
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3836 public void write(final byte[] b) throws IOException {
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3837 this.write(b, 0, b.length);
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3838 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3839
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3840 @Override
620
5ab170ddc66a Some small improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 617
diff changeset
3841 public void write(final byte[] b, int off, int len) throws IOException {
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3842 if (len == 0) {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3843 return;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3844 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3845 if (crPending && b[0] != '\n') {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3846 out.write('\r');
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3847 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3848
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3849 // deal with final \r up front
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3850 if (b[len - 1] == '\r') {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3851 crPending = true;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3852 len -= 1;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3853 } else {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3854 crPending = false;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3855 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3856
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3857 for (int i = off; i < off + len - 1; i++) {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3858 if (b[i] == '\r' && b[i + 1] == '\n') {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3859 int chunk = i - off;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3860 out.write(b, off, chunk);
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3861 // chunk + 1 because we want to skip the \r
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3862 len -= chunk + 1;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3863 off += chunk + 1;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3864 // we don't have to look at the \n because we know it's no \r.
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3865 i++;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3866 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3867 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3868
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3869 // write the remainder
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3870 out.write(b, off, len);
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3871 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3872
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3873 @Override
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3874 public void flush() throws IOException {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3875 // we cannot flush our pending CR but we can ask our downstream to flush what we have sent them so far
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3876 out.flush();
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3877 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3878
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3879 @Override
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3880 public void close() throws IOException {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3881 if (crPending) {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3882 out.write('\r');
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3883 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3884 crPending = false;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3885 super.close();
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3886 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3887 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3888 }