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
51
52
53
54
55
56 public class CachedSelectionTest extends PoemTestCase {
57
58
59
60
61 public CachedSelectionTest() {
62 super();
63 }
64
65
66
67
68
69 public CachedSelectionTest(String name) {
70 super(name);
71 }
72
73
74
75
76 protected void setUp()
77 throws Exception {
78 super.setUp();
79 }
80
81
82
83
84
85 protected void tearDown()
86 throws Exception {
87 super.tearDown();
88 }
89
90
91
92
93 public void testFirstObject() {
94 CachedSelection cachedSelection = new CachedSelection(getDb().getTableInfoTable(), null, null, null);
95 if (!getDb().getDbms().canDropColumns()) {
96 return;
97 }
98 assertEquals("tableinfo/0", cachedSelection.firstObject().toString());
99 }
100
101
102
103
104 public void testNth() {
105 CachedSelection cachedSelection = new CachedSelection(getDb().getTableInfoTable(), null, null, null);
106 if (!getDb().getDbms().canDropColumns()) {
107 return;
108 }
109 assertEquals("tableinfo/0", cachedSelection.nth(0).toString());
110 assertEquals("tableinfo/7", cachedSelection.nth(6).toString());
111 assertNull(cachedSelection.nth(999));
112 }
113
114
115
116
117 public void testMultiTableSelection() {
118 getDb().uncache();
119 Table[] others = new Table[] {getDb().getGroupMembershipTable(),
120 getDb().getGroupTable()};
121 String query =
122 getDb().getUserTable().troidColumn().fullQuotedName() +
123
124 " = 1 AND " +
125 getDb().getGroupMembershipTable().getUserColumn().fullQuotedName() +
126
127 " = " +
128
129 getDb().getUserTable().troidColumn().fullQuotedName() +
130 " AND " +
131 getDb().getGroupMembershipTable().quotedName() + "." +
132 getDb().getGroupMembershipTable().getGroupColumn().quotedName()
133
134 + " = " +
135
136 getDb().getGroupTable().troidColumn().fullQuotedName() +
137 " AND " +
138 getDb().getGroupTable().troidColumn().fullQuotedName() +
139
140 " = 0";
141
142
143 int count = getDb().getQueryCount();
144
145
146
147 CachedSelection cachedSelection = new CachedSelection(
148 getDb().getUserTable(), query, null, others);
149 assertEquals(count + 4, getDb().getQueryCount());
150
151 assertEquals("_administrator_", cachedSelection.nth(0).toString());
152 assertEquals(count + 6, getDb().getQueryCount());
153 assertEquals("_administrator_", cachedSelection.nth(0).toString());
154 assertEquals(count + 6, getDb().getQueryCount());
155 String currentName = getDb().guestUser().getName();
156 String lastQuery = getDb().getLastQuery();
157 assertEquals(count + 8, getDb().getQueryCount());
158 assertEquals(lastQuery, getDb().getLastQuery());
159 getDb().guestUser().setName(currentName);
160 lastQuery = getDb().getLastQuery();
161 assertEquals("_administrator_", cachedSelection.nth(0).toString());
162 assertEquals("_administrator_", cachedSelection.nth(0).toString());
163 Group g = getDb().getGroupTable().getGroupObject(0);
164 g.setName(g.getName());
165 assertEquals("_administrator_", cachedSelection.nth(0).toString());
166 assertEquals("_administrator_", cachedSelection.nth(0).toString());
167 assertEquals("org.melati.poem.CachedSelection " +
168 "SELECT " + getDb().getDbms().getQuotedName("user") + "." + getDb().getDbms().getQuotedName("id") +
169 " FROM " + getDb().getDbms().getQuotedName("user") + ", " +
170 getDb().getDbms().getQuotedName("groupmembership") + ", " +
171 getDb().getDbms().getQuotedName("group") + " WHERE " +
172 "(" + getDb().getDbms().getQuotedName("user") + "." + getDb().getDbms().getQuotedName("id") +
173 " = 1 AND " + getDb().getDbms().getQuotedName("groupmembership") + "." +
174 getDb().getDbms().getQuotedName("user") + " = " +
175 getDb().getDbms().getQuotedName("user") + "." + getDb().getDbms().getQuotedName("id") + " AND " +
176 getDb().getDbms().getQuotedName("groupmembership") + "." + getDb().getDbms().getQuotedName("group") +
177 " = " + getDb().getDbms().getQuotedName("group") + "." + getDb().getDbms().getQuotedName("id") +
178 " AND " +
179 getDb().getDbms().getQuotedName("group") + "." + getDb().getDbms().getQuotedName("id") +
180 " = 0) ORDER BY " + getDb().getDbms().getQuotedName("user") + "." + getDb().getDbms().getQuotedName("name"),
181 cachedSelection.toString());
182 getDb().setLogSQL(false);
183 }
184
185
186
187
188 public void testToString() {
189
190 }
191 }