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/22 01:31:45 UTC

[empire-db] branch version3 updated: EMPIREDB-362 DBContext extension

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 259115e  EMPIREDB-362 DBContext extension
259115e is described below

commit 259115e42028c0ffaa9aa1ba4ee0fa3b7459511f
Author: Rainer Döbele <do...@apache.org>
AuthorDate: Sat Jan 22 02:31:43 2022 +0100

    EMPIREDB-362 DBContext extension
---
 .../empire/samples/db/advanced/SampleAdvApp.java   | 10 ++-
 .../org/apache/empire/samples/db/SampleApp.java    |  8 +--
 .../org/apache/empire/rest/service/Service.java    |  2 +-
 .../org/apache/empire/jsf2/app/WebDBContext.java   |  2 +-
 .../main/java/org/apache/empire/db/DBContext.java  | 22 +++++-
 .../main/java/org/apache/empire/db/DBQuery.java    |  4 +-
 .../main/java/org/apache/empire/db/DBRecord.java   |  2 +-
 .../main/java/org/apache/empire/db/DBRowSet.java   |  4 +-
 .../main/java/org/apache/empire/db/DBTable.java    |  2 +-
 .../main/java/org/apache/empire/db/DBUtils.java    | 63 +---------------
 .../apache/empire/db/context/DBContextBase.java    | 84 ++++++++++++++++++++--
 .../apache/empire/db/context/DBContextStatic.java  |  2 +-
 .../db/mssql/DBDatabaseDriverMSSqlDateTest.java    |  2 +-
 .../empire/db/mssql/DBDatabaseDriverMSSqlTest.java |  2 +-
 14 files changed, 118 insertions(+), 91 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 33cff80..fdfa595 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
@@ -38,7 +38,6 @@ import org.apache.empire.db.DBReader;
 import org.apache.empire.db.DBRecord;
 import org.apache.empire.db.DBSQLScript;
 import org.apache.empire.db.DBTableColumn;
-import org.apache.empire.db.DBUtils;
 import org.apache.empire.db.context.DBContextStatic;
 import org.apache.empire.db.driver.h2.DBDatabaseDriverH2;
 import org.apache.empire.db.driver.postgresql.DBDatabaseDriverPostgreSQL;
@@ -325,14 +324,13 @@ public class SampleAdvApp
      */
     private static void clearDatabase()
     {
-        DBUtils utils = context.getUtils();
-        DBCommand cmd = db.createCommand();
+        DBCommand cmd = context.createCommand(db);
         // Delete all Employee Department History records
-        utils.executeDelete(T_EDH, cmd);
+        context.executeDelete(T_EDH, cmd);
         // Delete all Employees (no constraints)
-        utils.executeDelete(T_EMP, cmd);
+        context.executeDelete(T_EMP, cmd);
         // Delete all Departments (no constraints)
-        utils.executeDelete(T_DEP, cmd);
+        context.executeDelete(T_DEP, cmd);
     }
 
     /**
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 21d3970..0a66714 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
@@ -33,7 +33,6 @@ import org.apache.empire.db.DBReader;
 import org.apache.empire.db.DBRecord;
 import org.apache.empire.db.DBRowSet.PartialMode;
 import org.apache.empire.db.DBSQLScript;
-import org.apache.empire.db.DBUtils;
 import org.apache.empire.db.context.DBContextStatic;
 import org.apache.empire.db.driver.derby.DBDatabaseDriverDerby;
 import org.apache.empire.db.driver.h2.DBDatabaseDriverH2;
@@ -289,12 +288,11 @@ public class SampleApp
 	 */
 	private static void clearDatabase()
     {
-	    DBUtils utils = context.getUtils();
-		DBCommand cmd = db.createCommand();
+		DBCommand cmd = context.createCommand(db);
 		// Delete all Employees (no constraints)
-		utils.executeDelete(db.EMPLOYEES, cmd);
+		context.executeDelete(db.EMPLOYEES, cmd);
 		// Delete all Departments (no constraints)
-		utils.executeDelete(db.DEPARTMENTS, cmd);
+		context.executeDelete(db.DEPARTMENTS, cmd);
 	}
 
 	/**
diff --git a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/Service.java b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/Service.java
index 1117934..dd8677a 100644
--- a/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/Service.java
+++ b/empire-db-examples/empire-db-example-vue/src/main/java/org/apache/empire/rest/service/Service.java
@@ -91,7 +91,7 @@ public abstract class Service {
         }
 
         @Override
-        public boolean isEnableRollbackHandling()
+        public boolean isRollbackHandlingEnabled()
         {
             return false; /* No Rollbacks allowed */
         }
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java
index 1dc246f..8f8b8a5 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/app/WebDBContext.java
@@ -50,7 +50,7 @@ public class WebDBContext<DB extends DBDatabase> extends DBContextBase
     }
 
     @Override
-    public boolean isEnableRollbackHandling()
+    public boolean isRollbackHandlingEnabled()
     {
         return true;
     }
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBContext.java b/empire-db/src/main/java/org/apache/empire/db/DBContext.java
index ae1e6fa..7c07844 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBContext.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBContext.java
@@ -7,6 +7,11 @@ import java.sql.Connection;
 
 import org.apache.empire.db.context.DBRollbackHandler;
 
+/**
+ * DBContext 
+ * A context is required for every database operation
+ * @author rainer
+ */
 public interface DBContext
 {
     DBDatabaseDriver getDriver();
@@ -14,17 +19,28 @@ public interface DBContext
     Connection getConnection();
     
     <T extends DBUtils> T getUtils();
+
+    DBCommand createCommand(DBDatabase db); 
+    
+    int executeSQL(String sqlCmd, Object[] sqlParams);
+    
+    int executeInsert(DBCommand cmd);
+    
+    int executeInsertInto(DBTable table, DBCommand cmd);
+    
+    int executeUpdate(DBCommand cmd);
+
+    int executeDelete(DBTable from, DBCommand cmd);
     
     void commit();
 
     void rollback();
     
-    boolean isEnableRollbackHandling();
+    boolean isRollbackHandlingEnabled();
     
     void appendRollbackHandler(DBRollbackHandler handler);
 
     void removeRollbackHandler(DBObject object);
     
     void discard();
-    
-}
+}
\ No newline at end of file
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBQuery.java b/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
index e459c2b..ee1dbf7 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBQuery.java
@@ -563,8 +563,8 @@ public class DBQuery extends DBRowSet
             }
             
             // Execute SQL
-            DBUtils utils = rec.getContext().getUtils(); 
-            int affected = utils.executeSQL(upd.getUpdate(), upd.getParamValues());
+            DBUtils utils = context.getUtils(); 
+            int affected = utils.executeSQL(upd.getUpdate(), upd.getParamValues(), null);
             if (affected<= 0)
             {   // Error
                 if (affected == 0)
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
index 644d698..5c5964b 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRecord.java
@@ -233,7 +233,7 @@ public class DBRecord extends DBRecordData implements DBContextAware, Record, Cl
         this.modified = null;
         this.rowsetData = null;
         // options                         
-        enableRollbackHandling = context.isEnableRollbackHandling();
+        enableRollbackHandling = context.isRollbackHandlingEnabled();
         validateFieldValues = true;
     }
 
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java b/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
index 029ca9f..9d3fa1a 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBRowSet.java
@@ -961,7 +961,7 @@ public abstract class DBRowSet extends DBExpr
             return;
         }
         // Perform action
-        DBUtils utils = rec.getContext().getUtils();
+        DBUtils utils = context.getUtils();
         int affected = utils.executeSQL(sql, cmd.getParamValues(), setGenKey);
         if (affected < 0)
         {   // Update Failed
@@ -1047,7 +1047,7 @@ public abstract class DBRowSet extends DBExpr
             DBCommand cmd = db.createCommand();
             for (int i=0; i<parentKey.length; i++)
                 cmd.where(refs[i].getSourceColumn().is(parentKey[i]));
-            if (context.getUtils().executeSQL(cmd.getDelete((DBTable)this), cmd.getParamValues())<0)
+            if (context.executeDelete((DBTable)this, cmd)<0)
                 throw new UnexpectedReturnValueException(-1, "db.executeSQL()");
         }
         else
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBTable.java b/empire-db/src/main/java/org/apache/empire/db/DBTable.java
index 6c99ffe..f166e05 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBTable.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBTable.java
@@ -694,7 +694,7 @@ public class DBTable extends DBRowSet implements Cloneable
         setKeyConstraints(cmd, key);
         // Perform delete
         String sqlCmd = cmd.getDelete(this);
-        int affected  = context.getUtils().executeSQL(sqlCmd, cmd.getParamValues());
+        int affected  = context.executeSQL(sqlCmd, cmd.getParamValues());
         if (affected < 0)
         { // Delete Failed
             throw new UnexpectedReturnValueException(affected, "db.executeSQL()");
diff --git a/empire-db/src/main/java/org/apache/empire/db/DBUtils.java b/empire-db/src/main/java/org/apache/empire/db/DBUtils.java
index 4f95d57..1c2c38c 100644
--- a/empire-db/src/main/java/org/apache/empire/db/DBUtils.java
+++ b/empire-db/src/main/java/org/apache/empire/db/DBUtils.java
@@ -54,16 +54,7 @@ public class DBUtils implements DBContextAware
     {
         return ((T)context);
     }
-    
-    /**
-     * Creates a new Command object for the given database
-     * 
-     * @return the command object.
-     */
-    public final DBCommand createCommand(DBDatabase db)
-    {
-        return driver.createCommand(db);
-    }
+
     /**
      * Executes an update, insert or delete SQL-Statement.<BR>
      * We recommend to use a DBCommand object in order to build the sqlCmd.<BR>
@@ -104,58 +95,6 @@ public class DBUtils implements DBContextAware
     }
 
     /**
-     * Executes an SQLStatment
-     * @param sqlCmd the SQL-Command
-     * @param sqlParams a list of objects to replace sql parameters
-     */
-    public final int executeSQL(String sqlCmd, Object[] sqlParams)
-    {
-        return executeSQL(sqlCmd, sqlParams, null); 
-    }
-
-    /**
-     * Executes an Insert statement from a command object
-     * @param cmd the command object containing the insert command
-     * @return the number of records that have been inserted with the supplied statement
-     */
-    public final int executeInsert(DBCommand cmd)
-    {
-        return executeSQL(cmd.getInsert(), cmd.getParamValues()); 
-    }
-
-    /**
-     * Executes an InsertInfo statement from a command object
-     * @param table the table into which to insert the selected data
-     * @param cmd the command object containing the selection command 
-     * @return the number of records that have been inserted with the supplied statement
-     */
-    public final int executeInsertInto(DBTable table, DBCommand cmd)
-    {
-        return executeSQL(cmd.getInsertInto(table), cmd.getParamValues()); 
-    }
-
-    /**
-     * Executes an Update statement from a command object
-     * @param cmd the command object containing the update command
-     * @return the number of records that have been updated with the supplied statement
-     */
-    public final int executeUpdate(DBCommand cmd)
-    {
-        return executeSQL(cmd.getUpdate(), cmd.getParamValues()); 
-    }
-
-    /**
-     * Executes a Delete statement from a command object
-     * @param from the database table from which to delete records
-     * @param cmd the command object containing the delete constraints
-     * @return the number of records that have been deleted with the supplied statement
-     */
-    public final int executeDelete(DBTable from, DBCommand cmd)
-    {
-        return executeSQL(cmd.getDelete(from), cmd.getParamValues()); 
-    }
-
-    /**
      * Returns the value of the first row/column of a sql-query as an object.
      * If the query does not return a result the value ObjectUtils.NO_VALUE is returned.
      * 
diff --git a/empire-db/src/main/java/org/apache/empire/db/context/DBContextBase.java b/empire-db/src/main/java/org/apache/empire/db/context/DBContextBase.java
index aa24b00..529f3f0 100644
--- a/empire-db/src/main/java/org/apache/empire/db/context/DBContextBase.java
+++ b/empire-db/src/main/java/org/apache/empire/db/context/DBContextBase.java
@@ -6,8 +6,11 @@ package org.apache.empire.db.context;
 import java.sql.Connection;
 import java.sql.SQLException;
 
+import org.apache.empire.db.DBCommand;
 import org.apache.empire.db.DBContext;
+import org.apache.empire.db.DBDatabase;
 import org.apache.empire.db.DBObject;
+import org.apache.empire.db.DBTable;
 import org.apache.empire.db.DBUtils;
 import org.apache.empire.db.context.DBRollbackManager.ReleaseAction;
 import org.apache.empire.db.exceptions.EmpireSQLException;
@@ -57,6 +60,79 @@ public abstract class DBContextBase implements DBContext
         return getConnection(true);
     }
     
+    /**
+     * Creates a new Command object for the given database
+     * 
+     * @return the command object.
+     */
+    @Override
+    public final DBCommand createCommand(DBDatabase db)
+    {
+        return getDriver().createCommand(db);
+    }
+
+    /**
+     * Executes an SQLStatment
+     * @param sqlCmd the SQL-Command
+     * @param sqlParams a list of objects to replace sql parameters
+     */
+    @Override
+    public final int executeSQL(String sqlCmd, Object[] sqlParams)
+    {
+        if (utils==null) getUtils(); 
+        return utils.executeSQL(sqlCmd, sqlParams, null); 
+    }
+
+    /**
+     * Executes an Insert statement from a command object
+     * @param cmd the command object containing the insert command
+     * @return the number of records that have been inserted with the supplied statement
+     */
+    @Override
+    public final int executeInsert(DBCommand cmd)
+    {
+        if (utils==null) getUtils(); 
+        return utils.executeSQL(cmd.getInsert(), cmd.getParamValues(), null); 
+    }
+
+    /**
+     * Executes an InsertInfo statement from a command object
+     * @param table the table into which to insert the selected data
+     * @param cmd the command object containing the selection command 
+     * @return the number of records that have been inserted with the supplied statement
+     */
+    @Override
+    public final int executeInsertInto(DBTable table, DBCommand cmd)
+    {
+        if (utils==null) getUtils(); 
+        return utils.executeSQL(cmd.getInsertInto(table), cmd.getParamValues(), null); 
+    }
+
+    /**
+     * Executes an Update statement from a command object
+     * @param cmd the command object containing the update command
+     * @return the number of records that have been updated with the supplied statement
+     */
+    @Override
+    public final int executeUpdate(DBCommand cmd)
+    {
+        if (utils==null) getUtils(); 
+        return utils.executeSQL(cmd.getUpdate(), cmd.getParamValues(), null); 
+    }
+
+    /**
+     * Executes a Delete statement from a command object
+     * @param from the database table from which to delete records
+     * @param cmd the command object containing the delete constraints
+     * @return the number of records that have been deleted with the supplied statement
+     */
+    @Override
+    public final int executeDelete(DBTable from, DBCommand cmd)
+    {
+        if (utils==null) getUtils(); 
+        return utils.executeSQL(cmd.getDelete(from), cmd.getParamValues(), null); 
+    }
+    
     @Override
     public void commit()
     {
@@ -71,7 +147,7 @@ public abstract class DBContextBase implements DBContext
             if (conn.getAutoCommit()==false)
                 conn.commit();
             // discard rollbacks
-            DBRollbackManager dbrm = (isEnableRollbackHandling() ? getRollbackManager(false) : null);
+            DBRollbackManager dbrm = (isRollbackHandlingEnabled() ? getRollbackManager(false) : null);
             if (dbrm!=null)
                 dbrm.releaseConnection(conn, ReleaseAction.Discard);
             // Done
@@ -103,7 +179,7 @@ public abstract class DBContextBase implements DBContext
             log.info("Database rollback issued!");
             conn.rollback();
             // perform Rollback
-            DBRollbackManager dbrm = (isEnableRollbackHandling() ? getRollbackManager(false) : null);
+            DBRollbackManager dbrm = (isRollbackHandlingEnabled() ? getRollbackManager(false) : null);
             if (dbrm!=null)
                 dbrm.releaseConnection(conn, ReleaseAction.Rollback);
             // Done
@@ -120,7 +196,7 @@ public abstract class DBContextBase implements DBContext
         if (handler==null || handler.getObject()==null)
             throw new InvalidArgumentException("handler", handler);
         // Check enabled
-        if (!isEnableRollbackHandling())
+        if (!isRollbackHandlingEnabled())
         {   log.warn("*** Rollback handling is disabled for this context. AppendRollbackHandler must not be called! ***");
             return;
         }
@@ -140,7 +216,7 @@ public abstract class DBContextBase implements DBContext
         if (object==null)
             throw new InvalidArgumentException("object", object);
         // Check enabled
-        if (!isEnableRollbackHandling())
+        if (!isRollbackHandlingEnabled())
         {   log.warn("*** Rollback handling is disabled for this context. RemoveRollbackHandler should not be called! ***");
             return;
         }
diff --git a/empire-db/src/main/java/org/apache/empire/db/context/DBContextStatic.java b/empire-db/src/main/java/org/apache/empire/db/context/DBContextStatic.java
index 0afe1a1..644fad6 100644
--- a/empire-db/src/main/java/org/apache/empire/db/context/DBContextStatic.java
+++ b/empire-db/src/main/java/org/apache/empire/db/context/DBContextStatic.java
@@ -55,7 +55,7 @@ public class DBContextStatic extends DBContextBase
     }
 
     @Override
-    public boolean isEnableRollbackHandling()
+    public boolean isRollbackHandlingEnabled()
     {
         return enableRollbackHandling;
     }
diff --git a/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlDateTest.java b/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlDateTest.java
index f15839f..86a88d9 100644
--- a/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlDateTest.java
+++ b/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlDateTest.java
@@ -123,7 +123,7 @@ public class DBDatabaseDriverMSSqlDateTest {
 	private static void clearDatabase(DBContext context, DateTimeTestDB db) {
 		DBCommand cmd = db.createCommand();
 		// Delete all Employees (no constraints)
-		context.getUtils().executeDelete(db.USER_INFO, cmd);
+		context.executeDelete(db.USER_INFO, cmd);
 	}
 
 	/**
diff --git a/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlTest.java b/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlTest.java
index 0972ffb..f84a767 100644
--- a/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlTest.java
+++ b/empire-db/src/test/java/org/apache/empire/db/mssql/DBDatabaseDriverMSSqlTest.java
@@ -91,7 +91,7 @@ public class DBDatabaseDriverMSSqlTest
     {
 		DBCommand cmd = db.createCommand();
 		// Delete all Employees (no constraints)
-		context.getUtils().executeDelete(db.DEPARTMENT, cmd);
+		context.executeDelete(db.DEPARTMENT, cmd);
 	}
 	
 	/**