package nebula.data.db.dao;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import junit.framework.TestCase;
import nebula.data.Order;
import nebula.data.db.DbConfiguration;
import nebula.lang.NebulaClassLoader;
public class DAOTest extends TestCase {
String driverclass = "org.apache.derby.jdbc.EmbeddedDriver";
String url = "jdbc:derby:memory:eh;create = true";
String username = "user";
String password = "password";
static class SubDbConfiguration extends DbConfiguration {
public SubDbConfiguration(String driverClass, String dbUrl, String userName, String password) {
super(driverClass, dbUrl, userName, password);
}
}
SubDbConfiguration c;
protected void setUp() throws Exception {
c = new SubDbConfiguration(driverclass, url, username, password);
c.openConnection();
Connection conn = c.getConnection();
conn.createStatement().execute("create table NOrder(id INT)");
conn.createStatement().execute("create table NOrder_Detail(order_id INT,seq INT,price INT,count INT,amount INT)");
c.finalize();
}
protected void tearDown() throws Exception {
c = new SubDbConfiguration(driverclass, url, username, password);
c.openConnection();
Connection conn = c.getConnection();
conn.createStatement().execute("drop table NOrder_Detail");
conn.createStatement().execute("drop table NOrder");
c.finalize();
}
public final void testFinalize() {
c = new SubDbConfiguration(driverclass, url, username, password);
c.openConnection();
c.finalize();
}
public final void testDbConfiguration() {
c = new SubDbConfiguration(driverclass, url, username, password);
}
public final void testInitDefaultMapping() {
c = new SubDbConfiguration(driverclass, url, username, password);
c.initDefaultMapping();
}
public final void testOpenConnection() {
c = new SubDbConfiguration(driverclass, url, username, password);
c.openConnection();
c.finalize();
}
public final void testInsertIntoOrder() throws SQLException {
c = new SubDbConfiguration(driverclass, url, username, password);
c.openConnection();
Connection conn = c.getConnection();
conn.createStatement().execute("insert into NOrder values(1)");
conn.createStatement().execute("insert into NOrder values(2)");
conn.createStatement().execute("insert into NOrder values(3)");
conn.createStatement().execute("insert into NOrder values(4)");
conn.createStatement().execute("insert into NOrder values(5)");
conn.createStatement().execute("insert into NOrder values(6)");
conn.createStatement().execute("insert into NOrder_Detail values(1,1,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(1,2,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(1,3,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(1,4,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(3,1,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(4,1,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(5,1,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(6,1,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(4,2,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(5,2,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(4,3,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(1,5,100,10,1000)");
OrderDAO odao = new OrderDAO();
odao.conn = conn;
List<Order> os = odao.query();
// ResultSet res = conn.createStatement().executeQuery("select * from NOrder order by id");
//
// List<Order> os = new ArrayList<Order>();
//
// while (res.next()) {
// Order order = new Order();
// order.setId(res.getInt(1));
// os.add(order);
// }
//
// res = conn.createStatement().executeQuery("select * from NOrder_Detail order by order_id,seq");
// if (res.next()) {
// int id = res.getInt(1);
//
// for (Order o:os) {
//
// while(id==o.getId()){
// OrderDetail od = new OrderDetail();
// od.setSeq(res.getInt(2));
// od.setPrice(res.getInt(3));
// od.setCount(res.getInt(4));
// od.setAmount(res.getInt(5));
// o.getDetails().add(od);
//
// if(!res.next())break;
// id = res.getInt(1);
// }
// }
// }
System.out.println(os);
Order o = odao.get(1);
System.out.println(o);
}
public final void testInsertIntoOrder_ASM() throws Exception {
c = new SubDbConfiguration(driverclass, url, username, password);
c.openConnection();
Connection conn = c.getConnection();
conn.createStatement().execute("insert into NOrder values(1)");
conn.createStatement().execute("insert into NOrder values(2)");
conn.createStatement().execute("insert into NOrder values(3)");
conn.createStatement().execute("insert into NOrder values(4)");
conn.createStatement().execute("insert into NOrder values(5)");
conn.createStatement().execute("insert into NOrder values(6)");
conn.createStatement().execute("insert into NOrder_Detail values(1,1,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(1,2,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(1,3,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(1,4,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(3,1,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(4,1,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(5,1,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(6,1,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(4,2,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(5,2,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(4,3,100,10,1000)");
conn.createStatement().execute("insert into NOrder_Detail values(1,5,100,10,1000)");
Class<?> clz = NebulaClassLoader.defineClass("nebula.data.db.dao.OrderDAO1", new DAODump().dump());
@SuppressWarnings("unchecked")
DAO<Order> odao = (DAO<Order>) clz.newInstance();
odao.setConn(conn);
List<Order> os = odao.query();
System.out.println(os);
Order o = odao.get(1);
System.out.println(o);
}
}