1 21 package com.db4o.db4ounit.common.querying; 22 23 import com.db4o.*; 24 import com.db4o.config.*; 25 import com.db4o.query.*; 26 27 import db4ounit.*; 28 import db4ounit.extensions.*; 29 30 public class CascadeDeleteDeleted extends AbstractDb4oTestCase { 31 32 public static class CddMember { 33 public String name; 34 } 35 36 public String name; 37 38 public Object untypedMember; 39 40 public CddMember typedMember; 41 42 public CascadeDeleteDeleted() { 43 } 44 45 public CascadeDeleteDeleted(String name) { 46 this.name = name; 47 } 48 49 protected void configure(Configuration config) { 50 config.objectClass(this).cascadeOnDelete(true); 51 } 52 53 protected void store() { 54 membersFirst("membersFirst commit"); 55 membersFirst("membersFirst"); 56 57 twoRef("twoRef"); 58 twoRef("twoRef commit"); 59 twoRef("twoRef delete"); 60 twoRef("twoRef delete commit"); 61 } 62 63 private void membersFirst(String name) { 64 CascadeDeleteDeleted cdd = new CascadeDeleteDeleted(name); 65 cdd.untypedMember = new CddMember(); 66 cdd.typedMember = new CddMember(); 67 db().set(cdd); 68 } 69 70 private void twoRef(String name) { 71 CascadeDeleteDeleted cdd = new CascadeDeleteDeleted(name); 72 cdd.untypedMember = new CddMember(); 73 cdd.typedMember = new CddMember(); 74 CascadeDeleteDeleted cdd2 = new CascadeDeleteDeleted(name); 75 cdd2.untypedMember = cdd.untypedMember; 76 cdd2.typedMember = cdd.typedMember; 77 db().set(cdd); 78 db().set(cdd2); 79 80 } 81 82 public void test() { 83 tMembersFirst("membersFirst commit"); 84 tMembersFirst("membersFirst"); 85 tTwoRef("twoRef"); 86 tTwoRef("twoRef commit"); 87 tTwoRef("twoRef delete"); 88 tTwoRef("twoRef delete commit"); 89 Assert.areEqual(0, countOccurences(CddMember.class)); 90 } 91 92 private void tMembersFirst(String name) { 93 boolean commit = name.indexOf("commit") > 1; 94 95 Query q = newQuery(this.getClass()); 96 q.descend("name").constrain(name); 97 ObjectSet objectSet = q.execute(); 98 CascadeDeleteDeleted cdd = (CascadeDeleteDeleted) objectSet.next(); 99 db().delete(cdd.untypedMember); 100 db().delete(cdd.typedMember); 101 if (commit) { 102 db().commit(); 103 } 104 db().delete(cdd); 105 if (!commit) { 106 db().commit(); 107 } 108 } 109 110 private void tTwoRef(String name) { 111 boolean commit = name.indexOf("commit") > 1; 112 boolean delete = name.indexOf("delete") > 1; 113 Query q = newQuery(this.getClass()); 114 q.descend("name").constrain(name); 115 ObjectSet objectSet = q.execute(); 116 CascadeDeleteDeleted cdd = (CascadeDeleteDeleted) objectSet.next(); 117 CascadeDeleteDeleted cdd2 = (CascadeDeleteDeleted) objectSet.next(); 118 if (delete) { 119 db().delete(cdd.untypedMember); 120 db().delete(cdd.typedMember); 121 } 122 db().delete(cdd); 123 if (commit) { 124 db().commit(); 125 } 126 db().delete(cdd2); 127 if (!commit) { 128 db().commit(); 129 } 130 } 131 } 132 | Popular Tags |