blob: e7899d9dfa3cafe166abc66f431d1bd0aa179cc0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.chemistry.opencmis.inmemory.query;
import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.COMPLEX_TYPE;
import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_BOOLEAN;
import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_DATETIME;
import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_DECIMAL;
import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_ID;
import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.PROP_ID_INT;
import static org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator.SECONDARY_TYPE;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.math.BigDecimal;
import java.math.BigInteger;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.data.ObjectData;
import org.apache.chemistry.opencmis.commons.data.ObjectList;
import org.apache.chemistry.opencmis.commons.data.PropertyData;
import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
import org.apache.chemistry.opencmis.inmemory.AbstractServiceTest;
import org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class EvalQueryTest extends AbstractServiceTest {
private static final Logger log = LoggerFactory.getLogger(EvalQueryTest.class);
private QueryTestDataCreator dataCreator;
static int COUNT = 0;
@Override
@Before
public void setUp() {
// initialize query object with type manager
super.setTypeCreatorClass(UnitTestTypeSystemCreator.class.getName());
super.setUp();
// create test data
dataCreator = new QueryTestDataCreator(fRepositoryId, fRootFolderId, fObjSvc, fVerSvc);
dataCreator.createBasicTestData();
}
@Override
@After
public void tearDown() {
log.debug("tearDown started.");
super.tearDown();
log.debug("tearDown done.");
}
@Test
public void testAll() {
log.debug("Start testAll...");
String statement = "SELECT * FROM cmis:document";
ObjectList res = doQuery(statement);
assertEquals(6, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertFalse(resultContains("jens", res));
log.debug("...Stop testAll.");
}
// ////////////////////////////////////////////////////////////////////
// Boolean tests
@Test
public void testBooleanEquals() {
log.debug("Start testBooleanEquals...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_BOOLEAN + "= true";
ObjectList res = doQuery(statement);
assertEquals(3, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("delta", res));
log.debug("...Stop testBooleanEquals.");
}
@Test
public void testBooleanNotEquals() {
log.debug("Start testBooleanNotEquals...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_BOOLEAN + "= false";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("beta", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testBooleanNotEquals.");
}
// ////////////////////////////////////////////////////////////////////
// Integer tests
@Test
public void testIntegerEquals() {
log.debug("Start testIntegerEquals...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "= 100";
ObjectList res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testIntegerEquals.");
}
@Test
public void testIntegerNotEquals() {
log.debug("Start testIntegerNotEquals...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "<> 100";
ObjectList res = doQuery(statement);
assertEquals(4, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("delta", res));
log.debug("...Stop testIntegerNotEquals.");
}
@Test
public void testIntegerLess() {
log.debug("Start testIntegerLess...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "< 0";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
log.debug("...Stop testIntegerLess.");
}
@Test
public void testIntegerLessOrEqual() {
log.debug("Start testIntegerLessOrEqual...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "<= 0";
ObjectList res = doQuery(statement);
assertEquals(3, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("gamma", res));
log.debug("...Stop testIntegerLessOrEqual.");
}
@Test
public void testIntegerGreater() {
log.debug("Start testIntegerGreater...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "> 0";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("delta", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testIntegerGreater.");
}
@Test
public void testIntegerGreaterOrEqual() {
log.debug("Start testIntegerGreaterOrEqual...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + ">= 0";
ObjectList res = doQuery(statement);
assertEquals(3, res.getObjects().size());
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("delta", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testIntegerGreaterOrEqual.");
}
// ////////////////////////////////////////////////////////////////////
// Decimal tests
@Test
public void testDecimalEquals() {
log.debug("Start testDecimalEquals...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DECIMAL + "= 1.23456E-6";
ObjectList res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("delta", res));
log.debug("...Stop testDecimalEquals.");
}
@Test
public void testDecimalNotEquals() {
log.debug("Start testDecimalNotEquals...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DECIMAL + "<> 1.23456E-6";
ObjectList res = doQuery(statement);
assertEquals(4, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testDecimalNotEquals.");
}
@Test
public void testDecimalLess() {
log.debug("Start testDecimalLess...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DECIMAL + "< 1.23456E-6";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
log.debug("...Stop testDecimalLess.");
}
@Test
public void testDecimalLessOrEqual() {
log.debug("Start testDecimalLessOrEqual...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DECIMAL + "<= 1.23456E-6";
ObjectList res = doQuery(statement);
assertEquals(3, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("delta", res));
log.debug("...Stop testDecimalLessOrEqual.");
}
@Test
public void testDecimalGreater() {
log.debug("Start testDecimalGreater...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DECIMAL + "> 1.23456E-6";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testDecimalGreater.");
}
@Test
public void testDecimalGreaterOrEqual() {
log.debug("Start testDecimalGreaterOrEqual...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DECIMAL + ">= 1.23456E-6";
ObjectList res = doQuery(statement);
assertEquals(3, res.getObjects().size());
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("delta", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testDecimalGreaterOrEqual.");
}
// ////////////////////////////////////////////////////////////////////
// DateTime tests
@Test
public void testDateEquals() {
log.debug("Start testDateEquals...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DATETIME
+ "= TIMESTAMP '2038-01-20T00:00:00.000Z'";
ObjectList res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("delta", res));
log.debug("...Stop testDateEquals.");
}
@Test
public void testDateNotEquals() {
log.debug("Start testDateNotEquals...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DATETIME
+ "<> TIMESTAMP '2038-01-20T00:00:00.000Z'";
ObjectList res = doQuery(statement);
assertEquals(4, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testDateNotEquals.");
}
@Test
public void testDateLess() {
log.debug("Start testDateLess...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DATETIME
+ "< TIMESTAMP '2038-01-20T00:00:00.000Z'";
ObjectList res = doQuery(statement);
assertEquals(3, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("gamma", res));
log.debug("...Stop testDateLess.");
}
@Test
public void testDateLessOrEquals() {
log.debug("Start testDateLessOrEquals...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DATETIME
+ "<= TIMESTAMP '2038-01-20T00:00:00.000Z'";
ObjectList res = doQuery(statement);
assertEquals(4, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("delta", res));
log.debug("...Stop testDateLessOrEquals.");
}
@Test
public void testDategreater() {
log.debug("Start testDateGreaterOrEqual...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DATETIME
+ "> TIMESTAMP '2038-01-20T00:00:00.000Z'";
ObjectList res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testDateGreaterOrEqual.");
}
// @Test
public void testDateGreaterOrEqual() {
log.debug("Start testDateGreaterOrEqual...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_DATETIME
+ ">= TIMESTAMP '2038-01-20T00:00:00.000Z'";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("delta", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testDateGreaterOrEqual.");
}
// //////////////////////////////////////////////////////////////////
// String tests
@Test
public void testStringEquals() {
log.debug("Start testStringEquals...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ "= 'Alpha'";
ObjectList res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("alpha", res));
log.debug("...Stop testStringEquals.");
}
@Test
public void testStringNotEquals() {
log.debug("Start testStringNotEquals...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ "<> 'Gamma'";
ObjectList res = doQuery(statement);
assertEquals(4, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("delta", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testStringNotEquals.");
}
@Test
public void testStringLess() {
log.debug("Start testStringLess...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ "< 'Delta'";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
log.debug("...Stop testStringLess.");
}
@Test
public void testStringLessOrEquals() {
log.debug("Start testStringLessOrEquals...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ "<= 'Delta'";
ObjectList res = doQuery(statement);
assertEquals(3, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("delta", res));
log.debug("...Stop testStringLessOrEquals.");
}
@Test
public void testStringGreater() {
log.debug("Start testStringGreater...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ "> 'Delta'";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testStringGreater.");
}
@Test
public void testStringGreaterOrEquals() {
log.debug("Start testStringGreaterOrEquals...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ ">= 'Delta'";
ObjectList res = doQuery(statement);
assertEquals(3, res.getObjects().size());
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("delta", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testStringGreaterOrEquals.");
}
@Test
public void testStringEscape() {
log.debug("Start testStringEscape...");
String statement = "SELECT * FROM " + BaseTypeId.CMIS_DOCUMENT.value() + " WHERE " + PropertyIds.NAME
+ "='John\\'s Document'";
ObjectList res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains( "John's Document", res));
log.debug("...Stop testStringEscape.");
}
// //////////////////////////////////////////////////////////////////
// Boolean condition tests
@Test
public void testAnd() {
log.debug("Start testAnd...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "= 50 AND " + PROP_ID_BOOLEAN
+ "= true";
ObjectList res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("delta", res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "= 50 AND " + PROP_ID_BOOLEAN
+ "= false";
res = doQuery(statement);
assertEquals(0, res.getObjects().size());
log.debug("...Stop testAnd.");
}
@Test
public void testOr() {
log.debug("Start testOr...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "= -50 OR " + PROP_ID_BOOLEAN
+ "= false";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("beta", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testOr.");
}
@Test
public void testNot() {
log.debug("Start testNot...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE NOT " + PROP_ID_INT + "= 50";
ObjectList res = doQuery(statement);
assertEquals(4, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testNot.");
}
@Test
public void testOrderByString() {
log.debug("Start testOrderByString...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + UnitTestTypeSystemCreator.PROP_ID_STRING;
ObjectList res = doQuery(statement);
assertEquals(5, res.getObjects().size());
assertTrue(resultContainsAtPos("alpha", 0, res));
assertTrue(resultContainsAtPos("beta", 1, res));
assertTrue(resultContainsAtPos("delta", 2, res));
assertTrue(resultContainsAtPos("epsilon", 3, res));
assertTrue(resultContainsAtPos("gamma", 4, res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + UnitTestTypeSystemCreator.PROP_ID_STRING + " DESC";
res = doQuery(statement);
assertEquals(5, res.getObjects().size());
assertTrue(resultContainsAtPos("alpha", 4, res));
assertTrue(resultContainsAtPos("beta", 3, res));
assertTrue(resultContainsAtPos("delta", 2, res));
assertTrue(resultContainsAtPos("epsilon", 1, res));
assertTrue(resultContainsAtPos("gamma", 0, res));
log.debug("...Stop testOrderByString.");
}
@Test
public void testOrderByInteger() {
log.debug("Start testOrderByInteger...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_INT;
ObjectList res = doQuery(statement);
assertEquals(5, res.getObjects().size());
assertTrue(resultContainsAtPos("alpha", 0, res));
assertTrue(resultContainsAtPos("beta", 1, res));
assertTrue(resultContainsAtPos("gamma", 2, res));
assertTrue(resultContainsAtPos("delta", 3, res));
assertTrue(resultContainsAtPos("epsilon", 4, res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_INT + " DESC";
res = doQuery(statement);
assertEquals(5, res.getObjects().size());
assertTrue(resultContainsAtPos("alpha", 4, res));
assertTrue(resultContainsAtPos("beta", 3, res));
assertTrue(resultContainsAtPos("gamma", 2, res));
assertTrue(resultContainsAtPos("delta", 1, res));
assertTrue(resultContainsAtPos("epsilon", 0, res));
log.debug("...Stop testOrderByInteger.");
}
@Test
public void testOrderByDecimal() {
log.debug("Start testOrderByDecimal...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_DECIMAL;
ObjectList res = doQuery(statement);
assertEquals(5, res.getObjects().size());
assertTrue(resultContainsAtPos("alpha", 0, res));
assertTrue(resultContainsAtPos("beta", 1, res));
assertTrue(resultContainsAtPos("delta", 2, res));
assertTrue(resultContainsAtPos("gamma", 3, res));
assertTrue(resultContainsAtPos("epsilon", 4, res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_DECIMAL + " DESC";
res = doQuery(statement);
assertEquals(5, res.getObjects().size());
assertTrue(resultContainsAtPos("alpha", 4, res));
assertTrue(resultContainsAtPos("beta", 3, res));
assertTrue(resultContainsAtPos("delta", 2, res));
assertTrue(resultContainsAtPos("gamma", 1, res));
assertTrue(resultContainsAtPos("epsilon", 0, res));
log.debug("...Stop testOrderByDecimal.");
}
@Test
public void testOrderByDate() {
log.debug("Start testOrderByDate...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_DATETIME;
ObjectList res = doQuery(statement);
assertEquals(5, res.getObjects().size());
assertTrue(resultContainsAtPos("beta", 0, res));
assertTrue(resultContainsAtPos("alpha", 1, res));
assertTrue(resultContainsAtPos("gamma", 2, res));
assertTrue(resultContainsAtPos("delta", 3, res));
assertTrue(resultContainsAtPos("epsilon", 4, res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_DATETIME + " DESC";
res = doQuery(statement);
assertEquals(5, res.getObjects().size());
assertTrue(resultContainsAtPos("beta", 4, res));
assertTrue(resultContainsAtPos("alpha", 3, res));
assertTrue(resultContainsAtPos("gamma", 2, res));
assertTrue(resultContainsAtPos("delta", 1, res));
assertTrue(resultContainsAtPos("epsilon", 0, res));
log.debug("...Stop testOrderByDate.");
}
@Test
public void testOrderByBool() {
log.debug("Start testOrderByBool...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_BOOLEAN;
ObjectList res = doQuery(statement);
assertEquals(5, res.getObjects().size());
assertTrue(resultContainsAtPos("beta", 0, res) || resultContainsAtPos("beta", 1, res));
assertTrue(resultContainsAtPos("epsilon", 0, res) || resultContainsAtPos("epsilon", 1, res));
assertTrue(resultContainsAtPos("alpha", 2, res) || resultContainsAtPos("alpha", 3, res)
|| resultContainsAtPos("alpha", 4, res));
assertTrue(resultContainsAtPos("gamma", 2, res) || resultContainsAtPos("gamma", 3, res)
|| resultContainsAtPos("gamma", 4, res));
assertTrue(resultContainsAtPos("delta", 2, res) || resultContainsAtPos("delta", 3, res)
|| resultContainsAtPos("delta", 4, res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " ORDER BY " + PROP_ID_BOOLEAN + " DESC";
res = doQuery(statement);
assertEquals(5, res.getObjects().size());
assertTrue(resultContainsAtPos("beta", 3, res) || resultContainsAtPos("beta", 4, res));
assertTrue(resultContainsAtPos("epsilon", 3, res) || resultContainsAtPos("epsilon", 4, res));
assertTrue(resultContainsAtPos("alpha", 2, res) || resultContainsAtPos("alpha", 1, res)
|| resultContainsAtPos("alpha", 0, res));
assertTrue(resultContainsAtPos("gamma", 2, res) || resultContainsAtPos("gamma", 1, res)
|| resultContainsAtPos("gamma", 0, res));
assertTrue(resultContainsAtPos("delta", 2, res) || resultContainsAtPos("delta", 1, res)
|| resultContainsAtPos("delta", 0, res));
log.debug("...Stop testOrderByBool.");
}
// reported JIRA issue CMIS-510
@Test
public void testOrderBySystemProperties() {
log.debug("Start testOrderBySystemProperties...");
String statement = "SELECT * from cmis:document ORDER BY " + PropertyIds.NAME;
ObjectList res = doQuery(statement);
assertEquals(6, res.getObjects().size());
statement = "SELECT * from cmis:document ORDER BY " + PropertyIds.CREATION_DATE + " ASC";
assertEquals(6, res.getObjects().size());
statement = "SELECT * from cmis:document ORDER BY " + PropertyIds.LAST_MODIFICATION_DATE + " DESC";
assertEquals(6, res.getObjects().size());
log.debug("...Stop testOrderBySystemProperties.");
}
@Test
public void testIsNull() {
log.debug("Start testIsNull...");
dataCreator.createNullTestDocument();
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + " IS NULL";
ObjectList res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("nulldoc", res));
log.debug("...Stop testIsNull.");
}
@Test
public void testIsNotNull() {
log.debug("Start testIsNotNull...");
dataCreator.createNullTestDocument();
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + " IS NOT NULL";
ObjectList res = doQuery(statement);
assertEquals(5, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("delta", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testIsNotNull.");
}
@Test
public void patternTest() {
log.debug("Start patternTest...");
String res = InMemoryQueryProcessor.translatePattern("ABC%def");
assertEquals("ABC.*def", res);
res = InMemoryQueryProcessor.translatePattern("%abc");
assertEquals(".*abc", res);
res = InMemoryQueryProcessor.translatePattern("abc%");
assertEquals("abc.*", res);
res = InMemoryQueryProcessor.translatePattern("ABC\\%def");
assertEquals("ABC\\%def", res);
res = InMemoryQueryProcessor.translatePattern("\\%abc");
assertEquals("\\%abc", res);
res = InMemoryQueryProcessor.translatePattern("abc%def%ghi");
assertEquals("abc.*def.*ghi", res);
res = InMemoryQueryProcessor.translatePattern("abc%def\\%ghi%jkl");
assertEquals("abc.*def\\%ghi.*jkl", res);
res = InMemoryQueryProcessor.translatePattern("ABC_def");
assertEquals("ABC.def", res);
res = InMemoryQueryProcessor.translatePattern("_abc");
assertEquals(".abc", res);
res = InMemoryQueryProcessor.translatePattern("abc_");
assertEquals("abc.", res);
res = InMemoryQueryProcessor.translatePattern("ABC\\_def");
assertEquals("ABC\\_def", res);
res = InMemoryQueryProcessor.translatePattern("\\_abc");
assertEquals("\\_abc", res);
res = InMemoryQueryProcessor.translatePattern("abc_def_ghi");
assertEquals("abc.def.ghi", res);
res = InMemoryQueryProcessor.translatePattern("abc_def\\_ghi_jkl");
assertEquals("abc.def\\_ghi.jkl", res);
log.debug("...Stop patternTest.");
}
@Test
public void testLike() {
log.debug("Start testLike...");
dataCreator.createLikeTestDocuments(fRootFolderId);
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ " LIKE 'ABC%'";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("likedoc1", res));
assertTrue(resultContains("likedoc2", res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ " LIKE '%ABC'";
res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("likedoc3", res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ " LIKE '%ABC%'";
res = doQuery(statement);
assertEquals(3, res.getObjects().size());
assertTrue(resultContains("likedoc1", res));
assertTrue(resultContains("likedoc2", res));
assertTrue(resultContains("likedoc3", res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ " LIKE 'AB_DEF'";
res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("likedoc1", res));
log.debug("...Stop testLike.");
}
@Test
public void testNotLike() {
log.debug("Start testNotLike...");
dataCreator.createLikeTestDocuments(fRootFolderId);
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ " NOT LIKE 'ABC%'";
ObjectList res = doQuery(statement);
assertEquals(6, res.getObjects().size());
assertTrue(resultContains("likedoc3", res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ " NOT LIKE '%a'";
res = doQuery(statement);
assertEquals(4, res.getObjects().size());
assertTrue(resultContains("likedoc1", res));
assertTrue(resultContains("likedoc1", res));
assertTrue(resultContains("likedoc3", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testNotLike.");
}
@Test
public void testInFolder() {
log.debug("Start testInFolder...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_FOLDER('" + fRootFolderId + "')";
ObjectList res = doQuery(statement);
assertEquals(5, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("delta", res));
assertTrue(resultContains("epsilon", res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_FOLDER('" + dataCreator.getFolder1() + "')";
res = doQuery(statement);
assertEquals(0, res.getObjects().size());
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_FOLDER(" + COMPLEX_TYPE + ", '" + fRootFolderId + "')";
res = doQuery(statement);
assertEquals(5, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("delta", res));
assertTrue(resultContains("epsilon", res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_FOLDER(UnknownType, '" + dataCreator.getFolder2()
+ "')";
try {
res = doQuery(statement);
fail("Unknown type in folder should throw exception");
} catch (Exception e) {
assertTrue(e.toString().contains("is neither a type query name nor an alias"));
log.debug("expected Exception: " + e);
}
log.debug("...Stop testInFolder.");
}
@Test
public void testInTree() {
log.debug("Start testInTree...");
dataCreator.createLikeTestDocuments(dataCreator.getFolder11());
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_TREE(" + COMPLEX_TYPE + ", '"
+ dataCreator.getFolder1() + "')";
ObjectList res = doQuery(statement);
assertEquals(3, res.getObjects().size());
assertTrue(resultContains("likedoc1", res));
assertTrue(resultContains("likedoc2", res));
assertTrue(resultContains("likedoc3", res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_FOLDER('" + dataCreator.getFolder1() + "')";
res = doQuery(statement);
assertEquals(0, res.getObjects().size());
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_TREE('" + dataCreator.getFolder2() + "')";
res = doQuery(statement);
assertEquals(0, res.getObjects().size());
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE IN_TREE(UnknownType, '" + dataCreator.getFolder2() + "')";
try {
res = doQuery(statement);
fail("Unknown type in folder should throw exception");
} catch (Exception e) {
assertTrue(e.toString().contains("is neither a type query name nor an alias"));
log.debug("expected Exception: " + e);
}
log.debug("...Stop testInTree.");
}
@Test
public void testIn() {
log.debug("Start testNotIn...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ " IN ('Alpha', 'Beta', 'Gamma')";
ObjectList res = doQuery(statement);
assertEquals(3, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("gamma", res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ " IN ('Theta', 'Pi', 'Rho')";
res = doQuery(statement);
assertEquals(0, res.getObjects().size());
log.debug("...Stop testNotIn.");
}
@Test
public void testNotIn() {
log.debug("Start testNotIn...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ " NOT IN ('Alpha', 'Beta', 'Gamma')";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("delta", res));
assertTrue(resultContains("epsilon", res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ " NOT IN ('Theta', 'Pi', 'Rho')";
res = doQuery(statement);
assertEquals(5, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("delta", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testNotIn.");
}
@Test
public void testMultiValueInAny() {
log.debug("Start testMultiValueNotInAny...");
dataCreator.createMultiValueDocuments();
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE ANY "
+ UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE + " IN ('red', 'black', 'grey')";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("mv-alpha", res));
assertTrue(resultContains("mv-beta", res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE ANY "
+ UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE + " IN ('green', 'black', 'grey')";
res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("mv-alpha", res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE ANY "
+ UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE + " IN ('white', 'black', 'grey')";
res = doQuery(statement);
assertEquals(0, res.getObjects().size());
log.debug("...Stop testMultiValueNotInAny.");
}
@Test
public void testMultiValueNotInAny() {
log.debug("Start testMultiValueNotInAny...");
dataCreator.createMultiValueDocuments();
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE ANY "
+ UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE + " NOT IN ('red', 'black', 'grey')";
ObjectList res = doQuery(statement);
assertEquals(0, res.getObjects().size());
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE ANY "
+ UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE + " NOT IN ('green', 'black', 'grey')";
res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("mv-beta", res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE ANY "
+ UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE + " NOT IN ('white', 'black', 'grey')";
res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("mv-alpha", res));
assertTrue(resultContains("mv-beta", res));
log.debug("...Stop testMultiValueNotInAny.");
}
@Test
public void testMultiValueEqAny() {
log.debug("Start testMultiValueEqAny...");
dataCreator.createMultiValueDocuments();
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE 'red' = ANY "
+ UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE;
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("mv-alpha", res));
assertTrue(resultContains("mv-beta", res));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE 'black' = ANY "
+ UnitTestTypeSystemCreator.PROP_ID_STRING_MULTI_VALUE;
res = doQuery(statement);
assertEquals(0, res.getObjects().size());
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE 'black' = ANY "
+ UnitTestTypeSystemCreator.PROP_ID_STRING;
try {
doQuery(statement);
fail("Unknown = ANY with single value prop should throw exception");
} catch (Exception e) {
assertTrue(e.toString().contains("only is allowed on multi-value properties"));
log.debug("expected Exception: " + e);
}
log.debug("...Stop testMultiValueEqAny.");
}
@Test
public void testVersionsWithQuery() {
log.debug("Start testLastestVersionsWithQuery...");
String id = dataCreator.createVersionedDocument();
assertNotNull(id);
String statement = "SELECT * FROM " + UnitTestTypeSystemCreator.VERSIONED_TYPE;
ObjectList res = doQueryAllVersions(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("ver123", UnitTestTypeSystemCreator.VERSION_PROPERTY_ID, res));
assertTrue(resultContains("ver456", UnitTestTypeSystemCreator.VERSION_PROPERTY_ID, res));
assertTrue(resultContains("1.0", PropertyIds.VERSION_LABEL, res));
assertTrue(resultContains("2.0", PropertyIds.VERSION_LABEL, res));
res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertFalse(resultContains("1.0", PropertyIds.VERSION_LABEL, res));
assertTrue(resultContains("2.0", PropertyIds.VERSION_LABEL, res));
log.debug("...Stop testLastestVersionsWithQuery.");
}
@Test
public void testLastestVersionsWithQuery() {
log.debug("Start testLastestVersionsWithQuery...");
String id = dataCreator.createVersionedDocument();
assertNotNull(id);
String statement = "SELECT * FROM " + UnitTestTypeSystemCreator.VERSIONED_TYPE;
ObjectList res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("ver456", UnitTestTypeSystemCreator.VERSION_PROPERTY_ID, res));
assertTrue(resultContains("2.0", PropertyIds.VERSION_LABEL, res));
res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertFalse(resultContains("1.0", PropertyIds.VERSION_LABEL, res));
assertTrue(resultContains("2.0", PropertyIds.VERSION_LABEL, res));
log.debug("...Stop testLastestVersionsWithQuery.");
}
@Test
public void testContainsWord() {
log.debug("Start testContainsWord...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE CONTAINS('cat')";
ObjectList res = doQuery(statement);
assertEquals(3, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("delta", res));
log.debug("...Stop testContainsWord.");
}
@Test
public void testContainsPhrase() {
log.debug("Start testContainsPhrase...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE CONTAINS('\"Kitty Katty\"')";
ObjectList res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("beta", res));
log.debug("...Stop testContainsPhrase.");
}
@Test
public void testContainsNot() {
log.debug("Start testContainsNot...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE CONTAINS('-cat')";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("epsilon", res));
log.debug("...Stop testContainsNot.");
}
@Test
public void testContainsOr() {
log.debug("Start testContainsOr...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE CONTAINS('cat OR dog')";
ObjectList res = doQuery(statement);
assertEquals(4, res.getObjects().size());
assertTrue(resultContains("alpha", res));
assertTrue(resultContains("beta", res));
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("delta", res));
log.debug("...Stop testContainsOr.");
}
@Test
public void testContainsAnd() {
log.debug("Start testContainsAnd...");
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE CONTAINS('cat dog')";
ObjectList res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("delta", res));
log.debug("...Stop testContainsAnd.");
}
@Test
public void testContainsAndScore() {
log.debug("Start testContainsAndScore...");
String statement = "SELECT cmis:objectId,cmis:name,SCORE() FROM " + COMPLEX_TYPE + " WHERE CONTAINS('dog')";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContains("gamma", res));
assertTrue(resultContains("delta", res));
assertTrue(resultContains(1.0, "SEARCH_SCORE", res));
log.debug("...Stop testContainsAndScore.");
}
@Test
public void testNotSetProperties() {
log.debug("Start testNotSetProperties...");
// PROP_ID_ID is not set property
String statement = "SELECT cmis:name, " + PROP_ID_ID + " FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT
+ "= 100";
ObjectList res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("epsilon", res));
assertTrue(resultContainsNotSetPropertyValue(PROP_ID_ID, res.getObjects().get(0)));
statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + PROP_ID_INT + "= 100";
res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("epsilon", res));
assertTrue(resultContainsNotSetPropertyValue(PROP_ID_ID, res.getObjects().get(0)));
log.debug("...Stop testNotSetProperties.");
}
@Test
public void testSecondaryTypes() {
log.debug("Start testSecondaryTypes...");
// create documents with secondary types in addition
dataCreator.createSecondaryTestDocuments();
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE " + UnitTestTypeSystemCreator.PROP_ID_STRING
+ "= 'Secondary'";
ObjectList res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContains("docwithsecondary", res));
assertFalse(resultContains(UnitTestTypeSystemCreator.SECONDARY_STRING_PROP, res));
statement = "SELECT * FROM " + SECONDARY_TYPE + " WHERE " + UnitTestTypeSystemCreator.SECONDARY_INTEGER_PROP
+ "= 100";
res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertFalse(resultContains("docwithsecondary", res));
assertTrue(resultContains("Secondary Property Value", UnitTestTypeSystemCreator.SECONDARY_STRING_PROP, res));
assertTrue(resultContains(BigInteger.valueOf(100), UnitTestTypeSystemCreator.SECONDARY_INTEGER_PROP, res));
assertFalse(resultContainsProperty(UnitTestTypeSystemCreator.PROP_ID_STRING, res));
log.debug("...Stop testSecondaryTypes.");
}
@Test
public void testSecondaryJoin() {
log.debug("Start testSecondaryJoin...");
// create documents with secondary types in addition
dataCreator.createSecondaryTestDocuments();
String statement = "SELECT * FROM " + COMPLEX_TYPE + " LEFT JOIN " + SECONDARY_TYPE + " ON " + COMPLEX_TYPE
+ ".cmis:objectId = " + SECONDARY_TYPE + ".cmis:objectId WHERE cmis:name LIKE 'docwithsecondary%'";
ObjectList res = doQuery(statement);
assertEquals(2, res.getObjects().size());
assertTrue(resultContainsProperty(UnitTestTypeSystemCreator.PROP_ID_STRING, res));
assertTrue(resultContainsProperty(PropertyIds.NAME, res));
assertTrue(resultContainsProperty(PropertyIds.OBJECT_ID, res));
assertTrue(resultContainsProperty(PropertyIds.OBJECT_TYPE_ID, res));
assertTrue(resultContainsProperty(UnitTestTypeSystemCreator.SECONDARY_STRING_PROP, res));
assertTrue(resultContainsProperty(UnitTestTypeSystemCreator.SECONDARY_INTEGER_PROP, res));
// Test a query with secondary types matching only one document not
// having this secondary type
statement = "SELECT * FROM " + COMPLEX_TYPE + " LEFT JOIN " + SECONDARY_TYPE + " ON " + COMPLEX_TYPE
+ ".cmis:objectId = " + SECONDARY_TYPE + ".cmis:objectId WHERE cmis:name = 'alpha'";
res = doQuery(statement);
assertEquals(1, res.getObjects().size());
assertTrue(resultContainsProperty(UnitTestTypeSystemCreator.PROP_ID_STRING, res));
assertTrue(resultContainsProperty(PropertyIds.NAME, res));
assertTrue(resultContainsProperty(PropertyIds.OBJECT_ID, res));
assertTrue(resultContainsProperty(PropertyIds.OBJECT_TYPE_ID, res));
assertTrue(resultContainsProperty(UnitTestTypeSystemCreator.SECONDARY_STRING_PROP, res));
assertTrue(resultContainsProperty(UnitTestTypeSystemCreator.SECONDARY_INTEGER_PROP, res));
log.debug("...Stop testSecondaryJoin.");
}
@Test
public void testMultipleContains() {
log.debug("Start testMultipleContains...");
dataCreator.createSecondaryTestDocuments();
String statement = "SELECT * FROM " + COMPLEX_TYPE + " WHERE CONTAINS('abc') AND CONTAINS('123')";
try {
doQuery(statement);
fail("Multiple CONTAINS clauses should throw CmisInvalidArgumentException");
} catch (CmisInvalidArgumentException e) {
assertTrue(e.getMessage().contains("More than one CONTAINS"));
}
log.debug("...Stop testMultipleContains.");
}
@Test
public void testPredfinedQueryName() {
log.debug("Start testPredfinedQueryName...");
String statement = "SELECT cmis:name as abc, SCORE() FROM " + COMPLEX_TYPE + " ORDER BY SEARCH_SCORE";
try {
doQuery(statement);
} catch (Exception e) {
fail("SEARCH_SCORE in ORDER_BY must be supported.");
}
log.debug("...Stop testPredfinedQueryName.");
}
private ObjectList doQuery(String queryString) {
log.debug("\nExecuting query: " + queryString);
ObjectList res = fDiscSvc.query(fRepositoryId, queryString, false, false, IncludeRelationships.NONE, null,
null, null, null);
log.debug("Query result, number of matching objects: " + res.getNumItems());
for (ObjectData od : res.getObjects()) {
PropertyData<?> propData = od.getProperties().getProperties().get(PropertyIds.NAME);
if (null != propData) {
log.debug("Found matching object: " + propData.getFirstValue());
} else {
log.debug("Found matching object: (unknown, no name)");
}
}
return res;
}
private ObjectList doQueryAllVersions(String queryString) {
log.debug("\nExecuting query: " + queryString);
ObjectList res = fDiscSvc.query(fRepositoryId, queryString, true, false, IncludeRelationships.NONE, null, null,
null, null);
log.debug("Query result, number of matching objects: " + res.getNumItems());
for (ObjectData od : res.getObjects()) {
log.debug("Found matching object: "
+ od.getProperties().getProperties().get(PropertyIds.NAME).getFirstValue());
}
return res;
}
private static boolean resultContains(Object value, String propId, ObjectList results) {
for (ObjectData od : results.getObjects()) {
PropertyData<?> propData = od.getProperties().getProperties().get(propId);
if (null != propData) {
Object propVal = propData.getFirstValue();
if (value.equals(propVal)) {
return true;
}
}
}
return false;
}
private static boolean resultContains(Double val, String propId, ObjectList results) {
for (ObjectData od : results.getObjects()) {
BigDecimal bd = (BigDecimal) od.getProperties().getProperties().get(propId).getFirstValue();
if (val.equals(bd.doubleValue())) {
return true;
}
}
return false;
}
private static boolean resultContains(String name, ObjectList results) {
return resultContains(name, PropertyIds.NAME, results);
}
private static boolean resultContainsAtPos(String name, int index, ObjectList results) {
String nameProp = (String) results.getObjects().get(index).getProperties().getProperties()
.get(PropertyIds.NAME).getFirstValue();
return name.equals(nameProp);
}
private boolean resultContainsNotSetPropertyValue(String propId, ObjectData od) {
PropertyData<?> propData = od.getProperties().getProperties().get(propId);
return propData != null && propId.equals(propData.getId()) && propData.getValues().isEmpty();
}
private static boolean resultContainsProperty(String propId, ObjectList results) {
for (ObjectData od : results.getObjects()) {
PropertyData<?> propData = od.getProperties().getProperties().get(propId);
if (null == propData) {
return false;
}
}
return true;
}
}