1 16 package org.outerj.daisy.repository.test; 17 18 import org.outerj.daisy.repository.testsupport.AbstractDaisyTestCase; 19 import org.outerj.daisy.repository.acl.*; 20 import org.outerj.daisy.repository.*; 21 import org.outerj.daisy.repository.query.PredicateExpression; 22 import org.outerj.daisy.repository.user.Role; 23 import org.outerj.daisy.repository.schema.RepositorySchema; 24 import org.outerj.daisy.repository.schema.FieldType; 25 import org.outerj.daisy.repository.schema.DocumentType; 26 27 import java.math.BigDecimal ; 28 import java.util.GregorianCalendar ; 29 30 public class PredicateExpressionTest extends AbstractDaisyTestCase { 31 private Repository repository; 32 33 protected boolean resetDataStores() { 34 return true; 35 } 36 37 protected void setUp() throws Exception { 38 super.setUp(); 39 40 RepositoryManager repositoryManager = getLocalRepositoryManager(); 41 42 repository = repositoryManager.getRepository(new Credentials("testuser", "testuser")); 43 repository.switchRole(Role.ADMINISTRATOR); 44 } 45 46 public void testPredicateEvaluation() throws Exception { 47 48 Acl acl = repository.getAccessManager().getStagingAcl(); 50 AclObject aclObject = acl.createNewObject("true"); 51 acl.add(aclObject); 52 AclEntry aclEntry = aclObject.createNewEntry(AclSubjectType.EVERYONE, -1); 53 aclEntry.set(AclPermission.READ, AclActionType.GRANT); 54 aclEntry.set(AclPermission.WRITE, AclActionType.GRANT); 55 aclObject.add(aclEntry); 56 acl.save(); 57 repository.getAccessManager().copyStagingToLive(); 58 59 CollectionManager collectionManager = repository.getCollectionManager(); 60 DocumentCollection collection = collectionManager.createCollection("collection1"); 61 collection.save(); 62 63 RepositorySchema repositorySchema = repository.getRepositorySchema(); 64 65 FieldType stringField = repositorySchema.createFieldType("stringfield", ValueType.STRING); 66 stringField.save(); 67 68 FieldType longField = repositorySchema.createFieldType("longfield", ValueType.LONG); 69 longField.save(); 70 71 FieldType doubleField = repositorySchema.createFieldType("doublefield", ValueType.DOUBLE); 72 doubleField.save(); 73 74 FieldType decimalField = repositorySchema.createFieldType("decimalfield", ValueType.DECIMAL); 75 decimalField.save(); 76 77 FieldType dateField = repositorySchema.createFieldType("datefield", ValueType.DATE); 78 dateField.save(); 79 80 FieldType dateTimeField = repositorySchema.createFieldType("datetimefield", ValueType.DATETIME); 81 dateTimeField.save(); 82 83 FieldType booleanField = repositorySchema.createFieldType("booleanfield", ValueType.BOOLEAN); 84 booleanField.save(); 85 86 FieldType multiValueStringField = repositorySchema.createFieldType("mv-stringfield", ValueType.STRING, true); 87 multiValueStringField.save(); 88 89 DocumentType documentType = repositorySchema.createDocumentType("doctype"); 90 documentType.addFieldType(stringField, false); 91 documentType.addFieldType(longField, false); 92 documentType.addFieldType(doubleField, false); 93 documentType.addFieldType(decimalField, false); 94 documentType.addFieldType(dateField, false); 95 documentType.addFieldType(dateTimeField, false); 96 documentType.addFieldType(booleanField, false); 97 documentType.addFieldType(multiValueStringField, false); 98 documentType.save(); 99 100 Document document = repository.createDocument("test", documentType.getId()); 101 document.setField(stringField.getId(), "some value"); 102 document.setField(longField.getId(), new Long (123)); 103 document.setField(doubleField.getId(), new Double (123.45)); 104 document.setField(decimalField.getId(), new BigDecimal ("123.45678")); 105 document.setField(dateField.getId(), new GregorianCalendar (2004, 11, 6).getTime()); 106 document.setField(dateTimeField.getId(), new GregorianCalendar (2004, 11, 6, 12, 15, 6).getTime()); 107 document.setField(booleanField.getId(), Boolean.TRUE); 108 document.setField(multiValueStringField.getId(), new String [] {"value 1", "value 2"}); 109 110 document.addToCollection(collection); 111 document.save(); 112 113 PredicateExpression expr; 114 115 119 expr = makeExpression("$stringfield = 'some value'"); 121 assertEquals(true, expr.evaluate(document, null)); 122 expr = makeExpression("$stringfield = 'some other value'"); 123 assertEquals(false, expr.evaluate(document, null)); 124 expr = makeExpression("$stringfield LIKE '%value'"); 125 assertEquals(true, expr.evaluate(document, null)); 126 expr = makeExpression("$stringfield LIKE 'some_value'"); 127 assertEquals(true, expr.evaluate(document, null)); 128 expr = makeExpression("$stringfield LIKE 'some\\_value'"); 129 assertEquals(false, expr.evaluate(document, null)); 130 131 expr = makeExpression("$longfield = 123"); 133 assertEquals(true, expr.evaluate(document, null)); 134 expr = makeExpression("$longfield = 124"); 135 assertEquals(false, expr.evaluate(document, null)); 136 137 expr = makeExpression("$doublefield < 124"); 139 assertEquals(true, expr.evaluate(document, null)); 140 expr = makeExpression("$doublefield > 122"); 141 assertEquals(true, expr.evaluate(document, null)); 142 143 expr = makeExpression("$datefield = '2004-12-06'"); 145 assertEquals(true, expr.evaluate(document, null)); 146 expr = makeExpression("$datefield >= '2004-12-06'"); 147 assertEquals(true, expr.evaluate(document, null)); 148 expr = makeExpression("$datefield <= '2004-12-06'"); 149 assertEquals(true, expr.evaluate(document, null)); 150 expr = makeExpression("$datefield > '2004-12-05'"); 151 assertEquals(true, expr.evaluate(document, null)); 152 expr = makeExpression("$datefield != '2004-12-05'"); 153 assertEquals(true, expr.evaluate(document, null)); 154 155 expr = makeExpression("$datetimefield = '2004-12-06 12:15:06'"); 157 assertEquals(true, expr.evaluate(document, null)); 158 expr = makeExpression("$datetimefield >= '2004-12-06 12:15:06'"); 159 assertEquals(true, expr.evaluate(document, null)); 160 expr = makeExpression("$datetimefield <= '2004-12-06 12:15:06'"); 161 assertEquals(true, expr.evaluate(document, null)); 162 expr = makeExpression("$datetimefield > '2004-12-05 12:15:06'"); 163 assertEquals(true, expr.evaluate(document, null)); 164 expr = makeExpression("$datetimefield != '2004-12-05 12:15:06'"); 165 assertEquals(true, expr.evaluate(document, null)); 166 167 expr = makeExpression("$decimalfield IN (3232.3232, 123.45678, 890.542)"); 169 assertEquals(true, expr.evaluate(document, null)); 170 expr = makeExpression("$decimalfield IN (3232.3232, 890.542)"); 171 assertEquals(false, expr.evaluate(document, null)); 172 expr = makeExpression("$decimalfield NOT IN (3232.3232, 890.542)"); 173 assertEquals(true, expr.evaluate(document, null)); 174 expr = makeExpression("$decimalfield BETWEEN 89.232 AND 123.456789"); 175 assertEquals(true, expr.evaluate(document, null)); 176 177 expr = makeExpression("$booleanfield = 'true'"); 179 assertEquals(true, expr.evaluate(document, null)); 180 181 expr = makeExpression("$decimalfield IN (3232.3232, 123.45678, 890.542) and $stringfield between 'a' and 'z'"); 185 assertEquals(true, expr.evaluate(document, null)); 186 187 expr = makeExpression("$decimalfield IN (5) or $stringfield between 'a' and 'z'"); 188 assertEquals(true, expr.evaluate(document, null)); 189 190 expr = makeExpression("($decimalfield IN (5) or $stringfield between 'a' and 'z') and $longfield > 100"); 191 assertEquals(true, expr.evaluate(document, null)); 192 193 expr = makeExpression("documentType = '" + documentType.getName() + "'"); 197 assertEquals(true, expr.evaluate(document, null)); 198 199 expr = makeExpression("InCollection('" + collection.getName() + "')"); 200 assertEquals(true, expr.evaluate(document, null)); 201 202 expr = makeExpression("$mv-stringfield.valueCount = 2"); 206 assertTrue(expr.evaluate(document, null)); 207 208 expr = makeExpression("$mv-stringfield.valueCount > 1 and $mv-stringfield.valueCount < 3"); 209 assertTrue(expr.evaluate(document, null)); 210 211 expr = makeExpression("$mv-stringfield.valueCount != 2"); 212 assertFalse(expr.evaluate(document, null)); 213 214 expr = makeExpression("$mv-stringfield has all ('value 1')"); 215 assertTrue(expr.evaluate(document, null)); 216 217 expr = makeExpression("$mv-stringfield has all ('value 1', 'value 2')"); 218 assertTrue(expr.evaluate(document, null)); 219 220 expr = makeExpression("$mv-stringfield has exactly ('value 1')"); 221 assertFalse(expr.evaluate(document, null)); 222 223 expr = makeExpression("$mv-stringfield has exactly ('value 1', 'value 2')"); 224 assertTrue(expr.evaluate(document, null)); 225 226 expr = makeExpression("$mv-stringfield has any ('value 1', 'xyz')"); 227 assertTrue(expr.evaluate(document, null)); 228 229 expr = makeExpression("$mv-stringfield has some ('value 1', 'xyz')"); 230 assertTrue(expr.evaluate(document, null)); 231 232 expr = makeExpression("$mv-stringfield has some ('abc', 'xyz')"); 233 assertFalse(expr.evaluate(document, null)); 234 235 expr = makeExpression("$mv-stringfield has some ('value 1', 'value 2')"); 236 assertTrue(expr.evaluate(document, null)); 237 238 expr = makeExpression("$mv-stringfield = 'value 1'"); 239 assertTrue(expr.evaluate(document, null)); 240 241 expr = makeExpression("$mv-stringfield like 'value%'"); 242 assertTrue(expr.evaluate(document, null)); 243 244 } 246 247 private PredicateExpression makeExpression(String expression) throws Exception { 248 return repository.getQueryManager().parsePredicateExpression(expression); 249 } 250 } 251 | Popular Tags |