Revision: 149
http://polepos.svn.sourceforge.net/polepos/?rev=149&view=rev
Author: carlrosenberger
Date: 2010-11-30 20:41:13 +0000 (Tue, 30 Nov 2010)
Log Message:
-----------
cr + acv: ComplexJdbc read works and gives us the same checksum as db4o.
Modified Paths:
--------------
trunk/polepos/src/org/polepos/data/ComplexHolder0.java
trunk/polepos/src/org/polepos/framework/IdGenerator.java
trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java
trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java
Modified: trunk/polepos/src/org/polepos/data/ComplexHolder0.java
===================================================================
--- trunk/polepos/src/org/polepos/data/ComplexHolder0.java 2010-11-30 19:04:46 UTC (rev 148)
+++ trunk/polepos/src/org/polepos/data/ComplexHolder0.java 2010-11-30 20:41:13 UTC (rev 149)
@@ -105,7 +105,7 @@
}
- private static final Closure4[] FACTORIES = {
+ public static final Closure4[] FACTORIES = {
new Closure4<ComplexHolder0>(){
@Override
public ComplexHolder0 run() {
@@ -147,7 +147,8 @@
@Override
public void visit(ComplexHolder0 holder) {
- checkSum = holder.ownCheckSum();
+ checkSum += Math.abs(holder.ownCheckSum());
+ System.out.println(holder._name + " " + Math.abs(holder.ownCheckSum()));
}
}
CheckSumVisitor visitor = new CheckSumVisitor();
@@ -211,4 +212,12 @@
return _array;
}
+ public void setArray(ComplexHolder0[] array) {
+ _array = array;
+ }
+
+ public void setChildren(List<ComplexHolder0> children) {
+ _children = children;
+ }
+
}
Modified: trunk/polepos/src/org/polepos/framework/IdGenerator.java
===================================================================
--- trunk/polepos/src/org/polepos/framework/IdGenerator.java 2010-11-30 19:04:46 UTC (rev 148)
+++ trunk/polepos/src/org/polepos/framework/IdGenerator.java 2010-11-30 20:41:13 UTC (rev 149)
@@ -24,10 +24,18 @@
public class IdGenerator {
- private AtomicLong _atomicLong = new AtomicLong(1);
+ private AtomicLong _atomicLong;
+ public IdGenerator(int start){
+ _atomicLong = new AtomicLong(start);
+ }
+
+ public IdGenerator(){
+ this(1);
+ }
+
public long nextId(){
return _atomicLong.getAndIncrement();
}
-
+
}
Modified: trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java 2010-11-30 19:04:46 UTC (rev 148)
+++ trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java 2010-11-30 20:41:13 UTC (rev 149)
@@ -32,9 +32,9 @@
@Override
public void write() {
- ComplexHolder0 root = ComplexHolder0.generate(depth(), objectCount());
- store(new ComplexRoot(root));
- addToCheckSum(root);
+ ComplexHolder0 holder = ComplexHolder0.generate(depth(), objectCount());
+ store(new ComplexRoot(holder));
+ // addToCheckSum(holder);
}
@Override
@@ -70,7 +70,7 @@
}
ComplexHolder2 holder = result.get(0);
db().activate(holder, Integer.MAX_VALUE);
- addToCheckSum(holder);
+ // addToCheckSum(holder);
currentInt++;
if(currentInt > lastInt){
@@ -91,9 +91,11 @@
}, new Visitor<ComplexHolder0>() {
@Override
public void visit(ComplexHolder0 holder) {
- addToCheckSum(holder.ownCheckSum());
+ // addToCheckSum(holder.ownCheckSum());
holder.setName("updated");
- holder.addChild(new ComplexHolder2());
+ ComplexHolder2 newChild = new ComplexHolder2();
+ newChild.setName("added");
+ holder.addChild(newChild);
store(holder.getChildren());
store(holder);
}
@@ -102,16 +104,17 @@
@Override
public void delete() {
- ComplexHolder0 root = root();
- root.traverse(new Visitor<ComplexHolder0>() {
+ ComplexHolder0 holder = root();
+ db().activate(holder, Integer.MAX_VALUE);
+ holder.traverse(new Visitor<ComplexHolder0>() {
@Override
public void visit(ComplexHolder0 holder) {
- db().activate(holder, 2);
+ // db().activate(holder, 2);
}
}, new Visitor<ComplexHolder0>() {
@Override
public void visit(ComplexHolder0 holder) {
- addToCheckSum(holder.ownCheckSum());
+ // addToCheckSum(holder.ownCheckSum());
db().delete(holder);
}
});
Modified: trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java 2010-11-30 19:04:46 UTC (rev 148)
+++ trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java 2010-11-30 20:41:13 UTC (rev 149)
@@ -29,6 +29,8 @@
public class ComplexJdbc extends JdbcDriver implements Complex {
+ private static final int ROOT_ID = 1;
+
private static final String HOLDER_TABLE0 = "complexHolder0";
private static final String[] HOLDER_TABLES = new String[]{
@@ -42,6 +44,20 @@
private static final String ARRAY_TABLE = "tarray";
+ private static final int ID = 1;
+
+ private static final int PREVIOUS = 2;
+
+ private static final int NAME = 3;
+
+ private static final int TYPE = 4;
+
+ private static final int INT_FIELD = 2;
+
+ private static final int CHILD = 2;
+
+ private static final int POS = 3;
+
public void takeSeatIn(Car car, TurnSetup setup) throws CarMotorFailureException{
super.takeSeatIn(car, setup);
@@ -51,8 +67,8 @@
dropTable(CHILDREN_TABLE);
dropTable(ARRAY_TABLE);
- createTable( HOLDER_TABLE0, new String[]{ "id", "previous", "name" },
- new Class[]{Integer.TYPE, Integer.TYPE, String.class} );
+ createTable( HOLDER_TABLE0, new String[]{ "id", "previous", "name", "type" },
+ new Class[]{Integer.TYPE, Integer.TYPE, String.class, Integer.TYPE} );
createTable(CHILDREN_TABLE,
new String[]{ "parent", "child", "pos"},
@@ -86,9 +102,9 @@
@Override
public void write() {
- final IdGenerator idGenerator = new IdGenerator();
+ final IdGenerator idGenerator = new IdGenerator(ROOT_ID);
final Stack<Integer> parentIds = new Stack<Integer>();
- final PreparedStatement complexHolder0Stat = prepareStatement("insert into complexHolder0 (id, previous, name) values (?,?,?)");
+ final PreparedStatement complexHolder0Stat = prepareStatement("insert into complexHolder0 (id, previous, name, type) values (?,?,?,?)");
final PreparedStatement[] complexHolderStats = new PreparedStatement[4];
for (int i = 0; i < complexHolderStats.length; i++) {
int idx = i + 1;
@@ -98,19 +114,18 @@
final PreparedStatement arrayStat = prepareStatement("insert into tarray (parent, child, pos) values (?,?,?)");
final PreparedStatement childrenStat = prepareStatement("insert into children (parent, child, pos) values (?,?,?)");
final Map<ComplexHolder0,Integer> ids = new HashMap<ComplexHolder0, Integer>();
- ComplexHolder0 root = ComplexHolder0.generate(depth(), objectCount());
- root.traverse(new Visitor<ComplexHolder0>() {
+ ComplexHolder0 holder = ComplexHolder0.generate(depth(), objectCount());
+ // addToCheckSum(holder);
+ holder.traverse(new Visitor<ComplexHolder0>() {
@Override
public void visit(ComplexHolder0 holder) {
int id = (int) idGenerator.nextId();
ids.put(holder, id);
try {
- complexHolder0Stat.setInt(1, id);
- complexHolder0Stat.setInt(2, holder.getPrevious() == null ? 0 : ids.get(holder.getPrevious()));
- complexHolder0Stat.setString(3, holder.getName());
- complexHolder0Stat.addBatch();
+ int type = 0;
if(holder instanceof ComplexHolder1){
+ type=1;
complexHolderStats[0].setInt(1, id);
ComplexHolder1 complexHolder1 = (ComplexHolder1) holder;
complexHolderStats[0].setInt(2, complexHolder1._i1);
@@ -118,6 +133,7 @@
}
if(holder instanceof ComplexHolder2){
+ type=2;
complexHolderStats[1].setInt(1, id);
ComplexHolder2 complexHolder2 = (ComplexHolder2) holder;
complexHolderStats[1].setInt(2, complexHolder2._i2);
@@ -125,6 +141,7 @@
}
if(holder instanceof ComplexHolder3){
+ type=3;
complexHolderStats[2].setInt(1, id);
ComplexHolder3 complexHolder3 = (ComplexHolder3) holder;
complexHolderStats[2].setInt(2, complexHolder3._i3);
@@ -132,12 +149,20 @@
}
if(holder instanceof ComplexHolder4){
+ type =4;
complexHolderStats[3].setInt(1, id);
ComplexHolder4 complexHolder4 = (ComplexHolder4) holder;
complexHolderStats[3].setInt(2, complexHolder4._i4);
complexHolderStats[3].addBatch();
}
+
+ complexHolder0Stat.setInt(1, id);
+ complexHolder0Stat.setInt(2, holder.getPrevious() == null ? 0 : ids.get(holder.getPrevious()));
+ complexHolder0Stat.setString(3, holder.getName());
+ complexHolder0Stat.setInt(4, type);
+ complexHolder0Stat.addBatch();
+
} catch (Exception e) {
e.printStackTrace();
@@ -204,10 +229,165 @@
@Override
public void read() {
- // TODO Auto-generated method stub
+ try {
+ final PreparedStatement complexHolder0Stat =
+ prepareStatement("select * from complexHolder0 where id=?");
+
+ final PreparedStatement[] complexHolderStats = new PreparedStatement[4];
+ for (int i = 0; i < complexHolderStats.length; i++) {
+ int idx = i + 1;
+ String table = "complexHolder" + idx;
+ complexHolderStats[i] = prepareStatement("select * from " + table + " where id=?");
+ }
+ final PreparedStatement arrayStat = prepareStatement("select * from " + ARRAY_TABLE + " where parent=? order by pos");
+ final PreparedStatement childrenStat = prepareStatement("select * from " + CHILDREN_TABLE + " where parent=? order by pos");
+
+ Map<Integer, ComplexHolder0> read = new HashMap<Integer, ComplexHolder0>();
+ ComplexHolder0 holder = readHolder(
+ read,
+ complexHolder0Stat,
+ complexHolderStats,
+ arrayStat,
+ childrenStat,
+ ROOT_ID);
+
+ addToCheckSum(holder.checkSum());
+
+ complexHolder0Stat.close();
+ for (int i = 0; i < complexHolderStats.length; i++) {
+ complexHolderStats[i].close();
+ }
+
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ private ComplexHolder0 readHolder(
+ Map<Integer, ComplexHolder0> read,
+ final PreparedStatement complexHolder0Stat,
+ PreparedStatement[] complexHolderStats,
+ PreparedStatement arrayStat,
+ PreparedStatement childrenStat,
+ int id) throws SQLException {
+ ComplexHolder0 existing = read.get(id);
+ if(existing != null){
+ return existing;
+ }
+ complexHolder0Stat.setInt(1, id);
+ ResultSet resultSet0 = executeQuery(complexHolder0Stat);
+ int type = resultSet0.getInt(TYPE);
+ ComplexHolder0 holder = (ComplexHolder0) ComplexHolder0.FACTORIES[type].run();
+ read.put(id, holder);
+
+ holder.setName(resultSet0.getString(NAME));
+ int previousId = resultSet0.getInt(PREVIOUS);
+ if(previousId> 0){
+ holder.setPrevious(
+ readHolder(
+ read,
+ complexHolder0Stat,
+ complexHolderStats,
+ arrayStat,
+ childrenStat,
+ previousId));
+ }
+
+ if(holder instanceof ComplexHolder1){
+ ComplexHolder1 complexHolder1 = (ComplexHolder1) holder;
+ complexHolderStats[0].setInt(1, id);
+ ResultSet resultSet1 = executeQuery(complexHolderStats[0]);
+ complexHolder1._i1 = resultSet1.getInt(INT_FIELD);
+ close(resultSet1);
+ }
+
+ if(holder instanceof ComplexHolder2){
+ ComplexHolder2 complexHolder2 = (ComplexHolder2) holder;
+ complexHolderStats[1].setInt(1, id);
+ ResultSet resultSet2 = executeQuery(complexHolderStats[1]);
+ complexHolder2._i2 = resultSet2.getInt(INT_FIELD);
+ close(resultSet2);
+ }
+
+ if(holder instanceof ComplexHolder3){
+ ComplexHolder3 complexHolder3 = (ComplexHolder3) holder;
+ complexHolderStats[2].setInt(1, id);
+ ResultSet resultSet3 = executeQuery(complexHolderStats[2]);
+ complexHolder3._i3 = resultSet3.getInt(INT_FIELD);
+ close(resultSet3);
+ }
+
+ if(holder instanceof ComplexHolder4){
+ ComplexHolder4 complexHolder4 = (ComplexHolder4) holder;
+ complexHolderStats[3].setInt(1, id);
+ ResultSet resultSet4 = executeQuery(complexHolderStats[3]);
+ complexHolder4._i4 = resultSet4.getInt(INT_FIELD);
+ close(resultSet4);
+ }
+ arrayStat.setInt(1, id);
+ ResultSet arrayResultSet = arrayStat.executeQuery();
+ List<Integer> arrayIds = new ArrayList<Integer>();
+ while(arrayResultSet.next()){
+ arrayIds.add(arrayResultSet.getInt(CHILD));
+ }
+ if(! arrayIds.isEmpty()){
+ ComplexHolder0[] array = new ComplexHolder0[arrayIds.size()];
+ holder.setArray(array);
+ int idx = 0;
+ for (Integer childId : arrayIds) {
+ array[idx++] = readHolder(
+ read,
+ complexHolder0Stat,
+ complexHolderStats,
+ arrayStat,
+ childrenStat,
+ childId);
+ }
+ }
+ arrayResultSet.close();
+
+ childrenStat.setInt(1, id);
+ ResultSet childrenResultSet = childrenStat.executeQuery();
+ List<Integer> childrenIds = new ArrayList<Integer>();
+ while(childrenResultSet.next()){
+ childrenIds.add(childrenResultSet.getInt(CHILD));
+ }
+ if(! childrenIds.isEmpty()){
+ List<ComplexHolder0> children = new ArrayList();
+ holder.setChildren(children);
+ for (Integer childId : childrenIds) {
+ children.add(readHolder(
+ read,
+ complexHolder0Stat,
+ complexHolderStats,
+ arrayStat,
+ childrenStat,
+ childId));
+ }
+ }
+ childrenResultSet.close();
+
+ close(resultSet0);
+ return holder;
}
+ private void close(ResultSet resultSet) throws SQLException {
+ if(resultSet.next()){
+ throw new IllegalStateException("More than one complexHolder0 found.");
+ }
+ resultSet.close();
+ }
+
+ private ResultSet executeQuery(final PreparedStatement statement)
+ throws SQLException {
+ ResultSet resultSet0 = statement.executeQuery();
+ if(! resultSet0.next()){
+ throw new IllegalStateException("No row found.");
+ }
+ return resultSet0;
+ }
+
@Override
public void query() {
// TODO Auto-generated method stub
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|