| /* |
| * |
| * 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 + "]"); |
| |
| } |
| |
| } |