You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by dj...@apache.org on 2007/09/13 19:50:55 UTC
svn commit: r575382 - in
/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe:
client/Submitter.java direct/Standard.java schema/altindex.sql
Author: djd
Date: Thu Sep 13 10:50:54 2007
New Revision: 575382
URL: http://svn.apache.org/viewvc?rev=575382&view=rev
Log:
Add some utility methods for the oe system test framework and implement the submitter logic for the new order transaction
Added:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/schema/altindex.sql (with props)
Modified:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/client/Submitter.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/direct/Standard.java
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/client/Submitter.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/client/Submitter.java?rev=575382&r1=575381&r2=575382&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/client/Submitter.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/client/Submitter.java Thu Sep 13 10:50:54 2007
@@ -112,7 +112,7 @@
* Generate a new random number generator
* that follows the rules according to 2.1.6.1
* @param conn
- * @return random number generator
+ * @return
* @throws SQLException
*/
public static OERandom getRuntimeRandom(Connection conn)
@@ -141,10 +141,111 @@
return rand;
}
-
+
+ /**
+ * Return a Submitter than only executes stock level transactions.
+ */
+ public static Submitter stockLevelOnly(Display display,
+ Operations ops, OERandom rand,
+ short maxW)
+ {
+ return new Submitter(display, ops, rand, maxW)
+ {
+ protected int mixType(final int chooseType)
+ {
+ return Submitter.STOCK_LEVEL;
+ }
+ };
+ }
+ /**
+ * Return a Submitter than only executes order
+ * status by identifier transactions.
+ */
+ public static Submitter orderStatusByIdOnly(Display display,
+ Operations ops, OERandom rand,
+ short maxW)
+ {
+ return new Submitter(display, ops, rand, maxW)
+ {
+ protected int mixType(final int chooseType)
+ {
+ return Submitter.ORDER_STATUS_BY_ID;
+ }
+ };
+ }
+ /**
+ * Return a Submitter than only executes order
+ * status by name transactions.
+ */
+ public static Submitter orderStatusByNameOnly(Display display,
+ Operations ops, OERandom rand,
+ short maxW)
+ {
+ return new Submitter(display, ops, rand, maxW)
+ {
+ protected int mixType(final int chooseType)
+ {
+ return Submitter.ORDER_STATUS_BY_NAME;
+ }
+ };
+ }
+ /**
+ * Return a Submitter than only executes payment
+ * by identifier transactions.
+ */
+ public static Submitter paymentByIdOnly(Display display,
+ Operations ops, OERandom rand,
+ short maxW)
+ {
+ return new Submitter(display, ops, rand, maxW)
+ {
+ protected int mixType(final int chooseType)
+ {
+ return Submitter.PAYMENT_BY_ID;
+ }
+ };
+ }
+ /**
+ * Return a Submitter than only executes payment
+ * by name transactions.
+ */
+ public static Submitter paymentByNameOnly(Display display,
+ Operations ops, OERandom rand,
+ short maxW)
+ {
+ return new Submitter(display, ops, rand, maxW)
+ {
+ protected int mixType(final int chooseType)
+ {
+ return Submitter.PAYMENT_BY_NAME;
+ }
+ };
+ }
+ /**
+ * Return a Submitter than only executes new order
+ * transactions with no rollback
+ */
+ public static Submitter newOrderOnly(Display display,
+ Operations ops, OERandom rand,
+ short maxW)
+ {
+ return new Submitter(display, ops, rand, maxW)
+ {
+ protected int mixType(final int chooseType)
+ {
+ return Submitter.NEW_ORDER;
+ }
+ };
+ }
+
+ /**
+ * Create a submitter that has a fixed mix of transactions
+ * at input time.
+ *
+ * @see Submitter#mixType(int)
+ */
public Submitter(Display display, Operations ops, OERandom rand,
short maxW)
- throws Exception
{
this.display = display;
this.ops = ops;
@@ -255,8 +356,54 @@
}
}
- protected void runNewOrder(Object displayData, boolean forRollback) {
- // TODO Auto-generated method stub
+ protected void runNewOrder(Object displayData, boolean forRollback)
+ throws Exception
+ {
+ short homeWarehouse = warehouse();
+
+ final int orderItemCount = rand.randomInt(5, 15);
+
+ int[] items = new int[orderItemCount];
+ short[] quantities = new short[orderItemCount];
+ short[] supplyW = new short[orderItemCount];
+
+ for (int i = 0; i < orderItemCount; i++)
+ {
+ // Section 2.4.1.5
+
+ // 1)
+ items[i] = rand.NURand8191();
+
+ // 2)
+ if (maxW == 1 || rand.randomInt(1, 100) > 1)
+ {
+ supplyW[i] = homeWarehouse;
+ }
+ else
+ {
+ short sw = warehouse();
+ while (sw == homeWarehouse)
+ sw = warehouse();
+ supplyW[i] = sw;
+ }
+ supplyW[i] = rand.randomInt(1, 100) > 1 ?
+ homeWarehouse : warehouse();
+
+ // 3)
+ quantities[i] = (short) rand.randomInt(1, 10);
+ }
+
+ // Section 2.4.1.4
+ if (forRollback)
+ {
+ items[orderItemCount] = 2334432;
+ }
+
+ ops.newOrder(display, displayData,
+ homeWarehouse, rand.district(),
+ rand.NURand1023(),
+ items, quantities, supplyW);
+
}
protected void runScheduleDelivery(Object displayData) {
@@ -290,6 +437,8 @@
* @return a random warehouse
*/
private final short warehouse() {
+ if (maxW == 1)
+ return 1;
return (short) rand.randomInt(1, maxW);
}
@@ -341,6 +490,8 @@
out.println(transactionCount("New Order ", noTotal, total));
out.println(transactionCount("Payment ", pyCount, total));
+ out.println(transactionCount(" By Name ", transactionCount[PAYMENT_BY_NAME], total));
+ out.println(transactionCount(" By Identifier ", transactionCount[PAYMENT_BY_ID], total));
out.println(transactionCount("Order Status ", osCount, total));
out.println(transactionCount(" By Name ", transactionCount[ORDER_STATUS_BY_NAME], total));
out.println(transactionCount(" By Identifier ", transactionCount[ORDER_STATUS_BY_ID], total));
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/direct/Standard.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/direct/Standard.java?rev=575382&r1=575381&r2=575382&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/direct/Standard.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/direct/Standard.java Thu Sep 13 10:50:54 2007
@@ -70,6 +70,25 @@
}
/**
+ * Return an Operations implementation based upon
+ * Standard with a single difference. In this implementation
+ * the reset() executed after each PreparedStatement execute
+ * does nothing. Sees if there is any performance impact
+ * of explicitly closing each ResultSet and clearing the
+ * parameters.
+ * <P>
+ * Each ResultSet will be closed implicitly either at commit
+ * time or at the next execution of the same PreparedStatement object.
+ */
+ public static Operations noReset(final Connection conn)
+ throws SQLException
+ {
+ return new Standard(conn) {
+ protected void reset(PreparedStatement ps) {}
+ };
+ }
+
+ /**
* Map of SQL text to its PreparedStatement.
* This allows the SQL text to be in-line with
* code that sets the parameters and looks at
@@ -579,7 +598,6 @@
// provide a different implementation of this class with
// the sort method a no-op.
sortOrderItems(items, quantities, supplyW);
-
try {
// Get the warehouse tax
@@ -587,6 +605,7 @@
"SELECT W_TAX FROM WAREHOUSE WHERE W_ID = ?");
psWarehouseTax.setShort(1, w);
ResultSet rs = psWarehouseTax.executeQuery();
+ rs.next();
BigDecimal warehouseTax = (BigDecimal) rs.getObject(1);
reset(psWarehouseTax);
@@ -929,22 +948,12 @@
* It is assumed the prepared statement was just executed.
* @throws SQLException
*/
- private static void reset(PreparedStatement ps) throws SQLException
+ protected void reset(PreparedStatement ps) throws SQLException
{
ResultSet rs = ps.getResultSet();
if (rs != null)
rs.close();
ps.clearParameters();
- }
-
- /**
- * Close a PreparedStatement if it was opened.
- */
- private static void close(PreparedStatement ps)
- throws SQLException
- {
- if (ps != null)
- ps.close();
}
private Address getAddress(ResultSet rs, String firstColumnName) throws SQLException
Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/schema/altindex.sql
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/schema/altindex.sql?rev=575382&view=auto
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/schema/altindex.sql (added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/schema/altindex.sql Thu Sep 13 10:50:54 2007
@@ -0,0 +1,23 @@
+-- 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.
+;
+
+-- Indexes for the oe transactions when foreign key
+-- constraints are not created or the creation of
+-- foreign key constraints do not automatically create
+-- backing indexes (e.g. not Derby).
+
+-- Required to quickly find the most recent order for a customer
+CREATE INDEX ORDERS_CUSTOMER_STATUS ON ORDERS(O_W_ID, O_D_ID, O_C_ID);
Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/system/oe/schema/altindex.sql
------------------------------------------------------------------------------
svn:eol-style = native