You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fg...@apache.org on 2010/07/29 19:13:30 UTC

svn commit: r980513 [9/15] - in /incubator/chemistry/opencmis/trunk/chemistry-opencmis-server: chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/dummy/ chemistry-opencmis-server-bindings/src/main/java/org/apache...

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java?rev=980513&r1=980512&r2=980513&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java Thu Jul 29 17:13:28 2010
@@ -1,789 +1,789 @@
-/*
- * 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_INT;
-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 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.enums.IncludeRelationships;
-import org.apache.chemistry.opencmis.inmemory.AbstractServiceTst;
-import org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-public class EvalQueryTest extends AbstractServiceTst {
-    
-    private static Log log = LogFactory.getLog(EvalQueryTest.class);
-    private QueryTestDataCreator dataCreator;
-    
-    @Before
-    public void setUp() throws Exception {
-
-        // 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();
-    }
-
-    @After
-    public void tearDown() throws Exception {
-        super.tearDown();
-    }
-
-    @Test
-    public void testAll() {
-        String statement = "SELECT * FROM cmis:document";
-        ObjectList res = doQuery(statement);
-        assertEquals(5, res.getObjects().size());
-        assertTrue(resultContains("alpha", res));
-        assertFalse(resultContains("jens", res));
-    }
-    
-    //////////////////////////////////////////////////////////////////////
-    // Boolean tests
-    
-    @Test
-    public void 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));        
-    }
-    
-    @Test
-    public void 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));        
-    }
-    
-    //////////////////////////////////////////////////////////////////////
-    // Integer tests
-    
-    @Test
-    public void 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));        
-    }
-    
-    @Test
-    public void 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));        
-    }
-
-    @Test
-    public void 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));        
-    }
-
-    @Test
-    public void 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));        
-    }
-    
-    @Test
-    public void 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));        
-    }
-
-    @Test
-    public void 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));        
-    }
-
-    //////////////////////////////////////////////////////////////////////
-    // Decimal tests
-    
-    @Test
-    public void 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));        
-    }
-    
-    @Test
-    public void 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));        
-    }
-
-    @Test
-    public void 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));        
-    }
-
-    @Test
-    public void 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));        
-    }
-    
-    @Test
-    public void 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));        
-    }
-
-    @Test
-    public void 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));        
-    }
-    
-    //////////////////////////////////////////////////////////////////////
-    // DateTime tests
-    
-    @Test
-    public void 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));        
-    }
-    
-    @Test
-    public void 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));        
-    }
-
-    @Test
-    public void 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));        
-    }
-
-    @Test
-    public void 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));        
-    }
-
-    @Test
-    public void testDategreater() {
-        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));        
-    }
-
-    //    @Test
-    public void 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));        
-    }
-    
-    ////////////////////////////////////////////////////////////////////
-    // String tests
-
-    @Test
-    public void 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));        
-    }
-    
-    @Test
-    public void 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));        
-    }
-
-    @Test
-    public void 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));        
-    }
-
-    @Test
-    public void 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));        
-    }
-    
-    @Test
-    public void 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));        
-    }
-    
-    @Test
-    public void 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));        
-    }
-
-    ////////////////////////////////////////////////////////////////////
-    // Boolean condition tests
-    
-    @Test
-    public void 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());
-    }
-
-    @Test
-    public void 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));        
-    }
-
-    @Test
-    public void 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));        
-    }
-
-    @Test
-    public void 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));
-}
-
-    @Test
-    public void 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));
-}
-
-    @Test
-    public void 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));
-    }
-
-    @Test
-    public void 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));
-    }
-
-    @Test
-    public void 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));
-}
-
-    @Test
-    public void 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));        
-    }
-    
-    @Test
-    public void 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));        
-    }
-    
-    @Test
-    public void 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);
-    }
-    
-    @Test
-    public void 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));        
-    }
-
-    @Test
-    public void 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));    
-    }
-    
-    @Test
-    public void 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("must be in FROM list"));
-            log.debug("expected Exception: " + e);
-        }
-    }
-
-    @Test
-    public void 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("must be in FROM list"));
-            log.debug("expected Exception: " + e);
-        }
-    }
-    
-    @Test
-    public void testIn() {
-        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());
-    }
-    
-    @Test
-    public void 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));    
-    }
-    
-    @Test
-    public void testMultiValueInAny() {
-        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());
-    }
-    
-    @Test
-    public void 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));    
-    }
-
-    @Test
-    public void 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 {
-            res = 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);
-        }
-    }
-    
-    @Test 
-    public void testVersionsWithQuery() {
-        String id = dataCreator.createVersionedDocument();
-        assertNotNull(id);
-        String statement = "SELECT * FROM " + UnitTestTypeSystemCreator.VERSION_DOCUMENT_TYPE_ID;
-        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("V 1.0", PropertyIds.VERSION_LABEL, res));
-        assertTrue(resultContains("V 2.0", PropertyIds.VERSION_LABEL, res));
-        
-        res = doQuery(statement);
-        assertEquals(1, res.getObjects().size());
-        assertFalse(resultContains("V 1.0", PropertyIds.VERSION_LABEL, res));    
-        assertTrue(resultContains("V 2.0", PropertyIds.VERSION_LABEL, res));
-    }
-    
-    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())
-            log.debug("Found matching object: " + od.getProperties().getProperties().get(PropertyIds.NAME).getFirstValue());
-        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 boolean resultContains(String name, String propId, ObjectList results) {
-        for (ObjectData od : results.getObjects()) {
-            String nameProp = (String) od.getProperties().getProperties().get(propId).getFirstValue();
-            if (name.equals(nameProp))
-                return true;
-        }
-        return false;
-    }
-
-    private boolean resultContains(String name, ObjectList results) {
-        return resultContains(name, PropertyIds.NAME, results);
-    }
-
-    private 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);
-    }
-}
+/*
+ * 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_INT;
+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 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.enums.IncludeRelationships;
+import org.apache.chemistry.opencmis.inmemory.AbstractServiceTst;
+import org.apache.chemistry.opencmis.inmemory.UnitTestTypeSystemCreator;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class EvalQueryTest extends AbstractServiceTst {
+    
+    private static Log log = LogFactory.getLog(EvalQueryTest.class);
+    private QueryTestDataCreator dataCreator;
+    
+    @Before
+    public void setUp() throws Exception {
+
+        // 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();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    @Test
+    public void testAll() {
+        String statement = "SELECT * FROM cmis:document";
+        ObjectList res = doQuery(statement);
+        assertEquals(5, res.getObjects().size());
+        assertTrue(resultContains("alpha", res));
+        assertFalse(resultContains("jens", res));
+    }
+    
+    //////////////////////////////////////////////////////////////////////
+    // Boolean tests
+    
+    @Test
+    public void 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));        
+    }
+    
+    @Test
+    public void 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));        
+    }
+    
+    //////////////////////////////////////////////////////////////////////
+    // Integer tests
+    
+    @Test
+    public void 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));        
+    }
+    
+    @Test
+    public void 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));        
+    }
+
+    @Test
+    public void 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));        
+    }
+
+    @Test
+    public void 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));        
+    }
+    
+    @Test
+    public void 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));        
+    }
+
+    @Test
+    public void 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));        
+    }
+
+    //////////////////////////////////////////////////////////////////////
+    // Decimal tests
+    
+    @Test
+    public void 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));        
+    }
+    
+    @Test
+    public void 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));        
+    }
+
+    @Test
+    public void 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));        
+    }
+
+    @Test
+    public void 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));        
+    }
+    
+    @Test
+    public void 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));        
+    }
+
+    @Test
+    public void 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));        
+    }
+    
+    //////////////////////////////////////////////////////////////////////
+    // DateTime tests
+    
+    @Test
+    public void 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));        
+    }
+    
+    @Test
+    public void 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));        
+    }
+
+    @Test
+    public void 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));        
+    }
+
+    @Test
+    public void 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));        
+    }
+
+    @Test
+    public void testDategreater() {
+        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));        
+    }
+
+    //    @Test
+    public void 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));        
+    }
+    
+    ////////////////////////////////////////////////////////////////////
+    // String tests
+
+    @Test
+    public void 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));        
+    }
+    
+    @Test
+    public void 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));        
+    }
+
+    @Test
+    public void 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));        
+    }
+
+    @Test
+    public void 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));        
+    }
+    
+    @Test
+    public void 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));        
+    }
+    
+    @Test
+    public void 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));        
+    }
+
+    ////////////////////////////////////////////////////////////////////
+    // Boolean condition tests
+    
+    @Test
+    public void 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());
+    }
+
+    @Test
+    public void 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));        
+    }
+
+    @Test
+    public void 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));        
+    }
+
+    @Test
+    public void 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));
+}
+
+    @Test
+    public void 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));
+}
+
+    @Test
+    public void 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));
+    }
+
+    @Test
+    public void 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));
+    }
+
+    @Test
+    public void 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));
+}
+
+    @Test
+    public void 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));        
+    }
+    
+    @Test
+    public void 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));        
+    }
+    
+    @Test
+    public void 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);
+    }
+    
+    @Test
+    public void 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));        
+    }
+
+    @Test
+    public void 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));    
+    }
+    
+    @Test
+    public void 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("must be in FROM list"));
+            log.debug("expected Exception: " + e);
+        }
+    }
+
+    @Test
+    public void 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("must be in FROM list"));
+            log.debug("expected Exception: " + e);
+        }
+    }
+    
+    @Test
+    public void testIn() {
+        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());
+    }
+    
+    @Test
+    public void 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));    
+    }
+    
+    @Test
+    public void testMultiValueInAny() {
+        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());
+    }
+    
+    @Test
+    public void 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));    
+    }
+
+    @Test
+    public void 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 {
+            res = 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);
+        }
+    }
+    
+    @Test 
+    public void testVersionsWithQuery() {
+        String id = dataCreator.createVersionedDocument();
+        assertNotNull(id);
+        String statement = "SELECT * FROM " + UnitTestTypeSystemCreator.VERSION_DOCUMENT_TYPE_ID;
+        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("V 1.0", PropertyIds.VERSION_LABEL, res));
+        assertTrue(resultContains("V 2.0", PropertyIds.VERSION_LABEL, res));
+        
+        res = doQuery(statement);
+        assertEquals(1, res.getObjects().size());
+        assertFalse(resultContains("V 1.0", PropertyIds.VERSION_LABEL, res));    
+        assertTrue(resultContains("V 2.0", PropertyIds.VERSION_LABEL, res));
+    }
+    
+    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())
+            log.debug("Found matching object: " + od.getProperties().getProperties().get(PropertyIds.NAME).getFirstValue());
+        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 boolean resultContains(String name, String propId, ObjectList results) {
+        for (ObjectData od : results.getObjects()) {
+            String nameProp = (String) od.getProperties().getProperties().get(propId).getFirstValue();
+            if (name.equals(nameProp))
+                return true;
+        }
+        return false;
+    }
+
+    private boolean resultContains(String name, ObjectList results) {
+        return resultContains(name, PropertyIds.NAME, results);
+    }
+
+    private 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);
+    }
+}

Propchange: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/test/java/org/apache/chemistry/opencmis/inmemory/query/EvalQueryTest.java
------------------------------------------------------------------------------
    svn:eol-style = native