1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 package org.melati.poem.test;
46
47 import org.melati.poem.Group;
48 import org.melati.poem.Table;
49 import org.melati.poem.CachedSelection;
50 import org.melati.poem.TableInfo;
51 import org.melati.poem.User;
52
53
54
55
56
57
58 public class CachedSelectionTest extends PoemTestCase {
59
60
61
62
63 public CachedSelectionTest() {
64 super();
65 }
66
67 public CachedSelectionTest(String name) {
68 super(name);
69 }
70 protected void setUp()
71 throws Exception {
72 super.setUp();
73 }
74
75 protected void tearDown()
76 throws Exception {
77 super.tearDown();
78 }
79
80
81
82
83 public void testFirstObject() {
84 CachedSelection<TableInfo> cachedSelection = new CachedSelection<TableInfo>(getDb().getTableInfoTable(), null, null, null);
85 if (!getDb().getDbms().canDropColumns()) {
86 return;
87 }
88 assertEquals("tableInfo/0", cachedSelection.firstObject().toString());
89 }
90
91
92
93
94 public void testNth() {
95 CachedSelection<TableInfo> cachedSelection = new CachedSelection<TableInfo>(getDb().getTableInfoTable(), null, null, null);
96 if (!getDb().getDbms().canDropColumns()) {
97 return;
98 }
99 assertEquals("tableInfo/0", cachedSelection.nth(0).toString());
100 assertEquals("tableInfo/7", cachedSelection.nth(6).toString());
101 assertNull(cachedSelection.nth(999));
102 }
103
104
105
106
107 public void testMultiTableSelection() {
108 getDb().uncache();
109 Table<?>[] others = new Table[] {getDb().getGroupMembershipTable(),
110 getDb().getGroupTable()};
111 String query =
112 getDb().getUserTable().troidColumn().fullQuotedName() +
113
114 " = 1 AND " +
115 getDb().getGroupMembershipTable().getUserColumn().fullQuotedName() +
116
117 " = " +
118
119 getDb().getUserTable().troidColumn().fullQuotedName() +
120 " AND " +
121 getDb().getGroupMembershipTable().quotedName() + "." +
122 getDb().getGroupMembershipTable().getGroupColumn().quotedName()
123
124 + " = " +
125
126 getDb().getGroupTable().troidColumn().fullQuotedName() +
127 " AND " +
128 getDb().getGroupTable().troidColumn().fullQuotedName() +
129
130 " = 0";
131
132 int count = getDb().getQueryCount();
133
134
135 CachedSelection<User> cachedSelection = new CachedSelection<User>(
136 getDb().getUserTable(), query, null, others);
137 assertEquals(count + 4, getDb().getQueryCount());
138 assertEquals("_administrator_", cachedSelection.nth(0).toString());
139 assertEquals(count + 6, getDb().getQueryCount());
140 assertEquals("_administrator_", cachedSelection.nth(0).toString());
141 assertEquals(count + 6, getDb().getQueryCount());
142 String currentName = getDb().guestUser().getName();
143 String lastQuery = getDb().getLastQuery();
144 assertEquals(count + 8, getDb().getQueryCount());
145 assertEquals(lastQuery, getDb().getLastQuery());
146 getDb().guestUser().setName(currentName);
147 lastQuery = getDb().getLastQuery();
148 assertEquals("_administrator_", cachedSelection.nth(0).toString());
149 assertEquals("_administrator_", cachedSelection.nth(0).toString());
150 Group g = getDb().getGroupTable().getGroupObject(0);
151 g.setName(g.getName());
152 assertEquals("_administrator_", cachedSelection.nth(0).toString());
153 assertEquals("_administrator_", cachedSelection.nth(0).toString());
154 assertEquals("org.melati.poem.CachedSelection " +
155 "SELECT " + getDb().getDbms().getQuotedName("user") + "." + getDb().getDbms().getQuotedName("id") +
156 " FROM " + getDb().getDbms().getQuotedName("user") + ", " +
157 getDb().getDbms().getQuotedName("groupmembership") + ", " +
158 getDb().getDbms().getQuotedName("group") + " WHERE " +
159 "(" + getDb().getDbms().getQuotedName("user") + "." + getDb().getDbms().getQuotedName("id") +
160 " = 1 AND " + getDb().getDbms().getQuotedName("groupmembership") + "." +
161 getDb().getDbms().getQuotedName("user") + " = " +
162 getDb().getDbms().getQuotedName("user") + "." + getDb().getDbms().getQuotedName("id") + " AND " +
163 getDb().getDbms().getQuotedName("groupmembership") + "." + getDb().getDbms().getQuotedName("group") +
164 " = " + getDb().getDbms().getQuotedName("group") + "." + getDb().getDbms().getQuotedName("id") +
165 " AND " +
166 getDb().getDbms().getQuotedName("group") + "." + getDb().getDbms().getQuotedName("id") +
167 " = 0) ORDER BY " + getDb().getDbms().getQuotedName("user") + "." + getDb().getDbms().getQuotedName("name"),
168 cachedSelection.toString());
169 getDb().setLogSQL(false);
170 }
171
172
173
174
175 public void testToString() {
176
177 }
178 }