1 16 package org.outerj.daisy.repository.test; 17 18 import org.outerj.daisy.repository.testsupport.AbstractDaisyTestCase; 19 import org.outerj.daisy.repository.*; 20 import org.outerj.daisy.repository.schema.RepositorySchema; 21 import org.outerj.daisy.repository.schema.FieldType; 22 import org.outerj.daisy.repository.schema.DocumentType; 23 import org.outerj.daisy.repository.user.Role; 24 import org.outerj.daisy.repository.query.QueryManager; 25 import org.outerj.daisy.repository.query.SortOrder; 26 import org.outerx.daisy.x10.SearchResultDocument; 27 import org.outerx.daisy.x10.DistinctSearchResultDocument; 28 29 import java.util.Locale ; 30 import java.util.Map ; 31 import java.util.HashMap ; 32 33 public abstract class AbstractQueryTest extends AbstractDaisyTestCase { 34 35 public void testQuerying() throws Exception { 36 RepositoryManager repositoryManager = getRepositoryManager(); 37 38 TestContentCreator contentCreator = new TestContentCreator(); 39 contentCreator.run(repositoryManager); 40 41 System.err.println("Sleeping a little while to give fulltextinder time to do its job."); 42 Thread.sleep(10000); 43 44 Repository testuserRepository = repositoryManager.getRepository(new Credentials("testuser", "testuser")); 45 testuserRepository.switchRole(Role.ADMINISTRATOR); 46 QueryManager queryManager = testuserRepository.getQueryManager(); 47 48 String query = "select id where true order by id"; 50 VariantKey[] resultKeys = queryManager.performQueryReturnKeys(query, Locale.US); 51 assertEquals(12, resultKeys.length); 52 53 54 Repository user1Repository = repositoryManager.getRepository(new Credentials("user1", "user1")); 55 queryManager = user1Repository.getQueryManager(); 56 57 SearchResultDocument searchResultDoc = queryManager.performQuery("select name where FullText('verzamelaars')", Locale.US); 61 assertEquals(1, searchResultDoc.getSearchResult().getRows().getRowArray().length); 62 assertEquals("Document1", searchResultDoc.getSearchResult().getRows().getRowArray()[0].getValueArray()[0]); 63 long document1Id = searchResultDoc.getSearchResult().getRows().getRowArray()[0].getDocumentId(); 64 65 resultKeys = queryManager.performQueryReturnKeys("select name where name = 'Document3'", Locale.US); 69 assertEquals(1, resultKeys.length); 70 71 resultKeys = queryManager.performQueryReturnKeys("select name where name = 'Document6'", Locale.US); 72 assertEquals(0, resultKeys.length); 73 74 resultKeys = queryManager.performQueryReturnKeys("select name where LinksTo(" + document1Id + ", 1, 0)", Locale.US); 78 assertEquals(1, resultKeys.length); 79 80 Repository user2Repository = repositoryManager.getRepository(new Credentials("user2", "user2")); 84 queryManager = user2Repository.getQueryManager(); 85 86 resultKeys = queryManager.performQueryReturnKeys("select name where InCollection('collection2')", Locale.US); 87 assertEquals(1, resultKeys.length); 88 89 resultKeys = queryManager.performQueryReturnKeys("select id where $field1 like 'something-%' and ($field2 != 2323 or $field2 is null)", Locale.US); 93 assertEquals(1, resultKeys.length); 94 95 queryManager = user1Repository.getQueryManager(); 96 resultKeys = queryManager.performQueryReturnKeys("select id where $field2 is null and InCollection('collection1')", Locale.US); 97 assertEquals(4, resultKeys.length); 98 99 resultKeys = queryManager.performQueryReturnKeys("select id where InCollection('collection2') and $field2 is null", Locale.US); 100 assertEquals(1, resultKeys.length); 101 102 resultKeys = queryManager.performQueryReturnKeys("select id where $field2 is null and InCollection('collection2') and $field2 is null", Locale.US); 103 assertEquals(1, resultKeys.length); 104 105 resultKeys = queryManager.performQueryReturnKeys("select id where $field2 is null and InCollection('collection2') and $field2 is null", Locale.US); 106 assertEquals(1, resultKeys.length); 107 108 resultKeys = queryManager.performQueryReturnKeys("select id where $field1 is not null", Locale.US); 109 assertEquals(2, resultKeys.length); 110 111 resultKeys = queryManager.performQueryReturnKeys("select id where #xyz is null", Locale.US); 112 assertEquals(10, resultKeys.length); 113 114 resultKeys = queryManager.performQueryReturnKeys("select id where #xyz is not null", Locale.US); 115 assertEquals(1, resultKeys.length); 116 117 resultKeys = queryManager.performQueryReturnKeys("select id where #xyz = 123", Locale.US); 118 assertEquals(1, resultKeys.length); 119 120 resultKeys = queryManager.performQueryReturnKeys("select id where #xyz is null or #xyz != 123", Locale.US); 121 assertEquals(10, resultKeys.length); 122 123 resultKeys = queryManager.performQueryReturnKeys("select id where #xyz != 123 or #xyz is null", Locale.US); 124 assertEquals(10, resultKeys.length); 125 126 resultKeys = queryManager.performQueryReturnKeys("select id where InCollection('collection2') or InCollection('collection1')", Locale.US); 130 assertEquals(5, resultKeys.length); 131 132 resultKeys = queryManager.performQueryReturnKeys("select id where InCollection('collection2','collection1')", Locale.US); 133 assertEquals(5, resultKeys.length); 134 135 resultKeys = queryManager.performQueryReturnKeys("select id where InCollection('collection3') and InCollection('collection4')", Locale.US); 136 assertEquals(1, resultKeys.length); 137 138 resultKeys = queryManager.performQueryReturnKeys("select id where $StringField1 = 'hello' and $DateField1 = '2004-12-06' and $DateTimeField1 = '2004-10-14 12:13:14' and $DecimalField1 = 678.94321 and $DoubleField1 = 123.456", Locale.US); 142 assertEquals(1, resultKeys.length); 143 144 resultKeys = queryManager.performQueryReturnKeys("select id where $DateField1 >= '2004-12-06' and $DateField1 <= '2004-12-06'", Locale.US); 146 assertEquals(1, resultKeys.length); 147 148 resultKeys = queryManager.performQueryReturnKeys("select id where $DateField1 >= '2004-12-06' and $DateField1 < '2004-12-11'", Locale.US); 149 assertEquals(2, resultKeys.length); 150 151 resultKeys = queryManager.performQueryReturnKeys("select id where $DateField1 != '2004-12-06' and InCollection('collection5')", Locale.US); 152 assertEquals(1, resultKeys.length); 153 154 resultKeys = queryManager.performQueryReturnKeys("select id where $StringField1 like '%hello' and InCollection('collection5')", Locale.US); 156 assertEquals(2, resultKeys.length); 157 158 resultKeys = queryManager.performQueryReturnKeys("select id where $StringField1 not like '%hello' and InCollection('collection5')", Locale.US); 159 assertEquals(0, resultKeys.length); 160 161 resultKeys = queryManager.performQueryReturnKeys("select id where $LongField1 = 1978 or $LongField1 = 1985 OR $LongField1 = 1990 and $LongField1 != 1991 and InCollection('collection5')", Locale.US); 163 assertEquals(3, resultKeys.length); 164 165 resultKeys = queryManager.performQueryReturnKeys("select id where $LongField1 = 1978 or $LongField1 = 1985 OR $LongField1 = 1990 and InCollection('collection5') and $LongField1 != 1991", Locale.US); 167 assertEquals(3, resultKeys.length); 168 169 resultKeys = queryManager.performQueryReturnKeys("select id where ($LongField1 = 1978 and InCollection('collection5')) or ($LongField1 = 1985 and InCollection('collection5'))", Locale.US); 170 assertEquals(2, resultKeys.length); 171 172 queryManager = user2Repository.getQueryManager(); 173 resultKeys = queryManager.performQueryReturnKeys("select id where ($LongField1 = 1978 and InCollection('collection5')) or ($field2 = 34 and InCollection('collection2'))", Locale.US); 174 assertEquals(2, resultKeys.length); 175 176 queryManager = user1Repository.getQueryManager(); 177 resultKeys = queryManager.performQueryReturnKeys("select id where $LongField1 between 1977 and 1979", Locale.US); 178 assertEquals(1, resultKeys.length); 179 180 resultKeys = queryManager.performQueryReturnKeys("select id where $LongField1 in (1978,1985)", Locale.US); 181 assertEquals(2, resultKeys.length); 182 183 resultKeys = queryManager.performQueryReturnKeys("select id where $LongField1 not in (1978,1985)", Locale.US); 184 assertEquals(1, resultKeys.length); 185 186 resultKeys = queryManager.performQueryReturnKeys("select id where $DoubleField1 > 123 and $DoubleField1 < 124", Locale.US); 188 assertEquals(1, resultKeys.length); 189 190 resultKeys = queryManager.performQueryReturnKeys("select id where name = 'Document11' and $LongField1 = 1990 and documentType = 'doctype3'", Locale.US); 194 assertEquals(1, resultKeys.length); 195 196 resultKeys = queryManager.performQueryReturnKeys("select id where $LongField1 = 1990 and name = 'Document11' and documentType = 'doctype3'", Locale.US); 197 assertEquals(1, resultKeys.length); 198 199 resultKeys = queryManager.performQueryReturnKeys("select id where $LongField1 = 1990 and documentType = 'doctype3' and name = 'Document11'", Locale.US); 200 assertEquals(1, resultKeys.length); 201 202 resultKeys = queryManager.performQueryReturnKeys("select id where $StringField1 = 'boe'", Locale.US); 206 assertEquals(0, resultKeys.length); 207 208 resultKeys = queryManager.performQueryReturnKeys("select id where $StringField1 = 'boe' option search_last_version = 'true'", Locale.US); 209 assertEquals(1, resultKeys.length); 210 211 resultKeys = queryManager.performQueryReturnKeys("select id where $StringField1 = 'ba'", Locale.US); 212 assertEquals(0, resultKeys.length); 213 214 resultKeys = queryManager.performQueryReturnKeys("select id where $StringField1 = 'ba' option include_retired = 'true'", Locale.US); 215 assertEquals(1, resultKeys.length); 216 217 resultKeys = queryManager.performQueryReturnKeys("select id where $StringField1 in('boe','ba') option include_retired = 'true', search_last_version = 'true'", Locale.US); 218 assertEquals(2, resultKeys.length); 219 220 Map myQueryOptions = new HashMap (); 224 myQueryOptions.put("search_last_version", "true"); 225 resultKeys = queryManager.performQueryReturnKeys("select id where $StringField1 = 'boe'", null, myQueryOptions, Locale.US); 226 assertEquals(1, resultKeys.length); 227 228 resultKeys = queryManager.performQueryReturnKeys("select id where InCollection('collection2','collection1') limit 2", Locale.US); 232 assertEquals(2, resultKeys.length); 233 234 searchResultDoc = queryManager.performQuery("select name, $StringField1 where $StringField1 like '%hello' and InCollection('collection5') order by $StringField1 asc, id desc", Locale.US); 238 assertEquals("another hello", searchResultDoc.getSearchResult().getRows().getRowArray()[0].getValueArray()[1]); 239 assertEquals("hello", searchResultDoc.getSearchResult().getRows().getRowArray()[1].getValueArray()[1]); 240 241 Repository repository = repositoryManager.getRepository(new Credentials("testuser", "testuser")); 245 repository.switchRole(Role.ADMINISTRATOR); 246 RepositorySchema schema = repository.getRepositorySchema(); 247 FieldType multiValueField1 = schema.createFieldType("multiValueField1", ValueType.STRING, true); 248 multiValueField1.save(); 249 DocumentType documentType = schema.createDocumentType("docWithMultiValueFields"); 250 documentType.addFieldType(multiValueField1, true); 251 documentType.save(); 252 Document mvDoc1 = repository.createDocument("mv doc 1", documentType.getId()); 253 mvDoc1.setField("multiValueField1", new Object [] {"mv 1", "mv 2", "mv 3"}); 254 mvDoc1.save(); 255 Document mvDoc2 = repository.createDocument("mv doc 2", documentType.getId()); 256 mvDoc2.setField("multiValueField1", new Object [] {"mv 1", "abc"}); 257 mvDoc2.save(); 258 259 searchResultDoc = queryManager.performQuery("select name, $multiValueField1 where documentType = 'docWithMultiValueFields'", Locale.US); 260 SearchResultDocument.SearchResult.Rows.Row.MultiValue[] multiValues = searchResultDoc.getSearchResult().getRows().getRowArray()[0].getMultiValueArray(); 261 assertEquals("mv 1", multiValues[0].getValueArray(0)); 262 assertEquals("mv 2", multiValues[0].getValueArray(1)); 263 assertEquals("mv 3", multiValues[0].getValueArray(2)); 264 265 searchResultDoc = queryManager.performQuery("select name, $multiValueField1 where $multiValueField1.valueCount = 3", Locale.US); 267 assertEquals(1, searchResultDoc.getSearchResult().getRows().getRowArray().length); 268 searchResultDoc = queryManager.performQuery("select name, $multiValueField1 where documentType= 'docWithMultiValueFields' and $multiValueField1.valueCount = 1", Locale.US); 269 assertEquals(0, searchResultDoc.getSearchResult().getRows().getRowArray().length); 270 271 searchResultDoc = queryManager.performQuery("select name, $multiValueField1 where documentType= 'docWithMultiValueFields' and $multiValueField1 has all ('mv 1', 'mv 2')", Locale.US); 273 assertEquals(1, searchResultDoc.getSearchResult().getRows().getRowArray().length); 274 searchResultDoc = queryManager.performQuery("select name, $multiValueField1 where documentType= 'docWithMultiValueFields' and $multiValueField1 has all ('mv 1')", Locale.US); 275 assertEquals(2, searchResultDoc.getSearchResult().getRows().getRowArray().length); 276 searchResultDoc = queryManager.performQuery("select name, $multiValueField1 where documentType= 'docWithMultiValueFields' and $multiValueField1 has all ('rrrrrr')", Locale.US); 277 assertEquals(0, searchResultDoc.getSearchResult().getRows().getRowArray().length); 278 279 searchResultDoc = queryManager.performQuery("select name, $multiValueField1 where documentType= 'docWithMultiValueFields' and $multiValueField1 has exactly ('mv 1', 'abc')", Locale.US); 281 assertEquals(1, searchResultDoc.getSearchResult().getRows().getRowArray().length); 282 searchResultDoc = queryManager.performQuery("select name, $multiValueField1 where documentType= 'docWithMultiValueFields' and $multiValueField1 has exactly ('mv 1', 'mv 2')", Locale.US); 283 assertEquals(0, searchResultDoc.getSearchResult().getRows().getRowArray().length); 284 285 searchResultDoc = queryManager.performQuery("select name, $multiValueField1 where documentType= 'docWithMultiValueFields' and $multiValueField1 has any ('mv 1', 'koekoek', 'mv 2', 'jaja')", Locale.US); 287 assertEquals(2, searchResultDoc.getSearchResult().getRows().getRowArray().length); 288 searchResultDoc = queryManager.performQuery("select name, $multiValueField1 where documentType= 'docWithMultiValueFields' and $multiValueField1 has some ('koekoek', 'mv 2', 'jaja')", Locale.US); 289 assertEquals(1, searchResultDoc.getSearchResult().getRows().getRowArray().length); 290 291 searchResultDoc = queryManager.performQuery("select name, $multiValueField1 where documentType= 'docWithMultiValueFields' and $multiValueField1 has none ('mv 1')", Locale.US); 293 assertEquals(0, searchResultDoc.getSearchResult().getRows().getRowArray().length); 294 searchResultDoc = queryManager.performQuery("select name, $multiValueField1 where documentType= 'docWithMultiValueFields' and $multiValueField1 has none ('patati patata')", Locale.US); 295 assertEquals(2, searchResultDoc.getSearchResult().getRows().getRowArray().length); 296 297 searchResultDoc = queryManager.performQuery("select name, $LinkField1, $LinkField2 where $LinkField1 is not null", Locale.US); 301 assertEquals(1, searchResultDoc.getSearchResult().getRows().getRowArray().length); 302 assertEquals("daisy:666@1:1", searchResultDoc.getSearchResult().getRows().getRowArray(0).getMultiValueArray(0).getLinkValueArray(1).getStringValue()); 303 304 searchResultDoc = queryManager.performQuery("select name, $LinkField1, $LinkField2 where $LinkField1.branchId = 1 and $LinkField1.languageId = 1", Locale.US); 305 assertEquals(1, searchResultDoc.getSearchResult().getRows().getRowArray().length); 306 307 searchResultDoc = queryManager.performQuery("select name, $LinkField1, $LinkField2 where $LinkField1.branch = 'main' and $LinkField1.language = 'default'", Locale.US); 308 assertEquals(1, searchResultDoc.getSearchResult().getRows().getRowArray().length); 309 310 DistinctSearchResultDocument distinctResultDoc = queryManager.performDistinctQuery("select $StringField1 where $StringField1 is not null", SortOrder.NONE, Locale.US); 314 assertEquals(2, distinctResultDoc.getDistinctSearchResult().getValues().getValueArray().length); 315 } 316 317 protected boolean resetDataStores() { 318 return true; 319 } 320 321 protected abstract RepositoryManager getRepositoryManager() throws Exception ; 322 } 323 | Popular Tags |