changeset 312:df815a403bf4

Improved JdbcClient program by including the schema prefix when dumping schema objects. It now behaves more similar to mclient -D -N.
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Thu, 22 Aug 2019 19:06:16 +0200 (2019-08-22)
parents 0f55802721dd
children f2750ea9f93d
files ChangeLog src/main/java/nl/cwi/monetdb/util/SQLExporter.java src/main/java/nl/cwi/monetdb/util/XMLExporter.java
diffstat 3 files changed, 31 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,8 @@
 # This file is updated with Maddlog
 
 * Thu Aug 22 2019 Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
+- Improved JdbcClient program by including the schema prefix when dumping
+  schema objects. It now behaves more similar to mclient -D -N.
 - Improved JdbcClient program. It now also dumps definitions of MERGE TABLE,
   REMOTE TABLE, REPLICA TABLE and STREAM TABLE when dumping all tables.
 
--- a/src/main/java/nl/cwi/monetdb/util/SQLExporter.java
+++ b/src/main/java/nl/cwi/monetdb/util/SQLExporter.java
@@ -57,7 +57,7 @@ public final class SQLExporter extends E
 		assert schema != null;
 		assert name != null;
 
-		final String fqname = (!useSchema ? dq(schema) + "." : "") + dq(name);
+		final String fqname = (useSchema ? dq(schema) + "." : "") + dq(name);
 
 		if (useSchema)
 			changeSchema(schema);
@@ -295,6 +295,7 @@ public final class SQLExporter extends E
 				final String idxname = cols.getString(colIndexNm);
 				if (idxname != null && !idxname.endsWith("_fkey")) {
 					out.print("CREATE INDEX " + dq(idxname) + " ON " +
+						dq(cols.getString("TABLE_SCHEM")) + "." +
 						dq(cols.getString("TABLE_NAME")) + " (" +
 						dq(cols.getString(colIndexColNm)));
 
@@ -413,7 +414,7 @@ public final class SQLExporter extends E
 
 		final StringBuilder strbuf = new StringBuilder(1024);
 		strbuf.append("INSERT INTO ");
-		if (!useSchema) {
+		if (useSchema) {
 			final String schema = rsmd.getSchemaName(1);
 			if (schema != null && !schema.isEmpty())
 				strbuf.append(dq(schema)).append(".");
@@ -536,10 +537,17 @@ public final class SQLExporter extends E
 
 		if (!schema.equals(lastSchema.peek())) {
 			if (!lastSchema.contains(schema)) {
-				// create schema
-				out.print("CREATE SCHEMA ");
-				out.print(dq(schema));
-				out.println(";\n");
+				// do not generate CREATE SCHEMA cmds for existing system schemas
+				if (!schema.equals("sys")
+				 && !schema.equals("tmp")
+				 && !schema.equals("json")
+				 && !schema.equals("profiler")
+				 && !schema.equals("bam")) {
+					// create schema
+					out.print("CREATE SCHEMA ");
+					out.print(dq(schema));
+					out.println(";\n");
+				}
 				lastSchema.push(schema);
 			}
 		
--- a/src/main/java/nl/cwi/monetdb/util/XMLExporter.java
+++ b/src/main/java/nl/cwi/monetdb/util/XMLExporter.java
@@ -25,6 +25,18 @@ public final class XMLExporter extends E
 		super(out);
 	}
 
+	/**
+	 * A helper method to generate XML xsd schema code for a given table.
+	 * This method performs all required lookups to find all relations and
+	 * column information.
+	 *
+	 * @param dbmd a DatabaseMetaData object to query on (not null)
+	 * @param type the type of the object, e.g. VIEW, TABLE (not null)
+	 * @param catalog the catalog the object is in
+	 * @param schema the schema the object is in (not null)
+	 * @param name the table to describe (not null)
+	 * @throws SQLException if a database related error occurs
+	 */
 	public void dumpSchema(
 			final java.sql.DatabaseMetaData dbmd,
 			final String type,
@@ -39,7 +51,7 @@ public final class XMLExporter extends E
 			types[0] = type;
 			final ResultSet tbl = dbmd.getTables(catalog, schema, name, types);
 			if (tbl != null) {
-				final String fqname = (!useSchema ? dq(schema) + "." : "") + dq(name);
+				final String fqname = (useSchema ? dq(schema) + "." : "") + dq(name);
 				if (!tbl.next()) {
 					tbl.close();
 					throw new SQLException("Whoops no meta data for view " + fqname);
@@ -361,7 +373,7 @@ public final class XMLExporter extends E
 	public void dumpResultSet(final ResultSet rs) throws SQLException {
 		// write simple XML serialisation
 		final java.sql.ResultSetMetaData rsmd = rs.getMetaData();
-		if (!useSchema)
+		if (useSchema)
 			out.println("<" + rsmd.getSchemaName(1) + ">");
 		out.println("<" + rsmd.getTableName(1) + ">");
 		String data;
@@ -405,7 +417,7 @@ public final class XMLExporter extends E
 			out.println("  </row>");
 		}
 		out.println("</" + rsmd.getTableName(1) + ">");
-		if (!useSchema)
+		if (useSchema)
 			out.println("</" + rsmd.getSchemaName(1) + ">");
 	}