You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2022/01/25 11:55:23 UTC
[empire-db] branch version3 updated: EMPIREDB-362 DBModelChecker fix
This is an automated email from the ASF dual-hosted git repository.
doebele pushed a commit to branch version3
in repository https://gitbox.apache.org/repos/asf/empire-db.git
The following commit(s) were added to refs/heads/version3 by this push:
new e4d8bb7 EMPIREDB-362 DBModelChecker fix
e4d8bb7 is described below
commit e4d8bb703a3365914ab090cfa54c525371d033a3
Author: Rainer Döbele <do...@apache.org>
AuthorDate: Tue Jan 25 12:55:21 2022 +0100
EMPIREDB-362 DBModelChecker fix
---
.../empire/samples/db/advanced/SampleAdvApp.java | 2 +-
.../org/apache/empire/samples/db/SampleApp.java | 2 +-
.../empire/db/validation/DBModelChecker.java | 77 ++++++++++++----------
.../org/apache/empire/dbms/DBMSHandlerBase.java | 2 +-
.../apache/empire/dbms/hsql/DBMSHandlerHSql.java | 2 +-
.../empire/dbms/oracle/OracleDBModelChecker.java | 2 +-
.../empire/dbms/sqlserver/MSSqlDBModelChecker.java | 2 +-
7 files changed, 50 insertions(+), 39 deletions(-)
diff --git a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
index b3269f1..51b8208 100644
--- a/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
+++ b/empire-db-examples/empire-db-example-advanced/src/main/java/org/apache/empire/samples/db/advanced/SampleAdvApp.java
@@ -332,7 +332,7 @@ public class SampleAdvApp
log.info("Checking DataModel for {} using {}", db.getClass().getSimpleName(), modelChecker.getClass().getSimpleName());
// dbo schema
DBModelErrorLogger logger = new DBModelErrorLogger();
- modelChecker.checkModel(context.getConnection(), logger);
+ modelChecker.checkModel(db, context.getConnection(), logger);
// show result
log.info("Data model check done. Found {} errors and {} warnings.", logger.getErrorCount(), logger.getWarnCount());
} catch(Exception e) {
diff --git a/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java b/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java
index 3485308..2fc7d42 100644
--- a/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java
+++ b/empire-db-examples/empire-db-example-basic/src/main/java/org/apache/empire/samples/db/SampleApp.java
@@ -298,7 +298,7 @@ public class SampleApp
log.info("Checking DataModel for {} using {}", db.getClass().getSimpleName(), modelChecker.getClass().getSimpleName());
// dbo schema
DBModelErrorLogger logger = new DBModelErrorLogger();
- modelChecker.checkModel(context.getConnection(), logger);
+ modelChecker.checkModel(db, context.getConnection(), logger);
// show result
log.info("Data model check done. Found {} errors and {} warnings.", logger.getErrorCount(), logger.getWarnCount());
} catch(Exception e) {
diff --git a/empire-db/src/main/java/org/apache/empire/db/validation/DBModelChecker.java b/empire-db/src/main/java/org/apache/empire/db/validation/DBModelChecker.java
index 2b27dae..5f79538 100644
--- a/empire-db/src/main/java/org/apache/empire/db/validation/DBModelChecker.java
+++ b/empire-db/src/main/java/org/apache/empire/db/validation/DBModelChecker.java
@@ -42,8 +42,8 @@ import org.apache.empire.db.DBTable;
import org.apache.empire.db.DBTableColumn;
import org.apache.empire.db.DBView;
import org.apache.empire.exceptions.InternalException;
-import org.apache.empire.exceptions.InvalidArgumentException;
import org.apache.empire.exceptions.NotSupportedException;
+import org.apache.empire.exceptions.ObjectNotValidException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -81,7 +81,6 @@ public class DBModelChecker
}
}
- protected final DBDatabase db; // the database to check
protected final String catalog;
protected final String schemaPattern;
@@ -95,9 +94,8 @@ public class DBModelChecker
* @param catalog
* @param schemaPattern
*/
- public DBModelChecker(DBDatabase db, String catalog, String schemaPattern)
+ public DBModelChecker(String catalog, String schemaPattern)
{
- this.db = db;
this.catalog = catalog;
this.schemaPattern = schemaPattern;
// set origin
@@ -116,7 +114,7 @@ public class DBModelChecker
/**
* Returns the RemoteDatabase
- * Only available after checkModel() is called
+ * Only available after parseModel() is called
* @return the remote Database
*/
public DBDatabase getRemoteDatabase()
@@ -125,43 +123,41 @@ public class DBModelChecker
}
/**
- * This method is used to check the database model
- *
- * @param db
- * The Empire-db definition to be checked
- * @param conn
- * A connection to the database
- * @param dbSchema
- * The database schema
- * @param handler
- * The {@link DBModelErrorHandler} implementation that is called whenever an error
- * occurs
+ * Populates the remote database and compares it against the given database
+ * @param db the Database to be checked
+ * @param conn the connection for retrieving the remote database metadata
+ * @param handler the handler that is called to handle inconsistencies
+ */
+ public void checkModel(DBDatabase db, Connection conn, DBModelErrorHandler handler)
+ {
+ // parse first
+ parseModel(conn);
+ // check database
+ checkRemoteAgainst(db, handler);
+ }
+
+ /**
+ * This method is used to parse the populate the remote database
+ * @param conn the connection for retrieving the remote database metadata
*/
- public synchronized void checkModel(Connection conn, DBModelErrorHandler handler)
+ public void parseModel(Connection conn)
{
try
- { // the chandler
- if (handler==null && db!=null)
- throw new InvalidArgumentException("handler", handler);
-
- // create remote db instance
- remoteDb = new RemoteDatabase();
-
+ { // create remote db instance
+ remoteDb = createRemoteDatabase();
+ // populate
DatabaseMetaData dbMeta = conn.getMetaData();
populateRemoteDatabase(dbMeta);
-
- // if db is null then populate only
- if (db==null)
- return;
-
- // now check the database
- checkDatabase(handler);
}
catch (SQLException e)
{
log.error("checkModel failed for {}", remoteName);
throw new InternalException(e);
- }
+ }
+ finally
+ { // cleanup
+ tableMap.clear();
+ }
}
protected void populateRemoteDatabase(DatabaseMetaData dbMeta)
@@ -386,8 +382,18 @@ public class DBModelChecker
}
}
- protected void checkDatabase(DBModelErrorHandler handler)
+ /**
+ * Check the remote database against an existing model
+ * @param db the database to check the remote against
+ * @param handler
+ */
+ public void checkRemoteAgainst(DBDatabase db, DBModelErrorHandler handler)
{
+ if (this.remoteDb==null)
+ { // parseModel has not been called
+ throw new ObjectNotValidException(this);
+ }
+
// check Tables
for (DBTable table : db.getTables())
{
@@ -724,6 +730,11 @@ public class DBModelChecker
{
return this.tableMap.get(tableName.toUpperCase());
}
+
+ protected DBDatabase createRemoteDatabase()
+ {
+ return new RemoteDatabase();
+ }
protected void addTable(String tableName)
{
diff --git a/empire-db/src/main/java/org/apache/empire/dbms/DBMSHandlerBase.java b/empire-db/src/main/java/org/apache/empire/dbms/DBMSHandlerBase.java
index 70f1ff5..79b5d2d 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/DBMSHandlerBase.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/DBMSHandlerBase.java
@@ -709,7 +709,7 @@ public abstract class DBMSHandlerBase implements DBMSHandler
{
log.warn("A general and possibly untested DBModelChecker is used for DBMSHandler {}. Please override to inklude DBMS specific features.", getClass().getSimpleName());
// the default model checker
- return new DBModelChecker(db, null, null);
+ return new DBModelChecker(null, null);
}
/**
diff --git a/empire-db/src/main/java/org/apache/empire/dbms/hsql/DBMSHandlerHSql.java b/empire-db/src/main/java/org/apache/empire/dbms/hsql/DBMSHandlerHSql.java
index c2b1b87..a546432 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/hsql/DBMSHandlerHSql.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/hsql/DBMSHandlerHSql.java
@@ -302,7 +302,7 @@ public class DBMSHandlerHSql extends DBMSHandlerBase
public DBModelChecker createModelChecker(DBDatabase db)
{
// the default model checker
- return new DBModelChecker(db, "PUBLIC", "PUBLIC");
+ return new DBModelChecker("PUBLIC", "PUBLIC");
}
}
diff --git a/empire-db/src/main/java/org/apache/empire/dbms/oracle/OracleDBModelChecker.java b/empire-db/src/main/java/org/apache/empire/dbms/oracle/OracleDBModelChecker.java
index 902fd81..282bae6 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/oracle/OracleDBModelChecker.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/oracle/OracleDBModelChecker.java
@@ -44,7 +44,7 @@ public class OracleDBModelChecker extends DBModelChecker
public OracleDBModelChecker(DBDatabase db, String schemaName)
{
- super(db, null, schemaName);
+ super(null, schemaName);
// Detect boolean type
DBMSHandler dbms = db.getDbms();
if (dbms instanceof DBMSHandlerOracle)
diff --git a/empire-db/src/main/java/org/apache/empire/dbms/sqlserver/MSSqlDBModelChecker.java b/empire-db/src/main/java/org/apache/empire/dbms/sqlserver/MSSqlDBModelChecker.java
index 916cb1e..aa858bc 100644
--- a/empire-db/src/main/java/org/apache/empire/dbms/sqlserver/MSSqlDBModelChecker.java
+++ b/empire-db/src/main/java/org/apache/empire/dbms/sqlserver/MSSqlDBModelChecker.java
@@ -39,7 +39,7 @@ public class MSSqlDBModelChecker extends DBModelChecker
*/
public MSSqlDBModelChecker(DBDatabase db, String catalog, String schema)
{
- super(db, catalog, StringUtils.coalesce(schema, "DBO"));
+ super(catalog, StringUtils.coalesce(schema, "DBO"));
}
/**