01: /* Copyright (C) 2004 - 2007 db4objects Inc. http://www.db4o.com
02:
03: This file is part of the db4o open source object database.
04:
05: db4o is free software; you can redistribute it and/or modify it under
06: the terms of version 2 of the GNU General Public License as published
07: by the Free Software Foundation and as clarified by db4objects' GPL
08: interpretation policy, available at
09: http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
10: Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
11: Suite 350, San Mateo, CA 94403, USA.
12:
13: db4o is distributed in the hope that it will be useful, but WITHOUT ANY
14: WARRANTY; without even the implied warranty of MERCHANTABILITY or
15: FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16: for more details.
17:
18: You should have received a copy of the GNU General Public License along
19: with this program; if not, write to the Free Software Foundation, Inc.,
20: 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
21: package com.db4o.db4ounit.common.assorted;
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 CascadedDeleteReadTestCase extends AbstractDb4oTestCase {
31:
32: public static class Item {
33:
34: public Item _child1;
35:
36: public Item _child2;
37:
38: public String _name;
39:
40: public Item() {
41:
42: }
43:
44: public Item(String name) {
45: _name = name;
46: }
47:
48: public Item(Item child1, Item child2, String name) {
49: _child1 = child1;
50: _child2 = child2;
51: _name = name;
52: }
53:
54: }
55:
56: public static void main(String[] args) {
57: new CascadedDeleteReadTestCase().runSoloAndClientServer();
58: }
59:
60: protected void configure(Configuration config) throws Exception {
61: super .configure(config);
62: config.objectClass(Item.class).objectField("_child1")
63: .cascadeOnDelete(true);
64: config.objectClass(Item.class).objectField("_child2")
65: .cascadeOnDelete(true);
66: config.objectClass(Item.class).objectField("_child1")
67: .cascadeOnUpdate(true);
68: config.objectClass(Item.class).objectField("_child2")
69: .cascadeOnUpdate(true);
70: }
71:
72: protected void store() throws Exception {
73: store(new Item(new Item("1"), null, "parent"));
74: }
75:
76: public void test() {
77: Item item = parentItem();
78: item._child2 = item._child1;
79: item._child1 = null;
80: store(item);
81: db().delete(item);
82: assertItemCount(0);
83: }
84:
85: private Item parentItem() {
86: Query q = db().query();
87: q.constrain(Item.class);
88: q.descend("_name").constrain("parent");
89: return (Item) q.execute().next();
90: }
91:
92: private void assertItemCount(int count) {
93: Query q = db().query();
94: q.constrain(Item.class);
95: ObjectSet objectSet = q.execute();
96: Assert.areEqual(count, objectSet.size());
97: }
98:
99: }
|