You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ma...@apache.org on 2011/03/31 07:35:19 UTC

svn commit: r1087189 - /db/derby/code/branches/10.7/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java

Author: mamta
Date: Thu Mar 31 05:35:18 2011
New Revision: 1087189

URL: http://svn.apache.org/viewvc?rev=1087189&view=rev
Log:
DERBY-5121 Data corruption when executing an UPDATE trigger

Backport engine changes from revision 1087049(trunk) into 10.7 codeline.


Modified:
    db/derby/code/branches/10.7/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java

Modified: db/derby/code/branches/10.7/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.7/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java?rev=1087189&r1=1087188&r2=1087189&view=diff
==============================================================================
--- db/derby/code/branches/10.7/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java (original)
+++ db/derby/code/branches/10.7/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java Thu Mar 31 05:35:18 2011
@@ -1087,57 +1087,30 @@ public final class UpdateNode extends DM
 		if (relevantTriggers.size() > 0)
 		{
 			needsDeferredProcessing[0] = true;
+			
+			boolean needToIncludeAllColumns = false;
 			Enumeration descs = relevantTriggers.elements();
 			while (descs.hasMoreElements())
 			{
 				TriggerDescriptor trd = (TriggerDescriptor) descs.nextElement();
 				
-				int[] referencedColsInTriggerAction = trd.getReferencedColsInTriggerAction();
-				int[] triggerCols = trd.getReferencedCols();
-				if (triggerCols == null || triggerCols.length == 0) {
-					for (int i=0; i < columnCount; i++) {
-						columnMap.set(i+1);
-					}
-					//no need to go through the test of the trigger because
-					//we have already decided to read all the columns 
-					//because no trigger action columns were found for the
-					//trigger that we are considering right now.
-					break; 
-				} else {
-					if (referencedColsInTriggerAction == null || 
-							referencedColsInTriggerAction.length == 0) {
-						//Does this trigger have REFERENCING clause defined on it
-						if (!trd.getReferencingNew() && !trd.getReferencingOld()) {
-							for (int ix = 0; ix < triggerCols.length; ix++)
-							{
-								columnMap.set(triggerCols[ix]);
-							}
-						} else {
-							for (int i=0; i < columnCount; i++) {
-								columnMap.set(i+1);
-							}							
-							//no need to go through the test of the trigger because
-							//we have already decided to read all the columns 
-							//because no trigger action columns were found for the
-							//trigger that we are considering right now.
-							break; 
-						}
-					} else {
-						for (int ix = 0; ix < triggerCols.length; ix++)
-						{
-							columnMap.set(triggerCols[ix]);
-						}
-						for (int ix = 0; ix < referencedColsInTriggerAction.length; ix++)
-						{
-							columnMap.set(referencedColsInTriggerAction[ix]);
-						}
-					}
-				}			
+				//Does this trigger have REFERENCING clause defined on it
+				if (!trd.getReferencingNew() && !trd.getReferencingOld())
+					continue;
+				else
+				{
+					needToIncludeAllColumns = true;
+					break;
+				}
+			}
 
+			if (needToIncludeAllColumns) {
+				for (int i = 1; i <= columnCount; i++)
+				{
+					columnMap.set(i);
+				}
 			}
 		}
-
-
 		return	columnMap;
 	}