/*
* Copyright (C) 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed 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.jboss.errai.jpa.test.client;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import org.jboss.errai.ioc.client.Container;
import org.jboss.errai.ioc.client.container.IOC;
import org.jboss.errai.jpa.client.local.ErraiEntityManager;
import org.jboss.errai.jpa.rebind.ErraiEntityManagerGenerator;
import org.jboss.errai.jpa.test.client.res.JpaClientTestCase;
import org.jboss.errai.jpa.test.entity.Album;
import org.jboss.errai.jpa.test.entity.Artist;
import org.jboss.errai.jpa.test.entity.Format;
import org.jboss.errai.jpa.test.entity.Zentity;
/**
* Tests the query behaviour of Errai JPA.
*
* @author Jonathan Fuerth <jfuerth@gmail.com>
*/
public class QueryTest extends JpaClientTestCase {
@Override
public String getModuleName() {
return "org.jboss.errai.jpa.test.JpaTest";
}
protected EntityManager getEntityManagerAndClearStorageBackend() {
final JpaTestClient testClient = JpaTestClient.INSTANCE;
assertNotNull(testClient);
assertNotNull(testClient.entityManager);
((ErraiEntityManager) testClient.entityManager).removeAll();
return testClient.entityManager;
}
@Override
protected void gwtSetUp() throws Exception {
super.gwtSetUp();
// We need to bootstrap the IoC container manually because GWTTestCase
// doesn't call onModuleLoad() for us.
new Container().bootstrapContainer();
}
@Override
protected void gwtTearDown() throws Exception {
Container.reset();
IOC.reset();
}
/**
* Tests that the entity manager was injected into the testing class. If this
* test fails, the likely cause is that the
* {@link ErraiEntityManagerGenerator} failed to output a compilable class. In
* that case, try re-running this test with
* {@code -Derrai.codegen.permissive=true} and
*/
public void testEntityManagerInjection() throws Exception {
getEntityManagerAndClearStorageBackend(); // has its own assertions
}
public void testNonExistentQuery() throws Exception {
try {
getEntityManagerAndClearStorageBackend().createNamedQuery("DoesNotExist", Object.class);
fail("Expected IllegalArgumentException");
} catch (final IllegalArgumentException e) {
assertTrue(e.getMessage().contains("DoesNotExist"));
}
}
public void testQueryWithWrongResultType() throws Exception {
try {
getEntityManagerAndClearStorageBackend().createNamedQuery("selectAlbumByName", Artist.class);
fail("Expected IllegalArgumentException");
} catch (final IllegalArgumentException e) {
assertTrue(e.getMessage().contains("Artist"));
assertTrue(e.getMessage().contains("Album"));
}
}
public void testSelectAlbumByName() throws Exception {
// make Album
final Album album = new Album();
album.setArtist(null);
album.setName("Let It Be");
album.setReleaseDate(new Date(11012400000L));
// store it and chuck it
final EntityManager em = getEntityManagerAndClearStorageBackend();
em.persist(album);
em.flush();
em.clear();
// now look it up
final TypedQuery<Album> q = em.createNamedQuery("selectAlbumByName", Album.class);
q.setParameter("name", "Let It Be");
final List<Album> fetchedAlbums = q.getResultList();
assertTrue("Expected >0 albums, got " + fetchedAlbums.size(), fetchedAlbums.size() > 0);
for (final Album a : fetchedAlbums) {
assertNotNull(a);
assertEquals("Let It Be", a.getName());
assertNotSame(album, a);
}
}
/**
* Ensures that query results come from the entity manager's persistence
* context (that is, redundant instances are not created).
*/
public void testQueryDrawsFromPersistenceContext() {
// make Album
final Album album = new Album();
album.setArtist(null);
album.setName("The Beatles");
album.setReleaseDate(new Date(11012400000L));
// store it and chuck it
final EntityManager em = getEntityManagerAndClearStorageBackend();
em.persist(album);
em.flush();
final TypedQuery<Album> q = em.createNamedQuery("selectAlbumByName", Album.class);
q.setParameter("name", "The Beatles");
final List<Album> fetchedAlbums = q.getResultList();
// ensure the one result we got was the album that's still in the persistence context
assertEquals(1, fetchedAlbums.size());
assertSame(album, fetchedAlbums.get(0));
}
public void testFilterByPrimitiveBoolean() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentityTrue = new Zentity();
zentityTrue.setPrimitiveBool(true);
em.persist(zentityTrue);
final Zentity zentityFalse = new Zentity();
zentityFalse.setPrimitiveBool(false);
em.persist(zentityFalse);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityPrimitiveBoolean", Zentity.class);
q.setParameter("b", false);
final Zentity fetchedZentityFalse = q.getSingleResult();
assertEquals(zentityFalse.toString(), fetchedZentityFalse.toString());
q.setParameter("b", true);
final Zentity fetchedZentityTrue = q.getSingleResult();
assertEquals(zentityTrue.toString(), fetchedZentityTrue.toString());
}
public void testFilterByString() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentityAbc = new Zentity();
zentityAbc.setString("abc");
em.persist(zentityAbc);
final Zentity zentityDef = new Zentity();
zentityDef.setString("def");
em.persist(zentityDef);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityString", Zentity.class);
q.setParameter("s", "abc");
assertEquals(zentityAbc.toString(), q.getSingleResult().toString());
q.setParameter("s", "def");
assertEquals(zentityDef.toString(), q.getSingleResult().toString());
}
public void testFilterByLiteralString() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("D'oh!");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("def");
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLiteralString", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
}
/**
* This test is being ignored for now because Hibernate does not support the
* JPA2 literal date syntax <tt>{d 'yyyy-mm-dd'}</tt>. It would be possible,
* but trickier than we want, to support date literals in the Hibernate format
* of {@code 'yyyy-mm-dd'}. The workaround is to write queries with named
* parameters in place of literal dates.
*/
@SuppressWarnings("deprecation")
public void IGNOREtestFilterByLiteralDate() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setDate(new Date(112, 5, 22));
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setDate(new Date(115, 0, 1));
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLiteralDate", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
}
public void testFilterByLiteralLong() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveLong(11223344L);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveLong(12345);
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLiteralLong", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
}
public void testFilterByLiteralInteger() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveInt(-55443322);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveInt(12345);
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLiteralInt", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
}
public void testFilterByLiteralShort() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveShort((short) -1234);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveShort((short) 12345);
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLiteralShort", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
}
public void testFilterByLiteralChar() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveChar('c');
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveChar('a');
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLiteralChar", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
}
public void testFilterByLiteralByte() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveByte((byte) -5);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveByte((byte) 123);
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLiteralByte", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
}
public void testFilterByLiteralDouble() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveDouble(123.45);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveDouble(123.0);
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLiteralDouble", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
}
public void testFilterByLiteralFloat() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveFloat(-1234.5f);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveFloat(123.0f);
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLiteralFloat", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
}
public void testFilterDoubleByLiteralInt() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveDouble(12345.0);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveDouble(123.0);
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLiteralDoubleToInt", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
}
public void testFilterByLiteralBool() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveBool(true);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveBool(false);
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLiteralBoolTrue", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
final TypedQuery<Zentity> q2 = em.createNamedQuery("zentityLiteralBoolFalse", Zentity.class);
assertEquals(zentity2.toString(), q2.getSingleResult().toString());
}
public void testFilterByLiteralNull() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString(null);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("this is not null");
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLiteralNull", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
final TypedQuery<Zentity> q2 = em.createNamedQuery("zentityLiteralNotNull", Zentity.class);
assertEquals(zentity2.toString(), q2.getSingleResult().toString());
}
public void testFilterByLiteralEnum() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Album album1 = new Album();
album1.setName("Hey Jude / Revolution");
album1.setFormat(Format.SINGLE);
album1.setReleaseDate(new Date(-42580800000L));
em.persist(album1);
final Album album2 = new Album();
album2.setName("Let It Be");
album2.setFormat(Format.LP);
album2.setReleaseDate(new Date(11012400000L));
em.flush();
final TypedQuery<Album> q = em.createNamedQuery("albumLiteralEnum", Album.class);
assertEquals(album1.toString(), q.getSingleResult().toString());
}
public void testFilterByEntityReference() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Artist beatles = new Artist();
beatles.setId(9L);
beatles.setName("The Beatles");
final Album album1 = new Album();
album1.setArtist(beatles);
album1.setName("Hey Jude / Revolution");
album1.setFormat(Format.SINGLE);
album1.setReleaseDate(new Date(-42580800000L));
final Album album2 = new Album();
album2.setArtist(null);
album2.setName("Marcel Marceau's Greatest Hits");
album2.setFormat(Format.LP);
album2.setReleaseDate(new Date(-32580800000L));
em.persist(beatles);
em.persist(album1);
em.persist(album2);
em.flush();
final TypedQuery<Album> q = em.createNamedQuery("selectAlbumByArtist", Album.class);
// note that Artist doesn't implement equals(), so this test only works as long as album1 is still in the persistence context.
q.setParameter("artist", beatles);
assertEquals(album1.toString(), q.getSingleResult().toString());
}
public void testFilterByNullEntityReference() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Artist beatles = new Artist();
beatles.setId(9L);
beatles.setName("The Beatles");
final Album album1 = new Album();
album1.setArtist(beatles);
album1.setName("Hey Jude / Revolution");
album1.setFormat(Format.SINGLE);
album1.setReleaseDate(new Date(-42580800000L));
final Album album2 = new Album();
album2.setArtist(null);
album2.setName("Marcel Marceau's Greatest Hits");
album2.setFormat(Format.LP);
album2.setReleaseDate(new Date(-32580800000L));
em.persist(beatles);
em.persist(album1);
em.persist(album2);
em.flush();
final TypedQuery<Album> q = em.createNamedQuery("selectAlbumByArtist", Album.class);
q.setParameter("artist", null);
assertTrue(q.getResultList().isEmpty());
}
public void testAnd() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("hello");
zentity1.setPrimitiveInt(555);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("goodbye");
zentity2.setPrimitiveInt(555);
zentity2.setPrimitiveByte((byte) 2);
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityAnd", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
}
public void testOr() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("hello");
zentity1.setPrimitiveInt(555);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("goodbye");
zentity2.setPrimitiveInt(555);
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("goodbye");
zentity3.setPrimitiveInt(556);
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityOr", Zentity.class);
final Set<String> resultStrings = new HashSet<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(2, resultStrings.size());
assertTrue(resultStrings.contains(zentity1.toString()));
assertTrue(resultStrings.contains(zentity2.toString()));
assertFalse(resultStrings.contains(zentity3.toString()));
}
public void testNot() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("goodbye");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("hello");
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityNot", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
}
public void testNestedBooleanLogic() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("hello");
zentity1.setPrimitiveInt(555);
zentity1.setPrimitiveByte((byte) 1);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("goodbye");
zentity2.setPrimitiveInt(555);
zentity2.setPrimitiveByte((byte) 2);
em.persist(zentity2);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityNestedBooleanLogic", Zentity.class);
assertEquals(zentity1.toString(), q.getSingleResult().toString());
}
public void testNumericGreaterThan() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveInt(555);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveInt(556);
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setPrimitiveInt(554);
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityGreaterThan", Zentity.class);
assertEquals(zentity2.toString(), q.getSingleResult().toString());
}
public void testNumericGreaterThanOrEqualTo() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveInt(555);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveInt(556);
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setPrimitiveInt(554);
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityGreaterThanOrEqualTo", Zentity.class);
final Set<String> resultStrings = new HashSet<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(2, resultStrings.size());
assertTrue(resultStrings.contains(zentity1.toString()));
assertTrue(resultStrings.contains(zentity2.toString()));
assertFalse(resultStrings.contains(zentity3.toString()));
}
public void testNumericLessThan() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveInt(555);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveInt(556);
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setPrimitiveInt(554);
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLessThan", Zentity.class);
assertEquals(zentity3.toString(), q.getSingleResult().toString());
}
public void testNumericLessThanOrEqualTo() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveInt(555);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveInt(556);
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setPrimitiveInt(554);
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLessThanOrEqualTo", Zentity.class);
final Set<String> resultStrings = new HashSet<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(2, resultStrings.size());
assertTrue(resultStrings.contains(zentity1.toString()));
assertFalse(resultStrings.contains(zentity2.toString()));
assertTrue(resultStrings.contains(zentity3.toString()));
}
public void testStringGreaterThan() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("hello");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("impostor");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("goodbye");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityStringGreaterThan", Zentity.class);
assertEquals(zentity2.toString(), q.getSingleResult().toString());
}
public void testStringGreaterThanOrEqualTo() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("hello");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("impostor");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("goodbye");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityStringGreaterThanOrEqualTo", Zentity.class);
final Set<String> resultStrings = new HashSet<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(2, resultStrings.size());
assertTrue(resultStrings.contains(zentity1.toString()));
assertTrue(resultStrings.contains(zentity2.toString()));
assertFalse(resultStrings.contains(zentity3.toString()));
}
public void testStringLessThan() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("hello");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("impostor");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("goodbye");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityStringLessThan", Zentity.class);
assertEquals(zentity3.toString(), q.getSingleResult().toString());
}
public void testStringLessThanOrEqualTo() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("hello");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("impostor");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("goodbye");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityStringLessThanOrEqualTo", Zentity.class);
final Set<String> resultStrings = new HashSet<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(2, resultStrings.size());
assertTrue(resultStrings.contains(zentity1.toString()));
assertFalse(resultStrings.contains(zentity2.toString()));
assertTrue(resultStrings.contains(zentity3.toString()));
}
public void testInLiteral() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("hello");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("foo");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("baz");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityInLiteral", Zentity.class);
final Set<String> resultStrings = new HashSet<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(2, resultStrings.size());
assertFalse(resultStrings.contains(zentity1.toString()));
assertTrue(resultStrings.contains(zentity2.toString()));
assertTrue(resultStrings.contains(zentity3.toString()));
}
public void testNotInLiteral() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("hello");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("foo");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("baz");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityNotInLiteral", Zentity.class);
final Set<String> resultStrings = new HashSet<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(1, resultStrings.size());
assertTrue(resultStrings.contains(zentity1.toString()));
assertFalse(resultStrings.contains(zentity2.toString()));
assertFalse(resultStrings.contains(zentity3.toString()));
}
public void testInSingleValuedParams() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("hello");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("foo");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("baz");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityInSingleValuedParams", Zentity.class);
q.setParameter("in1", "foo");
q.setParameter("in2", "bar");
q.setParameter("in3", "baz");
final Set<String> resultStrings = new HashSet<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(2, resultStrings.size());
assertFalse(resultStrings.contains(zentity1.toString()));
assertTrue(resultStrings.contains(zentity2.toString()));
assertTrue(resultStrings.contains(zentity3.toString()));
}
public void testInCollectionParam() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("hello");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("foo");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("baz");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityInCollectionParam", Zentity.class);
q.setParameter("inList", Arrays.asList(new String[] {"hello", "foo", "this one doesn't match"}));
final Set<String> resultStrings = new HashSet<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(2, resultStrings.size());
assertTrue(resultStrings.contains(zentity1.toString()));
assertTrue(resultStrings.contains(zentity2.toString()));
assertFalse(resultStrings.contains(zentity3.toString()));
}
public void testNumericBetween() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setBoxedDouble(1.0);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setBoxedDouble(2.0);
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setBoxedDouble(3.0);
em.persist(zentity3);
final Zentity zentity4 = new Zentity();
zentity4.setBoxedDouble(4.0);
em.persist(zentity4);
final Zentity zentity5 = new Zentity();
zentity5.setBoxedDouble(5.0);
em.persist(zentity5);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityBetween", Zentity.class);
final Set<String> resultStrings = new HashSet<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(3, resultStrings.size());
assertFalse(resultStrings.contains(zentity1.toString()));
assertTrue(resultStrings.contains(zentity2.toString()));
assertTrue(resultStrings.contains(zentity3.toString()));
assertTrue(resultStrings.contains(zentity4.toString()));
assertFalse(resultStrings.contains(zentity5.toString()));
}
public void testNumericNotBetween() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setBoxedDouble(1.0);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setBoxedDouble(2.0);
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setBoxedDouble(3.0);
em.persist(zentity3);
final Zentity zentity4 = new Zentity();
zentity4.setBoxedDouble(4.0);
em.persist(zentity4);
final Zentity zentity5 = new Zentity();
zentity5.setBoxedDouble(5.0);
em.persist(zentity5);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityNotBetween", Zentity.class);
final Set<String> resultStrings = new HashSet<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(2, resultStrings.size());
assertTrue(resultStrings.contains(zentity1.toString()));
assertFalse(resultStrings.contains(zentity2.toString()));
assertFalse(resultStrings.contains(zentity3.toString()));
assertFalse(resultStrings.contains(zentity4.toString()));
assertTrue(resultStrings.contains(zentity5.toString()));
}
public void testNoWhereClauseSelectsEverything() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Album album = new Album();
album.setName("Don't select me!");
em.persist(album);
final Zentity zentity1 = new Zentity();
zentity1.setBoxedDouble(1.0);
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setBoxedDouble(2.0);
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setBoxedDouble(3.0);
em.persist(zentity3);
final Zentity zentity4 = new Zentity();
zentity4.setBoxedDouble(4.0);
em.persist(zentity4);
final Zentity zentity5 = new Zentity();
zentity5.setBoxedDouble(5.0);
em.persist(zentity5);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityNoWhereClause", Zentity.class);
final Set<String> resultStrings = new HashSet<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(5, resultStrings.size());
assertTrue(resultStrings.contains(zentity1.toString()));
assertTrue(resultStrings.contains(zentity2.toString()));
assertTrue(resultStrings.contains(zentity3.toString()));
assertTrue(resultStrings.contains(zentity4.toString()));
assertTrue(resultStrings.contains(zentity5.toString()));
}
public void testOrderByPrimitiveInt() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity5 = new Zentity();
zentity5.setPrimitiveInt(5);
em.persist(zentity5);
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveInt(1);
em.persist(zentity1);
final Zentity zentity3 = new Zentity();
zentity3.setPrimitiveInt(3);
em.persist(zentity3);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveInt(2);
em.persist(zentity2);
final Zentity zentity4 = new Zentity();
zentity4.setPrimitiveInt(4);
em.persist(zentity4);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityOrderByPrimitiveInt", Zentity.class);
final List<String> resultStrings = new ArrayList<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(5, resultStrings.size());
assertEquals(resultStrings.get(0), zentity1.toString());
assertEquals(resultStrings.get(1), zentity2.toString());
assertEquals(resultStrings.get(2), zentity3.toString());
assertEquals(resultStrings.get(3), zentity4.toString());
assertEquals(resultStrings.get(4), zentity5.toString());
}
public void testOrderByPrimitiveIntDesc() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity5 = new Zentity();
zentity5.setPrimitiveInt(5);
em.persist(zentity5);
final Zentity zentity1 = new Zentity();
zentity1.setPrimitiveInt(1);
em.persist(zentity1);
final Zentity zentity3 = new Zentity();
zentity3.setPrimitiveInt(3);
em.persist(zentity3);
final Zentity zentity2 = new Zentity();
zentity2.setPrimitiveInt(2);
em.persist(zentity2);
final Zentity zentity4 = new Zentity();
zentity4.setPrimitiveInt(4);
em.persist(zentity4);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityOrderByPrimitiveIntDesc", Zentity.class);
final List<String> resultStrings = new ArrayList<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(5, resultStrings.size());
assertEquals(resultStrings.get(0), zentity5.toString());
assertEquals(resultStrings.get(1), zentity4.toString());
assertEquals(resultStrings.get(2), zentity3.toString());
assertEquals(resultStrings.get(3), zentity2.toString());
assertEquals(resultStrings.get(4), zentity1.toString());
}
public void testOrderByStringDescThenInt() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity5 = new Zentity();
zentity5.setString("b");
zentity5.setPrimitiveInt(5);
em.persist(zentity5);
final Zentity zentity1 = new Zentity();
zentity1.setString("a");
zentity1.setPrimitiveInt(1);
em.persist(zentity1);
final Zentity zentity3 = new Zentity();
zentity3.setString("a");
zentity3.setPrimitiveInt(3);
em.persist(zentity3);
final Zentity zentity2 = new Zentity();
zentity2.setString("b");
zentity2.setPrimitiveInt(2);
em.persist(zentity2);
final Zentity zentity4 = new Zentity();
zentity4.setString("a");
zentity4.setPrimitiveInt(4);
em.persist(zentity4);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityOrderByStringDescThenInt", Zentity.class);
final List<String> resultStrings = new ArrayList<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(5, resultStrings.size());
assertEquals(resultStrings.get(0), zentity2.toString());
assertEquals(resultStrings.get(1), zentity5.toString());
assertEquals(resultStrings.get(2), zentity1.toString());
assertEquals(resultStrings.get(3), zentity3.toString());
assertEquals(resultStrings.get(4), zentity4.toString());
}
public void testOrderByStringAscThenInt() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity5 = new Zentity();
zentity5.setString("b");
zentity5.setPrimitiveInt(5);
em.persist(zentity5);
final Zentity zentity1 = new Zentity();
zentity1.setString("a");
zentity1.setPrimitiveInt(1);
em.persist(zentity1);
final Zentity zentity3 = new Zentity();
zentity3.setString("a");
zentity3.setPrimitiveInt(3);
em.persist(zentity3);
final Zentity zentity2 = new Zentity();
zentity2.setString("b");
zentity2.setPrimitiveInt(2);
em.persist(zentity2);
final Zentity zentity4 = new Zentity();
zentity4.setString("a");
zentity4.setPrimitiveInt(4);
em.persist(zentity4);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityOrderByStringAscThenInt", Zentity.class);
final List<String> resultStrings = new ArrayList<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(5, resultStrings.size());
assertEquals(resultStrings.get(0), zentity1.toString());
assertEquals(resultStrings.get(1), zentity3.toString());
assertEquals(resultStrings.get(2), zentity4.toString());
assertEquals(resultStrings.get(3), zentity2.toString());
assertEquals(resultStrings.get(4), zentity5.toString());
}
public void testOrderByStringThenInt() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity5 = new Zentity();
zentity5.setString("b");
zentity5.setPrimitiveInt(5);
em.persist(zentity5);
final Zentity zentity1 = new Zentity();
zentity1.setString("a");
zentity1.setPrimitiveInt(1);
em.persist(zentity1);
final Zentity zentity3 = new Zentity();
zentity3.setString("a");
zentity3.setPrimitiveInt(3);
em.persist(zentity3);
final Zentity zentity2 = new Zentity();
zentity2.setString("b");
zentity2.setPrimitiveInt(2);
em.persist(zentity2);
final Zentity zentity4 = new Zentity();
zentity4.setString("a");
zentity4.setPrimitiveInt(4);
em.persist(zentity4);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityOrderByStringThenInt", Zentity.class);
final List<String> resultStrings = new ArrayList<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(5, resultStrings.size());
assertEquals(resultStrings.get(0), zentity1.toString());
assertEquals(resultStrings.get(1), zentity3.toString());
assertEquals(resultStrings.get(2), zentity4.toString());
assertEquals(resultStrings.get(3), zentity2.toString());
assertEquals(resultStrings.get(4), zentity5.toString());
}
public void testOrderByWithNulls() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity5 = new Zentity();
zentity5.setBoxedFloat(5f);
em.persist(zentity5);
final Zentity zentity1 = new Zentity();
zentity1.setBoxedFloat(1f);
em.persist(zentity1);
final Zentity zentity3 = new Zentity();
zentity3.setBoxedFloat(null);
em.persist(zentity3);
final Zentity zentity2 = new Zentity();
zentity2.setBoxedFloat(2f);
em.persist(zentity2);
final Zentity zentity4 = new Zentity();
zentity4.setBoxedFloat(4f);
em.persist(zentity4);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityOrderByBoxedFloat", Zentity.class);
final List<String> resultStrings = new ArrayList<>();
for (final Zentity z : q.getResultList()) {
resultStrings.add(z.toString());
}
assertEquals(5, resultStrings.size());
assertEquals(resultStrings.get(0), zentity3.toString());
assertEquals(resultStrings.get(1), zentity1.toString());
assertEquals(resultStrings.get(2), zentity2.toString());
assertEquals(resultStrings.get(3), zentity4.toString());
assertEquals(resultStrings.get(4), zentity5.toString());
}
public void testLowercaseFunction() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("Foo");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("foo");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("bar");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLowercaseFunction", Zentity.class);
final List<Zentity> results = q.getResultList();
assertEquals(2, results.size());
assertTrue(results.contains(zentity1));
assertTrue(results.contains(zentity2));
}
public void testUppercaseFunction() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("Foo");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("foo");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("bar");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityUppercaseFunction", Zentity.class);
final List<Zentity> results = q.getResultList();
assertEquals(2, results.size());
assertTrue(results.contains(zentity1));
assertTrue(results.contains(zentity2));
}
public void testParamNestedInFunction() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("Foo");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("foo");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("bar");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityParamNestedInFunction", Zentity.class);
q.setParameter("str", "fOO");
final List<Zentity> results = q.getResultList();
assertEquals(1, results.size());
assertTrue(results.contains(zentity2));
}
public void testConcatFunction() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("F");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("f");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("b");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityConcatFunction", Zentity.class);
final List<Zentity> results = q.getResultList();
assertEquals(1, results.size());
assertFalse(results.contains(zentity1));
assertTrue(results.contains(zentity2));
assertFalse(results.contains(zentity3));
}
public void testSubstringFunctionOneArg() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("ala b");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("raffe");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("donkey");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentitySubstringFunctionOneArg", Zentity.class);
q.setParameter("bigStr", "giraffe");
q.setParameter("startPos", 3);
final List<Zentity> results = q.getResultList();
assertEquals(1, results.size());
assertFalse(results.contains(zentity1));
assertTrue(results.contains(zentity2));
assertFalse(results.contains(zentity3));
}
public void testSubstringFunctionTwoArgs() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("ala b");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("raffe");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("donkey");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentitySubstringFunctionTwoArgs", Zentity.class);
q.setParameter("bigStr", "koala bear");
q.setParameter("startPos", 3);
q.setParameter("length", 5);
final List<Zentity> results = q.getResultList();
assertEquals(1, results.size());
assertTrue(results.contains(zentity1));
assertFalse(results.contains(zentity2));
assertFalse(results.contains(zentity3));
}
public void testTrimFunction() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString(" foo ");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString(" foo");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("foo ");
em.persist(zentity3);
final Zentity zentity4 = new Zentity();
zentity4.setString(" bar ");
em.persist(zentity4);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityTrimFunction", Zentity.class);
final List<Zentity> results = q.getResultList();
assertEquals(3, results.size());
assertTrue(results.contains(zentity1));
assertTrue(results.contains(zentity2));
assertTrue(results.contains(zentity3));
assertFalse(results.contains(zentity4));
}
public void testTrimLeadingFunction() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString(" foo ");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString(" foo");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("foo ");
em.persist(zentity3);
final Zentity zentity4 = new Zentity();
zentity4.setString(" bar ");
em.persist(zentity4);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityTrimLeadingFunction", Zentity.class);
final List<Zentity> results = q.getResultList();
assertEquals(1, results.size());
assertFalse(results.contains(zentity1));
assertTrue(results.contains(zentity2));
assertFalse(results.contains(zentity3));
assertFalse(results.contains(zentity4));
}
public void testTrimTrailingFunction() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString(" foo ");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString(" foo");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("foo ");
em.persist(zentity3);
final Zentity zentity4 = new Zentity();
zentity4.setString(" bar ");
em.persist(zentity4);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityTrimTrailingFunction", Zentity.class);
final List<Zentity> results = q.getResultList();
assertEquals(1, results.size());
assertFalse(results.contains(zentity1));
assertFalse(results.contains(zentity2));
assertTrue(results.contains(zentity3));
assertFalse(results.contains(zentity4));
}
public void testTrimTrailingWithCustomPadFunction() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString(" foo ");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString(" foo");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("foo");
em.persist(zentity3);
final Zentity zentity4 = new Zentity();
zentity4.setString(" bar ");
em.persist(zentity4);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityTrimTrailingWithCustomPadFunction", Zentity.class);
final List<Zentity> results = q.getResultList();
assertEquals(1, results.size());
assertFalse(results.contains(zentity1));
assertFalse(results.contains(zentity2));
assertTrue(results.contains(zentity3));
assertFalse(results.contains(zentity4));
}
public void testLengthFunction() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("Foo");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("bar");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("foobar");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLengthFunction", Zentity.class);
final List<Zentity> results = q.getResultList();
assertEquals(2, results.size());
assertTrue(results.contains(zentity1));
assertTrue(results.contains(zentity2));
assertFalse(results.contains(zentity3));
}
public void testLocateFunction2Args() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("Foo");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("bar");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("foobar");
em.persist(zentity3);
final Zentity zentity4 = new Zentity();
zentity4.setString("baboon");
em.persist(zentity4);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLocateFunction2Args", Zentity.class);
q.setParameter("lookFor", "oo");
final List<Zentity> results = q.getResultList();
assertEquals(2, results.size());
assertTrue(results.contains(zentity1));
assertFalse(results.contains(zentity2));
assertTrue(results.contains(zentity3));
assertFalse(results.contains(zentity4));
}
public void testLocateFunction3Args() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("Foo");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("bar");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString("foobar");
em.persist(zentity3);
final Zentity zentity4 = new Zentity();
zentity4.setString("baboon");
em.persist(zentity4);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLocateFunction3Args", Zentity.class);
q.setParameter("lookFor", "oo");
final List<Zentity> results = q.getResultList();
assertEquals(1, results.size());
assertFalse(results.contains(zentity1));
assertFalse(results.contains(zentity2));
assertFalse(results.contains(zentity3));
assertTrue(results.contains(zentity4));
}
public void testLikeOperator() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentityFoo = new Zentity();
zentityFoo.setString("Foo");
em.persist(zentityFoo);
final Zentity zentityfoo = new Zentity();
zentityfoo.setString("foo");
em.persist(zentityfoo);
final Zentity zentitybar = new Zentity();
zentitybar.setString("bar");
em.persist(zentitybar);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLike", Zentity.class);
q.setParameter("str", "f%o");
final List<Zentity> results = q.getResultList();
assertEquals(1, results.size());
assertTrue(results.contains(zentityfoo));
}
public void testLikeOperatorRegexCharsOk() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("!@#$%^&*()_+");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("+_)(*&^%$#@!");
em.persist(zentity2);
final Zentity zentity3 = new Zentity();
zentity3.setString(",./<>?[]{};':\"\\");
em.persist(zentity3);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLike", Zentity.class);
q.setParameter("str", "%(__+");
List<Zentity> results = q.getResultList();
assertEquals(1, results.size());
assertTrue(results.contains(zentity1));
q.setParameter("str", ",./<>?[]{};':\"\\");
results = q.getResultList();
assertEquals(1, results.size());
assertTrue(results.contains(zentity3));
}
public void testNotLikeOperator() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentityFoo = new Zentity();
zentityFoo.setString("Foo");
em.persist(zentityFoo);
final Zentity zentityfoo = new Zentity();
zentityfoo.setString("foo");
em.persist(zentityfoo);
final Zentity zentitybar = new Zentity();
zentitybar.setString("bar");
em.persist(zentitybar);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityNotLike", Zentity.class);
q.setParameter("str", "f%o");
final List<Zentity> results = q.getResultList();
assertEquals(2, results.size());
assertTrue(results.contains(zentityFoo));
assertTrue(results.contains(zentitybar));
}
public void testLikeOperatorWithEscape() {
final EntityManager em = getEntityManagerAndClearStorageBackend();
final Zentity zentity1 = new Zentity();
zentity1.setString("wx%yz");
em.persist(zentity1);
final Zentity zentity2 = new Zentity();
zentity2.setString("wx!yz");
em.persist(zentity2);
final Zentity zentitybar = new Zentity();
zentitybar.setString("bar");
em.persist(zentitybar);
em.flush();
final TypedQuery<Zentity> q = em.createNamedQuery("zentityLikeWithEscapeChar", Zentity.class);
// note that the query sets the escape character for the LIKE expression to 'a'
q.setParameter("str", "wxa%yz");
final List<Zentity> results = q.getResultList();
assertEquals(1, results.size());
assertTrue(results.contains(zentity1));
}
}