1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
|
/*
*
* Derby - Class org.apache.derbyTesting.system.oe.util.OEChecks
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the License.
*/
package org.apache.derbyTesting.system.oe.util;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Connection;
import org.apache.derbyTesting.system.oe.client.Load;
/**
* Do some OEChecks on the Order Entry database.
*/
public class OEChecks {
/**
* How to report an error.
*/
private HandleCheckError errorHandler;
/**
* Warehouse scaling factor
*/
private short scale = 1;
private Connection conn = null;
public void initialize(HandleCheckError errorHandler,
Connection conn, short scale)
throws Exception
{
this.errorHandler = errorHandler;
this.conn = conn;
conn.setAutoCommit(false);
this.scale = scale;
}
/**
* Return suite of tests that OEChecks the row counts for all the tables in
* the Order Entry bechmark.
*/
public void checkAllRowCounts() throws Exception {
testWarehouseRows();
testStockRows();
testItemRows();
testCustomerRows();
testDistrictRows();
testOrdersRows();
testNewOrdersRows();
testOrderLineRows();
testHistoryRows();
}
/**
* Test cardinality of WAREHOUSE table
*
* @throws Exception
*/
public void testWarehouseRows() throws Exception {
checkCountStar("WAREHOUSE", scale);
}
/**
* Test cardinality of STOCK table
*
* @throws Exception
*/
public void testStockRows() throws Exception {
checkCountStar("STOCK", Load.STOCK_COUNT_W * scale);
}
/**
* Test cardinality of ORDERS table
*
* @throws Exception
*/
public void testOrdersRows() throws Exception {
checkCountStar("ORDERS", Load.ORDERS_COUNT_W * scale);
}
/**
* Test cardinality of DISTRICT table
*
* @throws Exception
*/
public void testDistrictRows() throws Exception {
checkCountStar("DISTRICT", Load.DISTRICT_COUNT_W * scale);
}
/**
* Test cardinality of CUSTOMER table
*
* @throws Exception
*/
public void testCustomerRows() throws Exception {
checkCountStar("CUSTOMER", Load.CUSTOMER_COUNT_W * scale);
}
/**
* Test cardinality of ITEM table
*
* @throws Exception
*/
public void testItemRows() throws Exception {
checkCountStar("ITEM", Load.ITEM_COUNT);
}
/**
* Test cardinality of NEWORDERS table
*
* @throws Exception
*/
public void testNewOrdersRows() throws Exception {
checkCountStar("NEWORDERS", Load.NEWORDERS_COUNT_W * scale);
}
/**
* Test cardinality of HISTORY table
*
* @throws Exception
*/
public void testHistoryRows() throws Exception {
checkCountStar("HISTORY", Load.HISTORY_COUNT_W * scale);
}
/**
* Test cardinality of ORDERLINE table
*
* @throws Exception
*/
public void testOrderLineRows() throws Exception {
checkWithinOnePercent("ORDERLINE", Load.ORDERLINE_COUNT_WV * scale);
}
/**
* Check if number of rows in table is as expected
*
* @param table -
* table on which to execute the query
* @param expected -
* expected number of rows
* @throws Exception
*/
private void checkCountStar(String table, int expected) throws Exception {
if( expected != rowsInTable(table))
errorHandler.handleCheckError("ERROR:Number of rows loaded for " + table +
" not correct, expected="+expected +" rows found="+
rowsInTable(table));
}
/**
* Return the number of rows in the table. A simple select count(*) from
* tableName
*
* @param tableName -
* name of the table
* @throws SQLException
*/
private int rowsInTable(String tableName) throws SQLException {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM " + tableName);
rs.next();
int count = rs.getInt(1);
conn.commit();
rs.close();
stmt.close();
return count;
}
/**
* Check if number of rows in table is within one percent of expected value
*
* @param tableName -
* table on which to execute the query
* @param expected -
* expected number of rows
* @throws Exception
*/
private void checkWithinOnePercent(String tableName, int expected)
throws Exception {
double count = rowsInTable(tableName);
double low = ((double) expected) * 0.99;
double high = ((double) expected) * 1.01;
if ( (count < low) || (count >high))
errorHandler.handleCheckError("ERROR! Initial rows" + count + " in " +
tableName + " is out of range.[" + low + "-" + high + "]");
}
}
|