From 6f8c9b9837cd6b4ec777a36e2b3d158125d8a5cc Mon Sep 17 00:00:00 2001 From: hns Date: Fri, 10 Oct 2003 18:09:51 +0000 Subject: [PATCH] * Implement mechanism to register parent nodes with changed child nodes with the transactor. When finishing the transaction, the transactor will call setLastSubnodeChange() on the parent nodes. This is necessary because the lastSubnodeChange flag should only be set after child node changes have been committed to the database. (Fixes bug 285 http://helma.org/bugs/show_bug.cgi?id=285 ) * Changed the way select statements are built: Use tablename.* rather than * to prevent columns from additionalTables are fetched unnecessarily. * Code cleanup everywhere, mostly in Transactor.java, Relation.java and NodeManager.java --- src/helma/objectmodel/db/DbMapping.java | 46 ++++++++++++------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/src/helma/objectmodel/db/DbMapping.java b/src/helma/objectmodel/db/DbMapping.java index 1ffc7621..5622741a 100644 --- a/src/helma/objectmodel/db/DbMapping.java +++ b/src/helma/objectmodel/db/DbMapping.java @@ -824,13 +824,13 @@ public final class DbMapping implements Updatable { // and build a string of column names. Connection con = getConnection(); Statement stmt = con.createStatement(); - String t = getTableName(); + String table = getTableName(); - if (t == null) { + if (table == null) { throw new SQLException("Table name is null in getColumns() for " + this); } - ResultSet rs = stmt.executeQuery(new StringBuffer("SELECT * FROM ").append(t) + ResultSet rs = stmt.executeQuery(new StringBuffer("SELECT * FROM ").append(table) .append(" WHERE 1 = 0") .toString()); @@ -921,36 +921,35 @@ public final class DbMapping implements Updatable { StringBuffer s = new StringBuffer("SELECT "); - /* DbColumn[] cols = columns; + String table = getTableName(); - if (cols == null) { - cols = getColumns(); - } - - for (int i = 0; i < cols.length; i++) { - s.append(cols[i].getName()); - if (i < cols.length-1) { - s.append(','); - } - } + // all columns from the main table + s.append(table); + s.append(".*"); for (int i = 0; i < joins.length; i++) { - } */ - - s.append ("*"); + if (!joins[i].otherType.isRelational()) { + continue; + } + s.append(", "); + s.append(Relation.JOIN_PREFIX); + s.append(joins[i].propName); + s.append(".*"); + } s.append(" FROM "); - s.append(getTableName()); + s.append(table); s.append(" "); for (int i = 0; i < joins.length; i++) { if (!joins[i].otherType.isRelational()) { continue; } - s.append("LEFT JOIN "); + s.append("LEFT OUTER JOIN "); s.append(joins[i].otherType.getTableName()); - s.append(" AS _HLM_"); + s.append(" AS "); + s.append(Relation.JOIN_PREFIX); s.append(joins[i].propName); s.append(" ON "); joins[i].renderJoinConstraints(s); @@ -1080,11 +1079,12 @@ public final class DbMapping implements Updatable { /** * */ - public void notifyDataChange() { - lastDataChange = System.currentTimeMillis(); + public void setLastDataChange(long t) { + lastDataChange = t; + // propagate data change timestamp to parent mapping if ((parentMapping != null) && (dbSource == null)) { - parentMapping.notifyDataChange(); + parentMapping.setLastDataChange(t); } }