Mercurial > hg > monetdb-java
annotate src/main/java/org/monetdb/client/JdbcClient.java @ 834:5aa19bbed0d6 monetdbs
Comments and formatting
author | Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com> |
---|---|
date | Wed, 13 Dec 2023 15:39:47 +0100 (16 months ago) |
parents | d2f14f2b28b3 |
children | d9a45743536d |
rev | line source |
---|---|
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1 /* |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
2 * This Source Code Form is subject to the terms of the Mozilla Public |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
5 * |
716
aeb268156580
Updated Copyright year.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
709
diff
changeset
|
6 * Copyright 1997 - July 2008 CWI, August 2008 - 2023 MonetDB B.V. |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
7 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
8 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
9 package org.monetdb.client; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
10 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
11 import org.monetdb.jdbc.MonetDriver; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
12 import org.monetdb.jdbc.MonetConnection; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
13 import org.monetdb.util.CmdLineOpts; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
14 import org.monetdb.util.Exporter; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
15 import org.monetdb.util.FileTransferHandler; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
16 import org.monetdb.util.MDBvalidator; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
17 import org.monetdb.util.OptionsException; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
18 import org.monetdb.util.SQLExporter; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
19 import org.monetdb.util.XMLExporter; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
20 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
21 import java.io.BufferedReader; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
22 import java.io.BufferedWriter; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
23 import java.io.Console; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
24 import java.io.IOException; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
25 import java.io.InputStreamReader; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
26 import java.io.File; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
27 import java.io.PrintWriter; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
28 import java.net.HttpURLConnection; |
770
1b9fe515f574
Fixed javac version 20 compiler warning.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
768
diff
changeset
|
29 import java.net.URI; |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
30 import java.net.URL; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
31 import java.nio.charset.Charset; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
32 import java.sql.Connection; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
33 import java.sql.DatabaseMetaData; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
34 import java.sql.DriverManager; // this import is required as it will trigger loading the org.monetdb.jdbc.MonetDriver class |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
35 import java.sql.ResultSet; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
36 import java.sql.Statement; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
37 import java.sql.SQLException; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
38 import java.sql.SQLWarning; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
39 import java.util.ArrayList; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
40 import java.util.LinkedList; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
41 import java.util.List; |
796
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
42 import java.util.Properties; |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
43 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
44 /** |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
45 * This program acts like an extended client program for MonetDB. Its |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
46 * look and feel is very much like PostgreSQL's interactive terminal |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
47 * program. Although it looks like this client is designed for MonetDB, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
48 * it demonstrates the power of the JDBC interface since it built on top |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
49 * of JDBC only. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
50 * |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
51 * @author Fabian Groffen |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
52 * @author Martin van Dinther |
768
a80c21fe7bb2
Removed deprecated nl.cwi.monetdb.*.* classes and package.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
723
diff
changeset
|
53 * @version 1.8 |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
54 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
55 |
768
a80c21fe7bb2
Removed deprecated nl.cwi.monetdb.*.* classes and package.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
723
diff
changeset
|
56 public final class JdbcClient { |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
57 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
58 private static Connection con; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
59 private static DatabaseMetaData dbmd; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
60 private static Statement stmt; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
61 private static BufferedReader in; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
62 private static PrintWriter out; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
63 private static Exporter exporter; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
64 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
65 /** |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
66 * JdbcClient is a command line query tool for MonetDB, similar to mclient. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
67 * It uses the JDBC API and the MonetDB JDBC driver to communicate with a |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
68 * MonetDB server. The MonetDB JDBC driver is included in the jdbcclient.jre8.jar |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
69 * for ease of use, so only 1 jar file is needed to use it. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
70 * |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
71 * <pre>Usage java -jar jdbcclient.jre8.jar |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
72 * [-h host[:port]] [-p port] [-f file] [-u user] |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
73 * [-l language] [-d database] [-e] [-D [table]] |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
74 * [--csvdir /path/to/csvfiles] [-X<opt>] |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
75 * | [--help] | [--version] |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
76 * or using long option equivalents --host --port --file --user --language |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
77 * --dump --echo --database. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
78 * Arguments may be written directly after the option like -p50000. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
79 * |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
80 * If no host and port are given, localhost and 50000 are assumed. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
81 * An .monetdb file may exist in the user's home directory. This file can contain |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
82 * preferences to use each time JdbcClient is started. Options given on the |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
83 * command line override the preferences file. The .monetdb file syntax is |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
84 * <option>=<value> where option is one of the options host, port, file, mode |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
85 * debug, or password. Note that the last one is perilous and therefore not |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
86 * available as command line option. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
87 * If no input file is given using the -f flag, an interactive session is |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
88 * started on the terminal. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
89 * |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
90 * OPTIONS |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
91 * -h --host The hostname of the host that runs the MonetDB database. A port |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
92 * number can be supplied by use of a colon, i.e. -h somehost:12345. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
93 * -p --port The port number to connect to. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
94 * -f --file A file name to use either for reading or writing. The file will |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
95 * be used for writing when dump mode is used (-D --dump). In read |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
96 * mode, the file can also be an URL pointing to a plain text file |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
97 * that is optionally gzip compressed. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
98 * -u --user The username to use when connecting to the database. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
99 * -d --database Try to connect to the given database (only makes sense if |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
100 * connecting to monetdbd). |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
101 * -l --language Use the given language, defaults to 'sql'. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
102 * --help This help screen. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
103 * --version Display driver version and exit. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
104 * -e --echo Also outputs the contents of the input file, if any. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
105 * -q --quiet Suppress printing the welcome header. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
106 * -D --dump Dumps the given table(s), or the complete database if none given. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
107 * --csvdir The directory path where csv data files wil be read from or |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
108 * written to when COPY ... ON CLIENT commands are executed. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
109 * -Xoutput The output mode when dumping. Default is sql, xml may be used for |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
110 * an experimental XML output. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
111 * -Xhash Use the given hash algorithm during challenge response. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
112 * Supported algorithm names: SHA512, SHA384, SHA256 and SHA1. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
113 * -Xdebug Writes a transmission log to disk for debugging purposes. If a |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
114 * file name is given, it is used, otherwise a file called |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
115 * monet<timestamp>.log is created. A given file never be |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
116 * overwritten; instead a unique variation of the file is used. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
117 * -Xbatching Indicates that a batch should be used instead of direct |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
118 * communication with the server for each statement. If a number is |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
119 * given, it is used as batch size. i.e. 8000 would execute the |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
120 * contents on the batch after each 8000 statements read. Batching |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
121 * can greatly speedup the process of restoring a database dump.</pre> |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
122 * |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
123 * @param args optional list of startup arguments |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
124 * @throws Exception if uncaught exception is thrown |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
125 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
126 public final static void main(String[] args) throws Exception { |
796
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
127 final Properties props = new Properties(); |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
128 final CmdLineOpts copts = new CmdLineOpts(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
129 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
130 // arguments which take exactly one argument |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
131 copts.addOption("h", "host", CmdLineOpts.CAR_ONE, "localhost", |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
132 "The hostname of the host that runs the MonetDB database. " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
133 "A port number can be supplied by use of a colon, i.e. " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
134 "-h somehost:12345."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
135 copts.addOption("p", "port", CmdLineOpts.CAR_ONE, "50000", |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
136 "The port number to connect to."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
137 // todo make it CAR_ONE_MANY |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
138 copts.addOption("f", "file", CmdLineOpts.CAR_ONE, null, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
139 "A file name to use either for reading or writing. The " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
140 "file will be used for writing when dump mode is used " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
141 "(-D --dump). In read mode, the file can also be an URL " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
142 "pointing to a plain text file that is optionally gzip " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
143 "compressed."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
144 copts.addOption("u", "user", CmdLineOpts.CAR_ONE, System.getProperty("user.name"), |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
145 "The username to use when connecting to the database."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
146 // this one is only here for the .monetdb file parsing, it is |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
147 // removed before the command line arguments are parsed |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
148 copts.addOption(null, "password", CmdLineOpts.CAR_ONE, null, null); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
149 copts.addOption("d", "database", CmdLineOpts.CAR_ONE, "", |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
150 "Try to connect to the given database (only makes sense " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
151 "if connecting to monetdbd)."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
152 copts.addOption("l", "language", CmdLineOpts.CAR_ONE, "sql", |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
153 "Use the given language, defaults to 'sql'."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
154 copts.addOption(null, "csvdir", CmdLineOpts.CAR_ONE, null, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
155 "The directory path where csv data files are read or " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
156 "written when using ON CLIENT clause of COPY command."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
157 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
158 // arguments which have no argument(s) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
159 copts.addOption(null, "help", CmdLineOpts.CAR_ZERO, null, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
160 "This help screen."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
161 copts.addOption(null, "version", CmdLineOpts.CAR_ZERO, null, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
162 "Display driver version and exit."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
163 copts.addOption("e", "echo", CmdLineOpts.CAR_ZERO, null, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
164 "Also outputs the contents of the input file, if any."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
165 copts.addOption("q", "quiet", CmdLineOpts.CAR_ZERO, null, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
166 "Suppress printing the welcome header."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
167 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
168 // arguments which have zero to many arguments |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
169 copts.addOption("D", "dump", CmdLineOpts.CAR_ZERO_MANY, null, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
170 "Dumps the given table(s), or the complete database if " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
171 "none given."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
172 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
173 // extended options |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
174 copts.addOption(null, "Xoutput", CmdLineOpts.CAR_ONE, null, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
175 "The output mode when dumping. Default is sql, xml may " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
176 "be used for an experimental XML output."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
177 copts.addOption(null, "Xhash", CmdLineOpts.CAR_ONE, null, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
178 "Use the given hash algorithm during challenge response. " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
179 "Supported algorithm names: SHA512, SHA384, SHA256 and SHA1."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
180 // arguments which can have zero or one argument(s) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
181 copts.addOption(null, "Xdebug", CmdLineOpts.CAR_ZERO_ONE, null, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
182 "Writes a transmission log to disk for debugging purposes. " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
183 "If a file name is given, it is used, otherwise a file " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
184 "called monet<timestamp>.log is created. A given file " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
185 "never be overwritten; instead a unique variation of the " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
186 "file is used."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
187 copts.addOption(null, "Xbatching", CmdLineOpts.CAR_ZERO_ONE, null, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
188 "Indicates that a batch should be used instead of direct " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
189 "communication with the server for each statement. If a " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
190 "number is given, it is used as batch size. i.e. 8000 " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
191 "would execute the contents on the batch after each 8000 " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
192 "statements read. Batching can greatly speedup the " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
193 "process of restoring a database dump."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
194 |
794
a418afda6b21
Suppress jdbcclient warnings about unknown .monetdb settings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
777
diff
changeset
|
195 copts.addIgnored("save_history"); |
a418afda6b21
Suppress jdbcclient warnings about unknown .monetdb settings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
777
diff
changeset
|
196 copts.addIgnored("format"); |
a418afda6b21
Suppress jdbcclient warnings about unknown .monetdb settings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
777
diff
changeset
|
197 copts.addIgnored("width"); |
a418afda6b21
Suppress jdbcclient warnings about unknown .monetdb settings
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
777
diff
changeset
|
198 |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
199 // we store user and password in separate variables in order to |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
200 // be able to properly act on them like forgetting the password |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
201 // from the user's file if the user supplies a username on the |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
202 // command line arguments |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
203 String pass = null; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
204 String user = null; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
205 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
206 // look for a file called .monetdb in the current dir or in the |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
207 // user's homedir and read its preferences |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
208 File pref = new File(".monetdb"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
209 if (!pref.exists()) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
210 pref = new File(System.getProperty("user.home"), ".monetdb"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
211 if (pref.exists()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
212 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
213 copts.processFile(pref); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
214 } catch (OptionsException e) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
215 System.err.println("Error in " + pref.getAbsolutePath() + ": " + e.getMessage()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
216 System.exit(1); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
217 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
218 user = copts.getOption("user").getArgument(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
219 pass = copts.getOption("password").getArgument(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
220 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
221 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
222 // process the command line arguments, remove password option |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
223 // first, and save the user we had at this point |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
224 copts.removeOption("password"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
225 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
226 copts.processArgs(args); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
227 } catch (OptionsException e) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
228 System.err.println("Error: " + e.getMessage()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
229 System.exit(1); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
230 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
231 // we can actually compare pointers (objects) here |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
232 if (user != copts.getOption("user").getArgument()) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
233 pass = null; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
234 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
235 if (copts.getOption("help").isPresent()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
236 System.out.print( |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
237 "Usage java -jar jdbcclient.jre8.jar\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
238 "\t\t[-h host[:port]] [-p port] [-f file] [-u user]\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
239 "\t\t[-l language] [-d database] [-e] [-D [table]]\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
240 "\t\t[--csvdir /path/to/csvfiles]] [-X<opt>]\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
241 "\t\t| [--help] | [--version]\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
242 "or using long option equivalents --host --port --file --user --language\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
243 "--dump --echo --database.\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
244 "Arguments may be written directly after the option like -p50000.\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
245 "\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
246 "If no host and port are given, localhost and 50000 are assumed.\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
247 "An .monetdb file may exist in the user's home directory. This file can contain\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
248 "preferences to use each time JdbcClient is started. Options given on the\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
249 "command line override the preferences file. The .monetdb file syntax is\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
250 "<option>=<value> where option is one of the options host, port, file, mode\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
251 "debug, or password. Note that the last one is perilous and therefore not\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
252 "available as command line option.\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
253 "If no input file is given using the -f flag, an interactive session is\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
254 "started on the terminal.\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
255 "\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
256 "OPTIONS\n" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
257 copts.produceHelpMessage() |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
258 ); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
259 System.exit(0); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
260 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
261 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
262 if (copts.getOption("version").isPresent()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
263 // We cannot use the DatabaseMetaData here, because we |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
264 // cannot get a Connection. So instead, we just get the |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
265 // values we want out of the Driver directly. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
266 System.out.println("JDBC Driver: v" + MonetDriver.getDriverVersion()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
267 System.exit(0); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
268 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
269 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
270 // whether the semi-colon at the end of a String terminates the |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
271 // query or not (default = yes => SQL) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
272 final boolean scolonterm = true; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
273 final boolean xmlMode = "xml".equals(copts.getOption("Xoutput").getArgument()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
274 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
275 // we need the password from the user, fetch it with a pseudo |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
276 // password protector |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
277 if (pass == null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
278 final Console syscon = System.console(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
279 char[] tmp = null; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
280 if (syscon != null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
281 tmp = syscon.readPassword("password: "); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
282 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
283 if (tmp == null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
284 System.err.println("Invalid password!"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
285 System.exit(1); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
286 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
287 pass = String.valueOf(tmp); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
288 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
289 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
290 user = copts.getOption("user").getArgument(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
291 |
796
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
292 // extract hostname and port |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
293 String host = copts.getOption("host").getArgument(); |
796
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
294 String port = copts.getOption("port").getArgument(); |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
295 int hostColon = host.indexOf(':'); |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
296 if (hostColon > 0) { |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
297 port = host.substring(hostColon + 1); |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
298 host = host.substring(0, hostColon); |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
299 } |
796
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
300 props.setProperty("host", host); |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
301 props.setProperty("port", port); |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
302 |
723
7200f7942b16
For JdbcClient enlarge the fetchsize at connection moment.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
716
diff
changeset
|
303 // increase the fetchsize from the default 250 to 10000 |
796
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
304 props.setProperty("fetchsize", "10000"); |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
305 |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
306 CmdLineOpts.OptionContainer oc = copts.getOption("language"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
307 final String lang = oc.getArgument(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
308 if (oc.isPresent()) |
796
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
309 props.setProperty("language", lang); |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
310 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
311 /* Xquery is no longer functional or supported |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
312 // set some behaviour based on the language XQuery |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
313 if (lang.equals("xquery")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
314 scolonterm = false; // no ; to end a statement |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
315 if (!copts.getOption("Xoutput").isPresent()) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
316 xmlMode = true; // the user will like xml results, most probably |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
317 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
318 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
319 oc = copts.getOption("Xdebug"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
320 if (oc.isPresent()) { |
796
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
321 props.setProperty("debug", "true"); |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
322 if (oc.getArgumentCount() == 1) |
796
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
323 props.setProperty("logfile", "logfile=" + oc.getArgument()); |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
324 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
325 oc = copts.getOption("Xhash"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
326 if (oc.isPresent()) |
796
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
327 props.setProperty("hash", oc.getArgument()); |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
328 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
329 // request a connection suitable for MonetDB from the driver |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
330 // manager note that the database specifier is only used when |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
331 // connecting to a proxy-like service, since MonetDB itself |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
332 // can't access multiple databases. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
333 con = null; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
334 final String database = copts.getOption("database").getArgument(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
335 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
336 // make sure the driver class is loaded (and thus register itself with the DriverManager) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
337 Class.forName("org.monetdb.jdbc.MonetDriver"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
338 |
796
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
339 // If the database name is a full url, use that. |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
340 // Otherwise, construct something. |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
341 String url; |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
342 if (database.startsWith("jdbc:")) { |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
343 url = database; |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
344 } else { |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
345 url = "jdbc:monetdb:"; // special case |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
346 props.setProperty("database", database); |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
347 } |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
348 props.setProperty("user", user); |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
349 props.setProperty("password", pass); |
d2f14f2b28b3
Allow to pass whole URL to jdbcclient not just separate parameters
Joeri van Ruth <joeri.van.ruth@monetdbsolutions.com>
parents:
794
diff
changeset
|
350 con = DriverManager.getConnection(url, props); |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
351 SQLWarning warn = con.getWarnings(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
352 while (warn != null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
353 System.err.println("Connection warning: " + warn.getMessage()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
354 warn = warn.getNextWarning(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
355 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
356 con.clearWarnings(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
357 } catch (SQLException e) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
358 System.err.println("Database connect failed: " + e.getMessage()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
359 System.exit(1); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
360 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
361 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
362 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
363 dbmd = con.getMetaData(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
364 } catch (SQLException e) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
365 // we ignore this because it's probably because we don't use |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
366 // SQL language |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
367 dbmd = null; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
368 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
369 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
370 oc = copts.getOption("csvdir"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
371 if (oc.isPresent()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
372 final String csvdir = oc.getArgument(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
373 if (csvdir != null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
374 // check if provided csvdir is an existing dir |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
375 // else a download of data into file will terminate the JDBC connection!! |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
376 if (java.nio.file.Files.isDirectory(java.nio.file.Paths.get(csvdir))) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
377 final FileTransferHandler FThandler = new FileTransferHandler(csvdir, Charset.defaultCharset()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
378 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
379 // register file data uploadHandler to allow support |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
380 // for: COPY INTO mytable FROM 'data.csv' ON CLIENT; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
381 ((MonetConnection) con).setUploadHandler(FThandler); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
382 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
383 // register file data downloadHandler to allow support |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
384 // for: COPY select_query INTO 'data.csv' ON CLIENT; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
385 ((MonetConnection) con).setDownloadHandler(FThandler); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
386 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
387 System.err.println("Warning: provided csvdir \"" + csvdir + "\" does not exist. Ignoring csvdir setting."); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
388 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
389 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
390 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
391 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
392 stmt = con.createStatement(); // is used by processInteractive(), processBatch(), doDump() |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
393 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
394 in = new BufferedReader(new InputStreamReader(System.in)); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
395 out = new PrintWriter(new BufferedWriter(new java.io.OutputStreamWriter(System.out))); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
396 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
397 // see if we will have to perform a database dump (only in SQL mode) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
398 if ("sql".equals(lang) && copts.getOption("dump").isPresent() && dbmd != null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
399 final int argcount = copts.getOption("dump").getArgumentCount(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
400 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
401 // use the given file for writing |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
402 oc = copts.getOption("file"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
403 if (oc.isPresent()) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
404 out = new PrintWriter(new BufferedWriter(new java.io.FileWriter(oc.getArgument()))); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
405 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
406 // we only want user tables and views to be dumped (DDL and optional data), unless a specific table is requested |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
407 final String[] types = {"TABLE","VIEW","MERGE TABLE","REMOTE TABLE","REPLICA TABLE","STREAM TABLE"}; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
408 // Future: fetch all type names using dbmd.getTableTypes() and construct String[] with all |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
409 // table type names excluding the SYSTEM ... ones and LOCAL TEMPORARY TABLE ones. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
410 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
411 // request the list of tables/views available in the current schema in the database |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
412 ResultSet tbl = dbmd.getTables(null, con.getSchema(), null, (argcount == 0) ? types : null); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
413 // fetch all tables and store them in a LinkedList of Table objects |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
414 final LinkedList<Table> tables = new LinkedList<Table>(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
415 while (tbl.next()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
416 tables.add(new Table( |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
417 tbl.getString(2), // 2 = "TABLE_SCHEM" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
418 tbl.getString(3), // 3 = "TABLE_NAME" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
419 tbl.getString(4))); // 4 = "TABLE_TYPE" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
420 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
421 tbl.close(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
422 tbl = null; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
423 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
424 if (xmlMode) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
425 exporter = new XMLExporter(out); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
426 exporter.setProperty(XMLExporter.TYPE_NIL, XMLExporter.VALUE_XSI); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
427 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
428 exporter = new SQLExporter(out); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
429 // stick with SQL INSERT INTO commands for now |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
430 // in the future we might do COPY INTO's here using VALUE_COPY |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
431 exporter.setProperty(SQLExporter.TYPE_OUTPUT, SQLExporter.VALUE_INSERT); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
432 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
433 exporter.useSchemas(true); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
434 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
435 // start SQL output |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
436 if (!xmlMode) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
437 out.println("START TRANSACTION;\n"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
438 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
439 // dump specific table(s) or not? |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
440 if (argcount > 0) { // yes we do |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
441 final String[] dumpers = copts.getOption("dump").getArguments(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
442 for (int i = 0; i < tables.size(); i++) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
443 Table ttmp = tables.get(i); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
444 for (int j = 0; j < dumpers.length; j++) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
445 String dumptblnm = dumpers[j].toString(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
446 if (ttmp.getName().equalsIgnoreCase(dumptblnm) || |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
447 ttmp.getFqname().equalsIgnoreCase(dumptblnm)) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
448 { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
449 // dump the table |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
450 doDump(out, ttmp); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
451 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
452 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
453 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
454 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
455 /* this returns everything, so including SYSTEM TABLE constraints */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
456 tbl = dbmd.getImportedKeys(null, null, null); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
457 while (tbl.next()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
458 // find FK table object 6 = "FKTABLE_SCHEM", 7 = "FKTABLE_NAME" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
459 Table fk = Table.findTable(tbl.getString(6), tbl.getString(7), tables); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
460 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
461 // find PK table object 2 = "PKTABLE_SCHEM", 3 = "PKTABLE_NAME" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
462 Table pk = Table.findTable(tbl.getString(2), tbl.getString(3), tables); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
463 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
464 // this happens when a system table has referential constraints |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
465 if (fk == null || pk == null) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
466 continue; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
467 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
468 // add PK table dependency to FK table |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
469 fk.addDependency(pk); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
470 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
471 tbl.close(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
472 tbl = null; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
473 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
474 // search for cycles of type a -> (x ->)+ b probably not |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
475 // the most optimal way, but it works by just scanning |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
476 // every table for loops in a recursive manor |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
477 for (Table t : tables) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
478 Table.checkForLoop(t, new ArrayList<Table>()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
479 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
480 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
481 // find the graph, at this point we know there are no |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
482 // cycles, thus a solution exists |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
483 for (int i = 0; i < tables.size(); i++) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
484 final List<Table> needs = tables.get(i).requires(tables.subList(0, i + 1)); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
485 if (needs.size() > 0) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
486 tables.removeAll(needs); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
487 tables.addAll(i, needs); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
488 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
489 // re-evaluate this position, for there is a new |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
490 // table now |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
491 i--; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
492 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
493 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
494 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
495 // we now have the right order to dump tables |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
496 for (Table t : tables) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
497 // dump the table |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
498 doDump(out, t); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
499 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
500 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
501 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
502 if (!xmlMode) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
503 out.println("COMMIT;"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
504 out.flush(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
505 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
506 // free resources, close the statement |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
507 stmt.close(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
508 // close the connection with the database |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
509 con.close(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
510 // completed database dump |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
511 System.exit(0); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
512 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
513 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
514 if (xmlMode) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
515 exporter = new XMLExporter(out); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
516 exporter.setProperty(XMLExporter.TYPE_NIL, XMLExporter.VALUE_XSI); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
517 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
518 exporter = new SQLExporter(out); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
519 // we want nice table formatted output |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
520 exporter.setProperty(SQLExporter.TYPE_OUTPUT, SQLExporter.VALUE_TABLE); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
521 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
522 exporter.useSchemas(false); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
523 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
524 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
525 // use the given file for reading |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
526 final boolean hasFile = copts.getOption("file").isPresent(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
527 final boolean doEcho = hasFile && copts.getOption("echo").isPresent(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
528 if (hasFile) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
529 final String tmp = copts.getOption("file").getArgument(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
530 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
531 in = getReader(tmp); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
532 } catch (Exception e) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
533 System.err.println("Error: " + e.getMessage()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
534 System.exit(1); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
535 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
536 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
537 // check for batch mode |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
538 int batchSize = 0; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
539 oc = copts.getOption("Xbatching"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
540 if (oc.isPresent()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
541 if (oc.getArgumentCount() == 1) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
542 // parse the number |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
543 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
544 batchSize = Integer.parseInt(oc.getArgument()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
545 } catch (NumberFormatException ex) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
546 // complain to the user |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
547 throw new IllegalArgumentException("Illegal argument for Xbatching: " + oc.getArgument() + " is not a parseable number!"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
548 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
549 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
550 processBatch(batchSize); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
551 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
552 processInteractive(true, doEcho, scolonterm, user); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
553 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
554 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
555 if (!copts.getOption("quiet").isPresent()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
556 // print welcome message |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
557 out.println("Welcome to the MonetDB interactive JDBC terminal!"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
558 if (dbmd != null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
559 out.println("JDBC Driver: " + dbmd.getDriverName() + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
560 " v" + dbmd.getDriverVersion()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
561 out.println("Database Server: " + dbmd.getDatabaseProductName() + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
562 " v" + dbmd.getDatabaseProductVersion()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
563 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
564 out.println("Current Schema: " + con.getSchema()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
565 out.println("Type \\q to quit (you can also use: quit or exit), \\? or \\h for a list of available commands"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
566 out.flush(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
567 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
568 processInteractive(false, doEcho, scolonterm, user); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
569 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
570 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
571 // free resources, close the statement |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
572 stmt.close(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
573 // close the connection with the database |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
574 con.close(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
575 // close the file (if we used a file) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
576 in.close(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
577 } catch (Exception e) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
578 System.err.println("A fatal exception occurred: " + e.toString()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
579 e.printStackTrace(System.err); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
580 // at least try to close the connection properly, since it will |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
581 // close all statements associated with it |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
582 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
583 con.close(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
584 } catch (SQLException ex) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
585 // ok... nice try |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
586 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
587 System.exit(1); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
588 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
589 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
590 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
591 /** |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
592 * Tries to interpret the given String as URL or file. Returns the |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
593 * assigned BufferedReader, or throws an Exception if the given |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
594 * string couldn't be identified as a valid URL or file. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
595 * |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
596 * @param uri URL or filename as String |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
597 * @return a BufferedReader for the uri |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
598 * @throws Exception if uri cannot be identified as a valid URL or file |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
599 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
600 static BufferedReader getReader(final String uri) throws Exception { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
601 BufferedReader ret = null; |
772
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
602 URI u = null; |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
603 |
772
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
604 // Try and parse as URL |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
605 try { |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
606 // Note: as of Java version 20 java.net.URL(String) constructor is deprecated. |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
607 // https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/net/URL.html#%3Cinit%3E(java.lang.String) |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
608 u = new java.net.URI(uri); |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
609 // the URL must start with a scheme such as: "http://" or "https://" else u.toURL() errors |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
610 if (u != null && u.isAbsolute()) { |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
611 final URL url = u.toURL(); |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
612 HttpURLConnection.setFollowRedirects(true); |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
613 final HttpURLConnection con = (HttpURLConnection)url.openConnection(); |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
614 con.setRequestMethod("GET"); |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
615 final String ct = con.getContentType(); |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
616 if ("application/x-gzip".equals(ct)) { |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
617 // open gzip stream |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
618 ret = new BufferedReader(new InputStreamReader( |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
619 new java.util.zip.GZIPInputStream(con.getInputStream()))); |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
620 } else { |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
621 // text/plain otherwise just attempt to read as is |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
622 ret = new BufferedReader(new InputStreamReader(con.getInputStream())); |
770
1b9fe515f574
Fixed javac version 20 compiler warning.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
768
diff
changeset
|
623 } |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
624 } |
772
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
625 } catch (IOException e) { |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
626 // failed to open/read the url |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
627 throw new Exception("Failed to open/read http URL: " + e.getMessage()); |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
628 } catch (Exception e) { |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
629 if (u != null) |
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
630 throw new Exception("Invalid http URL: " + uri + "\n" + e.getMessage()); |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
631 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
632 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
633 if (ret == null) { |
772
9493dacdd186
Fix problem where passed file name contained a : character but was not an URL,
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
770
diff
changeset
|
634 // uri is not a valid URI/URL, so probably a file name |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
635 try { |
770
1b9fe515f574
Fixed javac version 20 compiler warning.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
768
diff
changeset
|
636 ret = new BufferedReader(new java.io.FileReader(uri)); |
1b9fe515f574
Fixed javac version 20 compiler warning.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
768
diff
changeset
|
637 } catch (java.io.FileNotFoundException fnfe) { |
1b9fe515f574
Fixed javac version 20 compiler warning.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
768
diff
changeset
|
638 // the message is descriptive enough, |
1b9fe515f574
Fixed javac version 20 compiler warning.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
768
diff
changeset
|
639 // adds "(No such file or directory)" itself. |
1b9fe515f574
Fixed javac version 20 compiler warning.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
768
diff
changeset
|
640 throw new Exception(fnfe.getMessage()); |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
641 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
642 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
643 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
644 return ret; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
645 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
646 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
647 /** |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
648 * Starts an interactive processing loop, where output is adjusted to an |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
649 * user session. This processing loop is not suitable for bulk processing |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
650 * as in executing the contents of a file, since processing on the given |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
651 * input is done after each row that has been entered. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
652 * |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
653 * @param hasFile a boolean indicating whether a file is used as input |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
654 * @param doEcho a boolean indicating whether to echo the given input |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
655 * @param scolonterm whether a ';' makes this query part complete |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
656 * @param user a String representing the username of the current user |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
657 * @throws IOException if an IO exception occurs |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
658 * @throws SQLException if a database related error occurs |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
659 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
660 private static void processInteractive( |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
661 final boolean hasFile, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
662 final boolean doEcho, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
663 final boolean scolonterm, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
664 final String user) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
665 throws IOException, SQLException |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
666 { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
667 // an SQL stack keeps track of ( " and ' |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
668 final SQLStack stack = new SQLStack(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
669 boolean lastac = false; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
670 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
671 if (!hasFile) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
672 lastac = con.getAutoCommit(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
673 out.println("auto commit mode: " + (lastac ? "on" : "off")); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
674 out.print(getPrompt(stack, true)); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
675 out.flush(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
676 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
677 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
678 String curLine; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
679 String query = ""; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
680 boolean doProcess; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
681 boolean wasComplete = true; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
682 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
683 // the main (interactive) process loop |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
684 for (long i = 1; true; i++) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
685 // Manually read a line, because we want to detect an EOF |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
686 // (ctrl-D). Doing so allows to have a terminator for query |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
687 // which is not based on a special character, as is the |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
688 // problem for XQuery |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
689 curLine = in.readLine(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
690 if (curLine == null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
691 out.println(""); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
692 if (!query.isEmpty()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
693 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
694 executeQuery(query, stmt, out, !hasFile); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
695 } catch (SQLException e) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
696 out.flush(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
697 do { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
698 if (hasFile) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
699 System.err.println("Error on line " + i + ": [" + e.getSQLState() + "] " + e.getMessage()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
700 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
701 System.err.println("Error [" + e.getSQLState() + "]: " + e.getMessage()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
702 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
703 // print all error messages in the chain (if any) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
704 } while ((e = e.getNextException()) != null); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
705 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
706 query = ""; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
707 wasComplete = true; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
708 if (!hasFile) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
709 final boolean ac = con.getAutoCommit(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
710 if (ac != lastac) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
711 out.println("auto commit mode: " + (ac ? "on" : "off")); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
712 lastac = ac; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
713 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
714 out.print(getPrompt(stack, wasComplete)); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
715 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
716 out.flush(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
717 // try to read again |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
718 continue; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
719 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
720 // user did ctrl-D without something in the buffer, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
721 // so terminate |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
722 break; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
723 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
724 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
725 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
726 if (doEcho) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
727 out.println(curLine); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
728 out.flush(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
729 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
730 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
731 // a query part is a line of an SQL query |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
732 QueryPart qp = scanQuery(curLine, stack, scolonterm); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
733 if (!qp.isEmpty()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
734 final String command = qp.getQuery(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
735 doProcess = true; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
736 if (wasComplete) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
737 doProcess = false; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
738 // check for commands only when the previous row was complete |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
739 if (command.equals("\\q") || command.equals("quit") || command.equals("exit")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
740 break; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
741 } else if (dbmd != null && command.startsWith("\\d")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
742 processDescribeCmd(command, scolonterm); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
743 } else if (command.startsWith("\\v")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
744 if (command.equals("\\vsci")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
745 MDBvalidator.validateSqlCatalogIntegrity(con, true); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
746 } else if (command.equals("\\vsci_noheader")) { // used only for internal automated testing |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
747 MDBvalidator.validateSqlCatalogIntegrity(con, false); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
748 } else if (command.equals("\\vsni")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
749 MDBvalidator.validateSqlNetcdfTablesIntegrity(con, true); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
750 } else if (command.equals("\\vsni_noheader")) { // used only for internal automated testing |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
751 MDBvalidator.validateSqlNetcdfTablesIntegrity(con, false); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
752 } else if (command.equals("\\vsgi")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
753 MDBvalidator.validateSqlGeomTablesIntegrity(con, true); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
754 } else if (command.equals("\\vsgi_noheader")) { // used only for internal automated testing |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
755 MDBvalidator.validateSqlGeomTablesIntegrity(con, false); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
756 } else if (command.startsWith("\\vsi ")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
757 String schema_nm = command.substring(5); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
758 MDBvalidator.validateSchemaIntegrity(con, schema_nm, true); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
759 } else if (command.startsWith("\\vsi_noheader ")) { // used only for internal automated testing |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
760 String schema_nm = command.substring(14); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
761 MDBvalidator.validateSchemaIntegrity(con, schema_nm, false); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
762 } else if (command.equals("\\vdbi")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
763 MDBvalidator.validateDBIntegrity(con, true); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
764 } else if (command.equals("\\vdbi_noheader")) { // used only for internal automated testing |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
765 MDBvalidator.validateDBIntegrity(con, false); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
766 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
767 showCommands(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
768 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
769 } else if (command.startsWith("\\l") || command.startsWith("\\i")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
770 String object = command.substring(2).trim(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
771 if (scolonterm && object.endsWith(";")) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
772 object = object.substring(0, object.length() - 1); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
773 if (object.isEmpty()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
774 System.err.println("Usage: '" + command.substring(0, 2) + "<uri>' where <uri> is a file or URL"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
775 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
776 // temporarily redirect input from in |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
777 final BufferedReader console = in; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
778 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
779 in = getReader(object); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
780 if (command.startsWith("\\l")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
781 processInteractive(true, doEcho, scolonterm, user); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
782 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
783 processBatch(0); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
784 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
785 } catch (Exception e) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
786 out.flush(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
787 System.err.println("Error: " + e.getMessage()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
788 } finally { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
789 // put back in redirection |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
790 in = console; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
791 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
792 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
793 } else if (command.equals("\\?") || command.equals("\\h") || command.startsWith("\\")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
794 showCommands(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
795 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
796 doProcess = true; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
797 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
798 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
799 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
800 if (doProcess) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
801 query += command + (qp.hasOpenQuote() ? "\\n" : " "); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
802 if (qp.isComplete()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
803 // strip off trailing ';' |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
804 query = query.substring(0, query.length() - 2); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
805 // execute query |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
806 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
807 executeQuery(query, stmt, out, !hasFile); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
808 } catch (SQLException e) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
809 out.flush(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
810 final String startmsg = (hasFile ? ("Error on line " + i + ": [") : "Error ["); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
811 do { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
812 System.err.println(startmsg + e.getSQLState() + "] " + e.getMessage()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
813 // print all error messages in the chain (if any) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
814 } while ((e = e.getNextException()) != null); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
815 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
816 query = ""; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
817 wasComplete = true; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
818 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
819 wasComplete = false; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
820 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
821 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
822 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
823 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
824 if (!hasFile) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
825 final boolean ac = con.getAutoCommit(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
826 if (ac != lastac) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
827 out.println("auto commit mode: " + (ac ? "on" : "off")); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
828 lastac = ac; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
829 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
830 out.print(getPrompt(stack, wasComplete)); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
831 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
832 out.flush(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
833 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
834 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
835 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
836 private static void showCommands() |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
837 { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
838 out.println("Available commands:"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
839 out.println("\\q quits this program (you can also use: quit or exit)"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
840 if (dbmd != null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
841 out.println("\\d list available user tables and views in current schema"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
842 out.println("\\dt list available user tables in current schema"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
843 out.println("\\dv list available user views in current schema"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
844 out.println("\\df list available user functions in current schema"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
845 out.println("\\dp list available user procedures in current schema"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
846 out.println("\\ds list available user sequences in current schema"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
847 out.println("\\dn list available user schemas"); |
777
5788507c01b9
Adapt JdbcClient to show information_schema views when using commands: \dS or \dSv or \dvS and current schema is information_schema.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
772
diff
changeset
|
848 out.println("\\dS list available system tables and views in sys/tmp/information_schema schema"); |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
849 out.println("\\dSt list available system tables in sys/tmp schema"); |
777
5788507c01b9
Adapt JdbcClient to show information_schema views when using commands: \dS or \dSv or \dvS and current schema is information_schema.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
772
diff
changeset
|
850 out.println("\\dSv list available system views in sys/information_schema/logging schema"); |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
851 out.println("\\dSf list available system functions in current schema"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
852 out.println("\\dSp list available system procedures in current schema"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
853 out.println("\\dSn list available system schemas"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
854 out.println("\\d <obj> describes the given table or view"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
855 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
856 out.println("\\l<uri> executes the contents of the given file or URL"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
857 out.println("\\i<uri> batch executes the inserts from the given file or URL"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
858 out.println("\\vsci validate sql system catalog integrity"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
859 // out.println("\\vsni validate sql system netcdf tables integrity"); // do not print as it depends on availability of netcdf library on server |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
860 // out.println("\\vsgi validate sql system geom tables integrity"); // do not print as it depends on availability of geom library on server |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
861 out.println("\\vsi <schema> validate integrity of data in the given schema"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
862 out.println("\\vdbi validate integrity of data in all user schemas in the database"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
863 out.println("\\? or \\h this help screen"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
864 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
865 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
866 /** |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
867 * Process the commands that start with \d |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
868 * These commands list the available user or system tables, views, functions, procedures, schemas |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
869 * or user sequences |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
870 * or describe a specific table or view by printing the CREATE DDL statement |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
871 * See also showCommands() |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
872 * These commands are almost the same as in mclient program |
709
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
698
diff
changeset
|
873 * |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
698
diff
changeset
|
874 * @param dcommand the command starting with \d |
bdeabbd46ec6
Resolve javac and javadoc warnings when compiled with JDK19.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
698
diff
changeset
|
875 * @param scolonterm whether a ';' makes this query part complete |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
876 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
877 private static void processDescribeCmd(final String dcommand, final boolean scolonterm) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
878 { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
879 final String command = dcommand.substring(1); // remove the leading \ character first |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
880 ResultSet rs = null; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
881 Statement st = null; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
882 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
883 if (command.equals("d") || command.equals("dt") || command.equals("dv")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
884 // list available user tables and/or views in current schema (maybe tmp schema to show temporary tables) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
885 boolean tablesOnly = command.equals("dt"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
886 boolean viewsOnly = command.equals("dv"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
887 rs = dbmd.getTables(null, con.getSchema(), null, null); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
888 while (rs.next()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
889 final String tableType = rs.getString(4); // 4 = "TABLE_TYPE" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
890 boolean include = (tableType != null && !tableType.startsWith("SYSTEM ")); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
891 if (include && tablesOnly && !tableType.contains("TABLE")) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
892 include = false; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
893 if (include && viewsOnly && !tableType.contains("VIEW")) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
894 include = false; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
895 if (include) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
896 out.println(tableType + "\t" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
897 optAddDqs(rs.getString(2)) + "." + // 2 = "TABLE_SCHEM" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
898 optAddDqs(rs.getString(3)) ); // 3 = "TABLE_NAME" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
899 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
900 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
901 } else |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
902 if (command.equals("dS") || command.equals("dSt") || command.equals("dSv") || command.equals("dtS") || command.equals("dvS")) { |
777
5788507c01b9
Adapt JdbcClient to show information_schema views when using commands: \dS or \dSv or \dvS and current schema is information_schema.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
772
diff
changeset
|
903 // list available system tables and/or views in sys/tmp/information_schema/logging schema |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
904 boolean tablesOnly = command.contains("t"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
905 boolean viewsOnly = command.contains("v"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
906 String curSchema = con.getSchema(); |
777
5788507c01b9
Adapt JdbcClient to show information_schema views when using commands: \dS or \dSv or \dvS and current schema is information_schema.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
772
diff
changeset
|
907 // only schemas: sys, tmp, information_schema and logging contain system tables and/or system views. |
5788507c01b9
Adapt JdbcClient to show information_schema views when using commands: \dS or \dSv or \dvS and current schema is information_schema.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
772
diff
changeset
|
908 if (!("sys".equals(curSchema) || "tmp".equals(curSchema) || "information_schema".equals(curSchema) || "logging".equals(curSchema))) |
5788507c01b9
Adapt JdbcClient to show information_schema views when using commands: \dS or \dSv or \dvS and current schema is information_schema.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
772
diff
changeset
|
909 // when currently in another schema, default to the sys schema else nothing will be listed |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
910 curSchema = "sys"; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
911 rs = dbmd.getTables(null, curSchema, null, null); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
912 while (rs.next()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
913 final String tableType = rs.getString(4); // 4 = "TABLE_TYPE" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
914 boolean include = (tableType != null && tableType.startsWith("SYSTEM ")); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
915 if (include && tablesOnly && !tableType.contains("TABLE")) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
916 include = false; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
917 if (include && viewsOnly && !tableType.contains("VIEW")) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
918 include = false; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
919 if (include) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
920 out.println(tableType + "\t" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
921 optAddDqs(rs.getString(2)) + "." + // 2 = "TABLE_SCHEM" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
922 optAddDqs(rs.getString(3)) ); // 3 = "TABLE_NAME" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
923 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
924 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
925 } else |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
926 if (command.equals("df") || command.equals("dp") || command.equals("dSf") || command.equals("dSp") || command.equals("dfS") || command.equals("dpS")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
927 // list available user/system functions or procedures in current schema (maybe tmp schema) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
928 boolean proceduresOnly = command.contains("p"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
929 boolean systemOnly = command.contains("S"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
930 // Note we cannot use: dbmd.getFunctions(null, con.getSchema(), null); or dbmd.getProcedures(null, con.getSchema(), null); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
931 // as they do not return the full function type name, nor provide information whether it is a system function or system procedure. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
932 // Instead we query the MonetDB system catog tables directly using: |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
933 String qy = "SELECT DISTINCT " + (systemOnly ? "'SYSTEM ' || " : "") + "\"function_type_keyword\" as func_type, " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
934 "\"schemas\".\"name\" as schem_name, \"functions\".\"name\" as func_name" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
935 " FROM sys.\"functions\"" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
936 " JOIN sys.\"function_types\" ON \"functions\".\"type\" = \"function_types\".\"function_type_id\"" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
937 " JOIN sys.\"schemas\" ON \"functions\".\"schema_id\" = \"schemas\".\"id\"" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
938 " WHERE \"functions\".\"system\" = " + (systemOnly ? "true" : "false") + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
939 " AND \"functions\".\"type\" " + (proceduresOnly ? "= 2" : "<> 2") + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
940 " AND \"schemas\".\"name\" = current_schema" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
941 " ORDER BY 2, 3"; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
942 st = con.createStatement(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
943 rs = st.executeQuery(qy); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
944 while (rs.next()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
945 out.println(rs.getString(1) + " \t" + // 1 = func_type |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
946 optAddDqs(rs.getString(2)) + "." + // 2 = schem_name |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
947 optAddDqs(rs.getString(3)) ); // 3 = func_name |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
948 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
949 } else |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
950 if (command.equals("ds")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
951 // list available (user) sequences in current schema |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
952 String qy = "SELECT \"schemas\".\"name\", \"sequences\".\"name\"" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
953 " FROM sys.\"sequences\"" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
954 " JOIN sys.\"schemas\" ON \"sequences\".\"schema_id\" = \"schemas\".\"id\"" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
955 " WHERE \"schemas\".\"name\" = current_schema" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
956 " ORDER BY 1, 2"; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
957 st = con.createStatement(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
958 rs = st.executeQuery(qy); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
959 while (rs.next()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
960 out.println("SEQUENCE " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
961 optAddDqs(rs.getString(1)) + "." + // 1 = schemas.name |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
962 optAddDqs(rs.getString(2)) ); // 2 = sequences.name |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
963 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
964 } else |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
965 if (command.equals("dn") || command.equals("dSn") || command.equals("dnS")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
966 // list available user/system schemas in the database |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
967 boolean systemOnly = command.contains("S"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
968 String qy = "SELECT \"name\"" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
969 " FROM sys.\"schemas\"" + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
970 " WHERE \"system\" = " + (systemOnly ? "true" : "false") + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
971 " ORDER BY 1"; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
972 String schema_type = (systemOnly ? "SYSTEM SCHEMA\t" : "SCHEMA\t"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
973 st = con.createStatement(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
974 rs = st.executeQuery(qy); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
975 while (rs.next()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
976 out.println(schema_type + optAddDqs(rs.getString(1)) ); // 1 = schemas.name |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
977 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
978 } else |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
979 if (command.startsWith("d ")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
980 // describes the given table or view name. It may be a fully qualified name such as: sys."keys" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
981 String object = command.substring(2).trim(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
982 if (scolonterm && object.endsWith(";")) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
983 object = object.substring(0, object.length() - 1); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
984 if (object.isEmpty()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
985 System.err.println("Missing name of object to describe"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
986 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
987 // extract the name of the schema first. If none found use current schema |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
988 String schema; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
989 String obj_nm = object; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
990 int len; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
991 boolean found = false; |
698
6beecac8aa1b
Use indexOf(char) instead of indexOf(String) where possible.
Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
parents:
675
diff
changeset
|
992 final int dot = object.indexOf('.'); |
675
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
993 if (dot > 0) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
994 // use specified schema |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
995 schema = object.substring(0, dot); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
996 obj_nm = object.substring(dot + 1); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
997 // remove potential surrounding double quotes around schema name |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
998 len = schema.length(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
999 if (len > 2 && schema.charAt(0) == '"' && schema.charAt(len -1) == '"') |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1000 schema = schema.substring(1, len -1); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1001 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1002 // use current schema |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1003 schema = con.getSchema(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1004 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1005 // remove potential surrounding double quotes around table or view name |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1006 len = obj_nm.length(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1007 if (len > 2 && obj_nm.charAt(0) == '"' && obj_nm.charAt(len -1) == '"') |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1008 obj_nm = obj_nm.substring(1, len -1); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1009 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1010 // System.err.println("calling dbmd.getTables(" + schema + ", " + obj_nm + ")"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1011 rs = dbmd.getTables(null, schema, obj_nm, null); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1012 while (rs.next() && !found) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1013 final String schemaName = rs.getString(2); // 2 = "TABLE_SCHEM" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1014 final String tableName = rs.getString(3); // 3 = "TABLE_NAME" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1015 if (obj_nm.equals(tableName) && schema.equals(schemaName)) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1016 String tableType = rs.getString(4); // 4 = "TABLE_TYPE" |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1017 if (tableType.startsWith("SYSTEM ")) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1018 tableType = tableType.substring(7); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1019 // we found it, describe it |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1020 exporter.dumpSchema(dbmd, tableType, schemaName, tableName); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1021 found = true; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1022 break; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1023 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1024 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1025 if (!found) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1026 System.err.println("table or view: " + schema + "." + obj_nm + " does not exist"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1027 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1028 } else |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1029 if (command.startsWith("d")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1030 System.err.println("unknown sub-command for \\d: " + command.substring(1)); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1031 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1032 showCommands(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1033 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1034 } catch (SQLException e) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1035 out.flush(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1036 do { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1037 System.err.println("Error [" + e.getSQLState() + "]: " + e.getMessage()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1038 // print all error messages in the chain (if any) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1039 } while ((e = e.getNextException()) != null); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1040 } finally { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1041 if (rs != null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1042 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1043 rs.close(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1044 } catch (SQLException e) { /* ignore */ } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1045 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1046 if (st != null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1047 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1048 st.close(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1049 } catch (SQLException e) { /* ignore */ } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1050 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1051 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1052 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1053 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1054 private static String optAddDqs(final String name) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1055 { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1056 if (name.contains(" ") || name.contains("\t") || name.contains("\n")) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1057 return Exporter.dq(name); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1058 return name; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1059 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1060 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1061 /** |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1062 * Executes the given query and prints the result tabularised to the |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1063 * given PrintWriter stream. The result of this method is the |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1064 * default output of a query: tabular data. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1065 * |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1066 * @param query the query to execute |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1067 * @param stmt the Statement to execute the query on |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1068 * @param out the PrintWriter to write to |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1069 * @param showTiming flag to specify if timing information nees to be printed |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1070 * @throws SQLException if a database related error occurs |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1071 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1072 private static void executeQuery(final String query, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1073 final Statement stmt, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1074 final PrintWriter out, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1075 final boolean showTiming) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1076 throws SQLException |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1077 { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1078 // warnings generated during querying |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1079 SQLWarning warn; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1080 long startTime = (showTiming ? System.currentTimeMillis() : 0); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1081 long finishTime = 0; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1082 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1083 // execute the query, let the driver decide what type it is |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1084 int aff = -1; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1085 boolean nextRslt = stmt.execute(query, Statement.RETURN_GENERATED_KEYS); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1086 if (!nextRslt) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1087 aff = stmt.getUpdateCount(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1088 do { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1089 if (nextRslt) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1090 // we have a ResultSet, print it |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1091 final ResultSet rs = stmt.getResultSet(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1092 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1093 exporter.dumpResultSet(rs); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1094 if (showTiming) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1095 finishTime = System.currentTimeMillis(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1096 out.println("Elapsed Time: " + (finishTime - startTime) + " ms"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1097 startTime = finishTime; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1098 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1099 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1100 // if there were warnings for this result, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1101 // show them! |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1102 warn = rs.getWarnings(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1103 if (warn != null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1104 // force stdout to be written so the |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1105 // warning appears below it |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1106 out.flush(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1107 do { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1108 System.err.println("ResultSet warning: " + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1109 warn.getMessage()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1110 warn = warn.getNextWarning(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1111 } while (warn != null); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1112 rs.clearWarnings(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1113 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1114 rs.close(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1115 } else if (aff != -1) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1116 String timingoutput = ""; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1117 if (showTiming) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1118 finishTime = System.currentTimeMillis(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1119 timingoutput = ". Elapsed Time: " + (finishTime - startTime) + " ms"; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1120 startTime = finishTime; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1121 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1122 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1123 if (aff == Statement.SUCCESS_NO_INFO) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1124 out.println("Operation successful" + timingoutput); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1125 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1126 // we have an update count |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1127 // see if a key was generated |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1128 final ResultSet rs = stmt.getGeneratedKeys(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1129 final boolean hasGeneratedKeyData = rs.next(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1130 out.println(aff + " affected row" + (aff != 1 ? "s" : "") + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1131 (hasGeneratedKeyData ? ", last generated key: " + rs.getString(1) : "") + |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1132 timingoutput); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1133 rs.close(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1134 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1135 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1136 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1137 out.flush(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1138 } while ((nextRslt = stmt.getMoreResults()) || |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1139 (aff = stmt.getUpdateCount()) != -1); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1140 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1141 // if there were warnings for this statement show them! |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1142 warn = stmt.getWarnings(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1143 while (warn != null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1144 System.err.println("Statement warning: " + warn.getMessage()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1145 warn = warn.getNextWarning(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1146 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1147 stmt.clearWarnings(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1148 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1149 // if there were warnings for this connection show them! |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1150 warn = con.getWarnings(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1151 while (warn != null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1152 // suppress warning when issueing a "set schema xyz;" command |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1153 // if ( !(warn.getMessage()).equals("Server enabled auto commit mode while local state already was auto commit.") ) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1154 System.err.println("Connection warning: " + warn.getMessage()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1155 warn = warn.getNextWarning(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1156 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1157 con.clearWarnings(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1158 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1159 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1160 /** |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1161 * Starts a processing loop optimized for processing (large) chunks of |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1162 * continuous data, such as input from a file. Unlike in the interactive |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1163 * loop above, queries are sent only to the database if a certain batch |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1164 * amount is reached. No client side query checks are made, but everything |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1165 * is sent to the server as-is. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1166 * |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1167 * @param batchSize the number of items to store in the batch before |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1168 * sending them to the database for execution. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1169 * @throws IOException if an IO exception occurs. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1170 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1171 private static void processBatch(final int batchSize) throws IOException { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1172 final StringBuilder query = new StringBuilder(2048); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1173 int i = 0; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1174 try { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1175 String curLine; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1176 // the main loop |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1177 for (i = 1; (curLine = in.readLine()) != null; i++) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1178 query.append(curLine); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1179 if (curLine.endsWith(";")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1180 // lousy check for end of statement, but in batch mode it |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1181 // is not very important to catch all end of statements... |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1182 stmt.addBatch(query.toString()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1183 query.setLength(0); // clear the buffer |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1184 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1185 query.append('\n'); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1186 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1187 if (batchSize > 0 && i % batchSize == 0) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1188 stmt.executeBatch(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1189 // stmt.clearBatch(); // this is no longer needed after call executeBatch(), see https://www.monetdb.org/bugzilla/show_bug.cgi?id=6953 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1190 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1191 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1192 stmt.addBatch(query.toString()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1193 stmt.executeBatch(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1194 // stmt.clearBatch(); // this is no longer needed after call executeBatch(), see https://www.monetdb.org/bugzilla/show_bug.cgi?id=6953 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1195 } catch (SQLException e) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1196 do { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1197 System.err.println("Error at line " + i + ": [" + e.getSQLState() + "] " + e.getMessage()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1198 // print all error messages in the chain (if any) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1199 } while ((e = e.getNextException()) != null); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1200 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1201 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1202 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1203 /** |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1204 * Wrapper method that decides to dump SQL or XML. In the latter case, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1205 * this method does the XML data generation. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1206 * |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1207 * @param out a Writer to write the data to |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1208 * @param table the table to dump |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1209 * @throws SQLException if a database related error occurs |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1210 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1211 private static void doDump(final PrintWriter out, final Table table) throws SQLException { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1212 final String tableType = table.getType(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1213 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1214 // dump CREATE definition of this table/view |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1215 exporter.dumpSchema(dbmd, tableType, table.getSchem(), table.getName()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1216 out.println(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1217 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1218 // only dump data from real tables, not from VIEWs / MERGE / REMOTE / REPLICA / STREAM tables |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1219 if (tableType.contains("TABLE") |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1220 && !tableType.equals("MERGE TABLE") |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1221 && !tableType.equals("REMOTE TABLE") |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1222 && !tableType.equals("REPLICA TABLE") |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1223 && !tableType.equals("STREAM TABLE")) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1224 final ResultSet rs = stmt.executeQuery("SELECT * FROM " + table.getFqnameQ()); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1225 if (rs != null) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1226 exporter.dumpResultSet(rs); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1227 rs.close(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1228 out.println(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1229 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1230 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1231 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1232 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1233 /** |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1234 * Simple helper method that generates a prompt. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1235 * |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1236 * @param stack the current SQLStack |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1237 * @param compl whether the statement is complete |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1238 * @return a prompt which consist of "sql" plus the top of the stack |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1239 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1240 private static String getPrompt(final SQLStack stack, final boolean compl) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1241 return (compl ? "sql" : "more") + (stack.empty() ? ">" : stack.peek()) + " "; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1242 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1243 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1244 /** |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1245 * Scans the given string and tries to discover if it is a complete query |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1246 * or that there needs something to be added. If a string doesn't end with |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1247 * a ; it is considered not to be complete. SQL string quotation using ' and |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1248 * SQL identifier quotation using " is taken into account when scanning a |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1249 * string this way. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1250 * Additionally, this method removes comments from the SQL statements, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1251 * identified by -- and removes white space where appropriate. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1252 * |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1253 * @param query the query to parse |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1254 * @param stack query stack to work with |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1255 * @param scolonterm whether a ';' makes this query part complete |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1256 * @return a QueryPart object containing the results of this parse |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1257 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1258 private static QueryPart scanQuery( |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1259 final String query, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1260 final SQLStack stack, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1261 final boolean scolonterm) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1262 { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1263 // examine string, char for char |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1264 final boolean wasInString = (stack.peek() == '\''); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1265 final boolean wasInIdentifier = (stack.peek() == '"'); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1266 boolean escaped = false; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1267 int len = query.length(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1268 for (int i = 0; i < len; i++) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1269 switch(query.charAt(i)) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1270 case '\\': |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1271 escaped = !escaped; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1272 break; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1273 default: |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1274 escaped = false; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1275 break; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1276 case '\'': |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1277 /** |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1278 * We can not be in a string if we are in an identifier. So |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1279 * If we find a ' and are not in an identifier, and not in |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1280 * a string we can safely assume we will be now in a string. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1281 * If we are in a string already, we should stop being in a |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1282 * string if we find a quote which is not prefixed by a \, |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1283 * for that would be an escaped quote. However, a nasty |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1284 * situation can occur where the string is like 'test \\'. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1285 * As obvious, a test for a \ in front of a ' doesn't hold |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1286 * here. Because 'test \\\'' can exist as well, we need to |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1287 * know if a quote is prefixed by an escaping slash or not. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1288 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1289 if (!escaped && stack.peek() != '"') { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1290 if (stack.peek() != '\'') { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1291 // although it makes no sense to escape a quote |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1292 // outside a string, it is escaped, thus not meant |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1293 // as quote for us, apparently |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1294 stack.push('\''); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1295 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1296 stack.pop(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1297 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1298 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1299 // reset escaped flag |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1300 escaped = false; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1301 break; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1302 case '"': |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1303 if (!escaped && stack.peek() != '\'') { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1304 if (stack.peek() != '"') { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1305 stack.push('"'); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1306 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1307 stack.pop(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1308 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1309 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1310 // reset escaped flag |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1311 escaped = false; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1312 break; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1313 case '-': |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1314 if (!escaped && stack.peek() != '\'' && stack.peek() != '"' && i + 1 < len && query.charAt(i + 1) == '-') { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1315 len = i; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1316 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1317 escaped = false; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1318 break; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1319 case '(': |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1320 if (!escaped && stack.peek() != '\'' && stack.peek() != '"') { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1321 stack.push('('); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1322 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1323 escaped = false; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1324 break; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1325 case ')': |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1326 if (!escaped && stack.peek() == '(') { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1327 stack.pop(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1328 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1329 escaped = false; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1330 break; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1331 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1332 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1333 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1334 int start = 0; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1335 if (!wasInString && !wasInIdentifier && len > 0) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1336 // trim spaces at the start of the string |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1337 for (; start < len && Character.isWhitespace(query.charAt(start)); start++); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1338 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1339 int stop = len - 1; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1340 if (stack.peek() != '\'' && !wasInIdentifier && stop > start) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1341 // trim spaces at the end of the string |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1342 for (; stop >= start && Character.isWhitespace(query.charAt(stop)); stop--); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1343 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1344 stop++; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1345 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1346 if (start == stop) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1347 // we have an empty string |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1348 return new QueryPart(false, null, stack.peek() == '\'' || stack.peek() == '"'); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1349 } else if (stack.peek() == '\'' || stack.peek() == '"') { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1350 // we have an open quote |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1351 return new QueryPart(false, query.substring(start, stop), true); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1352 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1353 // see if the string is complete |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1354 if (scolonterm && query.charAt(stop - 1) == ';') { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1355 return new QueryPart(true, query.substring(start, stop), false); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1356 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1357 return new QueryPart(false, query.substring(start, stop), false); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1358 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1359 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1360 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1361 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1362 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1363 /** |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1364 * A QueryPart is (a part of) a SQL query. In the QueryPart object information |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1365 * like the actual SQL query string, whether it has an open quote and the like |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1366 * is stored. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1367 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1368 final class QueryPart { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1369 private final boolean complete; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1370 private final String query; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1371 private final boolean open; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1372 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1373 QueryPart(final boolean complete, final String query, final boolean open) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1374 this.complete = complete; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1375 this.query = query; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1376 this.open = open; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1377 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1378 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1379 boolean isEmpty() { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1380 return query == null; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1381 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1382 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1383 boolean isComplete() { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1384 return complete; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1385 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1386 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1387 String getQuery() { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1388 return query; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1389 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1390 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1391 boolean hasOpenQuote() { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1392 return open; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1393 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1394 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1395 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1396 /** |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1397 * An SQLStack is a simple stack that keeps track of open brackets and |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1398 * (single and double) quotes in an SQL query. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1399 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1400 final class SQLStack { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1401 final StringBuilder stack = new StringBuilder(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1402 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1403 char peek() { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1404 if (empty()) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1405 return '\0'; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1406 } else { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1407 return stack.charAt(stack.length() - 1); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1408 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1409 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1410 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1411 char pop() { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1412 final char tmp = peek(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1413 if (tmp != '\0') { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1414 stack.setLength(stack.length() - 1); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1415 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1416 return tmp; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1417 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1418 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1419 char push(char item) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1420 stack.append(item); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1421 return item; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1422 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1423 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1424 boolean empty() { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1425 return stack.length() == 0; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1426 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1427 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1428 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1429 /** |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1430 * A Table represents an SQL table. All data required to |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1431 * generate a fully qualified name is stored, as well as dependency |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1432 * data. |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1433 */ |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1434 final class Table { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1435 final String schem; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1436 final String name; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1437 final String type; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1438 final String fqname; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1439 final ArrayList<Table> needs = new ArrayList<Table>(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1440 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1441 Table(final String schem, final String name, final String type) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1442 this.schem = schem; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1443 this.name = name; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1444 this.type = type; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1445 this.fqname = schem + "." + name; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1446 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1447 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1448 void addDependency(final Table dependsOn) throws Exception { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1449 if (this.fqname.equals(dependsOn.fqname)) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1450 throw new Exception("Cyclic dependency graphs are not supported (foreign key relation references self)"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1451 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1452 if (dependsOn.needs.contains(this)) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1453 throw new Exception("Cyclic dependency graphs are not supported (foreign key relation a->b and b->a)"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1454 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1455 if (!needs.contains(dependsOn)) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1456 needs.add(dependsOn); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1457 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1458 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1459 List<Table> requires(final List<Table> existingTables) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1460 if (existingTables == null || existingTables.isEmpty()) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1461 return new ArrayList<Table>(needs); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1462 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1463 final ArrayList<Table> req = new ArrayList<Table>(); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1464 for (Table n : needs) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1465 if (!existingTables.contains(n)) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1466 req.add(n); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1467 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1468 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1469 return req; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1470 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1471 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1472 final String getSchem() { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1473 return schem; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1474 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1475 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1476 final String getName() { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1477 return name; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1478 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1479 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1480 final String getType() { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1481 return type; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1482 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1483 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1484 final String getFqname() { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1485 return fqname; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1486 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1487 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1488 final String getFqnameQ() { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1489 return Exporter.dq(schem) + "." + Exporter.dq(name); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1490 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1491 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1492 public final String toString() { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1493 return fqname; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1494 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1495 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1496 static final Table findTable(final String schname, final String tblname, final List<Table> list) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1497 for (Table t : list) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1498 if (t.schem.equals(schname) && t.name.equals(tblname)) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1499 return t; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1500 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1501 // not found |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1502 return null; |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1503 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1504 |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1505 static final void checkForLoop(final Table table, final List<Table> parents) throws Exception { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1506 parents.add(table); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1507 for (int i = 0; i < table.needs.size(); i++) { |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1508 Table child = table.needs.get(i); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1509 if (parents.contains(child)) |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1510 throw new Exception("Cyclic dependency graphs are not supported (cycle detected for " + child.fqname + ")"); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1511 checkForLoop(child, parents); |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1512 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1513 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1514 } |
844139b33cdd
Remove carriage returns (\r) from files.
Sjoerd Mullender <sjoerd@acm.org>
parents:
628
diff
changeset
|
1515 |