Package org.hibernate.test.queryplan

Source Code of org.hibernate.test.queryplan.GetHqlQueryPlanTest

/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2010, Red Hat Middleware LLC or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors.  All third-party contributions are
* distributed under license by Red Hat Middleware LLC.
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA  02110-1301  USA
*
*/
package org.hibernate.test.queryplan;

import java.util.Map;

import org.hibernate.engine.SessionImplementor;
import org.hibernate.engine.query.HQLQueryPlan;
import org.hibernate.engine.query.QueryPlanCache;
import org.hibernate.testing.junit.functional.FunctionalTestCase;
import org.hibernate.Session;

/**
* Tests for HQL query plans
*
* @author Gail Badner
*/
public class GetHqlQueryPlanTest extends FunctionalTestCase {
  public GetHqlQueryPlanTest(String string) {
    super( string );
  }

  public String[] getMappings() {
    return new String[]{
      "queryplan/filter-defs.hbm.xml",
      "queryplan/Joined.hbm.xml"
    };
  }

  protected Map getEnabledFilters(Session s) {
    return ( ( SessionImplementor ) s ).getLoadQueryInfluencers().getEnabledFilters();
  }

  public void testHqlQueryPlan() {
    Session s = openSession();
    QueryPlanCache cache = ( ( SessionImplementor ) s ).getFactory().getQueryPlanCache();
    assertTrue( getEnabledFilters( s ).isEmpty() );

    HQLQueryPlan plan1 = cache.getHQLQueryPlan( "from Person", false, getEnabledFilters( s ) );
    HQLQueryPlan plan2 = cache.getHQLQueryPlan( "from Person where name is null", false, getEnabledFilters( s ) );
    HQLQueryPlan plan3 = cache.getHQLQueryPlan( "from Person where name = :name", false, getEnabledFilters( s ) );
    HQLQueryPlan plan4 = cache.getHQLQueryPlan( "from Person where name = ?", false, getEnabledFilters( s ) );

    assertNotSame( plan1, plan2 );
    assertNotSame( plan1, plan3 );
    assertNotSame( plan1, plan4 );
    assertNotSame( plan2, plan3 );
    assertNotSame( plan2, plan4 );
    assertNotSame( plan3, plan4 );

    assertSame( plan1, cache.getHQLQueryPlan( "from Person", false, getEnabledFilters( s ) ) );
    assertSame( plan2, cache.getHQLQueryPlan( "from Person where name is null", false, getEnabledFilters( s ) ) );
    assertSame( plan3, cache.getHQLQueryPlan( "from Person where name = :name", false, getEnabledFilters( s ) ) );
    assertSame( plan4, cache.getHQLQueryPlan( "from Person where name = ?", false, getEnabledFilters( s ) ) );

    s.close();
  }

  public void testHqlQueryPlanWithEnabledFilter() {
    Session s = openSession();
    QueryPlanCache cache = ( ( SessionImplementor ) s ).getFactory().getQueryPlanCache();

    HQLQueryPlan plan1A = cache.getHQLQueryPlan( "from Person", true, getEnabledFilters( s ) );
    HQLQueryPlan plan1B = cache.getHQLQueryPlan( "from Person", false, getEnabledFilters( s ) );

    s.enableFilter( "sex" ).setParameter( "sexCode", new Character( 'F' ) );
    HQLQueryPlan plan2A = cache.getHQLQueryPlan( "from Person", true, getEnabledFilters( s ) );
    HQLQueryPlan plan2B = cache.getHQLQueryPlan( "from Person", false, getEnabledFilters( s ) );

    s.disableFilter( "sex" );
    HQLQueryPlan plan3A = cache.getHQLQueryPlan( "from Person", true, getEnabledFilters( s ) );
    HQLQueryPlan plan3B = cache.getHQLQueryPlan( "from Person", false, getEnabledFilters( s ) );

    s.enableFilter( "sex" ).setParameter( "sexCode", new Character( 'M' ) );
    HQLQueryPlan plan4A = cache.getHQLQueryPlan( "from Person", true, getEnabledFilters( s ) );
    HQLQueryPlan plan4B = cache.getHQLQueryPlan( "from Person", false, getEnabledFilters( s ) );

    assertSame( plan1A, plan3A );
    assertSame( plan1B, plan3B );
    assertSame( plan2A, plan4A );
    assertSame( plan2B, plan4B );

    assertNotSame( plan1A, plan1B );
    assertNotSame( plan1A, plan2A );
    assertNotSame( plan1A, plan2B );
    assertNotSame( plan1B, plan2A );
    assertNotSame( plan1B, plan2B );

    s.close();
  }
}
TOP

Related Classes of org.hibernate.test.queryplan.GetHqlQueryPlanTest

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.