Package org.apache.ojb.broker.sqlcount

Source Code of org.apache.ojb.broker.sqlcount.CollectionCountTest

/*
* (C) 2003 ppi Media
* User: om
*/

package org.apache.ojb.broker.sqlcount;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import org.apache.ojb.broker.Article;
import org.apache.ojb.broker.Identity;
import org.apache.ojb.broker.InterfaceArticle;
import org.apache.ojb.broker.InterfaceProductGroup;
import org.apache.ojb.broker.PersistenceBroker;
import org.apache.ojb.broker.PersistenceBrokerFactory;
import org.apache.ojb.broker.Person;
import org.apache.ojb.broker.ProductGroup;
import org.apache.ojb.broker.Project;
import org.apache.ojb.broker.metadata.ClassDescriptor;
import org.apache.ojb.broker.query.Criteria;
import org.apache.ojb.broker.query.Query;
import org.apache.ojb.broker.query.QueryByCriteria;
import org.apache.ojb.broker.query.QueryFactory;
import org.apache.ojb.broker.util.ObjectModification;

/**
* @author <a href="mailto:om@ppi.de">Oliver Matz</a>
* @version $Id: CollectionCountTest.java,v 1.9.2.1 2005/10/10 00:35:43 arminw Exp $
*/
public class CollectionCountTest extends AbstractCountTest
{
  protected PersistenceBroker myPB;

  protected void setUp() throws Exception
  {
    super.setUp();
    myPB = PersistenceBrokerFactory.defaultPersistenceBroker();
  }

  protected void tearDown() throws Exception
  {
    if ((myPB != null) && !myPB.isClosed())
    {
      myPB.close();
    }
    super.tearDown();
  }

  /**
   * retrieve all product groups.
   */
  public void testAllProductGroups()
  {
    resetStmtCount();
    myPB.clearCache();
    myPB.beginTransaction();
    Query qry = new QueryByCriteria(ProductGroup.class, null);
    assertStmtCount("preparation", 0);
    Iterator iter = myPB.getIteratorByQuery(qry);
    assertStmtCount("getIteratorByQuery", 1);
    while (iter.hasNext())
    {
      resetStmtCount();
      InterfaceProductGroup next = (InterfaceProductGroup) iter.next();
      assertStmtCount("next", 0);
      List articles = next.getAllArticles();
      // SELECT ... FROM Kategorien
      // SELECT ... FROM Artikel
      // SELECT ... FROM BOOKS
      // SELECT ... FROM CDS
      assertStmtCount("getAllArticles", 4);
    }
    myPB.commitTransaction();
  }

  /**
   * retrieve Product group number 5 and its 12 articles
   */
  public void testProductGroup5()
  {
    resetStmtCount();
    myPB.clearCache();
    myPB.beginTransaction();
    ProductGroup pg =
            (ProductGroup)myPB.getObjectByIdentity(new Identity(null, ProductGroup.class, new Object[] {new Integer(5)}));
    assertStmtCount("getObjectByIdentity", 4);
    resetStmtCount();
    List articles = pg.getAllArticles();
    assertEquals(12, articles.size());
    assertStmtCount("getAllArticles", 0);
    resetStmtCount();
    for (Iterator articleIterator = articles.iterator(); articleIterator.hasNext(); )
    {
      InterfaceArticle article = (InterfaceArticle)articleIterator.next();
      logger.info("articleId " + article.getArticleId());
      // SELECT ... FROM Artikel WHERE Artikel_Nr = ...
    }
    assertStmtCount("collect ids: ", 1)// batch retrieval!
    resetStmtCount();
    String str = pg.toString();
    // SELECT ... FROM Kategorien WHERE Kategorie_Nr = '5'
    // SELECT ... FROM Artikel A0 WHERE Kategorie_Nr =  '5'
    // SELECT ... FROM BOOKS A0   WHERE Kategorie_Nr =  '5'
    // SELECT ... FROM CDS A0     WHERE Kategorie_Nr =  '5'
    assertStmtCount("toString", 4);
    logger.info(str);
    myPB.commitTransaction();
  }

  /*
  * insert a person with an empty project collection.
  * note: the <em>first</em> Person and Project require extra lookups
  * in the table OJB_HL_SEQ.
  */
  public void testPersonEmptyProjectsInsert()
  {
    resetStmtCount();
    myPB.clearCache();
    myPB.beginTransaction();
    Person pers = new Person();
    myPB.store(pers);
    //SELECT A0.VERSION,A0.GRAB_SIZE,A0.MAX_KEY,A0.FIELDNAME,A0.TABLENAME FROM OJB_HL_SEQ A0 WHERE (A0.TABLENAME LIKE  'SEQ_PERSON' ) AND A0.FIELDNAME LIKE  'ID'
    //SELECT VERSION,GRAB_SIZE,MAX_KEY,FIELDNAME,TABLENAME FROM OJB_HL_SEQ WHERE TABLENAME = 'SEQ_PERSON'  AND FIELDNAME = 'ID'
    //UPDATE OJB_HL_SEQ SET MAX_KEY='150',GRAB_SIZE='20',VERSION='7' WHERE TABLENAME = 'SEQ_PERSON'  AND FIELDNAME = 'ID'  AND VERSION = '6'
    // commit|
    //SELECT LASTNAME,FIRSTNAME,ID FROM PERSON WHERE ID = '131'
    //INSERT INTO PERSON (ID,FIRSTNAME,LASTNAME) VALUES ('131','','')
    logStmtCount("Storing first person")// 6. oma: why so many? double lookup in OJB_HL_SEQ !
    resetStmtCount();
    pers = new Person();
    myPB.store(pers, ObjectModification.INSERT);
    myPB.commitTransaction();
    // INSERT INTO PERSON (ID,FIRSTNAME,LASTNAME) VALUES ('172','','')
    // commit
    assertStmtCount("insert second Person with empty collection.", 2);
  }

  /**
   * insert a person with a project collection with one fresh element.
   * note: the <em>first</em> Person and Project require extra lookups
   * in the table OJB_HL_SEQ.
   */
  public void testPersonSingleProjectInsert()
  {
    resetStmtCount();
    myPB.clearCache();
    myPB.beginTransaction();
    Person pers = new Person();
    pers.setFirstname("testPersonSingleProjectInsert(1)");
    Project proj = new Project();
    proj.setTitle("testPersonSingleProjectInsert(1)");
    myPB.store(pers);
    myPB.store(proj);
    logStmtCount("Storing first person and first project");
    // 12. oma: why so many? double lookup in OJB_HL_SEQ !
    resetStmtCount();
    pers = new Person();
    Project proj2 = new Project();
    proj2.setTitle("proj2");
    Collection projects = Arrays.asList(new Project[] {proj2});
    pers.setProjects(projects);
    myPB.store(pers, ObjectModification.INSERT);
    myPB.commitTransaction();
    // INSERT INTO PERSON (ID,FIRSTNAME,LASTNAME) VALUES ('292','','')
    // SELECT TITLE,DESCRIPTION,ID FROM PROJECT WHERE ID = '88'
    // INSERT INTO PROJECT (ID,TITLE,DESCRIPTION) VALUES ('88','proj2','')
    // SELECT PROJECT_ID FROM PERSON_PROJECT WHERE PERSON_ID='292'      // BRJ: check mn-implementor
    // INSERT INTO PERSON_PROJECT (PERSON_ID,PROJECT_ID) VALUES ('292','88')
    // commit|
    assertStmtCount("insert second Person, singleton collection.", 6);
  }


  public void testPrefetched()
  {
      ClassDescriptor cldProductGroup = myPB.getClassDescriptor(ProductGroup.class);
      ClassDescriptor cldArticle = myPB.getClassDescriptor(Article.class);
      Class productGroupProxy = cldProductGroup.getProxyClass();
      Class articleProxy = cldArticle.getProxyClass();

      //
      // use ProductGroup and Articles with disabled Proxy
      //
      cldProductGroup.setProxyClass(null);
      cldProductGroup.setProxyClassName(null);
      cldArticle.setProxyClass(null);
      cldArticle.setProxyClassName(null);

      resetStmtCount();
      myPB.clearCache();


      myPB.beginTransaction();

      Criteria crit = new Criteria();
      crit.addLessOrEqualThan("groupId", new Integer(5));
      QueryByCriteria q = QueryFactory.newQuery(ProductGroup.class, crit);
      q.addOrderByDescending("groupId");
      q.addPrefetchedRelationship("allArticlesInGroup");

      Collection results = myPB.getCollectionByQuery(q);
      assertEquals("Number of ProductGroups", 5, results.size());
      Collection articles = new ArrayList();
      for (Iterator it = results.iterator();it.hasNext();)
      {
          ProductGroup p = (ProductGroup) it.next();
          articles.addAll(p.getAllArticles());
      }
      assertEquals("Total number of Articles", 59, articles.size());

      //SELECT A0.KategorieName,A0.Kategorie_Nr,A0.Beschreibung FROM Kategorien A0 WHERE A0.Kategorie_Nr <=  '5'
      //SELECT ... FROM CDS A0 WHERE A0.Kategorie_Nr IN ( '1' , '4' , '2' , '5' , '3' )
      //SELECT ... FROM Artikel A0 WHERE A0.Kategorie_Nr IN ( '1' , '4' , '2' , '5' , '3' )
      //SELECT ... FROM BOOKS A0 WHERE A0.Kategorie_Nr IN ( '1' , '4' , '2' , '5' , '3' )
      assertStmtCount("Read Prefetched.", 4);
      myPB.commitTransaction();

      //
      // Reset original Proxy settings
      //
      cldProductGroup.setProxyClass(productGroupProxy);
      cldProductGroup.setProxyClassName(productGroupProxy.getName());
      cldArticle.setProxyClass(articleProxy);
      cldArticle.setProxyClassName(articleProxy.getName());

  }

  public void testNonPrefetched()
  {
      ClassDescriptor cldProductGroup = myPB.getClassDescriptor(ProductGroup.class);
      ClassDescriptor cldArticle = myPB.getClassDescriptor(Article.class);
      Class productGroupProxy = cldProductGroup.getProxyClass();
      Class articleProxy = cldArticle.getProxyClass();

      //
      // use ProductGroup and Articles with disabled Proxy
      //
      cldProductGroup.setProxyClass(null);
      cldProductGroup.setProxyClassName(null);
      cldArticle.setProxyClass(null);
      cldArticle.setProxyClassName(null);

      resetStmtCount();
      myPB.clearCache();

      myPB.beginTransaction();

      Criteria crit = new Criteria();
      crit.addLessOrEqualThan("groupId", new Integer(5));
      QueryByCriteria q = QueryFactory.newQuery(ProductGroup.class, crit);
      q.addOrderByDescending("groupId");

      Collection results = myPB.getCollectionByQuery(q);
      assertEquals("Number of ProductGroups", 5, results.size());
      Collection articles = new ArrayList();
      for (Iterator it = results.iterator();it.hasNext();)
      {
          ProductGroup p = (ProductGroup) it.next();
          articles.addAll(p.getAllArticles());
      }
      assertEquals("Total number of Articles", 59, articles.size());

      //SELECT A0.KategorieName,A0.Kategorie_Nr,A0.Beschreibung FROM Kategorien A0 WHERE A0.Kategorie_Nr <=  '5'
      //SELECT ... FROM CDS A0 WHERE A0.Kategorie_Nr =  '5'
      //SELECT ... FROM Artikel A0 WHERE A0.Kategorie_Nr =  '5' 
      //SELECT ... FROM BOOKS A0 WHERE A0.Kategorie_Nr =  '5' 
      //SELECT ... FROM CDS A0 WHERE A0.Kategorie_Nr =  '4'
      //SELECT ... FROM Artikel A0 WHERE A0.Kategorie_Nr =  '4' 
      //SELECT ... FROM BOOKS A0 WHERE A0.Kategorie_Nr =  '4'
      //...
      //SELECT ... FROM CDS A0 WHERE A0.Kategorie_Nr =  '1'
      //SELECT ... FROM Artikel A0 WHERE A0.Kategorie_Nr =  '1' 
      //SELECT ... FROM BOOKS A0 WHERE A0.Kategorie_Nr =  '1' 
      assertStmtCount("Read Non-Prefetched.", 16);
      myPB.commitTransaction();

      //
      // Reset original Proxy settings
      //
      cldProductGroup.setProxyClass(productGroupProxy);
      cldProductGroup.setProxyClassName(productGroupProxy.getName());
      cldArticle.setProxyClass(articleProxy);
      cldArticle.setProxyClassName(articleProxy.getName());

  }

}
TOP

Related Classes of org.apache.ojb.broker.sqlcount.CollectionCountTest

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.