/** * Copyright (C) 2009-2013 FoundationDB, LLC * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.foundationdb.server.test.pt.qp; import com.foundationdb.ais.model.Group; import com.foundationdb.ais.model.TableName; import com.foundationdb.qp.operator.StoreAdapter; import com.foundationdb.qp.rowtype.IndexRowType; import com.foundationdb.qp.rowtype.RowType; import com.foundationdb.qp.rowtype.Schema; import com.foundationdb.qp.util.SchemaCache; import com.foundationdb.server.error.InvalidOperationException; import org.junit.Before; import org.junit.Test; public class InsertProfilePT extends QPProfilePTBase { @Before public void before() throws InvalidOperationException { customer = createTable( "schema", "customer", "cid int not null key", "name varchar(20)," + "index(name)"); order = createTable( "schema", "order", "oid int not null key", "cid int", "salesman varchar(20)", "constraint __akiban_oc foreign key __akiban_oc(cid) references customer(cid)", "index(salesman)"); item = createTable( "schema", "item", "iid int not null key", "oid int", "constraint __akiban_io foreign key __akiban_io(oid) references order(oid)"); address = createTable( "schema", "address", "aid int not null key", "cid int", "address varchar(100)", "constraint __akiban_ac foreign key __akiban_ac(cid) references customer(cid)", "index(address)"); coi = group(customer); TableName groupName = coi.getName(); createLeftGroupIndex(groupName, "name_salesman", "customer.name", "order.salesman"); createLeftGroupIndex(groupName, "name_address", "customer.name", "address.address"); schema = SchemaCache.globalSchema(ais()); customerRowType = schema.tableRowType(table(customer)); orderRowType = schema.tableRowType(table(order)); itemRowType = schema.tableRowType(table(item)); addressRowType = schema.tableRowType(table(address)); customerNameIndexRowType = indexType(customer, "name"); orderSalesmanIndexRowType = indexType(order, "salesman"); itemOidIndexRowType = indexType(item, "oid"); itemIidIndexRowType = indexType(item, "iid"); customerCidIndexRowType = indexType(customer, "cid"); addressAddressIndexRowType = indexType(address, "address"); adapter = newStoreAdapter(); } @Test public void profileGroupScan() { final int CUSTOMERS = 100000000; final int ORDERS_PER_CUSTOMER = 5; final int ITEMS_PER_ORDER = 2; populateDB(CUSTOMERS, ORDERS_PER_CUSTOMER, ITEMS_PER_ORDER); } private void populateDB(int customers, int ordersPerCustomer, int itemsPerOrder) { long cid = 0; long oid = 0; long iid = 0; for (int c = 0; c < customers; c++) { writeRow(customer, cid, String.format("customer %s", cid)); for (int o = 0; o < ordersPerCustomer; o++) { writeRow(order, oid, cid, String.format("salesman %s", oid)); for (int i = 0; i < itemsPerOrder; i++) { writeRow(item, iid, oid); iid++; } oid++; } cid++; } } private int customer; private int order; private int item; private int address; private Group coi; private Schema schema; private RowType customerRowType; private RowType orderRowType; private RowType itemRowType; private RowType addressRowType; private IndexRowType customerNameIndexRowType; private IndexRowType orderSalesmanIndexRowType; private IndexRowType itemOidIndexRowType; private IndexRowType itemIidIndexRowType; private IndexRowType customerCidIndexRowType; private IndexRowType addressAddressIndexRowType; private StoreAdapter adapter; }