annotate src/main/java/org/monetdb/client/JdbcClient.java @ 391:f523727db392

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