// Clear MDB Statistics
MDBStats.getInstance().reset();
// Reset Trade
RunStatsDataBean runStatsData = new RunStatsDataBean();
Connection conn = null;
try {
if (Log.doTrace())
Log.traceEnter("TradeDBManagerImpl:resetTrade deleteAll rows=" + deleteAll);
conn = getConn();
PreparedStatement stmt = null;
ResultSet rs = null;
if (deleteAll) {
try {
stmt = getStatement(conn, "delete from quoteejb");
stmt.executeUpdate();
stmt.close();
stmt = getStatement(conn, "delete from accountejb");
stmt.executeUpdate();
stmt.close();
stmt = getStatement(conn, "delete from accountprofileejb");
stmt.executeUpdate();
stmt.close();
stmt = getStatement(conn, "delete from holdingejb");
stmt.executeUpdate();
stmt.close();
stmt = getStatement(conn, "delete from orderejb");
stmt.executeUpdate();
stmt.close();
// FUTURE: - DuplicateKeyException - For now, don't start at
// zero as KeySequenceDirect and KeySequenceBean will still
// give out
// the cached Block and then notice this change. Better
// solution is
// to signal both classes to drop their cached blocks
// stmt = getStatement(conn, "delete from keygenejb");
// stmt.executeUpdate();
// stmt.close();
commit(conn);
}
catch (Exception e) {
Log.error(e, "TradeDBManagerImpl:resetTrade(deleteAll) -- Error deleting Trade users and stock from the Trade database");
}
return runStatsData;
}
stmt = getStatement(conn, "delete from holdingejb where holdingejb.account_accountid is null");
stmt.executeUpdate();
stmt.close();
// Count and Delete newly registered users (users w/ id that start
// "ru:%":
stmt = getStatement(conn, "delete from accountprofileejb where userid like 'ru:%'");
stmt.executeUpdate();
stmt.close();
stmt = getStatement(conn,
"delete from orderejb where account_accountid in (select accountid from accountejb a where a.profile_userid like 'ru:%')");
stmt.executeUpdate();
stmt.close();
stmt = getStatement(conn,
"delete from holdingejb where account_accountid in (select accountid from accountejb a where a.profile_userid like 'ru:%')");
stmt.executeUpdate();
stmt.close();
stmt = getStatement(conn, "delete from accountejb where profile_userid like 'ru:%'");
int newUserCount = stmt.executeUpdate();
runStatsData.setNewUserCount(newUserCount);
stmt.close();
// Count of trade users
stmt = getStatement(conn,
"select count(accountid) as \"tradeUserCount\" from accountejb a where a.profile_userid like 'uid:%'");
rs = stmt.executeQuery();
rs.next();
int tradeUserCount = rs.getInt("tradeUserCount");
runStatsData.setTradeUserCount(tradeUserCount);
stmt.close();
rs.close();
// Count of trade stocks
stmt = getStatement(conn,
"select count(symbol) as \"tradeStockCount\" from quoteejb a where a.symbol like 's:%'");
rs = stmt.executeQuery();
rs.next();
int tradeStockCount = rs.getInt("tradeStockCount");
runStatsData.setTradeStockCount(tradeStockCount);
stmt.close();
// Count of trade users login, logout
stmt = getStatement(conn,
"select sum(loginCount) as \"sumLoginCount\", sum(logoutCount) as \"sumLogoutCount\" from accountejb a where a.profile_userID like 'uid:%'");
rs = stmt.executeQuery();
rs.next();
int sumLoginCount = rs.getInt("sumLoginCount");
int sumLogoutCount = rs.getInt("sumLogoutCount");
runStatsData.setSumLoginCount(sumLoginCount);
runStatsData.setSumLogoutCount(sumLogoutCount);
stmt.close();
rs.close();
// Update logoutcount and loginCount back to zero
stmt =
getStatement(conn, "update accountejb set logoutCount=0,loginCount=0 where profile_userID like 'uid:%'");
stmt.executeUpdate();
stmt.close();
// count holdings for trade users
stmt = getStatement(conn,
"select count(holdingid) as \"holdingCount\" from holdingejb h where h.account_accountid in "
+ "(select accountid from accountejb a where a.profile_userid like 'uid:%')");
rs = stmt.executeQuery();
rs.next();
int holdingCount = rs.getInt("holdingCount");
runStatsData.setHoldingCount(holdingCount);
stmt.close();
rs.close();
// count orders for trade users
stmt = getStatement(conn,
"select count(orderid) as \"orderCount\" from orderejb o where o.account_accountid in "
+ "(select accountid from accountejb a where a.profile_userid like 'uid:%')");
rs = stmt.executeQuery();
rs.next();
int orderCount = rs.getInt("orderCount");
runStatsData.setOrderCount(orderCount);
stmt.close();
rs.close();
// count orders by type for trade users
stmt = getStatement(conn,
"select count(orderid) \"buyOrderCount\"from orderejb o where (o.account_accountid in "
+ "(select accountid from accountejb a where a.profile_userid like 'uid:%')) AND "
+ " (o.orderType='buy')");
rs = stmt.executeQuery();
rs.next();
int buyOrderCount = rs.getInt("buyOrderCount");
runStatsData.setBuyOrderCount(buyOrderCount);
stmt.close();
rs.close();
// count orders by type for trade users
stmt = getStatement(conn,
"select count(orderid) \"sellOrderCount\"from orderejb o where (o.account_accountid in "
+ "(select accountid from accountejb a where a.profile_userid like 'uid:%')) AND "
+ " (o.orderType='sell')");
rs = stmt.executeQuery();
rs.next();
int sellOrderCount = rs.getInt("sellOrderCount");
runStatsData.setSellOrderCount(sellOrderCount);
stmt.close();
rs.close();
// Delete cancelled orders
stmt = getStatement(conn, "delete from orderejb where orderStatus='cancelled'");
int cancelledOrderCount = stmt.executeUpdate();
runStatsData.setCancelledOrderCount(cancelledOrderCount);
stmt.close();
rs.close();
// count open orders by type for trade users
stmt = getStatement(conn,
"select count(orderid) \"openOrderCount\"from orderejb o where (o.account_accountid in "
+ "(select accountid from accountejb a where a.profile_userid like 'uid:%')) AND "
+ " (o.orderStatus='open')");
rs = stmt.executeQuery();
rs.next();
int openOrderCount = rs.getInt("openOrderCount");
runStatsData.setOpenOrderCount(openOrderCount);
stmt.close();
rs.close();
// Delete orders for holding which have been purchased and sold
stmt = getStatement(conn, "delete from orderejb where holding_holdingid is null");
int deletedOrderCount = stmt.executeUpdate();
runStatsData.setDeletedOrderCount(deletedOrderCount);
stmt.close();
rs.close();
commit(conn);