summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrian S. O'Neill <bronee@gmail.com>2009-02-06 21:51:27 +0000
committerBrian S. O'Neill <bronee@gmail.com>2009-02-06 21:51:27 +0000
commit7b9a86384107ac127b0007fd767131633f8ce786 (patch)
treeebe288d59770a8330e46c63b0127f05cac4e9294 /src
parent0040cf72f1a878d5e19253036ae38b09a6a48567 (diff)
Fix index updates when derived index against joined storable is deleted.
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/amazon/carbonado/gen/StorableGenerator.java3
-rw-r--r--src/main/java/com/amazon/carbonado/repo/indexed/DerivedIndexesTrigger.java8
2 files changed, 10 insertions, 1 deletions
diff --git a/src/main/java/com/amazon/carbonado/gen/StorableGenerator.java b/src/main/java/com/amazon/carbonado/gen/StorableGenerator.java
index 5e1d1fc..87dede1 100644
--- a/src/main/java/com/amazon/carbonado/gen/StorableGenerator.java
+++ b/src/main/java/com/amazon/carbonado/gen/StorableGenerator.java
@@ -826,6 +826,9 @@ public final class StorableGenerator<S extends Storable> {
int count = property.getJoinElementCount();
for (int i=0; i<count; i++) {
StorableProperty internal = property.getInternalJoinElement(i);
+ if (internal.getWriteMethod() == null) {
+ continue;
+ }
StorableProperty external = property.getExternalJoinElement(i);
b.loadLocal(b.getParameter(0));
diff --git a/src/main/java/com/amazon/carbonado/repo/indexed/DerivedIndexesTrigger.java b/src/main/java/com/amazon/carbonado/repo/indexed/DerivedIndexesTrigger.java
index 2cc3d8f..9176e92 100644
--- a/src/main/java/com/amazon/carbonado/repo/indexed/DerivedIndexesTrigger.java
+++ b/src/main/java/com/amazon/carbonado/repo/indexed/DerivedIndexesTrigger.java
@@ -88,7 +88,13 @@ class DerivedIndexesTrigger<S extends Storable, D extends Storable> extends Trig
@Override
public void afterDelete(S storable, Object state) throws PersistException {
- updateValues(storable, state);
+ if (state != null) {
+ List<Storable> oldIndexEntries = (List<Storable>) state;
+ int size = oldIndexEntries.size();
+ for (int i=0; i<size; i++) {
+ oldIndexEntries.get(i).delete();
+ }
+ }
}
@Override