From d2697275241c706de21def349ac32dc9793c228d Mon Sep 17 00:00:00 2001 From: hns Date: Tue, 14 May 2002 16:35:18 +0000 Subject: [PATCH] Nodes are now inserted/updated in the database in the same order they were marked as dirty in the transactor. This is to avoid exceptions when databases check for relational constraints in inserted objects. --- src/helma/objectmodel/db/Transactor.java | 116 +++-------------------- 1 file changed, 13 insertions(+), 103 deletions(-) diff --git a/src/helma/objectmodel/db/Transactor.java b/src/helma/objectmodel/db/Transactor.java index 9ff1632a..66d2c3d9 100644 --- a/src/helma/objectmodel/db/Transactor.java +++ b/src/helma/objectmodel/db/Transactor.java @@ -22,6 +22,7 @@ public class Transactor extends Thread { // List of nodes to be updated private HashMap nodes; + private ArrayList nodesArray; // List of visited clean nodes private HashMap cleannodes; // Is a transaction in progress? @@ -44,6 +45,7 @@ public class Transactor extends Thread { super (group, runnable, group.getName ()); this.nmgr = nmgr; nodes = new HashMap (); + nodesArray = new ArrayList (); cleannodes = new HashMap (); sqlCon = new HashMap (); active = false; @@ -56,6 +58,7 @@ public class Transactor extends Thread { Key key = node.getKey (); if (!nodes.containsKey (key)) { nodes.put (key, node); + nodesArray.add (node); } } } @@ -64,6 +67,7 @@ public class Transactor extends Thread { if (node != null) { Key key = node.getKey (); nodes.remove (key); + nodesArray.remove (node); } } @@ -110,6 +114,7 @@ public class Transactor extends Thread { abort (); nodes.clear (); + nodesArray.clear (); cleannodes.clear (); txn = nmgr.db.beginTransaction (); active = true; @@ -125,12 +130,12 @@ public class Transactor extends Thread { } int ins = 0, upd = 0, dlt = 0; - int l = nodes.size (); + int l = nodesArray.size (); Replicator replicator = nmgr.getReplicator (); - for (Iterator i=nodes.values().iterator(); i.hasNext (); ) { - Node node = (Node) i.next (); + for (int i=0; i