0001: /*
0002: * Copyright 2004 Outerthought bvba and Schaubroeck nv
0003: *
0004: * Licensed under the Apache License, Version 2.0 (the "License");
0005: * you may not use this file except in compliance with the License.
0006: * You may obtain a copy of the License at
0007: *
0008: * http://www.apache.org/licenses/LICENSE-2.0
0009: *
0010: * Unless required by applicable law or agreed to in writing, software
0011: * distributed under the License is distributed on an "AS IS" BASIS,
0012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
0013: * See the License for the specific language governing permissions and
0014: * limitations under the License.
0015: */
0016: package org.outerj.daisy.repository.test;
0017:
0018: import org.outerj.daisy.repository.testsupport.AbstractDaisyTestCase;
0019: import org.outerj.daisy.repository.*;
0020: import org.outerj.daisy.repository.variant.Language;
0021: import org.outerj.daisy.repository.query.QueryManager;
0022: import org.outerj.daisy.repository.query.QueryHelper;
0023: import org.outerj.daisy.repository.query.EvaluationContext;
0024: import org.outerj.daisy.repository.user.UserManager;
0025: import org.outerj.daisy.repository.user.User;
0026: import org.outerj.daisy.repository.user.Role;
0027: import org.outerj.daisy.repository.schema.RepositorySchema;
0028: import org.outerj.daisy.repository.schema.PartType;
0029: import org.outerj.daisy.repository.schema.FieldType;
0030: import org.outerj.daisy.repository.schema.DocumentType;
0031: import org.outerx.daisy.x10.SearchResultDocument;
0032: import org.outerx.daisy.x10.LinkValueType;
0033:
0034: import java.math.BigDecimal;
0035: import java.util.*;
0036: import java.text.DateFormat;
0037:
0038: /**
0039: * Additional query tests: test of all identifiers, functions, other constructs.
0040: */
0041: public abstract class AbstractQuery2Test extends AbstractDaisyTestCase {
0042:
0043: public void testQuery() throws Exception {
0044: RepositoryManager repositoryManager = getRepositoryManager();
0045: Repository repository = repositoryManager
0046: .getRepository(new Credentials("testuser", "testuser"));
0047: repository.switchRole(Role.ADMINISTRATOR);
0048:
0049: UserManager userManager = repository.getUserManager();
0050: User user1 = userManager.createUser("user1");
0051: user1.setPassword("user1");
0052: user1.setFirstName("User1First");
0053: user1.setLastName("User1Last");
0054: user1.addToRole(userManager.getRole(1, false));
0055: user1.save();
0056: User user2 = userManager.createUser("user2");
0057: user2.setPassword("user2");
0058: user2.setFirstName("User2First");
0059: user2.setLastName("User2Last");
0060: user2.addToRole(userManager.getRole(1, false));
0061: user2.save();
0062:
0063: CollectionManager collectionManager = repository
0064: .getCollectionManager();
0065: DocumentCollection collection1 = collectionManager
0066: .createCollection("collection 1");
0067: collection1.save();
0068: DocumentCollection collection2 = collectionManager
0069: .createCollection("collection 2");
0070: collection2.save();
0071:
0072: RepositorySchema schema = repository.getRepositorySchema();
0073: PartType partType = schema.createPartType("HtmlPart", "");
0074: partType.setDaisyHtml(true);
0075: partType.save();
0076:
0077: FieldType fieldType1 = schema.createFieldType("StringField",
0078: ValueType.STRING);
0079: fieldType1.save();
0080: FieldType fieldType2 = schema.createFieldType("DecimalField1",
0081: ValueType.DECIMAL);
0082: fieldType2.save();
0083: FieldType fieldType2b = schema.createFieldType("DecimalField2",
0084: ValueType.DECIMAL);
0085: fieldType2b.save();
0086: FieldType fieldType3 = schema.createFieldType("MVField",
0087: ValueType.STRING, true);
0088: fieldType3.save();
0089: FieldType fieldType4 = schema.createFieldType("LinkField",
0090: ValueType.LINK);
0091: fieldType4.save();
0092: FieldType fieldType5 = schema.createFieldType("MVLinkField",
0093: ValueType.LINK, true);
0094: fieldType5.save();
0095: FieldType fieldType6 = schema.createFieldType("HStringField",
0096: ValueType.STRING, false, true);
0097: fieldType6.save();
0098: FieldType fieldType7 = schema.createFieldType("MVHLinkField",
0099: ValueType.LINK, true, true);
0100: fieldType7.save();
0101:
0102: DocumentType docType = schema.createDocumentType("DocType");
0103: docType.addPartType(partType, false);
0104: docType.addFieldType(fieldType1, false);
0105: docType.addFieldType(fieldType2, false);
0106: docType.addFieldType(fieldType2b, false);
0107: docType.addFieldType(fieldType3, false);
0108: docType.addFieldType(fieldType4, false);
0109: docType.addFieldType(fieldType5, false);
0110: docType.addFieldType(fieldType6, false);
0111: docType.addFieldType(fieldType7, false);
0112: docType.save();
0113:
0114: Language nlLanguage = repository.getVariantManager()
0115: .createLanguage("nl");
0116: nlLanguage.save();
0117:
0118: Repository user1Repo = repositoryManager
0119: .getRepository(new Credentials("user1", "user1"));
0120: Repository user2Repo = repositoryManager
0121: .getRepository(new Credentials("user2", "user2"));
0122:
0123: Document document = user1Repo.createDocument("My Document",
0124: "DocType");
0125: document.setPart("HtmlPart", "text/xml",
0126: "<html><body><p>hello!</p></body></html>"
0127: .getBytes("UTF-8"));
0128: document.setField("StringField", "abc");
0129: document.setField("DecimalField1", new BigDecimal("123.45"));
0130: document.setField("DecimalField2", new BigDecimal("300.89"));
0131: document.setField("MVField", new String[] { "aaa", "bbb" });
0132: document.setField("LinkField", new VariantKey("5", -1, -1));
0133: document.setField("MVLinkField",
0134: new VariantKey[] { new VariantKey("20", 1, 1),
0135: new VariantKey("21", 1, -1) });
0136: document.setField("HStringField", new HierarchyPath(
0137: new Object[] { "ABC", "DEF", "GHI" }));
0138: document.setField("MVHLinkField", new Object[] {
0139: new HierarchyPath(new Object[] {
0140: new VariantKey("50", 1, 1),
0141: new VariantKey("51-DSYTEST", 1, 1) }),
0142: new HierarchyPath(new Object[] {
0143: new VariantKey("52", 1, 1),
0144: new VariantKey("53-DSYTEST", 1, 1) }) });
0145: document.addToCollection(collection1);
0146: document.setNewChangeComment("my change comment 1");
0147: document.save();
0148:
0149: // create a draft last version
0150: document = user2Repo.getDocument(document.getId(), true);
0151: document.setName("My Document updated");
0152: document.setPart("HtmlPart", "text/xml",
0153: "<html><body><p>hello, world!</p></body></html>"
0154: .getBytes("UTF-8"));
0155: document.setField("StringField", "uyt");
0156: document.setField("DecimalField1", new BigDecimal("100"));
0157: document.setField("DecimalField2", new BigDecimal("200"));
0158: document.setField("MVField",
0159: new String[] { "aaa", "bbb", "ccc" });
0160: document.addToCollection(collection2);
0161: document.setNewVersionState(VersionState.DRAFT);
0162: document.setNewChangeComment("my change comment 2");
0163: document.save();
0164:
0165: // create test docs for synced with
0166: Document syncDoc = user1Repo.createDocument("Sync test doc",
0167: "DocType");
0168: syncDoc.save();
0169: syncDoc.setName("Sync test doc new name");
0170: syncDoc.setNewVersionState(VersionState.DRAFT);
0171: syncDoc.save();
0172: syncDoc.setName("Sync test doc new name 2");
0173: syncDoc.setNewChangeType(ChangeType.MINOR);
0174: syncDoc.save();
0175:
0176: Document syncVariant = user1Repo.createVariant(syncDoc.getId(),
0177: "main", "default", -1, "main", "nl", false);
0178: syncVariant.setNewSyncedWith("default", 1);
0179: syncVariant.save();
0180:
0181: document.lock(1000000, LockType.PESSIMISTIC);
0182:
0183: //
0184: //
0185: // Test all identifiers
0186: // - for live and last version
0187: // - in the 'select' part (evaluated by the repository server) and the where clause (evaluated by the SQL engine)
0188: //
0189: //
0190: QueryManager queryManager = repository.getQueryManager();
0191: SearchResultDocument result;
0192: DateFormat dateTimeFormat = DateFormat.getDateTimeInstance(
0193: DateFormat.SHORT, DateFormat.MEDIUM, Locale.US);
0194: DateFormat dateFormat = DateFormat.getDateInstance(
0195: DateFormat.SHORT, Locale.US);
0196:
0197: // id
0198: result = queryManager.performQuery("select id where id = '"
0199: + document.getId() + "'", Locale.US);
0200: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0201: .getValueArray(0), String.valueOf(document.getId()));
0202:
0203: result = queryManager.performQuery("select id where id = '"
0204: + document.getId()
0205: + "' option search_last_version = 'true'", Locale.US);
0206: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0207: .getValueArray(0), String.valueOf(document.getId()));
0208:
0209: // if the document ID contains a namespace that does not exist in the repo, it should not fail but return 0 docs
0210: result = queryManager.performQuery("select id where id = '"
0211: + document.getSeqId() + "-foo_bar'", Locale.US);
0212: assertEquals(0, result.getSearchResult().getRows()
0213: .getRowArray().length);
0214:
0215: // namespace
0216: result = queryManager.performQuery(
0217: "select namespace where namespace = 'DSYTEST' and id = '"
0218: + document.getId() + "'", Locale.US);
0219: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0220: .getValueArray(0), String.valueOf(document
0221: .getNamespace()));
0222:
0223: // searching on a non-registered namespace should not fail
0224: result = queryManager.performQuery(
0225: "select namespace where namespace = 'foo_bar'",
0226: Locale.US);
0227: assertEquals(0, result.getSearchResult().getRows()
0228: .getRowArray().length);
0229:
0230: // documentType
0231: result = queryManager.performQuery(
0232: "select documentType where documentType = 'DocType' and id = '"
0233: + document.getId() + "'", Locale.US);
0234: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0235: .getValueArray(0), "DocType");
0236:
0237: result = queryManager.performQuery(
0238: "select documentType where documentType = 'DocType' and id = '"
0239: + document.getId()
0240: + "' option search_last_version = 'true'",
0241: Locale.US);
0242: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0243: .getValueArray(0), "DocType");
0244:
0245: // name
0246: result = queryManager.performQuery(
0247: "select name where name = 'My Document' and id = '"
0248: + document.getId() + "'", Locale.US);
0249: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0250: .getValueArray(0), "My Document");
0251:
0252: result = queryManager.performQuery(
0253: "select name where name = 'My Document updated' and id = '"
0254: + document.getId()
0255: + "' option search_last_version = 'true'",
0256: Locale.US);
0257: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0258: .getValueArray(0), "My Document updated");
0259:
0260: // creationTime
0261: result = queryManager.performQuery(
0262: "select creationTime where creationTime = "
0263: + QueryHelper.formatDateTime(document
0264: .getCreated()) + " and id = '"
0265: + document.getId() + "'", Locale.US);
0266: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0267: .getValueArray(0), dateTimeFormat.format(document
0268: .getCreated()));
0269:
0270: result = queryManager.performQuery(
0271: "select creationTime where creationTime = "
0272: + QueryHelper.formatDateTime(document
0273: .getCreated()) + " and id = '"
0274: + document.getId()
0275: + "' option search_last_version = 'true'",
0276: Locale.US);
0277: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0278: .getValueArray(0), dateTimeFormat.format(document
0279: .getCreated()));
0280:
0281: // summary (not version dependent)
0282: result = queryManager.performQuery(
0283: "select summary where id = '" + document.getId() + "'",
0284: Locale.US);
0285: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0286: .getValueArray(0), "hello!");
0287:
0288: result = queryManager.performQuery(
0289: "select summary where id = '" + document.getId()
0290: + "' option search_last_version = 'true'",
0291: Locale.US);
0292: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0293: .getValueArray(0), "hello!");
0294:
0295: // versionCreationTime
0296: result = queryManager.performQuery(
0297: "select versionCreationTime where versionCreationTime = "
0298: + QueryHelper.formatDateTime(document
0299: .getLiveVersion().getCreated())
0300: + " and id = '" + document.getId() + "'",
0301: Locale.US);
0302: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0303: .getValueArray(0), dateTimeFormat.format(document
0304: .getLiveVersion().getCreated()));
0305:
0306: result = queryManager.performQuery(
0307: "select versionCreationTime where versionCreationTime = "
0308: + QueryHelper.formatDateTime(document
0309: .getLastVersion().getCreated())
0310: + " and id = '" + document.getId()
0311: + "' option search_last_version = 'true'",
0312: Locale.US);
0313: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0314: .getValueArray(0), dateTimeFormat.format(document
0315: .getLastVersion().getCreated()));
0316:
0317: // versionCreatorId
0318: result = queryManager.performQuery(
0319: "select versionCreatorId where versionCreatorId = "
0320: + user1.getId() + " and id = '"
0321: + document.getId() + "'", Locale.US);
0322: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0323: .getValueArray(0), String.valueOf(user1.getId()));
0324:
0325: result = queryManager.performQuery(
0326: "select versionCreatorId where versionCreatorId = "
0327: + user2.getId() + " and id = '"
0328: + document.getId()
0329: + "' option search_last_version = 'true'",
0330: Locale.US);
0331: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0332: .getValueArray(0), String.valueOf(user2.getId()));
0333:
0334: // versionCreatorName
0335: result = queryManager.performQuery(
0336: "select versionCreatorName where id = '"
0337: + document.getId() + "'", Locale.US);
0338: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0339: .getValueArray(0), "User1First User1Last");
0340:
0341: result = queryManager.performQuery(
0342: "select versionCreatorName where id = '"
0343: + document.getId()
0344: + "' option search_last_version = 'true'",
0345: Locale.US);
0346: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0347: .getValueArray(0), "User2First User2Last");
0348:
0349: // versionCreatorLogin
0350: result = queryManager.performQuery(
0351: "select versionCreatorLogin where versionCreatorLogin = 'user1' and id = '"
0352: + document.getId() + "'", Locale.US);
0353: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0354: .getValueArray(0), "user1");
0355:
0356: result = queryManager.performQuery(
0357: "select versionCreatorLogin where versionCreatorLogin = 'user2' and id = '"
0358: + document.getId()
0359: + "' option search_last_version = 'true'",
0360: Locale.US);
0361: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0362: .getValueArray(0), "user2");
0363:
0364: // versionState
0365: result = queryManager.performQuery(
0366: "select versionState where versionState = 'publish' and id = '"
0367: + document.getId() + "'", Locale.US);
0368: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0369: .getValueArray(0), "publish");
0370:
0371: result = queryManager.performQuery(
0372: "select versionState where versionState = 'publish' and id = '"
0373: + document.getId()
0374: + "' option search_last_version = 'true'",
0375: Locale.US);
0376: assertEquals(
0377: result.getSearchResult().getRows().getRowArray().length,
0378: 0);
0379:
0380: result = queryManager.performQuery(
0381: "select versionState where versionState = 'draft' and id = '"
0382: + document.getId()
0383: + "' option search_last_version = 'true'",
0384: Locale.US);
0385: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0386: .getValueArray(0), "draft");
0387:
0388: // totalSizeOfParts
0389: result = queryManager.performQuery(
0390: "select totalSizeOfParts where totalSizeOfParts < 1000 and id = '"
0391: + document.getId() + "'", Locale.US);
0392: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0393: .getValueArray(0), "39");
0394:
0395: result = queryManager.performQuery(
0396: "select totalSizeOfParts where totalSizeOfParts < 1000 and id = '"
0397: + document.getId()
0398: + "' option search_last_version = 'true'",
0399: Locale.US);
0400: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0401: .getValueArray(0), "46");
0402:
0403: // versionLastModified
0404: result = queryManager.performQuery(
0405: "select versionLastModified where versionLastModified <= "
0406: + QueryHelper.formatDateTime(new Date())
0407: + " and id = '" + document.getId() + "'",
0408: Locale.US);
0409: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0410: .getValueArray(0), dateTimeFormat.format(document
0411: .getLiveVersion().getLastModified()));
0412:
0413: result = queryManager.performQuery(
0414: "select versionLastModified where versionLastModified <= "
0415: + QueryHelper.formatDateTime(new Date())
0416: + " and id = '" + document.getId()
0417: + "' option search_last_version = 'true'",
0418: Locale.US);
0419: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0420: .getValueArray(0), dateTimeFormat.format(document
0421: .getLastVersion().getLastModified()));
0422:
0423: // retired
0424: result = queryManager.performQuery(
0425: "select retired where retired = 'false' and id = '"
0426: + document.getId() + "'", Locale.US);
0427: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0428: .getValueArray(0), "false");
0429:
0430: result = queryManager.performQuery(
0431: "select retired where retired = 'false' and id = '"
0432: + document.getId()
0433: + "' option search_last_version = 'true'",
0434: Locale.US);
0435: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0436: .getValueArray(0), "false");
0437:
0438: // private
0439: result = queryManager.performQuery(
0440: "select private where private = 'false' and id = '"
0441: + document.getId() + "'", Locale.US);
0442: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0443: .getValueArray(0), "false");
0444:
0445: result = queryManager.performQuery(
0446: "select private where private = 'false' and id = '"
0447: + document.getId()
0448: + "' option search_last_version = 'true'",
0449: Locale.US);
0450: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0451: .getValueArray(0), "false");
0452:
0453: // lockType
0454: result = queryManager.performQuery(
0455: "select lockType where lockType = 'pessimistic' and id = '"
0456: + document.getId() + "'", Locale.US);
0457: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0458: .getValueArray(0), "pessimistic");
0459:
0460: result = queryManager.performQuery(
0461: "select lockType where lockType = 'pessimistic' and id = '"
0462: + document.getId()
0463: + "' option search_last_version = 'true'",
0464: Locale.US);
0465: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0466: .getValueArray(0), "pessimistic");
0467:
0468: // lockOwnerId
0469: result = queryManager.performQuery(
0470: "select lockOwnerId where lockOwnerId = "
0471: + user2.getId() + " and id = '"
0472: + document.getId() + "'", Locale.US);
0473: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0474: .getValueArray(0), String.valueOf(user2.getId()));
0475:
0476: result = queryManager.performQuery(
0477: "select lockOwnerId where lockOwnerId = "
0478: + user2.getId() + " and id = '"
0479: + document.getId()
0480: + "' option search_last_version = 'true'",
0481: Locale.US);
0482: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0483: .getValueArray(0), String.valueOf(user2.getId()));
0484:
0485: // lockOwnerLogin
0486: result = queryManager.performQuery(
0487: "select lockOwnerLogin where lockOwnerLogin = 'user2' and id = '"
0488: + document.getId() + "'", Locale.US);
0489: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0490: .getValueArray(0), "user2");
0491:
0492: result = queryManager.performQuery(
0493: "select lockOwnerLogin where lockOwnerLogin = 'user2' and id = '"
0494: + document.getId()
0495: + "' option search_last_version = 'true'",
0496: Locale.US);
0497: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0498: .getValueArray(0), "user2");
0499:
0500: // lockOwnerName
0501: result = queryManager.performQuery(
0502: "select lockOwnerName where lockOwnerLogin = 'user2' and id = '"
0503: + document.getId() + "'", Locale.US);
0504: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0505: .getValueArray(0), "User2First User2Last");
0506:
0507: result = queryManager.performQuery(
0508: "select lockOwnerName where lockOwnerLogin = 'user2' and id = '"
0509: + document.getId()
0510: + "' option search_last_version = 'true'",
0511: Locale.US);
0512: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0513: .getValueArray(0), "User2First User2Last");
0514:
0515: // lockDuration
0516: result = queryManager.performQuery(
0517: "select lockDuration where lockDuration = 1000000 and id = '"
0518: + document.getId() + "'", Locale.US);
0519: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0520: .getValueArray(0), "1000000");
0521:
0522: result = queryManager.performQuery(
0523: "select lockDuration where lockDuration = 1000000 and id = '"
0524: + document.getId()
0525: + "' option search_last_version = 'true'",
0526: Locale.US);
0527: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0528: .getValueArray(0), "1000000");
0529:
0530: // lockTimeAcquired
0531: queryManager.performQuery(
0532: "select lockTimeAcquired where lockTimeAcquired <= "
0533: + QueryHelper.formatDateTime(new Date())
0534: + " and id = '" + document.getId() + "'",
0535: Locale.US);
0536: queryManager.performQuery(
0537: "select lockTimeAcquired where lockTimeAcquired <= "
0538: + QueryHelper.formatDateTime(new Date())
0539: + " and id = '" + document.getId()
0540: + "' option search_last_version = 'true'",
0541: Locale.US);
0542:
0543: // ownerId
0544: result = queryManager.performQuery(
0545: "select ownerId where ownerId = " + user1.getId()
0546: + " and id = '" + document.getId() + "'",
0547: Locale.US);
0548: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0549: .getValueArray(0), String.valueOf(user1.getId()));
0550:
0551: result = queryManager.performQuery(
0552: "select ownerId where ownerId = " + user1.getId()
0553: + " and id = '" + document.getId()
0554: + "' option search_last_version = 'true'",
0555: Locale.US);
0556: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0557: .getValueArray(0), String.valueOf(user1.getId()));
0558:
0559: // ownerLogin
0560: result = queryManager.performQuery(
0561: "select ownerLogin where ownerLogin = 'user1' and id = '"
0562: + document.getId() + "'", Locale.US);
0563: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0564: .getValueArray(0), "user1");
0565:
0566: result = queryManager.performQuery(
0567: "select ownerLogin where ownerLogin = 'user1' and id = '"
0568: + document.getId()
0569: + "' option search_last_version = 'true'",
0570: Locale.US);
0571: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0572: .getValueArray(0), "user1");
0573:
0574: // ownerName
0575: result = queryManager.performQuery(
0576: "select ownerName where id = '" + document.getId()
0577: + "'", Locale.US);
0578: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0579: .getValueArray(0), "User1First User1Last");
0580:
0581: result = queryManager.performQuery(
0582: "select ownerName where id = '" + document.getId()
0583: + "' option search_last_version = 'true'",
0584: Locale.US);
0585: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0586: .getValueArray(0), "User1First User1Last");
0587:
0588: // lastModifierId
0589: result = queryManager.performQuery(
0590: "select lastModifierId where lastModifierId = "
0591: + user1.getId() + " and id = '"
0592: + document.getId() + "'", Locale.US);
0593: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0594: .getValueArray(0), String.valueOf(user1.getId()));
0595:
0596: result = queryManager.performQuery(
0597: "select lastModifierId where lastModifierId = "
0598: + user1.getId() + " and id = '"
0599: + document.getId()
0600: + "' option search_last_version = 'true'",
0601: Locale.US);
0602: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0603: .getValueArray(0), String.valueOf(user1.getId()));
0604:
0605: // lastModifierLogin
0606: result = queryManager.performQuery(
0607: "select lastModifierLogin where lastModifierLogin = 'user1' and id = '"
0608: + document.getId() + "'", Locale.US);
0609: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0610: .getValueArray(0), "user1");
0611:
0612: result = queryManager.performQuery(
0613: "select lastModifierLogin where lastModifierLogin = 'user1' and id = '"
0614: + document.getId()
0615: + "' option search_last_version = 'true'",
0616: Locale.US);
0617: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0618: .getValueArray(0), "user1");
0619:
0620: // lastModifierName
0621: result = queryManager.performQuery(
0622: "select lastModifierName where id = '"
0623: + document.getId() + "'", Locale.US);
0624: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0625: .getValueArray(0), "User1First User1Last");
0626:
0627: result = queryManager.performQuery(
0628: "select lastModifierName where id = '"
0629: + document.getId()
0630: + "' option search_last_version = 'true'",
0631: Locale.US);
0632: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0633: .getValueArray(0), "User1First User1Last");
0634:
0635: // branchId
0636: result = queryManager.performQuery(
0637: "select branchId where branchId = 1 and id = '"
0638: + document.getId() + "'", Locale.US);
0639: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0640: .getValueArray(0), "1");
0641:
0642: result = queryManager.performQuery(
0643: "select branchId where branchId = 1 and id = '"
0644: + document.getId()
0645: + "' option search_last_version = 'true'",
0646: Locale.US);
0647: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0648: .getValueArray(0), "1");
0649:
0650: // branchName
0651: result = queryManager.performQuery(
0652: "select branch where branch = 'main' and id = '"
0653: + document.getId() + "'", Locale.US);
0654: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0655: .getValueArray(0), "main");
0656:
0657: result = queryManager.performQuery(
0658: "select branch where branch = 'main' and id = '"
0659: + document.getId()
0660: + "' option search_last_version = 'true'",
0661: Locale.US);
0662: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0663: .getValueArray(0), "main");
0664:
0665: // languageId
0666: result = queryManager.performQuery(
0667: "select languageId where languageId = 1 and id = '"
0668: + document.getId() + "'", Locale.US);
0669: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0670: .getValueArray(0), "1");
0671:
0672: result = queryManager.performQuery(
0673: "select languageId where languageId = 1 and id = '"
0674: + document.getId()
0675: + "' option search_last_version = 'true'",
0676: Locale.US);
0677: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0678: .getValueArray(0), "1");
0679:
0680: // languageName
0681: result = queryManager.performQuery(
0682: "select language where language = 'default' and id = '"
0683: + document.getId() + "'", Locale.US);
0684: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0685: .getValueArray(0), "default");
0686:
0687: result = queryManager.performQuery(
0688: "select language where language = 'default' and id = '"
0689: + document.getId()
0690: + "' option search_last_version = 'true'",
0691: Locale.US);
0692: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0693: .getValueArray(0), "default");
0694:
0695: // variantLastModified
0696: result = queryManager.performQuery(
0697: "select variantLastModified where variantLastModified = "
0698: + QueryHelper.formatDateTime(document
0699: .getVariantLastModified())
0700: + " and id = '" + document.getId() + "'",
0701: Locale.US);
0702: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0703: .getValueArray(0), dateTimeFormat.format(document
0704: .getVariantLastModified()));
0705:
0706: result = queryManager.performQuery(
0707: "select variantLastModified where variantLastModified = "
0708: + QueryHelper.formatDateTime(document
0709: .getVariantLastModified())
0710: + " and id = '" + document.getId()
0711: + "' option search_last_version = 'true'",
0712: Locale.US);
0713: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0714: .getValueArray(0), dateTimeFormat.format(document
0715: .getVariantLastModified()));
0716:
0717: // variantLastMofifierId
0718: result = queryManager.performQuery(
0719: "select variantLastModifierId where variantLastModifierId = "
0720: + user2.getId() + " and id = '"
0721: + document.getId() + "'", Locale.US);
0722: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0723: .getValueArray(0), String.valueOf(user2.getId()));
0724:
0725: result = queryManager.performQuery(
0726: "select variantLastModifierId where variantLastModifierId = "
0727: + user2.getId() + " and id = '"
0728: + document.getId()
0729: + "' option search_last_version = 'true'",
0730: Locale.US);
0731: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0732: .getValueArray(0), String.valueOf(user2.getId()));
0733:
0734: // variantLastModifierLogin
0735: result = queryManager
0736: .performQuery(
0737: "select variantLastModifierLogin where variantLastModifierLogin = 'user2' and id = '"
0738: + document.getId() + "'", Locale.US);
0739: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0740: .getValueArray(0), "user2");
0741:
0742: result = queryManager
0743: .performQuery(
0744: "select variantLastModifierLogin where variantLastModifierLogin = 'user2' and id = '"
0745: + document.getId()
0746: + "' option search_last_version = 'true'",
0747: Locale.US);
0748: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0749: .getValueArray(0), "user2");
0750:
0751: // variantLastModifierName
0752: result = queryManager.performQuery(
0753: "select variantLastModifierName where id = '"
0754: + document.getId() + "'", Locale.US);
0755: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0756: .getValueArray(0), "User2First User2Last");
0757:
0758: result = queryManager.performQuery(
0759: "select variantLastModifierName where id = '"
0760: + document.getId()
0761: + "' option search_last_version = 'true'",
0762: Locale.US);
0763: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0764: .getValueArray(0), "User2First User2Last");
0765:
0766: // version comment
0767: result = queryManager.performQuery(
0768: "select versionComment where versionComment = 'my change comment 1' and id = '"
0769: + document.getId() + "'", Locale.US);
0770: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0771: .getValueArray(0), "my change comment 1");
0772:
0773: // version change type
0774: result = queryManager.performQuery(
0775: "select versionChangeType where versionChangeType = 'major' and id = '"
0776: + document.getId() + "'", Locale.US);
0777: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0778: .getValueArray(0), "major");
0779:
0780: // live major change version
0781: result = queryManager.performQuery(
0782: "select liveMajorChangeVersionId where liveMajorChangeVersionId = "
0783: + document.getLiveVersionId() + " and id = '"
0784: + document.getId() + "'", Locale.US);
0785: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0786: .getValueArray(0), String.valueOf(document
0787: .getLiveVersionId()));
0788:
0789: // last major change version
0790: result = queryManager.performQuery(
0791: "select lastMajorChangeVersionId where lastMajorChangeVersionId = "
0792: + document.getLastVersionId() + " and id = '"
0793: + document.getId() + "'", Locale.US);
0794: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0795: .getValueArray(0), String.valueOf(document
0796: .getLastVersionId()));
0797:
0798: // syncedWith
0799: result = queryManager
0800: .performQuery(
0801: "select syncedWith, syncedWith.versionId, syncedWith.languageId, syncedWith.language, syncedWith=>lastMajorChangeVersionId, syncedWith=>liveMajorChangeVersionId where syncedWith is not null and id = '"
0802: + syncVariant.getId() + "'", Locale.US);
0803: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0804: .getLinkValueArray(0).getLanguageId(), 1);
0805: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0806: .getValueArray(0), "1");
0807: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0808: .getValueArray(1), "1");
0809: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0810: .getValueArray(2), "default");
0811: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0812: .getValueArray(3), "2");
0813: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0814: .getValueArray(4), "1");
0815:
0816: // syncedWith.versionId
0817: result = queryManager.performQuery(
0818: "select syncedWith.versionId where syncedWith.versionId = 1 and id = '"
0819: + syncVariant.getId() + "'", Locale.US);
0820: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0821: .getValueArray(0), "1");
0822:
0823: // syncedWith.languageId
0824: result = queryManager.performQuery(
0825: "select syncedWith.languageId where syncedWith.languageId = 1 and id = '"
0826: + syncVariant.getId() + "'", Locale.US);
0827: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0828: .getValueArray(0), "1");
0829:
0830: // syncedWith.language
0831: result = queryManager.performQuery(
0832: "select syncedWith.language where syncedWith.language = 'default' and id = '"
0833: + syncVariant.getId() + "'", Locale.US);
0834: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0835: .getValueArray(0), "default");
0836:
0837: // syncedWith dereferencing
0838: result = queryManager
0839: .performQuery(
0840: "select syncedWith=>lastMajorChangeVersionId where syncedWith=>lastMajorChangeVersionId = 2 and id = '"
0841: + syncVariant.getId() + "'", Locale.US);
0842: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0843: .getValueArray(0), "2");
0844:
0845: // collections
0846: result = queryManager
0847: .performQuery(
0848: "select collections where collections has exactly ('collection 1', 'collection 2') and id = '"
0849: + document.getId() + "'", Locale.US);
0850: List<String> foundCollections = new ArrayList<String>();
0851: for (String collection : result.getSearchResult().getRows()
0852: .getRowArray(0).getMultiValueArray(0).getValueArray()) {
0853: foundCollections.add(collection);
0854: }
0855: assertTrue(foundCollections.contains("collection 1"));
0856: assertTrue(foundCollections.contains("collection 2"));
0857:
0858: result = queryManager
0859: .performQuery(
0860: "select collections where collections has exactly ('collection 1', 'collection 2') and id = '"
0861: + document.getId()
0862: + "' option search_last_version = 'true'",
0863: Locale.US);
0864: foundCollections = new ArrayList<String>();
0865: for (String collection : result.getSearchResult().getRows()
0866: .getRowArray(0).getMultiValueArray(0).getValueArray()) {
0867: foundCollections.add(collection);
0868: }
0869: assertTrue(foundCollections.contains("collection 1"));
0870: assertTrue(foundCollections.contains("collection 2"));
0871:
0872: // collections.valueCount
0873: result = queryManager.performQuery(
0874: "select collections.valueCount where collections.valueCount = 2 and id = '"
0875: + document.getId() + "'", Locale.US);
0876: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0877: .getValueArray(0), "2");
0878:
0879: result = queryManager.performQuery(
0880: "select collections.valueCount where collections.valueCount = 2 and id = '"
0881: + document.getId()
0882: + "' option search_last_version = 'true'",
0883: Locale.US);
0884: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0885: .getValueArray(0), "2");
0886:
0887: // versionId
0888: result = queryManager.performQuery(
0889: "select versionId where versionId = 1 and id = '"
0890: + document.getId() + "'", Locale.US);
0891: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0892: .getValueArray(0), "1");
0893:
0894: result = queryManager.performQuery(
0895: "select versionId where versionId = 2 and id = '"
0896: + document.getId()
0897: + "' option search_last_version = 'true'",
0898: Locale.US);
0899: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0900: .getValueArray(0), "2");
0901:
0902: // link field identifiers
0903: result = queryManager
0904: .performQuery(
0905: "select $LinkField.documentId, $LinkField.namespace, $LinkField.branch, $LinkField.branchId, $LinkField.language, $LinkField.languageId where $LinkField.documentId = '5-DSYTEST' and $LinkField.branchId = 1 and $LinkField.branch = 'main' and $LinkField.languageId = 1 and $LinkField.language = 'default' and $LinkField.namespace = 'DSYTEST'",
0906: Locale.US);
0907: assertEquals(
0908: result.getSearchResult().getRows().getRowArray().length,
0909: 1);
0910:
0911: result = queryManager
0912: .performQuery(
0913: "select $MVLinkField.documentId, $MVLinkField.namespace, $MVLinkField.branch, $MVLinkField.branchId, $MVLinkField.language, $MVLinkField.languageId where $MVLinkField.documentId = 20 and $MVLinkField.branchId = 1 and $MVLinkField.branch = 'main' and $MVLinkField.languageId = 1 and $MVLinkField.language = 'default' and $MVLinkField.namespace = 'DSYTEST'",
0914: Locale.US);
0915: assertEquals(
0916: result.getSearchResult().getRows().getRowArray().length,
0917: 1);
0918:
0919: result = queryManager
0920: .performQuery(
0921: "select $LinkField, $MVLinkField where $LinkField = 'daisy:5@1:1' and $LinkField = 'daisy:5@main:default' and $LinkField = 'daisy:5' and $MVLinkField has all ('daisy:20', 'daisy:21')",
0922: Locale.US);
0923: assertEquals(
0924: result.getSearchResult().getRows().getRowArray().length,
0925: 1);
0926: LinkValueType linkResult = result.getSearchResult().getRows()
0927: .getRowArray(0).getLinkValueArray(0);
0928: assertEquals("5-DSYTEST", linkResult.getDocumentId());
0929: assertEquals(1, linkResult.getBranchId());
0930: assertEquals(1, linkResult.getLanguageId());
0931:
0932: result = queryManager.performQuery(
0933: "select link where link = 'daisy:1@1:1'", Locale.US);
0934: assertEquals(1, result.getSearchResult().getRows()
0935: .getRowArray().length);
0936:
0937: // hierarchical string identifier
0938: result = queryManager.performQuery(
0939: "select $HStringField, $MVHLinkField where id='"
0940: + document.getId() + "'", Locale.US);
0941: assertEquals(1, result.getSearchResult().getRows().getRowArray(
0942: 0).getHierarchyValueArray().length);
0943: assertEquals("ABC", result.getSearchResult().getRows()
0944: .getRowArray(0).getHierarchyValueArray(0)
0945: .getValueArray(0));
0946: assertEquals("DEF", result.getSearchResult().getRows()
0947: .getRowArray(0).getHierarchyValueArray(0)
0948: .getValueArray(1));
0949: assertEquals("GHI", result.getSearchResult().getRows()
0950: .getRowArray(0).getHierarchyValueArray(0)
0951: .getValueArray(2));
0952: assertEquals("52-DSYTEST", result.getSearchResult().getRows()
0953: .getRowArray(0).getMultiValueArray(0)
0954: .getHierarchyValueArray(1).getLinkValueArray(0)
0955: .getDocumentId());
0956:
0957: //
0958: // Test functions
0959: //
0960:
0961: // basic math functions
0962: result = queryManager
0963: .performQuery(
0964: "select $DecimalField1 + $DecimalField2 where $DecimalField1 + $DecimalField2 = 424.34 and id = '"
0965: + document.getId() + "'", Locale.US);
0966: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0967: .getValueArray(0), "424.34");
0968:
0969: result = queryManager
0970: .performQuery(
0971: "select $DecimalField1 - $DecimalField2 where $DecimalField1 - $DecimalField2 = -177.44 and id = '"
0972: + document.getId() + "'", Locale.US);
0973: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0974: .getValueArray(0), "-177.44");
0975:
0976: result = queryManager
0977: .performQuery(
0978: "select $DecimalField1 / $DecimalField2 where $DecimalField1 / $DecimalField2 > 0.410 and $DecimalField1 / $DecimalField2 < 0.411 and id = '"
0979: + document.getId() + "'", Locale.US);
0980: assertTrue("division function", result.getSearchResult()
0981: .getRows().getRowArray(0).getValueArray(0).startsWith(
0982: "0.41"));
0983:
0984: result = queryManager
0985: .performQuery(
0986: "select $DecimalField1 * $DecimalField2 where $DecimalField1 * $DecimalField2 > 37144.85 and $DecimalField1 * $DecimalField2 < 37144.95 and id = '"
0987: + document.getId() + "'", Locale.US);
0988: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0989: .getValueArray(0), "37,144.87");
0990:
0991: // precedence of operations and grouping
0992: result = queryManager.performQuery(
0993: "select 2 * 3 + 5 where 2 * 3 + 5 = 11 and id = '"
0994: + document.getId() + "'", Locale.US);
0995: assertEquals(result.getSearchResult().getRows().getRowArray(0)
0996: .getValueArray(0), "11");
0997:
0998: result = queryManager.performQuery(
0999: "select 5 + 3 * 2 where 5 + 3 * 2 = 11 and id = '"
1000: + document.getId() + "'", Locale.US);
1001: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1002: .getValueArray(0), "11");
1003:
1004: result = queryManager.performQuery(
1005: "select 2 * (3 + 5) where 2 * (3 + 5) = 16 and id = '"
1006: + document.getId() + "'", Locale.US);
1007: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1008: .getValueArray(0), "16");
1009:
1010: result = queryManager.performQuery(
1011: "select (5 + 3) * 2 where (5 + 3) * 2 = 16 and id = '"
1012: + document.getId() + "'", Locale.US);
1013: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1014: .getValueArray(0), "16");
1015:
1016: result = queryManager.performQuery(
1017: "select 5 + 4 + 3 + 2 where 5 + 4 + 3 + 2 = 14 and id = '"
1018: + document.getId() + "'", Locale.US);
1019: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1020: .getValueArray(0), "14");
1021:
1022: // Random function
1023: result = queryManager.performQuery(
1024: "select Random(), Random() where Random() != Random() and id = '"
1025: + document.getId() + "'", Locale.US);
1026: assertFalse(result.getSearchResult().getRows().getRowArray(0)
1027: .getValueArray(0).equals(
1028: result.getSearchResult().getRows().getRowArray(
1029: 0).getValueArray(1)));
1030:
1031: // Mod function
1032: result = queryManager.performQuery(
1033: "select Mod(10, 4) where Mod(10, 4) = 2 and id = '"
1034: + document.getId() + "'", Locale.US);
1035: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1036: .getValueArray(0), "2");
1037:
1038: // Abs function
1039: result = queryManager.performQuery(
1040: "select Abs(-5) where Abs(-5) = 5 and id = '"
1041: + document.getId() + "'", Locale.US);
1042: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1043: .getValueArray(0), "5");
1044:
1045: // Floor function
1046: result = queryManager.performQuery(
1047: "select Floor(5.22) where Floor(5.22) = 5 and id = '"
1048: + document.getId() + "'", Locale.US);
1049: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1050: .getValueArray(0), "5");
1051:
1052: // Ceiling function
1053: result = queryManager.performQuery(
1054: "select Ceiling(5.22) where Ceiling(5.22) = 6 and id = '"
1055: + document.getId() + "'", Locale.US);
1056: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1057: .getValueArray(0), "6");
1058:
1059: // Round function
1060: result = queryManager
1061: .performQuery(
1062: "select Round(5.22, 1), Round(5.28, 1), Round(5.25, 1) where Round(5.22, 1) = 5.2 and Round(5.28, 1) = 5.3 and Round(5.25, 1) = 5.2 and id = '"
1063: + document.getId() + "'", Locale.US);
1064: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1065: .getValueArray(0), "5.2");
1066: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1067: .getValueArray(1), "5.3");
1068: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1069: .getValueArray(2), "5.2");
1070:
1071: // Length function
1072: result = queryManager.performQuery(
1073: "select Length(name) where Length(name) = 11 and id = '"
1074: + document.getId() + "'", Locale.US);
1075: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1076: .getValueArray(0), "11");
1077:
1078: // Concat function
1079: result = queryManager
1080: .performQuery(
1081: "select Length(Concat(name, 'abc')), Concat(name, 'abc') where Length(Concat(name, 'abc')) = 14 and id = '"
1082: + document.getId() + "'", Locale.US);
1083: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1084: .getValueArray(0), "14");
1085: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1086: .getValueArray(1), "My Documentabc");
1087:
1088: // Left function
1089: result = queryManager.performQuery(
1090: "select Left(name, 2) where id = '" + document.getId()
1091: + "'", Locale.US);
1092: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1093: .getValueArray(0), "My");
1094:
1095: result = queryManager.performQuery(
1096: "select Left(name, 200) where id = '"
1097: + document.getId() + "'", Locale.US);
1098: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1099: .getValueArray(0), "My Document");
1100:
1101: result = queryManager.performQuery(
1102: "select Left(name, 0) where id = '" + document.getId()
1103: + "'", Locale.US);
1104: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1105: .getValueArray(0), "");
1106:
1107: result = queryManager.performQuery(
1108: "select name where Left(name, 2) = 'My' and id = '"
1109: + document.getId() + "'", Locale.US);
1110: assertEquals(result.getSearchResult().getRows()
1111: .sizeOfRowArray(), 1);
1112:
1113: // Right function
1114: result = queryManager.performQuery(
1115: "select Right(name, 2) where id = '" + document.getId()
1116: + "'", Locale.US);
1117: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1118: .getValueArray(0), "nt");
1119:
1120: result = queryManager.performQuery(
1121: "select Right(name, 200) where id = '"
1122: + document.getId() + "'", Locale.US);
1123: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1124: .getValueArray(0), "My Document");
1125:
1126: result = queryManager.performQuery(
1127: "select name where Right(name, 2) = 'nt' and id = '"
1128: + document.getId() + "'", Locale.US);
1129: assertEquals(result.getSearchResult().getRows()
1130: .sizeOfRowArray(), 1);
1131:
1132: result = queryManager.performQuery(
1133: "select name where Left(Right(name, 2), 1) = 'n' and id = '"
1134: + document.getId() + "'", Locale.US);
1135: assertEquals(result.getSearchResult().getRows()
1136: .sizeOfRowArray(), 1);
1137:
1138: // Substring function
1139: result = queryManager.performQuery(
1140: "select Substring(name, 4, 4) where id = '"
1141: + document.getId() + "'", Locale.US);
1142: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1143: .getValueArray(0), "Docu");
1144:
1145: result = queryManager.performQuery(
1146: "select Substring(name, 1, 5000) where id = '"
1147: + document.getId() + "'", Locale.US);
1148: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1149: .getValueArray(0), "My Document");
1150:
1151: result = queryManager.performQuery(
1152: "select name where Substring(name, 4, 4) = 'Docu' and id = '"
1153: + document.getId() + "'", Locale.US);
1154: assertEquals(result.getSearchResult().getRows()
1155: .sizeOfRowArray(), 1);
1156:
1157: // UpperCase function
1158: result = queryManager.performQuery(
1159: "select UpperCase(name) where id = '"
1160: + document.getId() + "'", Locale.US);
1161: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1162: .getValueArray(0), "MY DOCUMENT");
1163:
1164: // note: SQL doesn't search case sensitive so this just tests the SQL generation works ok
1165: result = queryManager.performQuery(
1166: "select name where UpperCase(name) = 'MY DOCUMENT' and id = '"
1167: + document.getId() + "'", Locale.US);
1168: assertEquals(result.getSearchResult().getRows()
1169: .sizeOfRowArray(), 1);
1170:
1171: // LowerCase function
1172: result = queryManager.performQuery(
1173: "select LowerCase(name) where id = '"
1174: + document.getId() + "'", Locale.US);
1175: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1176: .getValueArray(0), "my document");
1177:
1178: // note: SQL doesn't search case sensitive so this just tests the SQL generation works ok
1179: result = queryManager.performQuery(
1180: "select name where LowerCase(name) = 'my document' and id = '"
1181: + document.getId() + "'", Locale.US);
1182: assertEquals(result.getSearchResult().getRows()
1183: .sizeOfRowArray(), 1);
1184:
1185: // CurrentDate function
1186: Date nowDate = getDate();
1187: result = queryManager.performQuery(
1188: "select CurrentDate() where CurrentDate() = CurrentDate() and id = '"
1189: + document.getId() + "'", Locale.US);
1190: assertTrue(dateFormat.parse(
1191: result.getSearchResult().getRows().getRowArray(0)
1192: .getValueArray(0)).compareTo(nowDate) == 0);
1193:
1194: // CurrentDateTime function
1195: Date nowDateTime = getDateTime();
1196: result = queryManager.performQuery(
1197: "select CurrentDateTime() where lastModified < CurrentDateTime() and id = '"
1198: + document.getId() + "'", Locale.US);
1199: System.out.println(dateTimeFormat.parse(result
1200: .getSearchResult().getRows().getRowArray(0)
1201: .getValueArray(0))
1202: + " and " + nowDateTime);
1203: assertTrue(dateTimeFormat.parse(
1204: result.getSearchResult().getRows().getRowArray(0)
1205: .getValueArray(0)).compareTo(nowDateTime) >= 0);
1206:
1207: // ContextDoc function
1208: final Document contextDoc = document;
1209: final Version contextVersion = document.getLiveVersion();
1210: EvaluationContext evaluationContext = new EvaluationContext();
1211: evaluationContext
1212: .setContextDocument(contextDoc, contextVersion);
1213: result = queryManager
1214: .performQuery(
1215: "select ContextDoc(branch), ContextDoc(language) where ContextDoc(branch) = branch and ContextDoc(language) = language and id = '"
1216: + document.getId() + "'", Locale.US,
1217: evaluationContext);
1218: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1219: .getValueArray(0), "main");
1220: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1221: .getValueArray(1), "default");
1222:
1223: evaluationContext = new EvaluationContext();
1224: evaluationContext.pushContextDocument(contextDoc,
1225: contextVersion);
1226: evaluationContext.pushContextDocument(contextDoc, document
1227: .getLastVersion());
1228: result = queryManager.performQuery(
1229: "select ContextDoc(name, 1), ContextDoc(name, 2) where id = '"
1230: + document.getId() + "'", Locale.US,
1231: evaluationContext);
1232: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1233: .getValueArray(0), "My Document updated");
1234: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1235: .getValueArray(1), "My Document");
1236:
1237: result = queryManager.performQuery(
1238: "select id where $MVField has some ( ContextDoc($MVField) ) and id = '"
1239: + document.getId() + "'", Locale.US,
1240: evaluationContext);
1241: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1242: .getValueArray(0), document.getId());
1243:
1244: // Year function
1245: String currentYear = String.valueOf(new GregorianCalendar(
1246: Locale.US).get(Calendar.YEAR));
1247: result = queryManager.performQuery(
1248: "select Year(CurrentDate()) where Year(CurrentDate()) = "
1249: + currentYear + " and id = '"
1250: + document.getId() + "'", Locale.US);
1251: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1252: .getValueArray(0), currentYear);
1253:
1254: // Month function
1255: String currentMonth = String.valueOf(new GregorianCalendar(
1256: Locale.US).get(Calendar.MONTH) + 1);
1257: result = queryManager.performQuery(
1258: "select Month(CurrentDate()) where Month(CurrentDate()) = "
1259: + currentMonth + " and id = '"
1260: + document.getId() + "'", Locale.US);
1261: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1262: .getValueArray(0), currentMonth);
1263:
1264: // Week function
1265: String currentWeek = String.valueOf(new GregorianCalendar(
1266: Locale.US).get(Calendar.WEEK_OF_YEAR));
1267: result = queryManager.performQuery(
1268: "select Week(CurrentDate()) where Week(CurrentDate()) = "
1269: + currentWeek + " and id = '"
1270: + document.getId() + "'", Locale.US);
1271: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1272: .getValueArray(0), currentWeek);
1273:
1274: // DayOfWeek function
1275: String currentDayOfWeek = String.valueOf(new GregorianCalendar(
1276: Locale.US).get(Calendar.DAY_OF_WEEK));
1277: result = queryManager.performQuery(
1278: "select DayOfWeek(CurrentDate()) where DayOfWeek(CurrentDate()) = "
1279: + currentDayOfWeek + " and id = '"
1280: + document.getId() + "'", Locale.US);
1281: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1282: .getValueArray(0), currentDayOfWeek);
1283:
1284: // DayOfMonth function
1285: String currentDayOfMonth = String
1286: .valueOf(new GregorianCalendar(Locale.US)
1287: .get(Calendar.DAY_OF_MONTH));
1288: result = queryManager.performQuery(
1289: "select DayOfMonth(CurrentDate()) where DayOfMonth(CurrentDate()) = "
1290: + currentDayOfMonth + " and id = '"
1291: + document.getId() + "'", Locale.US);
1292: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1293: .getValueArray(0), currentDayOfMonth);
1294:
1295: // DayOfYear function
1296: String currentDayOfYear = String.valueOf(new GregorianCalendar(
1297: Locale.US).get(Calendar.DAY_OF_YEAR));
1298: result = queryManager.performQuery(
1299: "select DayOfYear(CurrentDate()) where DayOfYear(CurrentDate()) = "
1300: + currentDayOfYear + " and id = '"
1301: + document.getId() + "'", Locale.US);
1302: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1303: .getValueArray(0), currentDayOfYear);
1304:
1305: // CurrentDate function with argument
1306: Calendar tenYearsAgo = new GregorianCalendar();
1307: tenYearsAgo.set(Calendar.HOUR_OF_DAY, 0);
1308: tenYearsAgo.set(Calendar.MINUTE, 0);
1309: tenYearsAgo.set(Calendar.SECOND, 0);
1310: tenYearsAgo.set(Calendar.MILLISECOND, 0);
1311: tenYearsAgo.add(Calendar.YEAR, -10);
1312: result = queryManager.performQuery(
1313: "select CurrentDate('- 10 years') where CurrentDate('- 10 years') = "
1314: + QueryHelper.formatDate(tenYearsAgo.getTime())
1315: + " and id = '" + document.getId() + "'",
1316: Locale.US);
1317: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1318: .getValueArray(0), dateFormat.format(tenYearsAgo
1319: .getTime()));
1320:
1321: // CurrentDateTime function
1322: result = queryManager.performQuery(
1323: "select CurrentDateTime('+1hours') where CurrentDateTime('+ 1 hours') > "
1324: + QueryHelper.formatDateTime(new Date())
1325: + " and id = '" + document.getId() + "'",
1326: Locale.US);
1327: assertTrue(dateTimeFormat.parse(
1328: result.getSearchResult().getRows().getRowArray(0)
1329: .getValueArray(0)).compareTo(new Date()) > 0);
1330:
1331: result = queryManager
1332: .performQuery(
1333: "select RelativeDate('start next week') where RelativeDate('start next week') > "
1334: + QueryHelper.formatDate(new Date())
1335: + " and id = '"
1336: + document.getId()
1337: + "'", Locale.US);
1338: assertTrue(dateFormat.parse(
1339: result.getSearchResult().getRows().getRowArray(0)
1340: .getValueArray(0)).compareTo(new Date()) > 0);
1341:
1342: result = queryManager
1343: .performQuery(
1344: "select RelativeDateTime('start this week') where RelativeDateTime('start this week') < "
1345: + QueryHelper
1346: .formatDateTime(new Date())
1347: + " and id = '"
1348: + document.getId()
1349: + "'", Locale.US);
1350: assertTrue(dateTimeFormat.parse(
1351: result.getSearchResult().getRows().getRowArray(0)
1352: .getValueArray(0)).compareTo(new Date()) < 0);
1353:
1354: // Test Year function with datetime arguments
1355: Calendar lastModCal = new GregorianCalendar();
1356: lastModCal.setTime(document.getLastModified());
1357: String lastModYear = String.valueOf(lastModCal
1358: .get(Calendar.YEAR));
1359: result = queryManager.performQuery(
1360: "select Year(lastModified), Year("
1361: + QueryHelper.formatDateTime(document
1362: .getLastModified())
1363: + ") where Year(lastModified) = " + lastModYear
1364: + " and id = '" + document.getId() + "'",
1365: Locale.US);
1366: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1367: .getValueArray(0), lastModYear);
1368: assertEquals(result.getSearchResult().getRows().getRowArray(0)
1369: .getValueArray(1), lastModYear);
1370:
1371: // UserId function
1372: result = user1Repo.getQueryManager().performQuery(
1373: "select UserId() where ownerId = UserId()", Locale.US);
1374: assertEquals(String.valueOf(user1Repo.getUserId()), result
1375: .getSearchResult().getRows().getRowArray(0)
1376: .getValueArray(0));
1377: assertTrue(result.getSearchResult().getRows().getRowArray().length > 0);
1378:
1379: // multivalue index
1380: result = queryManager.performQuery(
1381: "select id where $MVField[1] = 'aaa' and $MVField[1 + 1] = 'bbb' and id = '"
1382: + document.getId() + "'", Locale.US,
1383: evaluationContext);
1384: assertEquals(document.getId(), result.getSearchResult()
1385: .getRows().getRowArray(0).getValueArray(0));
1386:
1387: result = queryManager.performQuery(
1388: "select id where $MVField[1] = 'aaa' and $MVField[-1] = 'bbb' and id = '"
1389: + document.getId() + "'", Locale.US,
1390: evaluationContext);
1391: assertEquals(document.getId(), result.getSearchResult()
1392: .getRows().getRowArray(0).getValueArray(0));
1393:
1394: result = queryManager.performQuery(
1395: "select id where $MVField[1] = 'aaa' and $MVField[-38] = 'bbb' and id = '"
1396: + document.getId() + "'", Locale.US,
1397: evaluationContext);
1398: assertEquals(0, result.getSearchResult().getRows()
1399: .getRowArray().length);
1400:
1401: result = queryManager.performQuery(
1402: "select id where $MVField[234342] = 'aaa' and $MVField[-1] = 'bbb' and id = '"
1403: + document.getId() + "'", Locale.US,
1404: evaluationContext);
1405: assertEquals(0, result.getSearchResult().getRows()
1406: .getRowArray().length);
1407:
1408: result = queryManager.performQuery(
1409: "select id where $MVHLinkField[*][1] = 'daisy:50' and id = '"
1410: + document.getId() + "'", Locale.US,
1411: evaluationContext);
1412: assertEquals(document.getId(), result.getSearchResult()
1413: .getRows().getRowArray(0).getValueArray(0));
1414:
1415: result = queryManager.performQuery(
1416: "select id where $MVHLinkField[*][1] = 'daisy:52' and id = '"
1417: + document.getId() + "'", Locale.US,
1418: evaluationContext);
1419: assertEquals(document.getId(), result.getSearchResult()
1420: .getRows().getRowArray(0).getValueArray(0));
1421:
1422: result = queryManager
1423: .performQuery(
1424: "select id, $MVHLinkField[*][1], $MVHLinkField[1][1], $MVHLinkField[*][2], $MVHLinkField[*][3], $MVHLinkField[2], $MVHLinkField[*][2].branch where id = '"
1425: + document.getId() + "'", Locale.US,
1426: evaluationContext);
1427: assertEquals("main", result.getSearchResult().getRows()
1428: .getRowArray(0).getMultiValueArray(3).getValueArray(0));
1429: assertEquals("main", result.getSearchResult().getRows()
1430: .getRowArray(0).getMultiValueArray(3).getValueArray(1));
1431:
1432: result = queryManager
1433: .performQuery(
1434: "select id where $MVHLinkField[*][1] has exactly('daisy:50', 'daisy:52') and id = '"
1435: + document.getId() + "'", Locale.US,
1436: evaluationContext);
1437: assertEquals(document.getId(), result.getSearchResult()
1438: .getRows().getRowArray(0).getValueArray(0));
1439:
1440: result = queryManager
1441: .performQuery(
1442: "select id where $MVHLinkField[*][2] has exactly('daisy:50', 'daisy:52') and id = '"
1443: + document.getId() + "'", Locale.US,
1444: evaluationContext);
1445: assertEquals(0, result.getSearchResult().getRows()
1446: .getRowArray().length);
1447:
1448: result = queryManager.performQuery(
1449: "select id where $MVHLinkField[2] matchesPath('daisy:52/daisy:53') and id = '"
1450: + document.getId() + "'", Locale.US,
1451: evaluationContext);
1452: assertEquals(document.getId(), result.getSearchResult()
1453: .getRows().getRowArray(0).getValueArray(0));
1454:
1455: result = queryManager
1456: .performQuery(
1457: "select id, $MVHLinkField[1] where $MVHLinkField[1] matchesPath('daisy:52/daisy:53') and id = '"
1458: + document.getId() + "'", Locale.US,
1459: evaluationContext);
1460: assertEquals(0, result.getSearchResult().getRows()
1461: .getRowArray().length);
1462: }
1463:
1464: private Date getDate() {
1465: Calendar calendar = new GregorianCalendar();
1466: calendar.set(Calendar.HOUR_OF_DAY, 0);
1467: calendar.set(Calendar.MINUTE, 0);
1468: calendar.set(Calendar.SECOND, 0);
1469: calendar.set(Calendar.MILLISECOND, 0);
1470: return calendar.getTime();
1471: }
1472:
1473: private Date getDateTime() {
1474: Calendar calendar = new GregorianCalendar();
1475: calendar.set(Calendar.MILLISECOND, 0);
1476: return calendar.getTime();
1477: }
1478:
1479: protected abstract RepositoryManager getRepositoryManager()
1480: throws Exception;
1481:
1482: protected boolean resetDataStores() {
1483: return true;
1484: }
1485: }
|