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 2013/05/10 16:54:59 UTC
svn commit: r1481039 - in
/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db:
DBDDLGenerator.java DBDatabaseDriver.java DBRelation.java
oracle/DBDatabaseDriverOracle.java sqlserver/DBDatabaseDriverMSSQL.java
Author: doebele
Date: Fri May 10 14:54:59 2013
New Revision: 1481039
URL: http://svn.apache.org/r1481039
Log:
EMPIREDB-183
new method addEnableRelationStmt on DBDatabaseDriver.
Modified:
empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java
empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java
empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBRelation.java
empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/DBDatabaseDriverOracle.java
empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/sqlserver/DBDatabaseDriverMSSQL.java
Modified: empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java?rev=1481039&r1=1481038&r2=1481039&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java (original)
+++ empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDDLGenerator.java Fri May 10 14:54:59 2013
@@ -202,7 +202,12 @@ public abstract class DBDDLGenerator<T e
sql.append(" NOT NULL");
}
- // GetDDL
+ /**
+ * Appends the required DLL commands to create, drop or alter an object to the supplied DBDQLScript.
+ * @param type operation to perform (CREATE, DROP, ALTER)
+ * @param dbo the object for which to perform the operation (DBDatabase, DBTable, DBView, DBColumn, DBRelation)
+ * @param script the script to which to add the DDL command(s)
+ */
public void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script)
{
// The Object's database must be attached to this driver
@@ -231,7 +236,7 @@ public abstract class DBDDLGenerator<T e
createTable((DBTable) dbo, script);
return;
case DROP:
- dropObject(((DBTable) dbo).getName(), "TABLE", script);
+ dropObject(((DBTable) dbo).getFullName(), "TABLE", script);
return;
default:
throw new NotImplementedException(this, "getDDLScript." + dbo.getClass().getName() + "." + type);
@@ -245,10 +250,10 @@ public abstract class DBDDLGenerator<T e
createView((DBView) dbo, script);
return;
case DROP:
- dropObject(((DBView) dbo).getName(), "VIEW", script);
+ dropObject(((DBView) dbo).getFullName(), "VIEW", script);
return;
case ALTER:
- dropObject(((DBView) dbo).getName(), "VIEW", script);
+ dropObject(((DBView) dbo).getFullName(), "VIEW", script);
createView((DBView) dbo, script);
return;
default:
@@ -263,7 +268,7 @@ public abstract class DBDDLGenerator<T e
createRelation((DBRelation) dbo, script);
return;
case DROP:
- dropObject(((DBRelation) dbo).getName(), "CONSTRAINT", script);
+ dropObject(((DBRelation) dbo).getFullName(), "CONSTRAINT", script);
return;
default:
throw new NotImplementedException(this, "getDDLScript." + dbo.getClass().getName() + "." + type);
@@ -277,7 +282,7 @@ public abstract class DBDDLGenerator<T e
createIndex(((DBIndex) dbo).getTable(), (DBIndex) dbo, script);
return;
case DROP:
- dropObject(((DBIndex) dbo).getName(), "INDEX", script);
+ dropObject(((DBIndex) dbo).getFullName(), "INDEX", script);
return;
default:
throw new NotImplementedException(this, "getDDLScript." + dbo.getClass().getName() + "." + type);
@@ -293,7 +298,7 @@ public abstract class DBDDLGenerator<T e
throw new NotSupportedException(this, "getDDLScript() for "+dbo.getClass().getName());
}
}
-
+
/**
* Appends the DDL-Script for creating the given database to an SQL-Script<br/>
* This includes the generation of all tables, views and relations.
Modified: empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java?rev=1481039&r1=1481038&r2=1481039&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java (original)
+++ empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBDatabaseDriver.java Fri May 10 14:54:59 2013
@@ -831,11 +831,10 @@ public abstract class DBDatabaseDriver i
}
/**
- * Gets a SQL command for creating, modifying or deleting objects in the database (tables, columns, constraints, etc.)
- *
- * @param type the command type
- * @param dbo the database object
- * @param script the script to complete
+ * Appends the required DLL commands to create, drop or alter an object to the supplied DBDQLScript.
+ * @param type operation to perform (CREATE, DROP, ALTER)
+ * @param dbo the object for which to perform the operation (DBDatabase, DBTable, DBView, DBColumn, DBRelation)
+ * @param script the script to which to add the DDL command(s)
*/
public void getDDLScript(DBCmdType type, DBObject dbo, DBSQLScript script)
{
@@ -843,6 +842,22 @@ public abstract class DBDatabaseDriver i
}
/**
+ * Appends a statement to enable or disable a foreign key relation.<br/
+ * The default is to drop or create the relation
+ * Override this method to provide different behavior for your database.
+ * @param r the foreign key relation which should be enabled or disabled
+ * @param enable true to enable the relation or false to disable
+ * @param script the script to which to add the DDL command(s)
+ */
+ public void addEnableRelationStmt(DBRelation r, boolean enable, DBSQLScript script)
+ {
+ if (enable)
+ getDDLScript(DBCmdType.CREATE, r, script);
+ else
+ getDDLScript(DBCmdType.DROP, r, script);
+ }
+
+ /**
* @return <code>true</code> if column default values are created with dll statements or <code>false</code> if not
*/
public boolean isDDLColumnDefaults()
Modified: empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBRelation.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBRelation.java?rev=1481039&r1=1481038&r2=1481039&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBRelation.java (original)
+++ empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/DBRelation.java Fri May 10 14:54:59 2013
@@ -20,6 +20,9 @@ package org.apache.empire.db;
import java.io.Serializable;
+import org.apache.empire.exceptions.InvalidArgumentException;
+import org.apache.empire.exceptions.UnexpectedReturnValueException;
+
/**
* This class creates a DBReferene object for a foreing key relation.
*
@@ -212,6 +215,32 @@ public class DBRelation extends DBObject
setOnDeleteAction(DBCascadeAction.CASCADE_RECORDS);
}
+ /**
+ * Appends the required DLL command to enable or disable a foreign key constraint to the supplied DBDQLScript.
+ * @param enable true if the constraint should be enabled or false to disable the constraint
+ * @param the driver for which to enable or disable the relation
+ */
+ public String getEnableDisableStmt(boolean enable, DBDatabaseDriver driver)
+ {
+ if (driver==null)
+ throw new InvalidArgumentException("driver", driver);
+ // get Statement
+ DBSQLScript script = new DBSQLScript();
+ driver.addEnableRelationStmt(this, enable, script);
+ if (script.getCount()!=1)
+ throw new UnexpectedReturnValueException(script.getCount(), "driver.addEnableRelationStatement");
+ return script.getStmt(0);
+ }
+
+ /**
+ * Appends the required DLL command to enable or disable a foreign key constraint to the supplied DBDQLScript.
+ * @param enable true if the constraint should be enabled or false to disable the constraint
+ */
+ public final String getEnableDisableStatement(boolean enable)
+ {
+ return getEnableDisableStmt(enable, getDatabase().getDriver());
+ }
+
@Override
public String toString()
{
Modified: empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/DBDatabaseDriverOracle.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/DBDatabaseDriverOracle.java?rev=1481039&r1=1481038&r2=1481039&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/DBDatabaseDriverOracle.java (original)
+++ empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/oracle/DBDatabaseDriverOracle.java Fri May 10 14:54:59 2013
@@ -31,8 +31,10 @@ import org.apache.empire.db.DBDDLGenerat
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBDriverFeature;
+import org.apache.empire.db.DBExpr;
import org.apache.empire.db.DBObject;
import org.apache.empire.db.DBReader;
+import org.apache.empire.db.DBRelation;
import org.apache.empire.db.DBSQLScript;
import org.apache.empire.db.DBTable;
import org.apache.empire.db.DBView;
@@ -355,6 +357,23 @@ public class DBDatabaseDriverOracle exte
// forward request
ddlGenerator.getDDLScript(type, dbo, script);
}
+
+ /**
+ * @see DBDatabaseDriver#addEnableRelationStmt(DBRelation, boolean, DBSQLScript)
+ */
+ @Override
+ public void addEnableRelationStmt(DBRelation r, boolean enable, DBSQLScript script)
+ {
+ // ALTER TABLE {table.name} {ENABLE|DISABLE} CONSTRAINT {relation.name}
+ StringBuilder b = new StringBuilder();
+ b.append("ALTER TABLE ");
+ r.getForeignKeyTable().addSQL(b, DBExpr.CTX_FULLNAME);
+ b.append(enable ? " ENABLE " : " DISABLE ");
+ b.append("CONSTRAINT ");
+ b.append(r.getName());
+ // add
+ script.addStmt(b);
+ }
/**
* Checks whether the database definition matches the real database structure.
Modified: empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/sqlserver/DBDatabaseDriverMSSQL.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/sqlserver/DBDatabaseDriverMSSQL.java?rev=1481039&r1=1481038&r2=1481039&view=diff
==============================================================================
--- empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/sqlserver/DBDatabaseDriverMSSQL.java (original)
+++ empire-db/trunk/empire-db/src/main/java/org/apache/empire/db/sqlserver/DBDatabaseDriverMSSQL.java Fri May 10 14:54:59 2013
@@ -30,7 +30,9 @@ import org.apache.empire.db.DBDDLGenerat
import org.apache.empire.db.DBDatabase;
import org.apache.empire.db.DBDatabaseDriver;
import org.apache.empire.db.DBDriverFeature;
+import org.apache.empire.db.DBExpr;
import org.apache.empire.db.DBObject;
+import org.apache.empire.db.DBRelation;
import org.apache.empire.db.DBSQLScript;
import org.apache.empire.db.DBTable;
import org.apache.empire.db.DBTableColumn;
@@ -433,4 +435,21 @@ public class DBDatabaseDriverMSSQL exten
ddlGenerator.getDDLScript(type, dbo, script);
}
+ /**
+ * @see DBDatabaseDriver#addEnableRelationStmt(DBRelation, boolean, DBSQLScript)
+ */
+ @Override
+ public void addEnableRelationStmt(DBRelation r, boolean enable, DBSQLScript script)
+ {
+ // ALTER TABLE {table.name} {CHECK|NOCHECK} CONSTRAINT {relation.name}
+ StringBuilder b = new StringBuilder();
+ b.append("ALTER TABLE ");
+ r.getForeignKeyTable().addSQL(b, DBExpr.CTX_FULLNAME);
+ b.append(enable ? " CHECK " : " NOCHECK ");
+ b.append("CONSTRAINT ");
+ b.append(r.getName());
+ // add
+ script.addStmt(b);
+ }
+
}