You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2011/05/03 20:36:34 UTC

svn commit: r1099180 - in /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src: main/java/org/apache/cayenne/exp/ test/java/org/apache/cayenne/exp/ test/java/org/apache/cayenne/query/

Author: aadamchik
Date: Tue May  3 18:36:33 2011
New Revision: 1099180

URL: http://svn.apache.org/viewvc?rev=1099180&view=rev
Log:
CAY-1563 CayenneCase unit tests conversion(3)

patches by Dzmitry Kazimirchyk:
ExpressionFactoryTest (+ refactoring of test locations)

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/ExpressionFactory.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionFactoryTest.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryTest.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/ExpressionFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/ExpressionFactory.java?rev=1099180&r1=1099179&r2=1099180&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/ExpressionFactory.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/exp/ExpressionFactory.java Tue May  3 18:36:33 2011
@@ -176,7 +176,7 @@ public class ExpressionFactory {
      * all lists into LIST expressions. Applied only in path expressions.
      */
     protected static Object wrapPathOperand(Object op) {
-        if (op instanceof Collection) {
+        if (op instanceof Collection<?>) {
             return new ASTList((Collection<?>) op);
         }
         else if (op instanceof Object[]) {

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionFactoryTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionFactoryTest.java?rev=1099180&r1=1099179&r2=1099180&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionFactoryTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/exp/ExpressionFactoryTest.java Tue May  3 18:36:33 2011
@@ -20,26 +20,28 @@
 package org.apache.cayenne.exp;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
-import org.apache.cayenne.Cayenne;
 import org.apache.cayenne.ObjectContext;
-import org.apache.cayenne.Persistent;
+import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.exp.parser.ASTLike;
 import org.apache.cayenne.exp.parser.ASTLikeIgnoreCase;
-import org.apache.cayenne.query.SelectQuery;
-import org.apache.cayenne.query.SortOrder;
 import org.apache.cayenne.testdo.testmap.Artist;
 import org.apache.cayenne.testdo.testmap.Painting;
-import org.apache.cayenne.unit.CayenneCase;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
 
-public class ExpressionFactoryTest extends CayenneCase {
+@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+public class ExpressionFactoryTest extends ServerCase {
 
-    // non-existent type
-    private static final int badType = -50;
+    @Inject
+    private ObjectContext context;
 
     public void testExpressionOfBadType() throws Exception {
+
+        // non existing type
+        int badType = -50;
+
         try {
             ExpressionFactory.expressionOfType(badType);
             fail();
@@ -78,7 +80,7 @@ public class ExpressionFactoryTest exten
         Expression path = (Expression) exp.getOperand(0);
         assertEquals(Expression.OBJ_PATH, path.getType());
     }
-    
+
     public void testNotBetweenDbExp() throws Exception {
         Object v1 = new Object();
         Object v2 = new Object();
@@ -153,9 +155,6 @@ public class ExpressionFactoryTest exten
     }
 
     public void testInExp1() throws Exception {
-        Object[] v = new Object[] {
-                "a", "b"
-        };
         Expression exp = ExpressionFactory.inExp("abc", "a", "b");
         assertEquals(Expression.IN, exp.getType());
     }
@@ -173,7 +172,7 @@ public class ExpressionFactoryTest exten
         Expression exp = ExpressionFactory.inExp("abc", v);
         assertEquals(Expression.FALSE, exp.getType());
     }
-    
+
     public void testLikeExp() throws Exception {
         String v = "abc";
         Expression exp = ExpressionFactory.likeExp("abc", v);
@@ -191,12 +190,12 @@ public class ExpressionFactoryTest exten
         Expression path = (Expression) exp.getOperand(0);
         assertEquals(Expression.DB_PATH, path.getType());
     }
-    
+
     public void testLikeExpEscape() throws Exception {
         String v = "abc";
         Expression exp = ExpressionFactory.likeExp("=abc", v, '=');
         assertEquals(Expression.LIKE, exp.getType());
-        
+
         assertEquals('=', ((ASTLike) exp).getEscapeChar());
 
         Expression path = (Expression) exp.getOperand(0);
@@ -212,7 +211,7 @@ public class ExpressionFactoryTest exten
         Expression path = (Expression) exp.getOperand(0);
         assertEquals(Expression.OBJ_PATH, path.getType());
     }
-    
+
     public void testLikeIgnoreCaseExpEscape() throws Exception {
         String v = "abc";
         Expression exp = ExpressionFactory.likeIgnoreCaseExp("=abc", v, '=');
@@ -237,7 +236,7 @@ public class ExpressionFactoryTest exten
         Expression exp = ExpressionFactory.notLikeIgnoreCaseExp("abc", v);
         assertEquals(Expression.NOT_LIKE_IGNORE_CASE, exp.getType());
     }
-    
+
     // testing CAY-941 bug
     public void testLikeExpNull() throws Exception {
         Expression exp = ExpressionFactory.likeExp("abc", null);
@@ -247,92 +246,50 @@ public class ExpressionFactoryTest exten
         assertEquals(Expression.OBJ_PATH, path.getType());
         assertNull(exp.getOperand(1));
     }
-    
-    //CAY-416
+
+    // CAY-416
     public void testCollectionMatch() {
-        ObjectContext dc = createDataContext();
-        Artist artist = dc.newObject(Artist.class);
-        Painting p1 = dc.newObject(Painting.class), p2 = dc.newObject(Painting.class), 
-            p3 = dc.newObject(Painting.class);
+        Artist artist = context.newObject(Artist.class);
+        Painting p1 = context.newObject(Painting.class), p2 = context
+                .newObject(Painting.class), p3 = context.newObject(Painting.class);
         p1.setPaintingTitle("p1");
         p2.setPaintingTitle("p2");
         p3.setPaintingTitle("p3");
         artist.addToPaintingArray(p1);
         artist.addToPaintingArray(p2);
-        
+
         assertTrue(ExpressionFactory.matchExp("paintingArray", p1).match(artist));
         assertFalse(ExpressionFactory.matchExp("paintingArray", p3).match(artist));
         assertFalse(ExpressionFactory.noMatchExp("paintingArray", p1).match(artist));
         assertTrue(ExpressionFactory.noMatchExp("paintingArray", p3).match(artist));
-        
-        assertTrue(ExpressionFactory.matchExp("paintingArray.paintingTitle", "p1").match(artist));
-        assertFalse(ExpressionFactory.matchExp("paintingArray.paintingTitle", "p3").match(artist));
-        assertFalse(ExpressionFactory.noMatchExp("paintingArray.paintingTitle", "p1").match(artist));
-        assertTrue(ExpressionFactory.noMatchExp("paintingArray.paintingTitle", "p3").match(artist));
-        
+
+        assertTrue(ExpressionFactory.matchExp("paintingArray.paintingTitle", "p1").match(
+                artist));
+        assertFalse(ExpressionFactory
+                .matchExp("paintingArray.paintingTitle", "p3")
+                .match(artist));
+        assertFalse(ExpressionFactory
+                .noMatchExp("paintingArray.paintingTitle", "p1")
+                .match(artist));
+        assertTrue(ExpressionFactory
+                .noMatchExp("paintingArray.paintingTitle", "p3")
+                .match(artist));
+
         assertTrue(ExpressionFactory.inExp("paintingTitle", "p1").match(p1));
         assertFalse(ExpressionFactory.notInExp("paintingTitle", "p3").match(p3));
     }
-    
-    public void testMatchObject() {
-        ObjectContext dc = createDataContext();
-        
-        Artist a1 = dc.newObject(Artist.class);
-        a1.setArtistName("a1");
-        Artist a2 = dc.newObject(Artist.class);
-        a2.setArtistName("a2");
-        Artist a3 = dc.newObject(Artist.class);
-        a3.setArtistName("a3");
-        dc.commitChanges();
-        
-        SelectQuery query = new SelectQuery(Artist.class);
-        
-        query.setQualifier(ExpressionFactory.matchExp(a2));
-        Object res = Cayenne.objectForQuery(dc, query);//exception if >1 result
-        assertSame(res, a2);
-        assertTrue(query.getQualifier().match(res));
-        
-        query.setQualifier(ExpressionFactory.matchAnyExp(a1, a3));
-        query.addOrdering("artistName", SortOrder.ASCENDING);
-        List<Persistent> list = dc.performQuery(query);
-        assertEquals(list.size(), 2);
-        assertSame(list.get(0), a1);
-        assertSame(list.get(1), a3);
-        assertTrue(query.getQualifier().match(a1));
-        assertTrue(query.getQualifier().match(a3));
-        
-        assertEquals(query.getQualifier(), 
-                ExpressionFactory.matchAnyExp(Arrays.asList(a1, a3)));
-    }
-    
+
     public void testIn() {
-        ObjectContext dc = createDataContext();
-        
-        Artist a1 = dc.newObject(Artist.class);
+        Artist a1 = context.newObject(Artist.class);
         a1.setArtistName("a1");
-        Painting p1 = dc.newObject(Painting.class);
+        Painting p1 = context.newObject(Painting.class);
         p1.setPaintingTitle("p1");
-        Painting p2 = dc.newObject(Painting.class);
+        Painting p2 = context.newObject(Painting.class);
         p2.setPaintingTitle("p2");
         a1.addToPaintingArray(p1);
         a1.addToPaintingArray(p2);
-        dc.commitChanges();
-        
+
         Expression in = ExpressionFactory.inExp("paintingArray", p1);
         assertTrue(in.match(a1));
     }
-    
-    /**
-     * Tests INs with more than 1000 elements
-     */
-    public void testLongIn() {
-        //not all adapters strip INs, so we just make sure query with such qualifier fires OK
-        Object[] numbers = new String[2009];
-        for (int i = 0; i < numbers.length; i++) {
-            numbers[i] = "" + i;
-        }
-        
-        SelectQuery query = new SelectQuery(Artist.class, ExpressionFactory.inExp("artistName", numbers));
-        createDataContext().performQuery(query);
-    }
 }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryTest.java?rev=1099180&r1=1099179&r2=1099180&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/query/SelectQueryTest.java Tue May  3 18:36:33 2011
@@ -19,11 +19,14 @@
 
 package org.apache.cayenne.query;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.cayenne.Cayenne;
 import org.apache.cayenne.DataRow;
 import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.Persistent;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.exp.Expression;
 import org.apache.cayenne.exp.ExpressionFactory;
@@ -47,13 +50,13 @@ import org.apache.cayenne.unit.di.server
 public class SelectQueryTest extends ServerCase {
 
     @Inject
-    protected ObjectContext context;
+    private ObjectContext context;
 
     @Inject
-    protected DBHelper dbHelper;
+    private DBHelper dbHelper;
 
     @Inject
-    protected AccessStackAdapter accessStackAdapter;
+    private AccessStackAdapter accessStackAdapter;
 
     @Override
     protected void setUpAfterInjection() throws Exception {
@@ -99,7 +102,7 @@ public class SelectQueryTest extends Ser
         SelectQuery query = new SelectQuery(Artist.class);
         query.setFetchLimit(7);
 
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertNotNull(objects);
         assertEquals(7, objects.size());
     }
@@ -125,7 +128,7 @@ public class SelectQueryTest extends Ser
         DbEntity artistDbEntity = context.getEntityResolver().getDbEntity("ARTIST");
 
         SelectQuery query = new SelectQuery(artistDbEntity);
-        List results = context.performQuery(query);
+        List<?> results = context.performQuery(query);
 
         assertEquals(20, results.size());
         assertTrue(results.get(0) instanceof DataRow);
@@ -149,12 +152,12 @@ public class SelectQueryTest extends Ser
         query.setQualifier(Expression.fromString("db:ARTIST_ID > 3"));
         query.setFetchOffset(5);
 
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         int size = objects.size();
 
         SelectQuery sizeQ = new SelectQuery(Artist.class);
         sizeQ.setQualifier(Expression.fromString("db:ARTIST_ID > 3"));
-        List objects1 = context.performQuery(sizeQ);
+        List<?> objects1 = context.performQuery(sizeQ);
         int sizeAll = objects1.size();
         assertEquals(size, sizeAll - 5);
     }
@@ -164,21 +167,21 @@ public class SelectQueryTest extends Ser
         SelectQuery query = new SelectQuery(Artist.class);
         query.setQualifier(Expression.fromString("db:ARTIST_ID > 3"));
         query.setFetchLimit(7);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(7, objects.size());
     }
 
     public void testSelectAllObjectsRootEntityName() throws Exception {
         createArtistsDataSet();
         SelectQuery query = new SelectQuery("Artist");
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(20, objects.size());
     }
 
     public void testSelectAllObjectsRootClass() throws Exception {
         createArtistsDataSet();
         SelectQuery query = new SelectQuery(Artist.class);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(20, objects.size());
     }
 
@@ -189,7 +192,7 @@ public class SelectQueryTest extends Ser
                 .lookupObjEntity(Artist.class);
         SelectQuery query = new SelectQuery(artistEntity);
 
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(20, objects.size());
     }
 
@@ -198,7 +201,7 @@ public class SelectQueryTest extends Ser
         SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.likeExp("artistName", "artist1");
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(1, objects.size());
     }
 
@@ -207,7 +210,7 @@ public class SelectQueryTest extends Ser
         SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.notLikeExp("artistName", "artist11%");
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(19, objects.size());
     }
 
@@ -218,7 +221,7 @@ public class SelectQueryTest extends Ser
                 "artistName",
                 "aRtIsT11%");
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(19, objects.size());
     }
 
@@ -231,7 +234,7 @@ public class SelectQueryTest extends Ser
         SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.likeExp("artistName", "aRtIsT%");
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(0, objects.size());
     }
 
@@ -240,7 +243,7 @@ public class SelectQueryTest extends Ser
         SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.likeExp("artistName", "artist11%");
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(1, objects.size());
     }
 
@@ -251,7 +254,7 @@ public class SelectQueryTest extends Ser
         SelectQuery query = new SelectQuery(Artist.class);
         query.andQualifier(ExpressionFactory.likeExp("artistName", "=_%", '='));
 
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(1, objects.size());
     }
 
@@ -260,17 +263,19 @@ public class SelectQueryTest extends Ser
         SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.likeExp("artistName", "artist1%");
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(11, objects.size());
     }
 
-    /** Test how "like ignore case" works when using uppercase parameter. */
+    /**
+     * Test how "like ignore case" works when using uppercase parameter.
+     */
     public void testSelectLikeIgnoreCaseObjects1() throws Exception {
         createArtistsDataSet();
         SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.likeIgnoreCaseExp("artistName", "ARTIST%");
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(20, objects.size());
     }
 
@@ -280,7 +285,7 @@ public class SelectQueryTest extends Ser
         SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.likeIgnoreCaseExp("artistName", "artist%");
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(20, objects.size());
     }
 
@@ -291,39 +296,39 @@ public class SelectQueryTest extends Ser
             SelectQuery query = new SelectQuery(ClobTestEntity.class);
             Expression qual = ExpressionFactory.likeIgnoreCaseExp("clobCol", "clob%");
             query.setQualifier(qual);
-            List objects = context.performQuery(query);
+            List<?> objects = context.performQuery(query);
             assertEquals(2, objects.size());
         }
     }
-    
+
     public void testSelectEqualsClob() throws Exception {
         if (accessStackAdapter.supportsLobs()) {
             createClobDataSet();
             SelectQuery query = new SelectQuery(ClobTestEntity.class);
             Expression qual = ExpressionFactory.matchExp("clobCol", "clob1");
             query.setQualifier(qual);
-            List objects = context.performQuery(query);
+            List<?> objects = context.performQuery(query);
             assertEquals(1, objects.size());
         }
     }
-    
+
     public void testSelectNotEqualsClob() throws Exception {
         if (accessStackAdapter.supportsLobs()) {
             createClobDataSet();
             SelectQuery query = new SelectQuery(ClobTestEntity.class);
             Expression qual = ExpressionFactory.noMatchExp("clobCol", "clob1");
             query.setQualifier(qual);
-            List objects = context.performQuery(query);
+            List<?> objects = context.performQuery(query);
             assertEquals(1, objects.size());
         }
     }
-    
+
     public void testSelectIn() throws Exception {
         createArtistsDataSet();
         SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = Expression.fromString("artistName in ('artist1', 'artist2')");
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(2, objects.size());
     }
 
@@ -335,7 +340,7 @@ public class SelectQueryTest extends Ser
         query = query.queryWithParameters(Collections.singletonMap("list", new Object[] {
                 "artist1", "artist2"
         }));
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(2, objects.size());
     }
 
@@ -347,7 +352,7 @@ public class SelectQueryTest extends Ser
         query = query.queryWithParameters(Collections.singletonMap(
                 "list",
                 new Object[] {}));
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(0, objects.size());
     }
 
@@ -359,7 +364,7 @@ public class SelectQueryTest extends Ser
         query = query.queryWithParameters(Collections.singletonMap(
                 "list",
                 new Object[] {}));
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(20, objects.size());
     }
 
@@ -368,7 +373,7 @@ public class SelectQueryTest extends Ser
         SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.inExp("artistName");
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(0, objects.size());
     }
 
@@ -377,7 +382,7 @@ public class SelectQueryTest extends Ser
         SelectQuery query = new SelectQuery(Artist.class);
         Expression qual = ExpressionFactory.notInExp("artistName");
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(20, objects.size());
     }
 
@@ -387,7 +392,7 @@ public class SelectQueryTest extends Ser
         Expression qual = ExpressionFactory.expTrue();
         qual = qual.andExp(ExpressionFactory.matchExp("artistName", "artist1"));
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(1, objects.size());
     }
 
@@ -398,7 +403,7 @@ public class SelectQueryTest extends Ser
         qual = qual.notExp();
         qual = qual.orExp(ExpressionFactory.matchExp("artistName", "artist1"));
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(1, objects.size());
     }
 
@@ -408,7 +413,7 @@ public class SelectQueryTest extends Ser
         Expression qual = ExpressionFactory.expFalse();
         qual = qual.andExp(ExpressionFactory.matchExp("artistName", "artist1"));
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(0, objects.size());
     }
 
@@ -418,7 +423,7 @@ public class SelectQueryTest extends Ser
         Expression qual = ExpressionFactory.expFalse();
         qual = qual.orExp(ExpressionFactory.matchExp("artistName", "artist1"));
         query.setQualifier(qual);
-        List objects = context.performQuery(query);
+        List<?> objects = context.performQuery(query);
         assertEquals(1, objects.size());
     }
 
@@ -541,4 +546,52 @@ public class SelectQueryTest extends Ser
         query.addPrefetch("toGallery");
         context.performQuery(query);
     }
+
+    public void testSelect_MatchObject() {
+
+        Artist a1 = context.newObject(Artist.class);
+        a1.setArtistName("a1");
+        Artist a2 = context.newObject(Artist.class);
+        a2.setArtistName("a2");
+        Artist a3 = context.newObject(Artist.class);
+        a3.setArtistName("a3");
+        context.commitChanges();
+
+        SelectQuery query = new SelectQuery(Artist.class);
+
+        query.setQualifier(ExpressionFactory.matchExp(a2));
+        Object res = Cayenne.objectForQuery(context, query);// exception if >1 result
+        assertSame(res, a2);
+        assertTrue(query.getQualifier().match(res));
+
+        query.setQualifier(ExpressionFactory.matchAnyExp(a1, a3));
+        query.addOrdering("artistName", SortOrder.ASCENDING);
+        List<Persistent> list = context.performQuery(query);
+        assertEquals(list.size(), 2);
+        assertSame(list.get(0), a1);
+        assertSame(list.get(1), a3);
+        assertTrue(query.getQualifier().match(a1));
+        assertTrue(query.getQualifier().match(a3));
+
+        assertEquals(query.getQualifier(), ExpressionFactory.matchAnyExp(Arrays.asList(
+                a1,
+                a3)));
+    }
+
+    /**
+     * Tests INs with more than 1000 elements
+     */
+    public void testSelectLongIn() {
+        // not all adapters strip INs, so we just make sure query with such qualifier
+        // fires OK
+        Object[] numbers = new String[2009];
+        for (int i = 0; i < numbers.length; i++) {
+            numbers[i] = "" + i;
+        }
+
+        SelectQuery query = new SelectQuery(Artist.class, ExpressionFactory.inExp(
+                "artistName",
+                numbers));
+        context.performQuery(query);
+    }
 }