Revision: 164
http://polepos.svn.sourceforge.net/polepos/?rev=164&view=rev
Author: carlrosenberger
Date: 2010-12-21 14:07:33 +0000 (Tue, 21 Dec 2010)
Log Message:
-----------
cr + acv: Modified Complex update to copy all children to the array.
Modified Complex query to also read the children and the array of a holder.
Modified Paths:
--------------
trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java
trunk/polepos/src/org/polepos/teams/hibernate/ComplexHibernate.java
trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java
trunk/polepos/src/org/polepos/teams/jdo/ComplexJdo.java
Modified: trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java 2010-12-20 17:57:36 UTC (rev 163)
+++ trunk/polepos/src/org/polepos/teams/db4o/ComplexDb4o.java 2010-12-21 14:07:33 UTC (rev 164)
@@ -20,6 +20,8 @@
package org.polepos.teams.db4o;
+import java.util.*;
+
import org.polepos.circuits.complex.*;
import org.polepos.data.*;
import org.polepos.framework.*;
@@ -68,9 +70,16 @@
throw new IllegalStateException("" + result.size());
}
ComplexHolder2 holder = result.get(0);
- db().activate(holder, 1);
+ db().activate(holder, 3);
addToCheckSum(holder.ownCheckSum());
-
+ List<ComplexHolder0> children = holder.getChildren();
+ for (ComplexHolder0 child : children) {
+ addToCheckSum(child.ownCheckSum());
+ }
+ ComplexHolder0[] array = holder.getArray();
+ for (ComplexHolder0 arrayElement : array) {
+ addToCheckSum(arrayElement.ownCheckSum());
+ }
currentInt++;
if(currentInt > lastInt){
currentInt = firstInt;
@@ -89,7 +98,12 @@
public void visit(ComplexHolder0 holder) {
addToCheckSum(holder.ownCheckSum());
holder.setName("updated");
- holder.setArray(null);
+ List<ComplexHolder0> children = holder.getChildren();
+ ComplexHolder0[] array = new ComplexHolder0[children.size()];
+ for (int i = 0; i < array.length; i++) {
+ array[i] = children.get(i);
+ }
+ holder.setArray(array);
store(holder);
}
});
Modified: trunk/polepos/src/org/polepos/teams/hibernate/ComplexHibernate.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/hibernate/ComplexHibernate.java 2010-12-20 17:57:36 UTC (rev 163)
+++ trunk/polepos/src/org/polepos/teams/hibernate/ComplexHibernate.java 2010-12-21 14:07:33 UTC (rev 164)
@@ -76,6 +76,14 @@
if(it.hasNext()){
throw new IllegalStateException("More than one ComplexHolder2 found");
}
+ List<ComplexHolder0> children = holder.getChildren();
+ for (ComplexHolder0 child : children) {
+ addToCheckSum(child.ownCheckSum());
+ }
+ ComplexHolder0[] array = holder.getArray();
+ for (ComplexHolder0 arrayElement : array) {
+ addToCheckSum(arrayElement.ownCheckSum());
+ }
currentInt++;
if(currentInt > lastInt){
currentInt = firstInt;
@@ -93,7 +101,12 @@
public void visit(ComplexHolder0 holder) {
addToCheckSum(holder.ownCheckSum());
holder.setName("updated");
- holder.setArray(null);
+ List<ComplexHolder0> children = holder.getChildren();
+ ComplexHolder0[] array = new ComplexHolder0[children.size()];
+ for (int i = 0; i < array.length; i++) {
+ array[i] = children.get(i);
+ }
+ holder.setArray(array);
store(holder);
}
});
Modified: trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java 2010-12-20 17:57:36 UTC (rev 163)
+++ trunk/polepos/src/org/polepos/teams/jdbc/ComplexJdbc.java 2010-12-21 14:07:33 UTC (rev 164)
@@ -239,6 +239,10 @@
}
private ComplexHolder0 readRootInternal() {
+ return readHolder(Integer.MAX_VALUE, ROOT_ID);
+ }
+
+ private ComplexHolder0 readHolder(int depth, int id) {
ComplexHolder0 holder = null;
try {
final PreparedStatement complexHolder0Stat = prepareStatement("select * from " + HOLDER_TABLE0 + " where id=?");
@@ -253,12 +257,13 @@
Map<Integer, ComplexHolder0> idToInstance = new HashMap<Integer, ComplexHolder0>();
holder = readHolder(
+ depth,
idToInstance,
complexHolder0Stat,
complexHolderStats,
arrayStat,
childrenStat,
- ROOT_ID);
+ id);
complexHolder0Stat.close();
for (int i = 0; i < complexHolderStats.length; i++) {
@@ -272,41 +277,24 @@
}
private ComplexHolder0 readHolder(
+ int depth,
Map<Integer, ComplexHolder0> read,
final PreparedStatement complexHolder0Stat,
PreparedStatement[] complexHolderStats,
PreparedStatement arrayStat,
PreparedStatement childrenStat,
int id) throws SQLException {
-
+ if(depth < 1){
+ return null;
+ }
ComplexHolder0 existing = read.get(id);
if(existing != null){
return existing;
}
complexHolder0Stat.setInt(1, id);
ResultSet resultSet0 = executeQuery(complexHolder0Stat);
- ComplexHolder0 holder = null;
int type = resultSet0.getInt(TYPE);
- switch (type){
- case 0:
- holder = new ComplexHolder0();
- break;
- case 1:
- holder = new ComplexHolder1();
- break;
- case 2:
- holder = new ComplexHolder2();
- break;
- case 3:
- holder = new ComplexHolder3();
- break;
- case 4:
- holder = new ComplexHolder4();
- break;
- default:
- throw new IllegalStateException("Valid type int 0 to 4 expected. Found:" + type);
-
- }
+ ComplexHolder0 holder = holderFromType(type);
holder.setId(id);
read.put(id, holder);
@@ -356,6 +344,7 @@
int idx = 0;
for (Integer childId : arrayIds) {
array[idx++] = readHolder(
+ depth -1,
read,
complexHolder0Stat,
complexHolderStats,
@@ -377,6 +366,7 @@
holder.setChildren(children);
for (Integer childId : childrenIds) {
children.add(readHolder(
+ depth -1,
read,
complexHolder0Stat,
complexHolderStats,
@@ -390,6 +380,24 @@
}
+ private ComplexHolder0 holderFromType(int type) {
+ switch (type){
+ case 0:
+ return new ComplexHolder0();
+ case 1:
+ return new ComplexHolder1();
+ case 2:
+ return new ComplexHolder2();
+ case 3:
+ return new ComplexHolder3();
+ case 4:
+ return new ComplexHolder4();
+ default:
+ throw new IllegalStateException("Valid type int 0 to 4 expected. Found:" + type);
+
+ }
+ }
+
private void close(ResultSet resultSet) throws SQLException {
if(resultSet.next()){
throw new IllegalStateException("More than one complexHolder0 found.");
@@ -414,7 +422,7 @@
int currentInt = firstInt;
for (int run = 0; run < selectCount; run++) {
StringBuilder sb = new StringBuilder();
- sb.append("select * from " + HOLDER_TABLE0);
+ sb.append("select " + HOLDER_TABLE0 + ".id from " + HOLDER_TABLE0);
sb.append(" INNER JOIN " + HOLDER_TABLES[0]);
sb.append(" on " + HOLDER_TABLE0 + ".id = " + HOLDER_TABLES[0] + ".id ");
sb.append(" INNER JOIN " + HOLDER_TABLES[1]);
@@ -426,23 +434,22 @@
sb.append(" where " + HOLDER_TABLES[1] + ".i2 = ?");
PreparedStatement stat = prepareStatement(sb.toString());
+
+
try {
stat.setInt(1, currentInt);
ResultSet resultSet = executeQuery(stat);
- int type = resultSet.getInt("type");
- ComplexHolder2 holder = (ComplexHolder2) ComplexHolder0.FACTORIES[type].run();
- holder.setName(resultSet.getString("name"));
- holder._i1 = resultSet.getInt("i1");
- holder._i2 = resultSet.getInt("i2");
- if(holder instanceof ComplexHolder3){
- ComplexHolder3 complexHolder3 = (ComplexHolder3) holder;
- complexHolder3._i3 = resultSet.getInt("i3");
+ int holderId = resultSet.getInt("id");
+ ComplexHolder2 holder = (ComplexHolder2) readHolder(2, holderId);
+ addToCheckSum(holder.ownCheckSum());
+ List<ComplexHolder0> children = holder.getChildren();
+ for (ComplexHolder0 child : children) {
+ addToCheckSum(child.ownCheckSum());
}
- if(holder instanceof ComplexHolder4){
- ComplexHolder4 complexHolder4 = (ComplexHolder4) holder;
- complexHolder4._i4 = resultSet.getInt("i4");
+ ComplexHolder0[] array = holder.getArray();
+ for (ComplexHolder0 arrayElement : array) {
+ addToCheckSum(arrayElement.ownCheckSum());
}
- addToCheckSum(holder.ownCheckSum());
close(resultSet);
stat.close();
} catch (Exception e) {
@@ -460,6 +467,7 @@
public void update() {
final PreparedStatement nameStat = prepareStatement("update " + HOLDER_TABLE0 + " set name=? where id=?");
final PreparedStatement arrayDeleteStat = prepareStatement("delete from " + ARRAY_TABLE + " where parent = ?");
+ final PreparedStatement arrayInsertStat = prepareStatement("insert into tarray (parent, child, pos) values (?,?,?)");
ComplexHolder0 holder = readRootInternal();
holder.traverse(new NullVisitor(),
new Visitor<ComplexHolder0>(){
@@ -472,6 +480,13 @@
nameStat.addBatch();
arrayDeleteStat.setInt(1, holder.getId());
arrayDeleteStat.addBatch();
+ List<ComplexHolder0> children = holder.getChildren();
+ for (int i = 0; i < children.size(); i++) {
+ arrayInsertStat.setInt(1, holder.getId());
+ arrayInsertStat.setInt(2, children.get(i).getId());
+ arrayInsertStat.setInt(3, i);
+ arrayInsertStat.addBatch();
+ }
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -482,6 +497,8 @@
nameStat.close();
arrayDeleteStat.executeBatch();
arrayDeleteStat.close();
+ arrayInsertStat.executeBatch();
+ arrayInsertStat.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -497,7 +514,7 @@
String table = HOLDER_TABLES[i - 1];
complexHolderStats[i] = prepareStatement("delete from " + table + " where id=?");
}
- final PreparedStatement arrayStat = prepareStatement("delete from " + ARRAY_TABLE + " where parent=?");
+ final PreparedStatement arrayDeleteStat = prepareStatement("delete from " + ARRAY_TABLE + " where parent=?");
final PreparedStatement childrenStat = prepareStatement("delete from " + CHILDREN_TABLE + " where parent=?");
ComplexHolder0 holder = readRootInternal();
@@ -512,8 +529,8 @@
complexHolderStats[i].setInt(1, id);
complexHolderStats[i].addBatch();
}
- arrayStat.setInt(1, id);
- arrayStat.addBatch();
+ arrayDeleteStat.setInt(1, id);
+ arrayDeleteStat.addBatch();
childrenStat.setInt(1, id);
childrenStat.addBatch();
} catch (Exception e) {
@@ -526,8 +543,8 @@
complexHolderStats[i].executeBatch();
complexHolderStats[i].close();
}
- arrayStat.executeBatch();
- arrayStat.close();
+ arrayDeleteStat.executeBatch();
+ arrayDeleteStat.close();
childrenStat.executeBatch();
childrenStat.close();
} catch (Exception e) {
Modified: trunk/polepos/src/org/polepos/teams/jdo/ComplexJdo.java
===================================================================
--- trunk/polepos/src/org/polepos/teams/jdo/ComplexJdo.java 2010-12-20 17:57:36 UTC (rev 163)
+++ trunk/polepos/src/org/polepos/teams/jdo/ComplexJdo.java 2010-12-21 14:07:33 UTC (rev 164)
@@ -86,6 +86,14 @@
if(it.hasNext()){
throw new IllegalStateException("More than one ComplexHolder2 found");
}
+ List<ComplexHolder0> children = holder.getChildren();
+ for (ComplexHolder0 child : children) {
+ addToCheckSum(child.ownCheckSum());
+ }
+ ComplexHolder0[] array = holder.getArray();
+ for (ComplexHolder0 arrayElement : array) {
+ addToCheckSum(arrayElement.ownCheckSum());
+ }
currentInt++;
if(currentInt > lastInt){
currentInt = firstInt;
@@ -104,7 +112,12 @@
public void visit(ComplexHolder0 holder) {
addToCheckSum(holder.ownCheckSum());
holder.setName("updated");
- holder.setArray(null);
+ List<ComplexHolder0> children = holder.getChildren();
+ ComplexHolder0[] array = new ComplexHolder0[children.size()];
+ for (int i = 0; i < array.length; i++) {
+ array[i] = children.get(i);
+ }
+ holder.setArray(array);
}
});
commit();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|