You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by br...@apache.org on 2004/08/16 21:06:21 UTC
cvs commit: db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql SqlDeleteByPkStatement.java
brj 2004/08/16 12:06:20
Modified: src/java/org/apache/ojb/broker/accesslayer
StatementManager.java
src/java/org/apache/ojb/broker/accesslayer/sql
SqlDeleteByPkStatement.java
Log:
delete uses discriminator column in the where clause (if it's not already part of the pk)
Revision Changes Path
1.49 +9 -2 db-ojb/src/java/org/apache/ojb/broker/accesslayer/StatementManager.java
Index: StatementManager.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/StatementManager.java,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -r1.48 -r1.49
--- StatementManager.java 11 Aug 2004 00:42:53 -0000 1.48
+++ StatementManager.java 16 Aug 2004 19:06:07 -0000 1.49
@@ -120,7 +120,7 @@
}
/**
- * binds the objects primary key and locking values to the statement, BRJ
+ * binds the objects primary key class-discriminator and locking values to the statement, BRJ
*/
public void bindDelete(PreparedStatement stmt, ClassDescriptor cld, Object obj) throws SQLException
{
@@ -132,6 +132,7 @@
{
int index = 1;
ValueContainer[] values, currentLockingValues;
+ FieldDescriptor discriminatorFd = cld.getDiscriminatorField();
currentLockingValues = cld.getCurrentLockingValues(obj);
// parameters for WHERE-clause pk
@@ -141,6 +142,12 @@
m_platform.setObjectForStatement(stmt, index, values[i].getValue(), values[i].getJdbcType().getType());
index++;
}
+
+ if (discriminatorFd != null && !discriminatorFd.isPrimaryKey())
+ {
+ m_platform.setObjectForStatement(stmt, index, cld.getDiscriminatorValue(), discriminatorFd.getJdbcType().getType());
+ index++;
+ }
// parameters for WHERE-clause locking
values = currentLockingValues;
1.7 +41 -1 db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/SqlDeleteByPkStatement.java
Index: SqlDeleteByPkStatement.java
===================================================================
RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/SqlDeleteByPkStatement.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- SqlDeleteByPkStatement.java 4 Apr 2004 23:53:32 -0000 1.6
+++ SqlDeleteByPkStatement.java 16 Aug 2004 19:06:20 -0000 1.7
@@ -15,7 +15,12 @@
* limitations under the License.
*/
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.apache.commons.collections.CollectionUtils;
import org.apache.ojb.broker.metadata.ClassDescriptor;
+import org.apache.ojb.broker.metadata.FieldDescriptor;
import org.apache.ojb.broker.util.logging.Logger;
/**
@@ -50,6 +55,41 @@
appendWhereClause(cld, true, stmt); //use Locking
return stmt.toString();
+ }
+
+ /**
+ * Generate a where clause for a prepared Statement.
+ * Only primary key, the class-discriminator (if not part of the pk)
+ * and the locking fields are used in this where clause.
+ * @param cld the ClassDescriptor
+ * @param useLocking true if locking fields should be included
+ * @param stmt the StatementBuffer
+ */
+ protected void appendWhereClause(ClassDescriptor cld, boolean useLocking, StringBuffer stmt)
+ {
+ FieldDescriptor[] pkFields = cld.getPkFields();
+ FieldDescriptor discriminatorFd = cld.getDiscriminatorField();
+
+ Collection fldColl = new ArrayList();
+ CollectionUtils.addAll(fldColl, pkFields);
+
+ if (discriminatorFd != null && !discriminatorFd.isPrimaryKey())
+ {
+ fldColl.add(discriminatorFd);
+ }
+
+ if (useLocking)
+ {
+ FieldDescriptor[] lockingFields = cld.getLockingFields();
+ if (lockingFields.length > 0)
+ {
+ CollectionUtils.addAll(fldColl, cld.getLockingFields());
+ }
+ }
+
+ FieldDescriptor[] fields = new FieldDescriptor[fldColl.size()];
+ fldColl.toArray(fields);
+ appendWhereClause(fields, stmt);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org