Package edu.brown.hstore

Source Code of edu.brown.hstore.TestBatchPlannerCaching

package edu.brown.hstore;

import org.voltdb.ParameterSet;
import org.voltdb.SQLStmt;
import org.voltdb.catalog.Procedure;
import org.voltdb.catalog.Statement;
import org.voltdb.catalog.Table;
import org.voltdb.types.QueryType;

import edu.brown.BaseTestCase;
import edu.brown.benchmark.voter.procedures.Vote;
import edu.brown.catalog.CatalogUtil;
import edu.brown.utils.ProjectType;

/**
* Additional PartitionEstimator Tests
* @author pavlo
*/
public class TestBatchPlannerCaching extends BaseTestCase {

    private static final int NUM_PARTITIONS = 50;

    private SQLStmt batch[];
    private ParameterSet args[];
    private Procedure proc;
    private BatchPlanner planner;
    private BatchPlanner.Debug plannerDebug;
   
    @Override
    protected void setUp() throws Exception {
        super.setUp(ProjectType.VOTER);
        this.addPartitions(NUM_PARTITIONS);

        this.proc = this.getProcedure(Vote.class);
        this.batch = new SQLStmt[this.proc.getStatements().size()-1];
        this.args = new ParameterSet[this.batch.length];
        int i = 0;
        for (Statement stmt : this.proc.getStatements()) {
            // Skip the INSERT query because that's the only one where
            // the partitioning parameter actually matters
            if (stmt.getQuerytype() == QueryType.INSERT.getValue()) continue;
           
            Object params[] = this.randomStatementParameters(stmt);
            this.batch[i] = new SQLStmt(stmt);
            this.args[i] = new ParameterSet(params);
            i += 1;
        } // FOR
       
        this.planner = new BatchPlanner(this.batch, proc, p_estimator);
        this.plannerDebug = this.planner.getDebugContext();
    }
   
    /**
     * testSelectMaterializedView
     */
    public void testSelectMaterializedView() throws Exception {
        Statement stmt = null;
        int stmt_index = -1;
        for (int i = 0; i < this.batch.length; i++) {
            Statement s = this.batch[i].getStatement();
            for (Table tbl : CatalogUtil.getReferencedTables(s)) {
                if (tbl.getMaterializer() != null) {
                    stmt = s;
                    stmt_index = i;
                    break;
                }
            } // FOR
            if (stmt != null) break;
        } // FOR
        assertNotNull(stmt);
        assertTrue(stmt_index >= 0);
           
        // We should be able to get back info we need for a query
        // that accesses a materialized view table
        int result[] = this.plannerDebug.getCachedLookup(stmt_index);
        assertNotNull(stmt.fullName(), result);
        assertEquals(stmt.fullName(), 1, result.length);
        assertTrue(stmt.fullName(), this.plannerDebug.isCachedReadOnly(stmt_index));
        assertFalse(stmt.fullName(), this.plannerDebug.isCachedReplicatedOnly(stmt_index));
    }
   
    /**
     * testSelectReplicated
     */
    public void testSelectReplicated() throws Exception {
        Statement stmt = null;
        int stmt_index = -1;
        for (int i = 0; i < this.batch.length; i++) {
            Statement s = this.batch[i].getStatement();
            boolean replicatedOnly = true;
            for (Table tbl : CatalogUtil.getReferencedTables(s)) {
                if (tbl.getIsreplicated() == false) {
                    replicatedOnly = false;
                    break;
                }
            } // FOR
            if (replicatedOnly) {
                stmt = s;
                stmt_index = i;
                break;
            }
        } // FOR
        assertNotNull(stmt);
        assertTrue(stmt_index >= 0);
           
        // The result is allowed to be null if this stmt only references
        // a replicated table
        int result[] = this.plannerDebug.getCachedLookup(stmt_index);
        assertNull(stmt.fullName(), result);
        assertTrue(stmt.fullName(), this.plannerDebug.isCachedReadOnly(stmt_index));
        assertTrue(stmt.fullName(), this.plannerDebug.isCachedReplicatedOnly(stmt_index));
    }
       
}
TOP

Related Classes of edu.brown.hstore.TestBatchPlannerCaching

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.