annotate src/main/java/org/monetdb/jdbc/MonetConnection.java @ 616:65641a7cea31

Implement line ending conversion for downloads MonetConnection.Download#getStream returns an InputStream which converts line endings when in text mode. The default line ending is the platform line ending but that can be changed. Setting it to \n can be a useful optimization if you don't need the \r's anyway.
author Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
date Wed, 19 Jan 2022 14:58:01 +0100 (2022-01-19)
parents 9397c0b487f8
children 15eb17b911a5
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 /*
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2 * 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
3 * 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
4 * 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
5 *
610
6aa38e8c0f2d Updated Copyright year.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 579
diff changeset
6 * Copyright 1997 - July 2008 CWI, August 2008 - 2022 MonetDB B.V.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
7 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
8
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
9 package org.monetdb.jdbc;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
10
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
11 import java.io.*;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
12 import java.net.SocketException;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
13 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
14 import java.nio.charset.StandardCharsets;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
15 import java.sql.CallableStatement;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
16 import java.sql.Connection;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
17 import java.sql.DatabaseMetaData;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
18 import java.sql.PreparedStatement;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
19 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
20 import java.sql.SQLClientInfoException;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
21 import java.sql.SQLException;
266
eefa7f625673 Resolve javadoc errors:
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 262
diff changeset
22 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
23 import java.sql.SQLNonTransientConnectionException;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
24 import java.sql.SQLWarning;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
25 import java.sql.Savepoint;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
26 import java.sql.Statement;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
27 import java.util.ArrayList;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
28 import java.util.Calendar;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
29 import java.util.HashMap;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
30 import java.util.Map;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
31 import java.util.Map.Entry;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
32 import java.util.Properties;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
33 import java.util.WeakHashMap;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
34 import java.util.concurrent.Executor;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
35
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
36 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
37 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
38 import org.monetdb.mcl.io.LineType;
422
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
39 import org.monetdb.mcl.net.HandshakeOptions;
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
40 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
41 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
42 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
43 import org.monetdb.mcl.parser.StartOfHeaderParser;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
44
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
45 /**
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
46 *<pre>
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
47 * 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
48 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
49 * 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
50 * 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
51 * 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
52 * 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
53 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
54 * 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
55 * 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
56 * 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
57 * 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
58 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
59 * 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
60 * 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
61 * 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
62 * 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
63 * 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
64 *
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
65 * 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
66 * 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
67 *</pre>
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
68 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
69 * @author Fabian Groffen
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
70 * @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
71 * @version 1.7
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
72 */
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
73 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
74 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
75 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
76 {
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
77 /** the successful processed input properties */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
78 private final Properties conn_props = new Properties();
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
79
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
80 /** The hostname to connect to */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
81 private final String hostname;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
82 /** 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
83 private int port;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
84 /** The database to use (currently not used) */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
85 private final String database;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
86 /** The username to use when authenticating */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
87 private final String username;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
88 /** The password to use when authenticating */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
89 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
90
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
91 /** A connection to mserver5 using a TCP socket */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
92 private final MapiSocket server;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
93 /** The Reader from the server */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
94 private final BufferedMCLReader in;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
95 /** The Writer to the server */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
96 private final BufferedMCLWriter out;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
97
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
98 /** 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
99 private final StartOfHeaderParser sohp = new StartOfHeaderParser();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
100
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
101 /** 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
102 private boolean closed;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
103
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
104 /** Whether this Connection is in autocommit mode */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
105 private boolean autoCommit = true;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
106
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
107 /** 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
108 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
109
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
110 /** 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
111 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
112 private static final long serialVersionUID = 1L;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
113 {
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
114 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
115 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
116 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
117 };
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
118
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
119 // 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
120 // 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
121 /** 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
122 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
123
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
124 /** 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
125 private int curReplySize = 100; // server default
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
126
45
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 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
128 // 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
129 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
130
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
131 /** 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
132 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
133
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
134 /** the SQL 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_SQL = 0;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
136 /** 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
137 private static final int LANG_MAL = 3;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
138 /** an unknown language */
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
139 private static final int LANG_UNKNOWN = -1;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
140 /** The language which is used */
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
141 private final int lang;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
142
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
143 /** 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
144 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
145 /** 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
146 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
147
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
148 /** The last set query timeout on the server as used by Statement, PreparedStatement and CallableStatement */
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
149 protected int lastSetQueryTimeout; // 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
150
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
151 /** 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
152 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
153
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
154 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
155 * 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
156 * 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
157 * 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
158 * createStatement() call. This constructor is only accessible to
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
159 * classes from the jdbc package.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
160 *
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
161 * @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
162 * @throws SQLException if a database error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
163 * @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
164 */
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
165 MonetConnection(final Properties props)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
166 throws SQLException, IllegalArgumentException
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
167 {
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
168 // 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
169 // get supported property values from the props argument.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
170 // When a value is found add it to the internal conn_props list for use by getClientInfo().
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 if (this.hostname != null)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
173 conn_props.setProperty("host", this.hostname);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
174
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
175 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
176 if (port_prop != null) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
177 try {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
178 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
179 } catch (NumberFormatException e) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
180 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
181 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
182 conn_props.setProperty("port", Integer.toString(this.port));
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
183 }
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
184
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
185 this.database = props.getProperty("database");
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
186 if (this.database != null)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
187 conn_props.setProperty("database", this.database);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
188
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
189 this.username = props.getProperty("user");
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
190 if (this.username != null)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
191 conn_props.setProperty("user", this.username);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
192
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
193 this.password = props.getProperty("password");
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
194 if (this.password != null)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
195 conn_props.setProperty("password", this.password);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
196
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
197 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
198 if (language != null)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
199 conn_props.setProperty("language", language);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
200
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
201 boolean debug = false;
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
202 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
203 if (debug_prop != null) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
204 debug = Boolean.parseBoolean(debug_prop);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
205 conn_props.setProperty("debug", Boolean.toString(debug));
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
206 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
207
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
208 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
209 if (hash != null)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
210 conn_props.setProperty("hash", hash);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
211
423
de2ef68b672f Allow to set fetchsize from the connection url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 422
diff changeset
212 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
213 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
214 try {
0b808a4d4f1f Catch and warn about invalid fetch sizes.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 425
diff changeset
215 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
216 if (fetchsize > 0 || fetchsize == -1) {
428
0b808a4d4f1f Catch and warn about invalid fetch sizes.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 425
diff changeset
217 this.defaultFetchSize = fetchsize;
0b808a4d4f1f Catch and warn about invalid fetch sizes.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 425
diff changeset
218 conn_props.setProperty("fetchsize", fetchsize_prop);
0b808a4d4f1f Catch and warn about invalid fetch sizes.
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 425
diff changeset
219 } else {
433
b31eaa9e958f fetchsize is allowed to be -1
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 432
diff changeset
220 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
221 }
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
222 } 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
223 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
224 }
de2ef68b672f Allow to set fetchsize from the connection url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 422
diff changeset
225 }
de2ef68b672f Allow to set fetchsize from the connection url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 422
diff changeset
226
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
227 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
228 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
229 treatBlobAsVarBinary = Boolean.parseBoolean(treatBlobAsVarBinary_prop);
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
230 conn_props.setProperty("treat_blob_as_binary", Boolean.toString(treatBlobAsVarBinary));
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
231 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
232 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
233 }
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
234
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
235 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
236 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
237 treatClobAsVarChar = Boolean.parseBoolean(treatClobAsVarChar_prop);
8700d9ef2ace Added possibility via a connection property to let the JDBC driver
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 167
diff changeset
238 conn_props.setProperty("treat_clob_as_varchar", Boolean.toString(treatClobAsVarChar));
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
239 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
240 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
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 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
244 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
245 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
246 try {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
247 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
248 if (sockTimeout < 0) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
249 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
250 sockTimeout = 0;
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
251 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
252 } catch (NumberFormatException e) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
253 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
254 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
255 conn_props.setProperty("so_timeout", Integer.toString(sockTimeout));
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
256 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
257
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
258 // check mandatory input arguments
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
259 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
260 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
261 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
262 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
263 + ". 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
264 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
265 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
266 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
267 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
268 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
269 // 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
270 language = "sql";
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
271 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
272 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
273
429
e4e104f8146c Add fetchsize to the list of valid client props
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 428
diff changeset
274 // warn about unrecognized settings
e4e104f8146c Add fetchsize to the list of valid client props
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 428
diff changeset
275 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
276 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
277 }
e4e104f8146c Add fetchsize to the list of valid client props
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 428
diff changeset
278
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
279 server = new MapiSocket();
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
280 if (hash != null)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
281 server.setHash(hash);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
282 if (database != null)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
283 server.setDatabase(database);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
284 server.setLanguage(language);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
285
422
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
286 final Calendar cal = Calendar.getInstance();
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
287 int offsetMillis = cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET);
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
288 int offsetSeconds = offsetMillis / 1000;
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
289 final HandshakeOptions handshakeOptions = new HandshakeOptions();
422
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
290 handshakeOptions.setTimeZone(offsetSeconds);
423
de2ef68b672f Allow to set fetchsize from the connection url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 422
diff changeset
291 handshakeOptions.setReplySize(defaultFetchSize);
422
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
292 server.setHandshakeOptions(handshakeOptions);
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
293
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
294 // 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
295 if (debug) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
296 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
297 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
298 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
299
25
5ec116ba7d71 When single character use faster version of indexOf(<char>)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 8
diff changeset
300 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
301 if (ext < 0)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
302 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
303 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
304 final String suf = fname.substring(ext);
0
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 for (int i = 1; f.exists(); i++) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
307 f = new File(pre + "-" + i + suf);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
308 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
309
278
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
310 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
311 } 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
312 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
313 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
314 }
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 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
317 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
318 for (String warning : warnings) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
319 addWarning(warning, "01M02");
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
320 }
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
321
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
322 // 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
323 // so_timeout calls
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
324 server.setSoTimeout(sockTimeout);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
325
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
326 in = server.getReader();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
327 out = server.getWriter();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
328
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 error = in.waitForPrompt();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
330 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
331 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
332 } 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
333 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
334 } 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
335 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
336 } 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
337 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
338 } 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
339 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
340 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
341 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
342 sqle.setNextException(new SQLNonTransientConnectionException(connex[1], "08001"));
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
343 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
344 throw sqle;
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
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
347 // 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
348 // language used and language specific query templates
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
349 if ("sql".equals(language)) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
350 lang = LANG_SQL;
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
351
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
352 queryTempl[0] = "s"; // pre
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
353 queryTempl[1] = "\n;"; // post
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
354 queryTempl[2] = "\n;\n"; // separator
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
355
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
356 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
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] = "\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
359 } 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
360 lang = LANG_MAL;
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
361
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
362 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
363 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
364 queryTempl[2] = ";\n"; // separator
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
365
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
366 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
367 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
368 //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
369 } else {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
370 lang = LANG_UNKNOWN;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
371 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
372
422
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
373 if (!handshakeOptions.mustSendReplySize()) {
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
374 // Initially, it had to be sent. If it no more needs to be sent now,
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
375 // it must have been sent during the auth challenge/response.
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
376 // Record the value it was set to.
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
377 this.curReplySize = handshakeOptions.getReplySize();
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
378 }
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
379
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
380 // the following initialisers are only valid when the language is SQL...
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
381 if (lang == LANG_SQL) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
382 // enable auto commit
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
383 setAutoCommit(true);
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
384
422
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
385 // set our time zone on the server, if we haven't already
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
386 if (handshakeOptions.mustSendTimeZone()) {
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
387 final StringBuilder tz = new StringBuilder(64);
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
388 tz.append("SET TIME ZONE INTERVAL '");
422
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
389 int offsetMinutes = handshakeOptions.getTimeZone() / 60;
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
390 if (offsetMinutes < 0) {
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
391 tz.append('-');
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
392 offsetMinutes = -offsetMinutes; // make it positive
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
393 } else {
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
394 tz.append('+');
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
395 }
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
396 int offsetHours = offsetMinutes / 60;
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
397 if (offsetHours < 10)
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
398 tz.append('0');
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
399 tz.append(offsetHours).append(':');
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
400 offsetMinutes -= offsetHours * 60;
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
401 if (offsetMinutes < 10)
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
402 tz.append('0');
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
403 tz.append(offsetMinutes).append("' HOUR TO MINUTE");
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
404 sendIndependentCommand(tz.toString());
422
8368cbc670bf Send reply size and time zone during initial handshake
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 416
diff changeset
405 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
406 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
407
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
408 // 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
409 closed = false;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
410 }
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 //== methods of interface Connection
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
413
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
414 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
415 * 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
416 * 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
417 * new warning is reported for this Connection object.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
418 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
419 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
420 public void clearWarnings() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
421 warnings = null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
422 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
423
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
424 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
425 * 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
426 * 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
427 * 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
428 * 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
429 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
430 * 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
431 * closed is a no-op.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
432 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
433 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
434 public void close() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
435 synchronized (server) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
436 for (Statement st : statements.keySet()) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
437 try {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
438 st.close();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
439 } catch (SQLException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
440 // better luck next time!
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 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
443 // close the socket
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
444 server.close();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
445 // report ourselves as closed
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
446 closed = true;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
447 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
448 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
449
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
450 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
451 * 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
452 * 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
453 * 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
454 * auto-commit mode has been disabled.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
455 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
456 * @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
457 * Connection object is in auto-commit mode
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
458 * @see #setAutoCommit(boolean)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
459 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
460 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
461 public void commit() throws SQLException {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
462 // 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
463 // 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
464 sendTransactionCommand("COMMIT");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
465 }
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 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
468 * 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
469 * database. SQL statements without parameters are normally
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
470 * 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
471 * 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
472 * PreparedStatement object.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
473 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
474 * 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
475 * 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
476 * 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
477 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
478 * @return a new default Statement object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
479 * @throws SQLException if a database access error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
480 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
481 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
482 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
483 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
484 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
485
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 * 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
488 * 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
489 * 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
490 * result set type and concurrency to be overridden.
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 * @param resultSetType a result set type; one of
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
493 * ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
494 * or ResultSet.TYPE_SCROLL_SENSITIVE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
495 * @param resultSetConcurrency a concurrency type; one of
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
496 * ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
497 * @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
498 * the given type and concurrency
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
499 * @throws SQLException if a database access error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
500 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
501 @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
502 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
503 return createStatement(resultSetType, resultSetConcurrency, MonetResultSet.DEF_HOLDABILITY);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
504 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
505
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
506 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
507 * 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
508 * 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
509 * 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
510 * 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
511 * overridden.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
512 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
513 * @param resultSetType one of the following ResultSet constants:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
514 * ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
515 * or ResultSet.TYPE_SCROLL_SENSITIVE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
516 * @param resultSetConcurrency one of the following ResultSet
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
517 * constants: ResultSet.CONCUR_READ_ONLY or
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
518 * ResultSet.CONCUR_UPDATABLE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
519 * @param resultSetHoldability one of the following ResultSet
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
520 * 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
521 * ResultSet.CLOSE_CURSORS_AT_COMMIT
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
522 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
523 * @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
524 * 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
525 * @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
526 * given parameters are not ResultSet constants indicating type,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
527 * concurrency, and holdability
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
528 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
529 @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
530 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
531 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
532 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
533 // 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
534 statements.put(ret, null);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
535 return ret;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
536 } catch (IllegalArgumentException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
537 throw new SQLException(e.toString(), "M0M03");
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
538 }
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
539 // 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
540 }
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 /**
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
543 * 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
544 *
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
545 * @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
546 * @see #setAutoCommit(boolean)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
547 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
548 @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
549 public boolean getAutoCommit() {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
550 return autoCommit;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
551 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
552
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 * Retrieves this Connection object's current catalog name.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
555 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
556 * @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
557 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
558 @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
559 public String getCatalog() {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
560 // MonetDB does NOT support catalogs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
561 return null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
562 }
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
563
0
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 * Retrieves the current holdability of ResultSet objects created
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
566 * using this Connection object.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
567 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
568 * @return the holdability, one of
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
569 * ResultSet.HOLD_CURSORS_OVER_COMMIT or
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
570 * 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
571 * @see #setHoldability(int)
0
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 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
574 public int getHoldability() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
575 // 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
576 // CLOSE_CURSORS_AT_COMMIT
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
577 return ResultSet.HOLD_CURSORS_OVER_COMMIT;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
578 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
579
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
580 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
581 * Retrieves a DatabaseMetaData object that contains metadata about
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
582 * 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
583 * connection. The metadata includes information about the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
584 * 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
585 * 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
586 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
587 * @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
588 * @return a DatabaseMetaData object for this Connection object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
589 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
590 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
591 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
592 // for debug: System.out.println("calling getMetaData()");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
593 if (lang != LANG_SQL)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
594 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
595 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
596 // 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
597 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
598 }
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
599 return dbmd;
0
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
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
602 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
603 * Retrieves this Connection object's current transaction isolation
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
604 * level.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
605 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
606 * @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
607 * Connection.TRANSACTION_SERIALIZABLE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
608 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
609 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
610 public int getTransactionIsolation() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
611 return TRANSACTION_SERIALIZABLE;
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 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
615 * 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
616 * 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
617 * will be empty.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
618 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
619 * @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
620 * object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
621 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
622 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
623 public Map<String,Class<?>> getTypeMap() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
624 return typeMap;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
625 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
626
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
627 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
628 * 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
629 * 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
630 * 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
631 * 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
632 * retrieved previously.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
633 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
634 * 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
635 * 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
636 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
637 * 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
638 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
639 * @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
640 * @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
641 * called on a closed connection
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
642 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
643 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
644 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
645 checkNotClosed();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
646 // 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
647 // specification.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
648 return warnings;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
649 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
650
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 * 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
653 * 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
654 * 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
655 * 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
656 * 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
657 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
658 * 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
659 * 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
660 * 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
661 * 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
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 closed; false if it is
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
664 * still open
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
665 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
666 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
667 public boolean isClosed() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
668 return closed;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
669 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
670
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
671 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
672 * 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
673 * 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
674 * 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
675 * read-only mode.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
676 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
677 * @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
678 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
679 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
680 public boolean isReadOnly() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
681 return false;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
682 }
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 * 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
686 * 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
687 * 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
688 *
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
689 * @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
690 * @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
691 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
692 @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
693 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
694 /* 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
695 /* in future we may replace/remove the escape sequences { <escape-type> ...} before sending it to the server */
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
696 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
697 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
698
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 /**
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
700 * 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
701 * 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
702 * 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
703 *
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
704 * 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
705 * 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
706 * 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
707 * 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
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 * 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
710 * 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
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 - 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
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 * @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
716 * @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
717 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
718 @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
719 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
720 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
721 }
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
722
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
723 /**
e0f76fedafc8 Corrected implementation of Connection.prepareCall() methods. They used to return null.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 178
diff changeset
724 * 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
725 * 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
726 * 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
727 *
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
728 * @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
729 * 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
730 * @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
731 * @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
732 * @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
733 * 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
734 * @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
735 * 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
736 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
737 @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
738 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
739 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
740 }
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
741
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 /**
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 * 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
744 * 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
745 *
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
746 * @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
747 * 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
748 * @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
749 * @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
750 * @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
751 * @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
752 * @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
753 * 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
754 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
755 @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
756 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
757 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
758 {
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
759 checkNotClosed();
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
760 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
761 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
762 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
763 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
764 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
765 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
766 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
767 );
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
768 // 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
769 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
770 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
771 } 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
772 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
773 }
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
774 // 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
775 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
776
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
777 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
778 * Creates a PreparedStatement object for sending parameterized SQL
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
779 * 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
780 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
781 * 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
782 * 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
783 * 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
784 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
785 * 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
786 * statements that benefit from precompilation. If the driver
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
787 * supports precompilation, the method prepareStatement will send
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
788 * 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
789 * 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
790 * 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
791 * 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
792 * 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
793 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
794 * Result sets created using the returned PreparedStatement object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
795 * 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
796 * level of CONCUR_READ_ONLY.
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 * @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
799 * parameter placeholders
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
800 * @return a new default PreparedStatement object containing the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
801 * pre-compiled SQL statement
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
802 * @throws SQLException if a database access error occurs
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 @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
805 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
806 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
807 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
808
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
809 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
810 * Creates a PreparedStatement object that will generate ResultSet
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
811 * 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
812 * 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
813 * 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
814 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
815 * @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
816 * 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
817 * @param resultSetType a result set type; one of
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
818 * ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
819 * or ResultSet.TYPE_SCROLL_SENSITIVE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
820 * @param resultSetConcurrency a concurrency type; one of
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
821 * ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
822 * @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
823 * 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
824 * type and concurrency
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
825 * @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
826 * 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
827 * type and concurrency
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
828 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
829 @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
830 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
831 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
832 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
833
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
834 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
835 * Creates a PreparedStatement object that will generate ResultSet
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
836 * 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
837 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
838 * 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
839 * 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
840 * holdability to be overridden.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
841 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
842 * @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
843 * 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
844 * @param resultSetType one of the following ResultSet constants:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
845 * ResultSet.TYPE_FORWARD_ONLY, ResultSet.TYPE_SCROLL_INSENSITIVE,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
846 * or ResultSet.TYPE_SCROLL_SENSITIVE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
847 * @param resultSetConcurrency one of the following ResultSet
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
848 * constants: ResultSet.CONCUR_READ_ONLY or
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
849 * ResultSet.CONCUR_UPDATABLE
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
850 * @param resultSetHoldability one of the following ResultSet
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
851 * 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
852 * ResultSet.CLOSE_CURSORS_AT_COMMIT
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
853 * @return a new PreparedStatement object, containing the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
854 * 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
855 * with the given type, concurrency, and holdability
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
856 * @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
857 * given parameters are not ResultSet constants indicating type,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
858 * concurrency, and holdability
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
859 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
860 @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
861 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
862 throws SQLException
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
863 {
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
864 checkNotClosed();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
865 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
866 final PreparedStatement ret = new MonetPreparedStatement(
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
867 this,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
868 resultSetType,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
869 resultSetConcurrency,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
870 resultSetHoldability,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
871 sql
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
872 );
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
873 // 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
874 statements.put(ret, null);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
875 return ret;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
876 } catch (IllegalArgumentException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
877 throw new SQLException(e.toString(), "M0M03");
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
878 }
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
879 // 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
880 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
881
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
882 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
883 * Creates a default PreparedStatement object that has the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
884 * 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
885 * 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
886 * 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
887 * 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
888 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
889 * 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
890 * statements that benefit from precompilation. If the driver
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
891 * supports precompilation, the method prepareStatement will send
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
892 * 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
893 * 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
894 * 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
895 * 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
896 * 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
897 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
898 * Result sets created using the returned PreparedStatement object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
899 * 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
900 * level of CONCUR_READ_ONLY.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
901 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
902 * @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
903 * parameter placeholders
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
904 * @param autoGeneratedKeys a flag indicating whether auto-generated
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
905 * keys should be returned; one of
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
906 * Statement.RETURN_GENERATED_KEYS or
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
907 * Statement.NO_GENERATED_KEYS
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
908 * @return a new PreparedStatement object, containing the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
909 * 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
910 * of returning auto-generated keys
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
911 * @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
912 * given parameter is not a Statement constant indicating
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
913 * whether auto-generated keys should be returned
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
914 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
915 @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
916 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
917 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
918 autoGeneratedKeys != Statement.NO_GENERATED_KEYS)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
919 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
920
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
921 /* 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
922 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
923 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
924
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
925 /**
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 * 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
927 * 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
928 * 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
929 * 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
930 *
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 * 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
932 * 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
933 *
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 * 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
935 * 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
936 * 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
937 * 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
938 *
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
939 * 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
940 * 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
941 *
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
942 * @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
943 * @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
944 * @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
945 * 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
946 * @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
947 * @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
948 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
949 @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
950 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
951 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
952 }
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
953
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
954 /**
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 * 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
956 * 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
957 * 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
958 * 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
959 *
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 * 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
961 * 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
962 *
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 * 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
964 * 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
965 * 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
966 * 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
967 *
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
968 * 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
969 * 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
970 *
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
971 * @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
972 * @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
973 * @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
974 * 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
975 * @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
976 * @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
977 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
978 @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
979 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
980 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
981 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
982
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
983 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
984 * 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
985 * 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
986 * cause an SQLException to be thrown.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
987 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
988 * @param savepoint the Savepoint object to be removed
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
989 * @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
990 * 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
991 * transaction
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
992 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
993 @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
994 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
995 checkNotClosed();
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
996 if (!(savepoint instanceof MonetSavepoint))
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
997 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
998
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
999 final MonetSavepoint sp = (MonetSavepoint)savepoint;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1000
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1001 // 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
1002 // 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
1003 sendTransactionCommand("RELEASE SAVEPOINT " + sp.getName());
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1004 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1005
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1006 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1007 * 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
1008 * 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
1009 * 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
1010 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1011 * @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
1012 * Connection object is in auto-commit mode
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1013 * @see #setAutoCommit(boolean)
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 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1016 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
1017 checkNotClosed();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1018 // 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
1019 // 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
1020 sendTransactionCommand("ROLLBACK");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1021 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1022
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1023 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1024 * 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
1025 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1026 * 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
1027 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1028 * @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
1029 * @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
1030 * 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
1031 * object is currently in auto-commit mode
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1032 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1033 @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
1034 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
1035 checkNotClosed();
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1036 if (!(savepoint instanceof MonetSavepoint))
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1037 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
1038
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
1039 final MonetSavepoint sp = (MonetSavepoint)savepoint;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1040
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1041 // 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
1042 // 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
1043 sendTransactionCommand("ROLLBACK TO SAVEPOINT " + sp.getName());
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1044 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1045
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1046 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1047 * 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
1048 * 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
1049 * will be executed and committed as individual transactions.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1050 * 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
1051 * 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
1052 * 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
1053 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1054 * 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
1055 * 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
1056 * 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
1057 * 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
1058 * 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
1059 * 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
1060 * 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
1061 * 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
1062 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1063 * 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
1064 * transaction is committed.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1065 *
8
a27ee2cb14a0 Replace String methods equals("") and "".equals( with isEmpty()
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 0
diff changeset
1066 * @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
1067 * @throws SQLException if a database access error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1068 * @see #getAutoCommit()
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 @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
1071 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
1072 checkNotClosed();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1073 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
1074 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
1075 this.autoCommit = autoCommit;
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 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1078
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1079 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1080 * 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
1081 * 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
1082 * 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
1083 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1084 @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
1085 public void setCatalog(final String catalog) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1086 // silently ignore this request as MonetDB does not support catalogs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1087 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1088
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1089 /**
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1090 * 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
1091 * 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
1092 * 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
1093 *
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1094 * @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
1095 * 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
1096 * 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
1097 * @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
1098 * @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
1099 * @see #getHoldability()
0
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 @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
1102 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
1103 // 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
1104 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
1105 throw newSQLFeatureNotSupportedException("setHoldability(CLOSE_CURSORS_AT_COMMIT)");
0
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
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1108 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1109 * 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
1110 * 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
1111 * 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
1112 * to true here.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1113 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1114 * @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
1115 * @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
1116 * method is called during a transaction.
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 @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
1119 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
1120 if (readOnly == true)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1121 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
1122 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1123
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 * 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
1126 * returns the new Savepoint object that represents it.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1127 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1128 * @return the new Savepoint object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1129 * @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
1130 * object is currently in auto-commit mode
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1131 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1132 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1133 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
1134 return setSavepoint(null);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1135 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1136
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1137 /**
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1138 * 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
1139 * 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
1140 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1141 * @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
1142 * @return the new Savepoint object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1143 * @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
1144 * object is currently in auto-commit mode
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1145 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1146 @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
1147 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
1148 checkNotClosed();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1149 // 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
1150 final MonetSavepoint sp;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1151 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
1152 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
1153 } catch (IllegalArgumentException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1154 throw new SQLException(e.getMessage(), "M0M03");
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 // 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
1158 // 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
1159 sendTransactionCommand("SAVEPOINT " + sp.getName());
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1160 return sp;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1161 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1162
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1163 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1164 * 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
1165 * 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
1166 * 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
1167 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1168 * @param level one of the following Connection constants:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1169 * Connection.TRANSACTION_READ_UNCOMMITTED,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1170 * Connection.TRANSACTION_READ_COMMITTED,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1171 * Connection.TRANSACTION_REPEATABLE_READ, or
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1172 * Connection.TRANSACTION_SERIALIZABLE.
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 @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
1175 public void setTransactionIsolation(final int level) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1176 if (level != TRANSACTION_SERIALIZABLE) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1177 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
1178 "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
1179 "raised to TRANSACTION_SERIALIZABLE", "01M09");
0
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 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1182
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 * 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
1185 * 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
1186 * mapping of SQL structured types and distinct types.
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 * @param map the java.util.Map object to install as the replacement for
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1189 * this Connection object's default type map
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1190 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1191 @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
1192 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
1193 typeMap = map;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1194 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1195
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1196 /**
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1197 * 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
1198 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1199 * @return a String representing this Object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1200 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1201 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1202 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
1203 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
1204 + (closed ? ") disconnected" : ") connected");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1205 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1206
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1207 //== 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
1208
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 * 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
1211 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1212 * 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
1213 * 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
1214 * 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
1215 * 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
1216 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1217 * 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
1218 * 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
1219 * 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
1220 * 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
1221 * 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
1222 * 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
1223 * 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
1224 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1225 * @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
1226 * 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
1227 * 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
1228 * 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
1229 * 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
1230 * @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
1231 * @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
1232 * 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
1233 * @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
1234 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1235 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1236 @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
1237 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
1238 throw newSQLFeatureNotSupportedException("createArrayOf");
45
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
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1241 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1242 * 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
1243 * 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
1244 * 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
1245 * 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
1246 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1247 * @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
1248 * @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
1249 * 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
1250 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1251 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1252 @Override
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1253 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
1254 return new MonetClob("");
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
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1257 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1258 * 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
1259 * 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
1260 * 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
1261 * data to the Blob.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1262 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1263 * @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
1264 * @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
1265 * 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
1266 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1267 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1268 @Override
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1269 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
1270 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
1271 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1272
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1273 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1274 * 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
1275 * 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
1276 * 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
1277 * 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
1278 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1279 * @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
1280 * @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
1281 * 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
1282 * @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
1283 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1284 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1285 @Override
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1286 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
1287 throw newSQLFeatureNotSupportedException("createNClob");
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1288 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1289
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1290 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1291 * 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
1292 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1293 * @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
1294 * 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
1295 * 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
1296 * 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
1297 * @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
1298 * @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
1299 * 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
1300 * @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
1301 * 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
1302 * @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
1303 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1304 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1305 @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
1306 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
1307 throw newSQLFeatureNotSupportedException("createStruct");
45
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
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1310 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1311 * 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
1312 * 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
1313 * 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
1314 * 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
1315 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1316 * @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
1317 * @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
1318 * 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
1319 * @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
1320 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1321 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1322 @Override
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1323 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
1324 throw newSQLFeatureNotSupportedException("createSQLXML");
45
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
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1327 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1328 * 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
1329 * 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
1330 * 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
1331 * 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
1332 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1333 * 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
1334 * 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
1335 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1336 * @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
1337 * 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
1338 * 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
1339 * 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
1340 * 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
1341 * @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
1342 * @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
1343 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1344 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1345 @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
1346 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
1347 if (timeout < 0)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1348 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
1349 if (closed)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1350 return false;
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1351
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1352 // 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
1353 Statement stmt = null;
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1354 ResultSet rs = null;
167
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1355 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
1356 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
1357 try {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1358 stmt = createStatement();
167
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1359 if (stmt != null) {
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1360 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
1361 // 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
1362 stmt.setQueryTimeout(timeout);
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1363 }
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1364 rs = stmt.executeQuery("SELECT 1");
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1365 if (rs != null && rs.next()) {
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1366 isValid = true;
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1367 }
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1368 }
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1369 } 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
1370 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
1371 // 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
1372 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
1373 // 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
1374 // 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
1375 // SQLState = 25005
167
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1376 isValid = true;
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1377 }
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1378 /* 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
1379 } 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
1380 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
1381 /* 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
1382 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
1383 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
1384 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
1385 /* 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
1386 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
1387 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
1388 } 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
1389 /* 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
1390 }
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
1391 }
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1392 }
167
89e954e7acbb Correct implementation of method Connection.isValid().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 164
diff changeset
1393 return isValid;
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1394 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1395
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1396 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1397 * 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
1398 * 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
1399 * 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
1400 * 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
1401 * 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
1402 * 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
1403 * 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
1404 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1405 * @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
1406 * @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
1407 * @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
1408 * 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
1409 * 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
1410 * @since 1.6
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 @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
1413 public String getClientInfo(final String name) throws SQLException {
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1414 if (name == null || name.isEmpty())
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1415 return null;
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
1416 checkNotClosed();
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1417 return conn_props.getProperty(name);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1418 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1419
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1420 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1421 * 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
1422 * 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
1423 * 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
1424 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1425 * @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
1426 * 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
1427 * @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
1428 * 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
1429 * 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
1430 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1431 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1432 @Override
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1433 public Properties getClientInfo() 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
1434 checkNotClosed();
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1435 // return a clone of the connection properties object
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1436 return new Properties(conn_props);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1437 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1438
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1439 /**
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1440 * 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
1441 * 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
1442 * 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
1443 * for each property.
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1444 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1445 * 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
1446 * 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
1447 * 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
1448 * 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
1449 * 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
1450 * 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
1451 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1452 * 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
1453 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1454 * 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
1455 * 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
1456 * 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
1457 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1458 * 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
1459 * 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
1460 * 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
1461 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1462 * 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
1463 * 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
1464 * 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
1465 * 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
1466 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1467 * @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
1468 * @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
1469 * 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
1470 * @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
1471 * 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
1472 * 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
1473 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1474 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1475 @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
1476 public void setClientInfo(final String name, final String value) throws SQLClientInfoException {
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1477 if (name == null || name.isEmpty()) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1478 addWarning("setClientInfo: missing property name", "01M07");
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1479 return;
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 the 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
1482 if (value == null) {
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1483 if (conn_props.containsKey(name))
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1484 conn_props.remove(name);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1485 return;
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1486 }
429
e4e104f8146c Add fetchsize to the list of valid client props
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 428
diff changeset
1487 // only set value for supported property names, warn about the others
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
1488 if (checkValidProperty(name, "setClientInfo")) {
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1489 conn_props.setProperty(name, value);
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1490 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1491 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1492
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 * 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
1495 * 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
1496 * 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
1497 * 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
1498 * 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
1499 * 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
1500 * 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
1501 * 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
1502 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1503 * 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
1504 * 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
1505 * 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
1506 * 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
1507 * 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
1508 * 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
1509 *
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1510 * @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
1511 * @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
1512 * 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
1513 * 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
1514 * @since 1.6
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1515 */
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1516 @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
1517 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
1518 if (props != null) {
562dbfb2fee8 Prevent null pointer exception by checking props argument
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 45
diff changeset
1519 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
1520 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
1521 }
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1522 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1523 }
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1524
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1525 //== Java 1.7 methods (JDBC 4.1)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1526
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1527 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1528 * Sets the given schema name to access.
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 * @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
1531 * @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
1532 * 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
1533 * @since 1.7
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1534 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1535 @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
1536 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
1537 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
1538 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
1539 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
1540
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1541 Statement st = null;
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1542 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
1543 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
1544 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
1545 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
1546 // 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
1547 } 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
1548 closeResultsetStatement(null, st);
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1549 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1550 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1551
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1552 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1553 * Retrieves this Connection object's current schema name.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1554 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1555 * @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
1556 * @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
1557 * 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
1558 * @since 1.7
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1559 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1560 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1561 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
1562 checkNotClosed();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1563
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1564 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
1565 Statement st = null;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1566 ResultSet rs = null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1567 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
1568 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
1569 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
1570 rs = st.executeQuery("SELECT CURRENT_SCHEMA");
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1571 if (rs != null) {
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1572 if (rs.next())
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1573 cur_schema = rs.getString(1);
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1574 }
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1575 }
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1576 // 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
1577 } 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
1578 closeResultsetStatement(rs, st);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1579 }
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
1580 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
1581 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
1582 return cur_schema;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1583 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1584
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1585 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1586 * Terminates an open connection. Calling abort results in:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1587 * * The connection marked as closed
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1588 * * Closes any physical connection to the database
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1589 * * Releases resources used by the connection
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1590 * * 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
1591 * 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
1592 * SQLException.
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1593 * 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
1594 * 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
1595 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1596 * @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
1597 * abort
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1598 * @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
1599 * executor is null
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1600 * @throws SecurityException if a security manager exists and
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1601 * 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
1602 * @since 1.7
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1603 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1604 @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
1605 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
1606 if (closed)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1607 return;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1608 if (executor == null)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1609 throw new SQLException("executor is null", "M1M05");
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1610 // this is really the simplest thing to do, it destroys
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1611 // everything (in particular the server connection)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1612 close();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1613 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1614
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1615 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1616 * 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
1617 * 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
1618 * 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
1619 * 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
1620 * 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
1621 * 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
1622 * 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
1623 * SQLException.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1624 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1625 * @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
1626 * setNetworkTimeout
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1627 * @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
1628 * database operation to complete
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1629 * @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
1630 * 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
1631 * 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
1632 * @since 1.7
0
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 @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
1635 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
1636 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
1637 // 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
1638 // 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
1639 // throw new SQLException("executor is null", "M1M05");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1640 if (millis < 0)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1641 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
1642
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1643 try {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1644 server.setSoTimeout(millis);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1645 } 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
1646 throw new SQLNonTransientConnectionException(e.getMessage(), "08000");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1647 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1648 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1649
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1650 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1651 * 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
1652 * 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
1653 * SQLException is thrown.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1654 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1655 * @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
1656 * there is no limit
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1657 * @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
1658 * 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
1659 * @since 1.7
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1660 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1661 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1662 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
1663 checkNotClosed();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1664 try {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1665 return server.getSoTimeout();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1666 } 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
1667 throw new SQLNonTransientConnectionException(e.getMessage(), "08000");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1668 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1669 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1670
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1671 //== 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
1672
562
c640075da7c9 only comment improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 559
diff changeset
1673
c640075da7c9 only comment improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 559
diff changeset
1674 //== 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
1675
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
1676 /** 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
1677 private UploadHandler uploadHandler;
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
1678 /** 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
1679 private DownloadHandler downloadHandler;
fa2493d924c8 Small updates
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 562
diff changeset
1680
539
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1681 /**
563
fa2493d924c8 Small updates
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 562
diff changeset
1682 * 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
1683 *
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1684 * @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
1685 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
1686 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
1687 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
1688 }
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 /**
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
1691 * Returns the currently registerered {@link 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
1692 */
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
1693 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
1694 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
1695 }
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
1696
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 /**
563
fa2493d924c8 Small updates
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 562
diff changeset
1698 * 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
1699 *
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1700 * @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
1701 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
1702 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
1703 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
1704 }
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1705
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1706 /**
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
1707 * Returns the currently registerered {@link 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
1708 */
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
1709 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
1710 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
1711 }
5d524783f7b0 Move {get/set}{Down/Up}loadHander further down the file
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 535
diff changeset
1712
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
1713 /**
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
1714 * Local helper method to test whether the Connection object is 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
1715 * When closed it throws an 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
1716 */
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
1717 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
1718 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
1719 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
1720 }
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
1721
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
1722 /**
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
1723 * Utility method to call sys.setquerytimeout(int); procedure on the connected server.
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
1724 * It is called from: MonetConnection.isValid() and MonetStatement.internalExecute()
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
1725 */
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
1726 void setQueryTimeout(final int millis) 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
1727 if (millis < 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
1728 throw new SQLException("query timeout milliseconds is less than zero", "M1M05");
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
1729
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
1730 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
1731 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
1732 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
1733 final String callstmt;
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
1734 // as of release Jun2020 (11.37.7) the function sys.settimeout(bigint) is deprecated and replaced by new sys.setquerytimeout(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
1735 if ((getDatabaseMajorVersion() == 11) && (getDatabaseMinorVersion() < 37))
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
1736 callstmt = "CALL sys.\"settimeout\"(" + millis + ")";
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
1737 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
1738 callstmt = "CALL sys.\"setquerytimeout\"(" + millis + ")";
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
1739 // 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
1740 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
1741 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
1742 // 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
1743
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
1744 this.lastSetQueryTimeout = millis;
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 }
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
1746 /* 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
1747 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
1748 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
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 }
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
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 /**
194
1296dbcc4958 Resolved javadoc many errors and warnings, such as:
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 186
diff changeset
1753 * @return whether the JDBC BLOB type should be mapped to VARBINARY 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
1754 * 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
1755 * 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
1756 * It is called from: MonetResultSet and MonetPreparedStatement
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1757 */
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
1758 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
1759 return treatBlobAsVarBinary;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1760 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
1761
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
1762 /**
194
1296dbcc4958 Resolved javadoc many errors and warnings, such as:
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 186
diff changeset
1763 * @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
1764 * 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
1765 * 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
1766 * It is called from: MonetResultSet and MonetPreparedStatement
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
1767 */
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
1768 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
1769 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
1770 }
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
1771
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
1772 /**
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
1773 * @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
1774 * It is called from: getURL()in MonetDatabaseMetaData
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1775 */
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1776 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
1777 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
1778 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
1779 .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
1780 .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
1781 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
1782 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
1783 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
1784 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1785
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
1786 private boolean checkValidProperty(String name, String context) {
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
1787 if (isValidProperty(name))
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
1788 return true;
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
1789 addWarning(context + ": '" + name + "' is not a recognised property", "01M07");
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
1790 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
1791 }
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
1792
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
1793 // supported MonetDB connection properties.
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
1794 // See also MonetDatabaseMetaData.getClientInfoProperties()
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
1795 private boolean isValidProperty(String name) {
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
1796 return name.equals("host") ||
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
1797 name.equals("port") ||
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
1798 name.equals("user") ||
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
1799 name.equals("password") ||
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
1800 name.equals("language") ||
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
1801 name.equals("database") ||
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
1802 name.equals("debug") ||
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
1803 name.equals("logfile") ||
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
1804 name.equals("hash") ||
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
1805 name.equals("treat_blob_as_binary") ||
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
1806 name.equals("treat_clob_as_varchar") ||
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
1807 name.equals("so_timeout") ||
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
1808 name.equals("fetchsize"); // only supported by servers from version 11.41.1 onwards
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
1809 }
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
1810
370
2ab474af487c Add utility method to replace calls to x.replaceAll().replaceAll() in several places.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 350
diff changeset
1811
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
1812 // Internal caches for 3 static mserver environment values, so they aren't queried from mserver again and again
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
1813 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
1814 private String env_monet_version;
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
1815 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
1816
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1817 /**
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1818 * Utility method to fetch 3 mserver environment values combined in one query for efficiency.
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1819 * We currently fetch the env values of: current_user, monet_version and max_clients.
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1820 * We cache them such that we do not need to query the server again and again.
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1821 */
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1822 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
1823 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
1824 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
1825 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
1826 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
1827 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
1828 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
1829 "SELECT \"name\", \"value\" FROM \"sys\".\"env\"()" +
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1830 " WHERE \"name\" IN ('monet_version', 'max_clients')" +
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1831 " 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
1832 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
1833 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
1834 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
1835 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
1836 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
1837 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
1838 } 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
1839 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
1840 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
1841 } 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
1842 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
1843 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
1844 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
1845 } 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
1846 /* 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
1847 }
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
1848 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
1849 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
1850 }
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 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1852 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1853 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1854 /* 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
1855 } 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
1856 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
1857 }
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
1858 // for debug: System.out.println("Read: env_current_user: " + env_current_user + " env_monet_version: " + env_monet_version + " env_max_clients: " + 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
1859 }
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
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 /**
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 * @return the current User Name.
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 * It is called from: MonetDatabaseMetaData
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1864 */
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 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
1866 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
1867 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
1868 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
1869 }
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
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 /**
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
1872 * @return the maximum number of active connections possible at one time;
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
1873 * a result of zero means that there is no limit or the limit is not known
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
1874 * It is called from: MonetDatabaseMetaData
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
1875 */
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
1876 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
1877 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
1878 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
1879 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
1880 }
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
1881
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
1882 /**
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
1883 * @return the MonetDB Database Server version string.
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1884 * It is called from: MonetDatabaseMetaData
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1885 */
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1886 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
1887 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
1888 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
1889 // 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
1890 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
1891 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
1892 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
1893 }
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
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
1895 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
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 * @return the MonetDB Database Server major version number.
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
1898 * 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
1899 * It is called from: MonetDatabaseMetaData and MonetConnection
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 */
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1901 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
1902 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
1903 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
1904 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
1905 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
1906 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
1907 // 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
1908 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
1909 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
1910 } 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
1911 // 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
1912 }
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
1913 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1914 }
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
1915 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
1916 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1917
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 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
1919 /**
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1920 * @return the MonetDB Database Server minor version number.
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
1921 * 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
1922 * It is called from: MonetDatabaseMetaData and MonetConnection
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
1923 */
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1924 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
1925 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
1926 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
1927 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
1928 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
1929 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
1930 // 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
1931 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
1932 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
1933 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
1934 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
1935 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
1936 }
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
1937 } 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
1938 // 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
1939 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1940 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1941 }
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
1942 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
1943 }
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1944
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1945
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1946 // 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
1947 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
1948 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
1949 /**
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1950 * 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
1951 * 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
1952 * 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
1953 * This method is used by methods from MonetDatabaseMetaData.
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1954 */
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 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
1956 if (!queriedPrivilege_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
1957 hasPrivilege_codesTable = existsSysTable("privilege_codes");
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 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
1959 }
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 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
1961 }
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
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 // 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
1964 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
1965 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
1966 /**
e8962bdaa206 Moved utility methods and associated caches from DatabaseMetaData to Connection object.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 324
diff changeset
1967 * 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
1968 * 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
1969 * 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
1970 * This method is used by methods from MonetDatabaseMetaData.
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
1971 */
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
1972 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
1973 if (!queriedCommentsTable) {
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
1974 hasCommentsTable = existsSysTable("comments");
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
1975 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
1976 }
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
1977 return hasCommentsTable;
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
1978 }
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
1979
219
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
1980
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
1981 /**
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
1982 * Internal utility method to query the server to find out if it has a specific system table sys.<tablename>.
219
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
1983 */
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
1984 private boolean existsSysTable(final String tablename) {
219
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
1985 boolean exists = false;
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
1986 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
1987 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
1988 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
1989 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
1990 if (stmt != null) {
219
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
1991 rs = stmt.executeQuery("SELECT id FROM sys._tables WHERE name = '"
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
1992 + tablename
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
1993 + "' 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
1994 if (rs != null) {
219
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
1995 exists = rs.next(); // if a row is available it exists, else not
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
1996 }
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
1997 }
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
1998 } 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
1999 /* 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
2000 } 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
2001 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
2002 }
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
2003 // for debug: System.out.println("testTableExists(" + tablename + ") returns: " + exists);
219
4572f0694fde Improved DatabaseMetaData methods getTablePrivileges() and getColumnPrivileges() by returning also
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 215
diff changeset
2004 return exists;
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
2005 }
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
2006
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
2007 /**
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
2008 * 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
2009 * 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
2010 * (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
2011 *
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
2012 * @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
2013 * @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
2014 */
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
2015 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
2016 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
2017 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
2018 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
2019 } 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
2020 }
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
2021 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
2022 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
2023 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
2024 } 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
2025 }
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
2026 }
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
2027
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
2028 /**
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
2029 * 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
2030 * 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
2031 * 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
2032 *
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
2033 * @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
2034 * @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
2035 */
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
2036 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
2037 // 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
2038 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
2039 // 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
2040 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
2041 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
2042 } 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
2043 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
2044 }
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
2045 }
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
2046
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2047 /**
278
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2048 * 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
2049 * 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
2050 * 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
2051 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2052 * @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
2053 * @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
2054 */
278
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2055 private void sendIndependentCommand(String command) throws SQLException {
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2056 sendCommand(command, true);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2057 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2058
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2059 /**
278
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2060 * 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
2061 * 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
2062 * 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
2063 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2064 * @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
2065 * @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
2066 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2067 void sendControlCommand(String command) throws SQLException {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2068 // send X command
278
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2069 sendCommand(command, false);
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2070 }
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2071
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2072 /**
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2073 * 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
2074 * 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
2075 * 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
2076 *
1d6062d94377 Reduce duplicate code.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 271
diff changeset
2077 * @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
2078 * @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
2079 * @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
2080 */
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
2081 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
2082 synchronized (server) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2083 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
2084 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
2085 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
2086 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
2087 out.writeLine(commandTempl[0] + command + commandTempl[1]);
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
2088 final String error = in.waitForPrompt();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2089 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
2090 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
2091 } catch (SocketTimeoutException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2092 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
2093 throw new SQLNonTransientConnectionException("connection timed out", "08M33");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2094 } 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
2095 throw new SQLNonTransientConnectionException(e.getMessage(), "08000");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2096 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2097 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2098 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2099
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2100 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2101 * Adds a warning to the pile of warnings this Connection object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2102 * has. If there were no warnings (or clearWarnings was called)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2103 * this warning will be the first, otherwise this warning will get
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2104 * appended to the current warning.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2105 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2106 * @param reason the warning message
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2107 */
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
2108 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
2109 final SQLWarning warng = new SQLWarning(reason, sqlstate);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2110 if (warnings == null) {
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
2111 warnings = warng;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2112 } else {
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
2113 warnings.setNextWarning(warng);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2114 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2115 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2116
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2117 /** 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
2118 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
2119
de2ef68b672f Allow to set fetchsize from the connection url
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 422
diff changeset
2120 /** 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
2121 private int defaultFetchSize = DEF_FETCHSIZE;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2122 /** The sequence counter */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2123 private static int seqCounter = 0;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2124
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2125 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2126 * 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
2127 * 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
2128 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2129 // {{{ interface Response
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2130 interface Response {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2131 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2132 * 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
2133 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2134 * @param line the header line as String
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2135 * @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
2136 * @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
2137 * or additional lines are not allowed.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2138 */
556
87feb93330a6 Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 554
diff changeset
2139 String addLine(String line, LineType linetype);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2140
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2141 /**
288
f412032e3b43 Correcting typo
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 286
diff changeset
2142 * 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
2143 * to it.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2144 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2145 * @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
2146 */
556
87feb93330a6 Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 554
diff changeset
2147 boolean wantsMore();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2148
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2149 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2150 * 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
2151 * Response implementation.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2152 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2153 * @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
2154 * consistent or sufficient.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2155 */
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
2156 /* MvD: disabled not used/needed code
562
c640075da7c9 only comment improvements
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 559
diff changeset
2157 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
2158 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2159
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2160 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2161 * 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
2162 * necessary clean up procedures.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2163 */
556
87feb93330a6 Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 554
diff changeset
2164 void close();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2165 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2166 // }}}
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2167
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2168 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2169 * 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
2170 * 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
2171 * Response look like:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2172 * <pre>
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2173 * &amp;1 1 28 2 10
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2174 * # name, value # name
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2175 * # varchar, varchar # type
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2176 * </pre>
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2177 * there the first line consists out of<br />
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2178 * <tt>&amp;"qt" "id" "tc" "cc" "rc"</tt>.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2179 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2180 // {{{ 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
2181 final class ResultSetResponse implements Response {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2182 /** The number of columns in this result */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2183 public final int columncount;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2184 /** 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
2185 public final long tuplecount;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2186 /** The numbers of rows to retrieve per DataBlockResponse */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2187 private int cacheSize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2188 /** The table ID of this result */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2189 public final int id;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2190 /** The names of the columns in this result */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2191 private String[] name;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2192 /** The types of the columns in this result */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2193 private String[] type;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2194 /** 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
2195 private int[] columnLengths;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2196 /** The table for each column in this result */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2197 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
2198 /** 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
2199 private String[] schemaNames;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2200 /** The query sequence number */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2201 private final int seqnr;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2202 /** 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
2203 private DataBlockResponse[] resultBlocks;
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 /** Whether this Response is closed */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2206 private boolean closed;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2207
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2208 /** 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
2209 private final MonetConnection.ResponseList parent;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2210 /** 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
2211 private final boolean cacheSizeSetExplicitly;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2212 /** 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
2213 * if we close this Response */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2214 private boolean destroyOnClose;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2215 /** 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
2216 private int blockOffset;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2217
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2218 /** 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
2219 private final HeaderLineParser hlp;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2220
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
2221 /** 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
2222 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
2223 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
2224 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
2225 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
2226 private static final int LENS = 3;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2227
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2228
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2229 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2230 * Sole constructor, which requires a MonetConnection parent to
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2231 * be given.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2232 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2233 * @param id the ID of the result set
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2234 * @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
2235 * @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
2236 * @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
2237 * @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
2238 * supply new result blocks when necessary
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2239 * @param seq the query sequence number
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2240 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2241 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
2242 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
2243 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
2244 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
2245 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
2246 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
2247 final int seq)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2248 throws SQLException
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2249 {
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
2250 isSet = new boolean[4];
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2251 this.parent = parent;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2252 if (parent.cachesize == 0) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2253 /* 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
2254 * 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
2255 * 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
2256 * need to stick to our defaults. */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2257 cacheSize = MonetConnection.DEF_FETCHSIZE;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2258 cacheSizeSetExplicitly = false;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2259 } else {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2260 cacheSize = parent.cachesize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2261 cacheSizeSetExplicitly = true;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2262 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2263 /* 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
2264 * 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
2265 * 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
2266 * 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
2267 * 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
2268 * (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
2269 * 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
2270 * because it's a pseudo SQL result.) */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2271 if (rowcount > cacheSize)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2272 cacheSize = rowcount;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2273 seqnr = seq;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2274 closed = false;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2275 destroyOnClose = id > 0 && tuplecount > rowcount;
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 this.id = id;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2278 this.tuplecount = tuplecount;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2279 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
2280 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
2281
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2282 hlp = new HeaderLineParser(columncount);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2283
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
2284 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
2285 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2286
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2287 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2288 * 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
2289 * header appropriately, or passes it on to the underlying
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2290 * DataResponse.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2291 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2292 * @param tmpLine the string that contains the header
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2293 * @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
2294 * is unknown
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2295 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2296 // {{{ addLine
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2297 @Override
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
2298 public String addLine(final String tmpLine, final LineType linetype) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2299 if (isSet[LENS] && isSet[TYPES] && isSet[TABLES] && isSet[NAMES]) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2300 return resultBlocks[0].addLine(tmpLine, linetype);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2301 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2302
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
2303 if (linetype != LineType.HEADER)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2304 return "header expected, got: " + tmpLine;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2305
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2306 // 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
2307 try {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2308 switch (hlp.parse(tmpLine)) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2309 case HeaderLineParser.NAME:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2310 name = hlp.values.clone();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2311 isSet[NAMES] = true;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2312 break;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2313 case HeaderLineParser.LENGTH:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2314 columnLengths = hlp.intValues.clone();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2315 isSet[LENS] = true;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2316 break;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2317 case HeaderLineParser.TYPE:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2318 type = hlp.values.clone();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2319 isSet[TYPES] = true;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2320 break;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2321 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
2322 {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2323 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
2324 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
2325 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
2326 // 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
2327 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
2328 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
2329 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
2330 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
2331 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
2332 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
2333 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
2334 } 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
2335 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
2336 }
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
2337 } 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
2338 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
2339 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
2340 }
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
2341 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2342 isSet[TABLES] = true;
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
2343 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2344 break;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2345 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2346 } catch (MCLParseException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2347 return e.getMessage();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2348 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2349
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2350 // all is well
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2351 return null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2352 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2353 // }}}
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 * Returns whether this ResultSetResponse needs more lines.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2357 * 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
2358 * first DataBlockResponse reports to want more.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2359 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2360 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2361 public boolean wantsMore() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2362 if (isSet[LENS] && isSet[TYPES] && isSet[TABLES] && isSet[NAMES]) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2363 return resultBlocks[0].wantsMore();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2364 } else {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2365 return true;
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 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2368
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2369 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2370 * 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
2371 * ',\t' separators.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2372 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2373 * @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
2374 * @param start where the relevant data starts
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2375 * @param stop where the relevant data stops
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2376 * @return an array of Strings
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2377 */
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
2378 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
2379 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
2380 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
2381
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2382 for (int i = start; i < stop; i++) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2383 if (chrLine[i] == '\t' && chrLine[i - 1] == ',') {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2384 values[elem++] =
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2385 new String(chrLine, start, i - 1 - start);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2386 start = i + 1;
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 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2389 // at the left over part
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2390 values[elem++] = new String(chrLine, start, stop - start);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2391
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2392 return values;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2393 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2394
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2395 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2396 * Adds the given DataBlockResponse to this ResultSetResponse at
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2397 * the given block position.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2398 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2399 * @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
2400 * @param rr the DataBlockResponse to add
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2401 */
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
2402 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
2403 final int block = (offset - blockOffset) / cacheSize;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2404 resultBlocks[block] = rr;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2405 }
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 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2408 * 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
2409 * 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
2410 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2411 * @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
2412 * sufficient to be consistant
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2413 */
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
2414 /* MvD: disabled not used/needed code
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2415 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2416 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
2417 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
2418 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
2419 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
2420 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
2421 if (!isSet[LENS]) err.append("column width 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
2422 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
2423 throw new SQLException(err.toString(), "M0M10");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2424 }
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
2425 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2426
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2427 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2428 * Returns the names of the columns
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2429 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2430 * @return the names of the columns
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2431 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2432 String[] getNames() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2433 return name;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2434 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2435
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2436 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2437 * Returns the types of the columns
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2438 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2439 * @return the types of the columns
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2440 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2441 String[] getTypes() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2442 return type;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2443 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2444
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2445 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2446 * Returns the tables of the columns
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2447 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2448 * @return the tables of the columns
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2449 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2450 String[] getTableNames() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2451 return tableNames;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2452 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2453
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2454 /**
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
2455 * Returns the schemas of the columns
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 *
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 * @return the schemas of the columns
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 */
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 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
2460 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
2461 }
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
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 /**
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2464 * Returns the lengths of the columns
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2465 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2466 * @return the lengths of the columns
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2467 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2468 int[] getColumnLengths() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2469 return columnLengths;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2470 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2471
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2472 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2473 * Returns the cache size used within this Response
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2474 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2475 * @return the cache size
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2476 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2477 int getCacheSize() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2478 return cacheSize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2479 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2480
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2481 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2482 * Returns the current block offset
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2483 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2484 * @return the current block offset
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2485 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2486 int getBlockOffset() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2487 return blockOffset;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2488 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2489
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2490 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2491 * Returns the ResultSet type, FORWARD_ONLY or not.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2492 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2493 * @return the ResultSet type
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2494 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2495 int getRSType() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2496 return parent.rstype;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2497 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2498
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2499 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2500 * Returns the concurrency of the ResultSet.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2501 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2502 * @return the ResultSet concurrency
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2503 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2504 int getRSConcur() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2505 return parent.rsconcur;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2506 }
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 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2509 * 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
2510 * 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
2511 * 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
2512 * line is fetched it is returned.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2513 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2514 * @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
2515 * @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
2516 * 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
2517 * @throws SQLException if an database error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2518 */
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
2519 String getLine(final int row) throws SQLException {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2520 if (row >= tuplecount || row < 0)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2521 return null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2522
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2523 int block = (row - blockOffset) / cacheSize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2524 int blockLine = (row - blockOffset) % cacheSize;
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 // 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
2527 DataBlockResponse rawr = resultBlocks[block];
b8c007e86694 Improve readability
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 200
diff changeset
2528 if (rawr == null) {
b8c007e86694 Improve readability
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 200
diff changeset
2529 // load block
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2530 /// 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
2531 /// in memory when dealing with random access to
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2532 /// reduce memory blow-up
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2533
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2534 // 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
2535 // block loaded
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2536 if (parent.rstype == ResultSet.TYPE_FORWARD_ONLY) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2537 for (int i = 0; i < block; i++)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2538 resultBlocks[i] = null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2539
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2540 if (MonetConnection.seqCounter - 1 == seqnr &&
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2541 !cacheSizeSetExplicitly &&
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2542 tuplecount - row > cacheSize &&
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2543 cacheSize < MonetConnection.DEF_FETCHSIZE * 10)
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 // there has no query been issued after this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2546 // one, so we can consider this an uninterrupted
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2547 // continuation request. Let's once increase
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2548 // the cacheSize as it was not explicitly set,
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2549 // 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
2550 // bother anyone else by doing so, and just
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2551 // gaining some performance.
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 // store the previous position in the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2554 // blockOffset variable
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2555 blockOffset += cacheSize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2556
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2557 // increase the cache size (a lot)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2558 cacheSize *= 10;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2559
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2560 // by changing the cacheSize, we also
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2561 // change the block measures. Luckily
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2562 // we don't care about previous blocks
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2563 // because we have a forward running
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2564 // pointer only. However, we do have
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2565 // to recalculate the block number, to
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2566 // ensure the next call to find this
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2567 // new block.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2568 block = (row - blockOffset) / cacheSize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2569 blockLine = (row - blockOffset) % cacheSize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2570 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2571 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2572
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2573 // 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
2574 parent.executeQuery(commandTempl,
4320e6891536 Replace AssertionError() with SQLException().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 90
diff changeset
2575 "export " + id + " " + ((block * cacheSize) + blockOffset) + " " + cacheSize);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2576 rawr = resultBlocks[block];
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2577 if (rawr == null)
136
4320e6891536 Replace AssertionError() with SQLException().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 90
diff changeset
2578 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
2579 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2580
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2581 return rawr.getRow(blockLine);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2582 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2583
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 * 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
2586 * 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
2587 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2588 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2589 public void close() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2590 if (closed) return;
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2591
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2592 // 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
2593 // 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
2594 // was larger than the reply size
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2595 try {
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2596 if (destroyOnClose)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2597 sendControlCommand("close " + id);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2598 } catch (SQLException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2599 // probably a connection error...
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2600 }
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 // close the data block associated with us
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2603 for (int i = 1; i < resultBlocks.length; i++) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2604 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
2605 if (r != null)
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2606 r.close();
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
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2609 closed = true;
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 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2613 * Returns whether this Response is closed
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2614 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2615 * @return whether this Response is closed
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2616 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2617 boolean isClosed() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2618 return closed;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2619 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2620 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2621 // }}}
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
2622
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2623 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2624 * The DataBlockResponse is tabular data belonging to a
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2625 * ResultSetResponse. Tabular data from the server typically looks
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2626 * like:
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2627 * <pre>
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2628 * [ "value", 56 ]
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2629 * </pre>
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2630 * 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
2631 * by brackets ("[" and "]"). A DataBlockResponse object holds the
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2632 * 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
2633 * easy retrieval.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2634 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2635 * 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
2636 * 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
2637 * 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
2638 * 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
2639 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2640 // {{{ 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
2641 private final static class DataBlockResponse implements Response {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2642 /** The String array to keep the data in */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2643 private final String[] data;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2644
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2645 /** 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
2646 private int pos;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2647 /** 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
2648 private final boolean forwardOnly;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2649
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 * Constructs a DataBlockResponse object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2652 * @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
2653 * @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
2654 */
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
2655 DataBlockResponse(final int size, final boolean forward) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2656 pos = -1;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2657 data = new String[size];
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2658 forwardOnly = forward;
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
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 * addLine adds a String of data to this object's data array.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2663 * Note that an IndexOutOfBoundsException can be thrown when an
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2664 * 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
2665 * specified.
45
c2bf983dc79b Implemented Connection methods: getClientInfo(name) and getClientInfo().
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 25
diff changeset
2666 *
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2667 * @param line the header line as String
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2668 * @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
2669 * @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
2670 * or additional lines are not allowed.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2671 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2672 @Override
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
2673 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
2674 if (linetype != LineType.RESULT)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2675 return "protocol violation: unexpected line in data block: " + line;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2676 // add to the backing array
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2677 data[++pos] = line;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2678
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2679 // all is well
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2680 return null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2681 }
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 /**
288
f412032e3b43 Correcting typo
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 286
diff changeset
2684 * 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
2685 * to it.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2686 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2687 * @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
2688 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2689 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2690 public boolean wantsMore() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2691 // remember: pos is the value already stored
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2692 return pos + 1 < data.length;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2693 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2694
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2695 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2696 * 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
2697 * 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
2698 * 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
2699 * happen that this is NOT the case!
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2700 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2701 * @throws SQLException if not all rows are filled
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2702 */
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
2703 /* MvD: disabled not used/needed code
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2704 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2705 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
2706 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
2707 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
2708 + 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
2709 + ". 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
2710 }
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
2711 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2712
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2713 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2714 * 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
2715 * necessary clean up procedures.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2716 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2717 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2718 public void close() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2719 // feed all rows to the garbage collector
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
2720 for (int i = 0; i < data.length; i++)
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2721 data[i] = null;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2722 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2723
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2724 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2725 * 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
2726 * is out of bounds, an IndexOutOfBoundsException will be
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2727 * thrown.
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 * @param line the row to retrieve
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2730 * @return the requested row as String
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2731 */
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
2732 String getRow(final int line) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2733 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
2734 final String ret = data[line];
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2735 data[line] = null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2736 return ret;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2737 } else {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2738 return data[line];
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2739 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2740 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2741 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2742 // }}}
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2743
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2744 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2745 * The UpdateResponse represents an update statement response. It
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2746 * 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
2747 * 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
2748 * 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
2749 * -1 if not applicable.<br />
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2750 * <tt>&amp;2 0 -1</tt>
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2751 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2752 // {{{ 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
2753 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
2754 public final long count;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2755 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
2756
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
2757 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
2758 // fill the blank finals
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2759 this.count = cnt;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2760 this.lastid = id;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2761 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2762
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2763 @Override
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
2764 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
2765 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
2766 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2767
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2768 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2769 public boolean wantsMore() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2770 return false;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2771 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2772
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
2773 /* MvD: disabled not used/needed code
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2774 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2775 public void complete() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2776 // empty, because there is nothing to check
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2777 }
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
2778 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2779
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2780 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2781 public void close() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2782 // nothing to do here...
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2783 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2784 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2785 // }}}
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2786
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2787 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2788 * The SchemaResponse represents an schema modification response.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2789 * 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
2790 * 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
2791 * 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
2792 * 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
2793 * server.<br />
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2794 * <tt>&amp;3</tt>
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 // {{{ SchemaResponse class implementation
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2797 class SchemaResponse implements Response {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2798 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
2799
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2800 @Override
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
2801 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
2802 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
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 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2806 public boolean wantsMore() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2807 return false;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2808 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2809
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
2810 /* MvD: disabled not used/needed code
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2811 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2812 public void complete() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2813 // empty, because there is nothing to check
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2814 }
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
2815 */
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2816
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2817 @Override
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2818 public void close() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2819 // nothing to do here...
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2820 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2821 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2822 // }}}
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 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2825 * The AutoCommitResponse represents a transaction message. It
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2826 * stores (a change in) the server side auto commit mode.<br />
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2827 * <tt>&amp;4 (t|f)</tt>
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 // {{{ 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
2830 private final class AutoCommitResponse extends SchemaResponse {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2831 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
2832
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
2833 public AutoCommitResponse(final boolean ac) {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2834 // fill the blank final
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2835 this.autocommit = ac;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2836 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2837 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2838 // }}}
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2839
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2840 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2841 * 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
2842 * 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
2843 * responsibility to the caller to prevent concurrent access.
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 // {{{ 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
2846 final class ResponseList {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2847 /** 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
2848 private final int cachesize;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2849 /** 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
2850 private final long maxrows;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2851 /** The ResultSet type to produce */
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
2852 private final int rstype;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2853 /** The ResultSet concurrency to produce */
186
4767b005a531 Making variables private where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 184
diff changeset
2854 private final int rsconcur;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2855 /** 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
2856 private final int seqnr;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2857 /** 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
2858 * 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
2859 private final ArrayList<Response> responses;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2860 /** A map of ResultSetResponses, used for additional
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2861 * 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
2862 private HashMap<Integer, ResultSetResponse> rsresponses;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2863
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2864 /** The current header returned by getNextResponse() */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2865 private int curResponse;
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 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2868 * Main constructor. The query argument can either be a String
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2869 * or List. An SQLException is thrown if another object
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2870 * instance is supplied.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2871 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2872 * @param cachesize overall cachesize to use
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2873 * @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
2874 * @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
2875 * @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
2876 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2877 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
2878 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
2879 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
2880 final int rstype,
003ae6d881db Add "final" keyword to method arguments and local variables where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 292
diff changeset
2881 final int rsconcur
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2882 ) throws SQLException {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2883 this.cachesize = cachesize;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2884 this.maxrows = maxrows;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2885 this.rstype = rstype;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2886 this.rsconcur = rsconcur;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2887 responses = new ArrayList<Response>();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2888 curResponse = -1;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2889 seqnr = MonetConnection.seqCounter++;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2890 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2891
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2892 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2893 * 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
2894 * no more responses.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2895 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2896 * @return the next Response available or null
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 Response getNextResponse() throws SQLException {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2899 if (rstype == ResultSet.TYPE_FORWARD_ONLY) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2900 // free resources if we're running forward only
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2901 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
2902 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
2903 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
2904 tmp.close();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2905 responses.set(curResponse, null);
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 curResponse++;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2909 if (curResponse >= responses.size()) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2910 // ResponseList is obviously completed so, there are no
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2911 // more responses
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2912 return null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2913 } else {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2914 // return this response
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2915 return responses.get(curResponse);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2916 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2917 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2918
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2919 /**
288
f412032e3b43 Correcting typo
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 286
diff changeset
2920 * 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
2921 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2922 * @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
2923 */
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
2924 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
2925 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
2926 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
2927 final Response tmp = responses.set(i, null);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2928 if (tmp != null)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2929 tmp.close();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2930 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2931
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2932 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2933 * Closes the current response.
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 void closeCurrentResponse() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2936 closeResponse(curResponse);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2937 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2938
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2939 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2940 * Closes the current and previous responses.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2941 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2942 void closeCurOldResponses() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2943 for (int i = curResponse; i >= 0; i--) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2944 closeResponse(i);
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 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2947
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2948 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2949 * 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
2950 * ResponseList.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2951 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2952 void close() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2953 for (int i = 0; i < responses.size(); i++) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2954 closeResponse(i);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2955 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2956 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2957
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2958 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2959 * Returns whether this ResponseList has still unclosed
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2960 * Responses.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2961 */
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2962 boolean hasUnclosedResponses() {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2963 for (Response r : responses) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2964 if (r != null)
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2965 return true;
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 return false;
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 * Executes the query contained in this ResponseList, and
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2972 * 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
2973 * ResponseList.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2974 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2975 * @throws SQLException if a database error occurs
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2976 */
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
2977 void processQuery(final String query) throws SQLException {
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2978 executeQuery(queryTempl, query);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2979 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2980
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2981 /**
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2982 * Internal executor of queries.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2983 *
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2984 * @param templ the template to fill in
552
7b320303b579 Doc comment improvements
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 551
diff changeset
2985 * @param query the query to execute
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2986 * @throws SQLException if a database error occurs
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 @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
2989 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
2990 throws SQLException
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 String error = null;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2993
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2994 try {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2995 synchronized (server) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
2996 // 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
2997 // 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
2998 // 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
2999 // lines. Ignore errors from previous result sets.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3000 in.waitForPrompt();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3001
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3002 // {{{ set reply size
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 * 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
3005 * 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
3006 * 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
3007 * prompt after the server sent it's header.
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3008 */
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
3009 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
3010 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
3011 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
3012 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
3013 size = (int)maxrows;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3014 // 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
3015 if (lang == LANG_SQL && size != curReplySize && templ != commandTempl) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3016 sendControlCommand("reply_size " + size);
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3017
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3018 // store the reply size after a successful change
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3019 curReplySize = size;
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 // }}} set reply size
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3022
285
637899bda602 Removed SendThread class and its usage from MonetConnection.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 284
diff changeset
3023 // 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
3024 out.writeLine(templ[0] + query + templ[1]);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3025
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3026 // go for new results
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3027 String tmpLine = in.readLine();
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
3028 LineType linetype = in.getLineType();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3029 Response res = null;
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
3030 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
3031 // each response should start with a start of header (or error)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3032 switch (linetype) {
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
3033 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
3034 // 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
3035 try {
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3036 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
3037 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
3038 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
3039 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
3040 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
3041 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
3042 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
3043 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
3044 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
3045 // 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
3046 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
3047 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
3048 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
3049 // 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
3050 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
3051 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
3052 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
3053 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
3054 }
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3055 } break;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3056 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
3057 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
3058 sohp.getNextAsString() // key-id
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3059 );
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3060 break;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3061 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
3062 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
3063 break;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3064 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
3065 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
3066 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
3067 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
3068 "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
3069 }
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3070 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
3071 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
3072 break;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3073 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
3074 // 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
3075 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
3076 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
3077 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
3078 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
3079 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
3080 if (rsresponses != null)
556
87feb93330a6 Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 554
diff changeset
3081 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
3082 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
3083 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
3084 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
3085 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
3086 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
3087 }
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
3088 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
3089 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
3090 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
3091 } break;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3092 } // 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
3093 } 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
3094 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
3095 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
3096 e.getMessage() +
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
3097 " found: '" + tmpLine.charAt(offset) +
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
3098 "' in: \"" + tmpLine +
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
3099 "\" 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
3100 // flush all the rest
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3101 in.waitForPrompt();
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3102 linetype = in.getLineType();
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3103 break;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3104 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3105
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3106 // 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
3107 if (error != null) {
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3108 in.waitForPrompt();
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3109 linetype = in.getLineType();
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3110 break;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3111 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3112
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3113 // here we have a res object, which we can start filling
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3114 while (res.wantsMore()) {
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3115 error = res.addLine(in.readLine(), in.getLineType());
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3116 if (error != null) {
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3117 // right, some protocol violation,
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3118 // skip the rest of the result
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3119 error = "M0M10!" + error;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3120 in.waitForPrompt();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3121 linetype = in.getLineType();
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3122 break;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3123 }
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3124 }
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3125 if (error != null)
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3126 break;
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3127
288
f412032e3b43 Correcting typo
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 286
diff changeset
3128 // 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
3129 // 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
3130 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
3131 responses.add(res);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3132
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3133 // 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
3134 // before we start the loop over
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3135 tmpLine = in.readLine();
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3136 linetype = in.getLineType();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3137 break;
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
3138 case INFO:
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3139 addWarning(tmpLine.substring(1), "01000");
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3140 // 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
3141 // before we start the loop over
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3142 tmpLine = in.readLine();
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3143 linetype = in.getLineType();
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3144 break;
500
95d1b0a38aed Stub implementation of FILETRANSFER handling
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 499
diff changeset
3145 case FILETRANSFER:
95d1b0a38aed Stub implementation of FILETRANSFER handling
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 499
diff changeset
3146 // Consume the command
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3147 String transferCommand = in.readLine();
500
95d1b0a38aed Stub implementation of FILETRANSFER handling
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 499
diff changeset
3148 // Consume the fake prompt inserted by MapiSocket.
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3149 String dummy = in.readLine();
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3150 // Handle the request
540
d3a96675969e Handle case where in.readLine() returns null
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 539
diff changeset
3151 if (transferCommand != null)
d3a96675969e Handle case where in.readLine() returns null
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 539
diff changeset
3152 error = handleTransfer(transferCommand);
d3a96675969e Handle case where in.readLine() returns null
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 539
diff changeset
3153 else
566
eeea18f501b3 Remove SQLStates from error messages sent upstream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 563
diff changeset
3154 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
3155 // 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
3156 if (error != null) {
566
eeea18f501b3 Remove SQLStates from error messages sent upstream
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 563
diff changeset
3157 out.writeLine(error + "\n");
506
2ae90050720c Improve flushing around error responses
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 505
diff changeset
3158 error = in.waitForPrompt();
2ae90050720c Improve flushing around error responses
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 505
diff changeset
3159 } else {
2ae90050720c Improve flushing around error responses
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 505
diff changeset
3160 tmpLine = in.readLine();
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3161 }
500
95d1b0a38aed Stub implementation of FILETRANSFER handling
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 499
diff changeset
3162 linetype = in.getLineType();
95d1b0a38aed Stub implementation of FILETRANSFER handling
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 499
diff changeset
3163 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
3164 default: // Yeah... in Java this is correct!
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3165 // we have something we don't expect/understand, let's make it an error message
553
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3166 tmpLine = "!M0M10!protocol violation, unexpected " + linetype + " line: " + tmpLine;
284
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3167 // don't break; fall through...
497
aed7f32e029a Refactor LineType to be an enum
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 496
diff changeset
3168 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
3169 // 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
3170 // 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
3171 // garbage here... but the log should reveal that
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3172 error = in.waitForPrompt();
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3173 linetype = in.getLineType();
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3174 if (error != null) {
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3175 error = tmpLine.substring(1) + "\n" + error;
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3176 } else {
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3177 error = tmpLine.substring(1);
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3178 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3179 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
3180 } // end of switch (linetype)
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3181 } // end of while (linetype != BufferedMCLReader.PROMPT)
e5b99c929a2d Improve setSchema(String schema) by checking also on empty name.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 278
diff changeset
3182 } // end of synchronized (server)
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3183
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3184 if (error != null) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3185 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
3186 final String[] errors = error.split("\n");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3187 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
3188 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
3189 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
3190 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
3191 } 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
3192 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
3193 }
d6abd1ffffbb Use SQLNonTransientConnectionException instead of SQLException where applicable (SQLState starts with 08)
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 136
diff changeset
3194 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
3195 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
3196 } 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
3197 ret.setNextException(newErr);
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3198 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3199 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3200 throw ret;
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3201 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3202 } catch (SocketTimeoutException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3203 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
3204 throw new SQLNonTransientConnectionException("connection timed out", "08M33");
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3205 } catch (IOException e) {
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3206 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
3207 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
3208 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3209 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3210 }
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3211 // }}}
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3212
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3213 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
3214 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
3215 final String[] parts = transferCommand.split(" ", 3);
553
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3216 if (parts.length == 3) {
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3217 final long offset;
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3218 try {
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3219 offset = Long.parseLong(parts[1]);
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3220 } catch (NumberFormatException e) {
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3221 return e.toString();
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3222 }
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3223 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
3224 }
503
7e3987c16cde Succesful file uploading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 502
diff changeset
3225 } else if (transferCommand.startsWith("rb ")) {
7e3987c16cde Succesful file uploading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 502
diff changeset
3226 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
3227 } 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
3228 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
3229 } else if (transferCommand.startsWith("wb ")) {
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3230 return handleDownload(transferCommand.substring(2), false);
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3231 }
553
50b15ee1cb5e Process suggestions from Martin
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 552
diff changeset
3232 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
3233 }
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3234
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3235 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
3236 if (uploadHandler == null) {
505
8a014286dac2 Add stub code for downloading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 504
diff changeset
3237 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
3238 }
7e3987c16cde Succesful file uploading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 502
diff changeset
3239
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3240 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
3241 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
3242 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
3243 try {
551
5ce6a942aff3 Last minute API fix: 'int offset' -> 'long linesToSkip'
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 546
diff changeset
3244 uploadHandler.handleUpload(handle, path, textMode, linesToSkip);
503
7e3987c16cde Succesful file uploading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 502
diff changeset
3245 if (!handle.hasBeenUsed()) {
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3246 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
3247 }
503
7e3987c16cde Succesful file uploading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 502
diff changeset
3248 handle.close();
502
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3249 } finally {
511
bd860e850fe1 rename insertFakeFlushes to insertFakePrompts
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 510
diff changeset
3250 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
3251 }
503
7e3987c16cde Succesful file uploading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 502
diff changeset
3252 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
3253 }
83354bd21320 Upload fake data when an upload request is received
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 500
diff changeset
3254
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3255 private String handleDownload(final String path, boolean textMode) throws IOException {
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3256 if (downloadHandler == null) {
505
8a014286dac2 Add stub code for downloading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 504
diff changeset
3257 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
3258 }
8a014286dac2 Add stub code for downloading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 504
diff changeset
3259
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3260 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
3261 try {
eb7ecfbb48f2 Never forget to close the download handle
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 542
diff changeset
3262 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
3263 if (!handle.hasBeenUsed()) {
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3264 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
3265 }
eb7ecfbb48f2 Never forget to close the download handle
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 542
diff changeset
3266 } finally {
eb7ecfbb48f2 Never forget to close the download handle
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 542
diff changeset
3267 handle.close();
505
8a014286dac2 Add stub code for downloading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 504
diff changeset
3268 }
8a014286dac2 Add stub code for downloading
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 504
diff changeset
3269 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
3270 }
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3271
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3272 /**
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3273 * 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
3274 *
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3275 * 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
3276 *
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3277 * 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
3278 */
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3279
556
87feb93330a6 Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 554
diff changeset
3280 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
3281 /**
542
d462000fc410 Various changes suggested by Martin van Dinther
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 541
diff changeset
3282 * 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
3283 *
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3284 * Use the given handle to receive data or send errors to the server.
551
5ce6a942aff3 Last minute API fix: 'int offset' -> 'long linesToSkip'
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 546
diff changeset
3285 * @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
3286 * @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
3287 * 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
3288 * @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
3289 * @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
3290 * 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
3291 * 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
3292 * where both 0 and 1 mean 'upload everything'
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3293 */
551
5ce6a942aff3 Last minute API fix: 'int offset' -> 'long linesToSkip'
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 546
diff changeset
3294 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
3295
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3296 /**
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3297 * 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
3298 *
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3299 * The default implementation does nothing.
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3300 */
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3301 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
3302 }
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3303
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3304 /**
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3305 * 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
3306 *
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3307 * 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
3308 *
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3309 * 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
3310 */
556
87feb93330a6 Misc. changes suggested by analysis tool
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 554
diff changeset
3311 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
3312 /**
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3313 * 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
3314 *
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3315 * 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
3316 *
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3317 * @param handle Handle to communicate with the server
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3318 * @param name Name of the file the server would like to write. Make sure to validate this before writing to
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3319 * the file system
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3320 * @param textMode Whether this is text or binary data.
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3321 */
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3322 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
3323 }
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3324
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3325 /**
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3326 * 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
3327 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3328 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
3329 private final MapiSocket server;
557
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3330 private final Runnable cancellationCallback;
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3331 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
3332 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
3333 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
3334 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
3335
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3336 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
3337 this.server = server;
557
ce2b616ed22e Add a cancellation callback to UploadHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 556
diff changeset
3338 this.cancellationCallback = cancellationCallback;
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3339 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
3340 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3341
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3342 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3343 * 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
3344 *
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3345 * 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
3346 * 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
3347 *
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3348 * 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
3349 * 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
3350 * {@link IOException} but this will terminate the connection.
554
9fa67487f38a Doc comment fixes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 553
diff changeset
3351 * @param errorMessage error message to send
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3352 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3353 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
3354 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
3355 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
3356 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3357 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
3358 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3359
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3360 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3361 * 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
3362 * terminate the upload.
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3363 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3364 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
3365 this.customChunkSize = chunkSize;
72007c4f8f8a Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 516
diff changeset
3366 }
72007c4f8f8a Allow MonetUploadHandler to configure the chunk size
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 516
diff changeset
3367
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3368 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3369 * 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
3370 *
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3371 * For text mode uploads, the data MUST be validly UTF-8 encoded.
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3372 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3373 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
3374 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
3375 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
3376 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3377 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
3378 try {
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3379 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
3380 up.setCancellationCallback(cancellationCallback);
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3381 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
3382 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
3383 } 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
3384 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
3385 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3386 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3387 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
3388 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3389
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3390 /**
554
9fa67487f38a Doc comment fixes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 553
diff changeset
3391 * @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
3392 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3393 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
3394 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
3395 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3396
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3397 /**
554
9fa67487f38a Doc comment fixes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 553
diff changeset
3398 * @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
3399 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3400 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
3401 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
3402 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3403
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3404 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3405 * 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
3406 *
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3407 * For text mode uploads, the data MUST be validly UTF-8 encoded.
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3408 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3409 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
3410 final OutputStream s = getStream();
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3411 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
3412 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
3413 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
3414 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
3415 break;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3416 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3417 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
3418 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3419 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3420
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3421 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3422 * Read data from the given buffered reader and send it to the server
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3423 * @param reader 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
3424 * @param linesToSkip start uploading at line {@code offset}. Value 0 and 1
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3425 * both mean upload the whole file, value 2 means skip the first line, etc.q
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3426 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3427 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
3428 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
3429 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
3430 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
3431 return;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3432 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3433 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3434
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3435 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
3436 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3437
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3438 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3439 * Read data from the given buffered reader and send it to the server
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3440 * @param reader reader to read from
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3441 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3442 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
3443 final OutputStream s = getStream();
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3444 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
3445 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
3446 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
3447 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
3448 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
3449 break;
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3450 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3451 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
3452 writer.close();
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3453 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3454 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3455
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3456 /**
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3457 * Close opened {@link PrintStream}.
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3458 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3459 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
3460 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
3461 print.close();
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3462 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
3463 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3464 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3465 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3466
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3467 /**
541
31df6a12fd41 Make the MonetUploadHandler and MonetDownloadHandler interfaces part of MonetConnection
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 540
diff changeset
3468 * 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
3469 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3470 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
3471 private final MapiSocket server;
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3472 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
3473 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
3474 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
3475
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3476 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
3477 this.server = server;
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3478 prependCr = false;
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3479 if (textMode) {
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3480 setLineSeparator(System.lineSeparator());
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3481 }
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3482 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3483
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3484 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3485 * 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
3486 *
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3487 * 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
3488 * 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
3489 *
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3490 * 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
3491 * 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
3492 * {@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
3493 *
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3494 * 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
3495 * when this error is used. This will probably change in the future.
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3496 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3497 public void sendError(String errorMessage) 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
3498 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
3499 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
3500 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3501 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
3502 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3503
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3504 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3505 * 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
3506 *
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3507 * 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
3508 * 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
3509 * This can be overridden with {@link Download#setLineSeparator(String)}.
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 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
3512 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
3513 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
3514 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3515 if (stream == null) {
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3516 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
3517 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
3518 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3519 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
3520 }
515
7bbcff2c775b Also implement downloadTo(), and use it in FileTransferHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 514
diff changeset
3521
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3522 /**
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3523 * Write the data from the server to the given {@link OutputStream}.
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3524 */
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3525 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
3526 final InputStream s = getStream();
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3527 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
3528 while (true) {
7bbcff2c775b Also implement downloadTo(), and use it in FileTransferHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 514
diff changeset
3529 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
3530 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
3531 break;
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3532 }
515
7bbcff2c775b Also implement downloadTo(), and use it in FileTransferHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 514
diff changeset
3533 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
3534 }
7bbcff2c775b Also implement downloadTo(), and use it in FileTransferHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 514
diff changeset
3535 }
7bbcff2c775b Also implement downloadTo(), and use it in FileTransferHandler
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 514
diff changeset
3536
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3537 /**
579
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3538 * Write the textual data from the server to the given {@link Writer}
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3539 * @param writer
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3540 */
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3541 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
3542 final InputStream s = getStream();
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3543 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
3544 final char[] buffer = new char[65536];
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3545 while (true) {
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3546 final int nread = r.read(buffer);
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3547 if (nread < 0)
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3548 break;
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3549 writer.write(buffer, 0, nread);
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3550 }
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3551 }
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3552
72f4437de9be Reencode downloads if necessary
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 576
diff changeset
3553 /**
554
9fa67487f38a Doc comment fixes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 553
diff changeset
3554 * @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
3555 */
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3556 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
3557 return error != null || 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
3558 }
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3559
535
c9d88af06d35 Javadoc and some minor changes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 526
diff changeset
3560 /**
554
9fa67487f38a Doc comment fixes
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 553
diff changeset
3561 * @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
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 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
3564 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
3565 }
576
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3566
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3567 /**
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3568 * Close opened stream.
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3569 */
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3570 public void close() {
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3571 if (stream != null) {
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3572 try {
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3573 stream.close();
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3574 stream = null;
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3575 } catch (IOException e) {
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3576 /* ignore close error */
095e896f9d7a Updated comments. Improved code. Added final keywords
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents: 568
diff changeset
3577 }
514
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 }
616
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3580
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3581 /**
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3582 * Set the line endings used in the stream returned by {@link Download#getStream()}
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3583 * @param sep separator to use
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3584 * @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
3585 */
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3586 public void setLineSeparator(String sep) {
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3587 if ("\n".equals(sep)) {
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3588 prependCr = false;
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3589 } 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
3590 prependCr = true;
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3591 } else {
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3592 throw new IllegalArgumentException("sep must be \n or \r\n");
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3593 }
65641a7cea31 Implement line ending conversion for downloads
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 613
diff changeset
3594 }
514
443780d71bae More renaming. user registers MonetUploadHandler which is handed an Upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 511
diff changeset
3595 }
613
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3596
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3597 public static class StripCrLfStream extends FilterOutputStream {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3598 private boolean crPending = false;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3599
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3600 public StripCrLfStream(OutputStream out) {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3601 super(out);
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3602 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3603
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3604 public boolean pending() {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3605 return this.crPending;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3606 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3607
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3608 @Override
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3609 public void write(int b) throws IOException {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3610 if (crPending && b != '\n') {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3611 out.write('\r');
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3612 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3613 if (b != '\r') {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3614 out.write(b);
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3615 crPending = false;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3616 } else {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3617 crPending = true;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3618 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3619 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3620
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3621 @Override
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3622 public void write(byte[] b) throws IOException {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3623 this.write(b, 0, b.length);
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3624 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3625
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3626 @Override
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3627 public void write(byte[] b, int off, int len) throws IOException {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3628 if (len == 0) {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3629 return;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3630 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3631 if (crPending && b[0] != '\n') {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3632 out.write('\r');
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3633 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3634
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3635 // deal with final \r up front
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3636 if (b[len - 1] == '\r') {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3637 crPending = true;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3638 len -= 1;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3639 } else {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3640 crPending = false;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3641 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3642
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3643 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
3644 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
3645 int chunk = i - off;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3646 out.write(b, off, chunk);
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3647 // 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
3648 len -= chunk + 1;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3649 off += chunk + 1;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3650 // 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
3651 i++;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3652 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3653 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3654
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3655 // write the remainder
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3656 out.write(b, off, len);
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3657 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3658
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3659 @Override
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3660 public void flush() throws IOException {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3661 // 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
3662 out.flush();
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3663 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3664
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3665 @Override
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3666 public void close() throws IOException {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3667 if (crPending) {
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3668 out.write('\r');
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3669 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3670 crPending = false;
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3671 super.close();
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3672 }
9397c0b487f8 Normalize CRLF on upload
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents: 610
diff changeset
3673 }
0
a5a898f6886c Copy of MonetDB java directory changeset e6e32756ad31.
Sjoerd Mullender <sjoerd@acm.org>
parents:
diff changeset
3674 }