Package jodd.db.oom

Source Code of jodd.db.oom.EntityCacheTest

// Copyright (c) 2003-2014, Jodd Team (jodd.org). All Rights Reserved.

package jodd.db.oom;

import jodd.db.DbHsqldbTestCase;
import jodd.db.DbSession;
import jodd.db.DbThreadSession;
import jodd.db.oom.sqlgen.DbEntitySql;
import jodd.db.oom.tst.Boy;
import jodd.db.oom.tst.Girl2;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.Iterator;
import java.util.List;
import java.util.Set;

import static jodd.db.oom.sqlgen.DbSqlBuilder.sql;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

@SuppressWarnings("SimplifiableJUnitAssertion")
public class EntityCacheTest extends DbHsqldbTestCase {

  public static final String TSQL =
      "select $C{g.id, g.name, g.speciality}, $C{b.*} from " +
      "$T{Girl2 g} join $T{Boy b} on $g.id = $b.girlId " +
      "order by $g.id desc";

  public static final String TSQL_LEFT =
      "select $C{g.id, g.name, g.speciality}, $C{b.*} from " +
      "$T{Girl2 g} left join $T{Boy b} on $g.id = $b.girlId " +
      "order by $g.id desc";


  DbSession dbSession;

  @Override
  @Before
  public void setUp() throws Exception {
    super.setUp();

    DbOomManager.resetAll();
    DbOomManager dbOom = DbOomManager.getInstance();
    dbOom.registerEntity(Girl2.class);
    dbOom.registerEntity(Boy.class);

    dbSession = new DbThreadSession(cp);

    assertEquals(1, DbEntitySql.insert(new Girl2(1, "Anna", "swim")).query().executeUpdate());
    assertEquals(1, DbEntitySql.insert(new Girl2(2, "Sandra", "piano")).query().executeUpdate());
    assertEquals(1, DbEntitySql.insert(new Girl2(3, "Emma", "nothing")).query().executeUpdate());
    assertEquals(1, DbEntitySql.insert(new Boy(1, "Johny", 2)).query().executeUpdate());
    assertEquals(1, DbEntitySql.insert(new Boy(2, "Marco", 2)).query().executeUpdate());
    assertEquals(1, DbEntitySql.insert(new Boy(3, "Hugo", 1)).query().executeUpdate());
  }

  @After
  public void tearDown() throws Exception {
    dbSession.closeSession();
    super.tearDown();
  }

  @Test
  public void testMapRows2Types_useCache_noHints() {
    DbOomQuery q = new DbOomQuery(sql(TSQL));

    List<Object[]> result = q.cacheEntities(true).list(Girl2.class, Boy.class);

    assertEquals(3, result.size());

    Girl2 girl1 = (Girl2) result.get(0)[0];
    Girl2 girl2 = (Girl2) result.get(1)[0];
    Girl2 girl3 = (Girl2) result.get(2)[0];

    assertTrue(girl1.equals(girl2));
    assertTrue(girl1 == girl2);
    assertFalse(girl3 == girl1);

    Boy boy1 = (Boy) result.get(0)[1];
    Boy boy2 = (Boy) result.get(1)[1];
    Boy boy3 = (Boy) result.get(2)[1];

    assertTrue(boy1.id != boy2.id);
    assertFalse(boy1 == boy2);
    assertFalse(boy2 == boy3);

    assertNull(girl1.getBoys());
    assertNull(girl3.getBoys());
  }

  @Test
  public void testMapRows2Types_useCache_noHints_LEFT() {

    DbOomQuery q = new DbOomQuery(sql(TSQL_LEFT));

    List<Object[]> result = q.cacheEntities(true).list(Girl2.class, Boy.class);

    assertEquals(4, result.size());

    Girl2 girl0 = (Girl2) result.get(0)[0];
    Girl2 girl1 = (Girl2) result.get(1)[0];
    Girl2 girl2 = (Girl2) result.get(2)[0];
    Girl2 girl3 = (Girl2) result.get(3)[0];

    assertEquals("Emma", girl0.name);
    assertTrue(girl1.equals(girl2));
    assertTrue(girl1 == girl2);
    assertFalse(girl3 == girl1);

    Boy boy0 = (Boy) result.get(0)[1];
    Boy boy1 = (Boy) result.get(1)[1];
    Boy boy2 = (Boy) result.get(2)[1];
    Boy boy3 = (Boy) result.get(3)[1];

    assertNull(boy0);
    assertTrue(boy1.id != boy2.id);
    assertFalse(boy1 == boy2);
    assertFalse(boy2 == boy3);

    assertNull(girl1.getBoys());
    assertNull(girl3.getBoys());
  }

  @Test
  public void testMapRows2Types_useCache_useHints_1perRow() {
    DbOomQuery q = new DbOomQuery(sql(TSQL));

    List<Girl2> result2 = q.withHints("g", "g.boys").cacheEntities(true).list(Girl2.class, Boy.class);

    assertEquals(3, result2.size());

    Girl2 girl1 = result2.get(0);
    Girl2 girl2 = result2.get(1);
    Girl2 girl3 = result2.get(2);

    assertTrue(girl1.equals(girl2));
    assertTrue(girl1 == girl2);
    assertFalse(girl3 == girl1);

    assertNotNull(girl1.getBoys());
    assertEquals(2, girl1.getBoys().size());

    assertNotNull(girl3.getBoys());
    assertEquals(1, girl3.getBoys().size());
    assertEquals("Hugo", girl3.getBoys().get(0).name);
  }

  @Test
  public void testMapRows2Types_useCache_useHints_1perRow_LEFT() {
    DbOomQuery q = new DbOomQuery(sql(TSQL_LEFT));

    List<Girl2> result2 = q.withHints("g", "g.boys").cacheEntities(true).list(Girl2.class, Boy.class);

    assertEquals(4, result2.size());

    Girl2 girl0 = result2.get(0);
    Girl2 girl1 = result2.get(1);
    Girl2 girl2 = result2.get(2);
    Girl2 girl3 = result2.get(3);

    assertTrue(girl1.equals(girl2));
    assertTrue(girl1 == girl2);
    assertFalse(girl3 == girl1);

    assertNull(girl0.getBoys());
    assertNotNull(girl1.getBoys());
    assertEquals(2, girl1.getBoys().size());

    assertNotNull(girl3.getBoys());
    assertEquals(1, girl3.getBoys().size());
    assertEquals("Hugo", girl3.getBoys().get(0).name);
  }

  @Test
  public void testMapRows2Types_entityAware() {
    DbOomQuery q = new DbOomQuery(sql(TSQL));

    List<Girl2> result2 = q.withHints("g", "g.boys").entityAwareMode(true).list(Girl2.class, Boy.class);

    assertEquals(2, result2.size());

    Girl2 girl1 = result2.get(0);
    Girl2 girl3 = result2.get(1);

    assertNotNull(girl1.getBoys());
    assertEquals(2, girl1.getBoys().size());

    assertNotNull(girl3.getBoys());
    assertEquals(1, girl3.getBoys().size());
  }

  @Test
  public void testMapRows2Types_entityAware_LEFT() {
    DbOomQuery q = new DbOomQuery(sql(TSQL_LEFT));

    List<Girl2> result2 = q.withHints("g", "g.boys").entityAwareMode(true).list(Girl2.class, Boy.class);

    assertEquals(3, result2.size());

    Girl2 girl0 = result2.get(0);
    Girl2 girl1 = result2.get(1);
    Girl2 girl3 = result2.get(2);

    assertNull(girl0.getBoys());

    assertNotNull(girl1.getBoys());
    assertEquals(2, girl1.getBoys().size());

    assertNotNull(girl3.getBoys());
    assertEquals(1, girl3.getBoys().size());
  }

  @Test
  public void testMapRows2Types_entityAware_List() {
    DbOomQuery q = new DbOomQuery(sql(TSQL));

    List<Girl2> result2 = q.withHints("g", "g.boys").entityAwareMode(true).list(1, Girl2.class, Boy.class);

    assertEquals(1, result2.size());

    Girl2 girl1 = result2.get(0);

    assertNotNull(girl1.getBoys());
    assertEquals(2, girl1.getBoys().size());
  }

  @Test
  public void testMapRows2Types_entityAware_List_LEFT() {
    DbOomQuery q = new DbOomQuery(sql(TSQL_LEFT));

    List<Girl2> result2 = q.withHints("g", "g.boys").entityAwareMode(true).list(2, Girl2.class, Boy.class);

    assertEquals(2, result2.size());

    Girl2 girl0 = result2.get(0);
    Girl2 girl1 = result2.get(1);

    assertNull(girl0.getBoys());
    assertNotNull(girl1.getBoys());
    assertEquals(2, girl1.getBoys().size());
  }

  @Test
  public void testMapRows2Types_entityAware_Set() {

    DbOomQuery q = new DbOomQuery(sql(TSQL));

    Set<Girl2> set1 = q.withHints("g", "g.boys").entityAwareMode(true).listSet(Girl2.class, Boy.class);

    assertEquals(2, set1.size());

    for (Girl2 girl : set1) {
      if (girl.id.equals(1)) {
        assertEquals(1, girl.getBoys().size());
      }
      if (girl.id.equals(2)) {
        assertEquals(2, girl.getBoys().size());
      }
    }
  }

  @Test
  public void testMapRows2Types_entityAware_Set_LEFT() {

    DbOomQuery q = new DbOomQuery(sql(TSQL_LEFT));

    Set<Girl2> set1 = q.withHints("g", "g.boys").entityAwareMode(true).listSet(Girl2.class, Boy.class);

    assertEquals(3, set1.size());

    for (Girl2 girl : set1) {
      if (girl.id.equals(1)) {
        assertEquals(1, girl.getBoys().size());
      }
      if (girl.id.equals(2)) {
        assertEquals(2, girl.getBoys().size());
      }
      if (girl.id.equals(3)) {
        assertNull(girl.getBoys());
      }
    }
  }


  @Test
  public void testMapRows2Types_entityAware_Max() {
    DbOomQuery q = new DbOomQuery(sql(TSQL));

    Set<Girl2> set1 = q.withHints("g", "g.boys").entityAwareMode(true).listSet(1, Girl2.class, Boy.class);

    assertEquals(1, set1.size());

    for (Girl2 girl : set1) {
      if (girl.id.equals(2)) {
        assertEquals(2, girl.getBoys().size());
      } else {
        fail();
      }
    }
  }

  @Test
  public void testMapRows2Types_entityAware_Max_LEFT() {
    DbOomQuery q = new DbOomQuery(sql(TSQL_LEFT));

    Set<Girl2> set1 = q.withHints("g", "g.boys").entityAwareMode(true).listSet(2, Girl2.class, Boy.class);

    assertEquals(2, set1.size());

    for (Girl2 girl : set1) {
      if (girl.id.equals(3)) {
        assertNull(girl.getBoys());
      } else if (girl.id.equals(2)) {
        assertEquals(2, girl.getBoys().size());
      } else {
        fail();
      }
    }
  }

  @Test
  public void testMapRows2Types_entityAware_Iterator() {
    DbOomQuery q = new DbOomQuery(sql(TSQL));

    Iterator<Girl2> iterator = q.withHints("g", "g.boys").entityAwareMode(true).iterate(Girl2.class, Boy.class);

    assertTrue(iterator.hasNext());
    assertTrue(iterator.hasNext());
    assertTrue(iterator.hasNext());

    Girl2 girl1 = iterator.next();

    assertNotNull(girl1.getBoys());
    assertEquals(2, girl1.getBoys().size());

    assertTrue(iterator.hasNext());

    Girl2 girl3 = iterator.next();

    assertNotNull(girl3.getBoys());
    assertEquals(1, girl3.getBoys().size());

    assertFalse(iterator.hasNext());
  }

  @Test
  public void testMapRows2Types_entityAware_Iterator_LEFT() {
    DbOomQuery q = new DbOomQuery(sql(TSQL_LEFT));

    Iterator<Girl2> iterator = q.withHints("g", "g.boys").entityAwareMode(true).iterate(Girl2.class, Boy.class);

    assertTrue(iterator.hasNext());

    Girl2 girl0 = iterator.next();
    assertNull(girl0.getBoys());

    Girl2 girl1 = iterator.next();

    assertNotNull(girl1.getBoys());
    assertEquals(2, girl1.getBoys().size());

    assertTrue(iterator.hasNext());

    Girl2 girl3 = iterator.next();

    assertNotNull(girl3.getBoys());
    assertEquals(1, girl3.getBoys().size());

    assertFalse(iterator.hasNext());
  }

  @Test
  public void testMapRows2Types_entityAware_Find() {
    DbOomQuery q = new DbOomQuery(sql(TSQL));

    Girl2 girl1 = q.withHints("g", "g.boys").entityAwareMode(true).find(Girl2.class, Boy.class);

    assertNotNull(girl1.getBoys());
    assertEquals(2, girl1.getBoys().size());
  }

  @Test
  public void testMapRows2Types_entityAware_Find_LEFT() {
    DbOomQuery q = new DbOomQuery(sql(TSQL_LEFT));

    Girl2 girl0 = q.withHints("g", "g.boys").entityAwareMode(true).find(Girl2.class, Boy.class);

    assertNull(girl0.getBoys());
  }

}
TOP

Related Classes of jodd.db.oom.EntityCacheTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.