changeset 457:ebda95332d57

Add support for double quoted schema names for the \vsi command Optimise code at several places.
author Martin van Dinther <martin.van.dinther@monetdbsolutions.com>
date Wed, 17 Mar 2021 21:41:14 +0100 (2021-03-17)
parents 055dd9264d46
children 333c3752e118
files src/main/java/org/monetdb/client/JdbcClient.java src/main/java/org/monetdb/util/MDBvalidator.java
diffstat 2 files changed, 39 insertions(+), 52 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/org/monetdb/client/JdbcClient.java
+++ b/src/main/java/org/monetdb/client/JdbcClient.java
@@ -790,28 +790,30 @@ public class JdbcClient {	/* cannot (yet
 							if (tbl != null)
 								tbl.close();
 						}
-					} else if (command.equals("\\vsci")) {
-						MDBvalidator.validateSqlCatalogIntegrity(con);
-					} else if (command.equals("\\vsci_noheader")) {	// used only for internal automated testing
-						MDBvalidator.validateSqlCatalogIntegrity(con, false);
-					} else if (command.equals("\\vsni")) {
-						MDBvalidator.validateSqlNetcdfTablesIntegrity(con);
-					} else if (command.equals("\\vsni_noheader")) {	// used only for internal automated testing
-						MDBvalidator.validateSqlNetcdfTablesIntegrity(con, false);
-					} else if (command.equals("\\vsgi")) {
-						MDBvalidator.validateSqlGeomTablesIntegrity(con);
-					} else if (command.equals("\\vsgi_noheader")) {	// used only for internal automated testing
-						MDBvalidator.validateSqlGeomTablesIntegrity(con, false);
-					} else if (command.startsWith("\\vsi ")) {
-						String schema_arg = command.substring(5);
-						MDBvalidator.validateSchemaIntegrity(con, schema_arg);
-					} else if (command.startsWith("\\vsi_noheader ")) {	// used only for internal automated testing
-						String schema_arg = command.substring(14);
-						MDBvalidator.validateSchemaIntegrity(con, schema_arg, false);
-					} else if (command.equals("\\vdbi")) {
-						MDBvalidator.validateDBIntegrity(con);
-					} else if (command.equals("\\vdbi_noheader")) {	// used only for internal automated testing
-						MDBvalidator.validateDBIntegrity(con, false);
+					} else if (command.startsWith("\\v")) {
+						if (command.equals("\\vsci")) {
+							MDBvalidator.validateSqlCatalogIntegrity(con, true);
+						} else if (command.equals("\\vsci_noheader")) {	// used only for internal automated testing
+							MDBvalidator.validateSqlCatalogIntegrity(con, false);
+						} else if (command.equals("\\vsni")) {
+							MDBvalidator.validateSqlNetcdfTablesIntegrity(con, true);
+						} else if (command.equals("\\vsni_noheader")) {	// used only for internal automated testing
+							MDBvalidator.validateSqlNetcdfTablesIntegrity(con, false);
+						} else if (command.equals("\\vsgi")) {
+							MDBvalidator.validateSqlGeomTablesIntegrity(con, true);
+						} else if (command.equals("\\vsgi_noheader")) {	// used only for internal automated testing
+							MDBvalidator.validateSqlGeomTablesIntegrity(con, false);
+						} else if (command.startsWith("\\vsi ")) {
+							String schema_nm = command.substring(5);
+							MDBvalidator.validateSchemaIntegrity(con, schema_nm, true);
+						} else if (command.startsWith("\\vsi_noheader ")) {	// used only for internal automated testing
+							String schema_nm = command.substring(14);
+							MDBvalidator.validateSchemaIntegrity(con, schema_nm, false);
+						} else if (command.equals("\\vdbi")) {
+							MDBvalidator.validateDBIntegrity(con, true);
+						} else if (command.equals("\\vdbi_noheader")) {	// used only for internal automated testing
+							MDBvalidator.validateDBIntegrity(con, false);
+						}
 					} else if (command.startsWith("\\l") || command.startsWith("\\i")) {
 						String object = command.substring(2).trim();
 						if (scolonterm && object.endsWith(";"))
@@ -1079,8 +1081,8 @@ public class JdbcClient {	/* cannot (yet
 			final boolean scolonterm)
 	{
 		// examine string, char for char
-		boolean wasInString = (stack.peek() == '\'');
-		boolean wasInIdentifier = (stack.peek() == '"');
+		final boolean wasInString = (stack.peek() == '\'');
+		final boolean wasInIdentifier = (stack.peek() == '"');
 		boolean escaped = false;
 		int len = query.length();
 		for (int i = 0; i < len; i++) {
--- a/src/main/java/org/monetdb/util/MDBvalidator.java
+++ b/src/main/java/org/monetdb/util/MDBvalidator.java
@@ -109,11 +109,7 @@ public final class MDBvalidator {
 */
 
 	// public class methods (called from JdbcClient.java)
-	public static void validateSqlCatalogIntegrity(final Connection conn) {
-		validateSqlCatalogIntegrity(conn, true);
-	}
-
-	public static void validateSqlCatalogIntegrity(final Connection conn, boolean showValidationHeaderInfo) {
+	public static void validateSqlCatalogIntegrity(final Connection conn, final boolean showValidationHeaderInfo) {
 		final MDBvalidator mdbv = new MDBvalidator(conn);
 		mdbv.showValidationInfo = showValidationHeaderInfo;
 		if (mdbv.checkMonetDBVersion()) {
@@ -122,11 +118,7 @@ public final class MDBvalidator {
 		}
 	}
 
-	public static void validateSqlNetcdfTablesIntegrity(final Connection conn) {
-		validateSqlNetcdfTablesIntegrity(conn, true);
-	}
-
-	public static void validateSqlNetcdfTablesIntegrity(final Connection conn, boolean showValidationHeaderInfo) {
+	public static void validateSqlNetcdfTablesIntegrity(final Connection conn, final boolean showValidationHeaderInfo) {
 		final MDBvalidator mdbv = new MDBvalidator(conn);
 		mdbv.showValidationInfo = showValidationHeaderInfo;
 		if (mdbv.checkMonetDBVersion()) {
@@ -140,11 +132,7 @@ public final class MDBvalidator {
 		}
 	}
 
-	public static void validateSqlGeomTablesIntegrity(final Connection conn) {
-		validateSqlGeomTablesIntegrity(conn, true);
-	}
-
-	public static void validateSqlGeomTablesIntegrity(final Connection conn, boolean showValidationHeaderInfo) {
+	public static void validateSqlGeomTablesIntegrity(final Connection conn, final boolean showValidationHeaderInfo) {
 		final MDBvalidator mdbv = new MDBvalidator(conn);
 		mdbv.showValidationInfo = showValidationHeaderInfo;
 		if (mdbv.checkMonetDBVersion()) {
@@ -153,25 +141,21 @@ public final class MDBvalidator {
 		}
 	}
 
-	public static void validateSchemaIntegrity(final Connection conn, final String schema) {
-		validateSchemaIntegrity(conn, schema, true);
-	}
-
-	public static void validateSchemaIntegrity(final Connection conn, final String schema, boolean showValidationHeaderInfo) {
+	public static void validateSchemaIntegrity(final Connection conn, String schema, final boolean showValidationHeaderInfo) {
 		final MDBvalidator mdbv = new MDBvalidator(conn);
 		mdbv.showValidationInfo = showValidationHeaderInfo;
+		// the schema name may be surrounded by double quotes. If so, remove them.
+		if (schema.startsWith("\"") && schema.endsWith("\"")) {
+			schema = schema.substring(1, schema.length() -1);
+		}
 		if (mdbv.checkSchemaExists(schema))
 			mdbv.validateSchema(schema, null, null, null, null, null, true);
 		else
-			if (mdbv.showValidationInfo)
+			if (showValidationHeaderInfo)
 				System.out.println("Schema: " + schema + " does not exist in this database.");
 	}
 
-	public static void validateDBIntegrity(final Connection conn) {
-		validateDBIntegrity(conn, true);
-	}
-
-	public static void validateDBIntegrity(final Connection conn, boolean showValidationHeaderInfo) {
+	public static void validateDBIntegrity(final Connection conn, final boolean showValidationHeaderInfo) {
 		final MDBvalidator mdbv = new MDBvalidator(conn);
 		mdbv.showValidationInfo = showValidationHeaderInfo;
 		final Statement stmt = mdbv.createStatement("validateDBIntegrity()");
@@ -186,7 +170,7 @@ public final class MDBvalidator {
 			if (rs != null) {
 				// for each user schema do:
 				while (rs.next()) {
-					String schema = rs.getString(1);
+					final String schema = rs.getString(1);
 					if (schema != null && !schema.isEmpty()) {
 						hasUserSchemas = true;
 						mdbv.validateSchema(schema, null, null, null, null, null, true);
@@ -197,7 +181,8 @@ public final class MDBvalidator {
 			printExceptions(e);
 		}
 		freeStmtRs(stmt, rs);
-		if (!hasUserSchemas && mdbv.showValidationInfo)
+
+		if (showValidationHeaderInfo && !hasUserSchemas)
 			System.out.println("No user schemas found in this database.");
 	}