* Move sql logging to finally clause so statements are logged even if an exception is thrown
* Unified String/StringBuffer variable naming a bit
This commit is contained in:
parent
58b09f4436
commit
84751f86a6
1 changed files with 148 additions and 159 deletions
|
@ -481,6 +481,8 @@ public final class NodeManager {
|
||||||
String nameField = dbm.getNameField();
|
String nameField = dbm.getNameField();
|
||||||
String prototypeField = dbm.getPrototypeField();
|
String prototypeField = dbm.getPrototypeField();
|
||||||
|
|
||||||
|
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
int stmtNumber = 1;
|
int stmtNumber = 1;
|
||||||
|
|
||||||
|
@ -517,16 +519,14 @@ public final class NodeManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
|
||||||
|
|
||||||
stmt.executeUpdate();
|
stmt.executeUpdate();
|
||||||
|
|
||||||
|
} finally {
|
||||||
if (logSql) {
|
if (logSql) {
|
||||||
long logTimeStop = java.lang.System.currentTimeMillis();
|
long logTimeStop = java.lang.System.currentTimeMillis();
|
||||||
logSqlStatement("SQL INSERT", dbm.getTableName(),
|
logSqlStatement("SQL INSERT", dbm.getTableName(),
|
||||||
logTimeStart, logTimeStop, insertString);
|
logTimeStart, logTimeStop, insertString);
|
||||||
}
|
}
|
||||||
} finally {
|
|
||||||
if (stmt != null) {
|
if (stmt != null) {
|
||||||
try {
|
try {
|
||||||
stmt.close();
|
stmt.close();
|
||||||
|
@ -626,6 +626,7 @@ public final class NodeManager {
|
||||||
PreparedStatement stmt = con.prepareStatement(b.toString());
|
PreparedStatement stmt = con.prepareStatement(b.toString());
|
||||||
|
|
||||||
int stmtNumber = 0;
|
int stmtNumber = 0;
|
||||||
|
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (int i = 0; i < props.length; i++) {
|
for (int i = 0; i < props.length; i++) {
|
||||||
|
@ -647,17 +648,14 @@ public final class NodeManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
|
||||||
|
|
||||||
stmt.executeUpdate();
|
stmt.executeUpdate();
|
||||||
|
|
||||||
|
} finally {
|
||||||
if (logSql) {
|
if (logSql) {
|
||||||
long logTimeStop = System.currentTimeMillis();
|
long logTimeStop = System.currentTimeMillis();
|
||||||
logSqlStatement("SQL UPDATE", dbm.getTableName(),
|
logSqlStatement("SQL UPDATE", dbm.getTableName(),
|
||||||
logTimeStart, logTimeStop, b.toString());
|
logTimeStart, logTimeStop, b.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
} finally {
|
|
||||||
if (stmt != null) {
|
if (stmt != null) {
|
||||||
try {
|
try {
|
||||||
stmt.close();
|
stmt.close();
|
||||||
|
@ -692,32 +690,29 @@ public final class NodeManager {
|
||||||
db.deleteNode(txn, node.getID());
|
db.deleteNode(txn, node.getID());
|
||||||
} else {
|
} else {
|
||||||
Statement st = null;
|
Statement st = null;
|
||||||
|
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
||||||
|
String str = new StringBuffer("DELETE FROM ").append(dbm.getTableName())
|
||||||
|
.append(" WHERE ")
|
||||||
|
.append(dbm.getIDField())
|
||||||
|
.append(" = ")
|
||||||
|
.append(node.getID())
|
||||||
|
.toString();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Connection con = dbm.getConnection();
|
Connection con = dbm.getConnection();
|
||||||
// set connection to write mode
|
// set connection to write mode
|
||||||
if (con.isReadOnly()) con.setReadOnly(false);
|
if (con.isReadOnly()) con.setReadOnly(false);
|
||||||
|
|
||||||
String str = new StringBuffer("DELETE FROM ").append(dbm.getTableName())
|
|
||||||
.append(" WHERE ")
|
|
||||||
.append(dbm.getIDField())
|
|
||||||
.append(" = ")
|
|
||||||
.append(node.getID())
|
|
||||||
.toString();
|
|
||||||
|
|
||||||
st = con.createStatement();
|
st = con.createStatement();
|
||||||
|
|
||||||
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
|
||||||
|
|
||||||
st.executeUpdate(str);
|
st.executeUpdate(str);
|
||||||
|
|
||||||
|
} finally {
|
||||||
if (logSql) {
|
if (logSql) {
|
||||||
long logTimeStop = System.currentTimeMillis();
|
long logTimeStop = System.currentTimeMillis();
|
||||||
logSqlStatement("SQL DELETE", dbm.getTableName(),
|
logSqlStatement("SQL DELETE", dbm.getTableName(),
|
||||||
logTimeStart, logTimeStop, str);
|
logTimeStart, logTimeStop, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
} finally {
|
|
||||||
if (st != null) {
|
if (st != null) {
|
||||||
try {
|
try {
|
||||||
st.close();
|
st.close();
|
||||||
|
@ -781,29 +776,21 @@ public final class NodeManager {
|
||||||
// tx.timer.beginEvent ("generateID "+map);
|
// tx.timer.beginEvent ("generateID "+map);
|
||||||
String retval = null;
|
String retval = null;
|
||||||
Statement stmt = null;
|
Statement stmt = null;
|
||||||
|
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
||||||
|
String q = new StringBuffer("SELECT MAX(").append(map.getIDField())
|
||||||
|
.append(") FROM ")
|
||||||
|
.append(map.getTableName())
|
||||||
|
.toString();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Connection con = map.getConnection();
|
Connection con = map.getConnection();
|
||||||
// set connection to read-only mode
|
// set connection to read-only mode
|
||||||
if (!con.isReadOnly()) con.setReadOnly(true);
|
if (!con.isReadOnly()) con.setReadOnly(true);
|
||||||
|
|
||||||
String q = new StringBuffer("SELECT MAX(").append(map.getIDField())
|
|
||||||
.append(") FROM ")
|
|
||||||
.append(map.getTableName())
|
|
||||||
.toString();
|
|
||||||
|
|
||||||
stmt = con.createStatement();
|
stmt = con.createStatement();
|
||||||
|
|
||||||
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
|
||||||
|
|
||||||
ResultSet rs = stmt.executeQuery(q);
|
ResultSet rs = stmt.executeQuery(q);
|
||||||
|
|
||||||
if (logSql) {
|
|
||||||
long logTimeStop = System.currentTimeMillis();
|
|
||||||
logSqlStatement("SQL SELECT_MAX", map.getTableName(),
|
|
||||||
logTimeStart, logTimeStop, q);
|
|
||||||
}
|
|
||||||
|
|
||||||
// check for empty table
|
// check for empty table
|
||||||
if (!rs.next()) {
|
if (!rs.next()) {
|
||||||
long currMax = map.getNewID(0);
|
long currMax = map.getNewID(0);
|
||||||
|
@ -816,7 +803,11 @@ public final class NodeManager {
|
||||||
retval = Long.toString(currMax);
|
retval = Long.toString(currMax);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
// tx.timer.endEvent ("generateID "+map);
|
if (logSql) {
|
||||||
|
long logTimeStop = System.currentTimeMillis();
|
||||||
|
logSqlStatement("SQL SELECT_MAX", map.getTableName(),
|
||||||
|
logTimeStart, logTimeStop, q);
|
||||||
|
}
|
||||||
if (stmt != null) {
|
if (stmt != null) {
|
||||||
try {
|
try {
|
||||||
stmt.close();
|
stmt.close();
|
||||||
|
@ -833,34 +824,31 @@ public final class NodeManager {
|
||||||
// tx.timer.beginEvent ("generateID "+map);
|
// tx.timer.beginEvent ("generateID "+map);
|
||||||
Statement stmt = null;
|
Statement stmt = null;
|
||||||
String retval = null;
|
String retval = null;
|
||||||
|
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
||||||
|
String q = new StringBuffer("SELECT ").append(map.getIDgen())
|
||||||
|
.append(".nextval FROM dual").toString();
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Connection con = map.getConnection();
|
Connection con = map.getConnection();
|
||||||
// TODO is it necessary to set connection to write mode here?
|
// TODO is it necessary to set connection to write mode here?
|
||||||
if (con.isReadOnly()) con.setReadOnly(false);
|
if (con.isReadOnly()) con.setReadOnly(false);
|
||||||
|
|
||||||
String q = new StringBuffer("SELECT ").append(map.getIDgen())
|
|
||||||
.append(".nextval FROM dual").toString();
|
|
||||||
|
|
||||||
stmt = con.createStatement();
|
stmt = con.createStatement();
|
||||||
|
|
||||||
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
|
||||||
|
|
||||||
ResultSet rs = stmt.executeQuery(q);
|
ResultSet rs = stmt.executeQuery(q);
|
||||||
|
|
||||||
if (logSql) {
|
|
||||||
long logTimeStop = System.currentTimeMillis();
|
|
||||||
logSqlStatement("SQL SELECT_NEXTVAL", map.getTableName(),
|
|
||||||
logTimeStart, logTimeStop, q);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!rs.next()) {
|
if (!rs.next()) {
|
||||||
throw new SQLException("Error creating ID from Sequence: empty recordset");
|
throw new SQLException("Error creating ID from Sequence: empty recordset");
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = rs.getString(1);
|
retval = rs.getString(1);
|
||||||
} finally {
|
} finally {
|
||||||
// tx.timer.endEvent ("generateID "+map);
|
if (logSql) {
|
||||||
|
long logTimeStop = System.currentTimeMillis();
|
||||||
|
logSqlStatement("SQL SELECT_NEXTVAL", map.getTableName(),
|
||||||
|
logTimeStart, logTimeStop, q);
|
||||||
|
}
|
||||||
if (stmt != null) {
|
if (stmt != null) {
|
||||||
try {
|
try {
|
||||||
stmt.close();
|
stmt.close();
|
||||||
|
@ -898,9 +886,10 @@ public final class NodeManager {
|
||||||
String table = rel.otherType.getTableName();
|
String table = rel.otherType.getTableName();
|
||||||
|
|
||||||
Statement stmt = null;
|
Statement stmt = null;
|
||||||
|
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
||||||
|
String query = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String q;
|
|
||||||
|
|
||||||
StringBuffer b = new StringBuffer("SELECT ");
|
StringBuffer b = new StringBuffer("SELECT ");
|
||||||
|
|
||||||
|
@ -917,10 +906,10 @@ public final class NodeManager {
|
||||||
|
|
||||||
if (home.getSubnodeRelation() != null) {
|
if (home.getSubnodeRelation() != null) {
|
||||||
// subnode relation was explicitly set
|
// subnode relation was explicitly set
|
||||||
q = b.append(" ").append(home.getSubnodeRelation()).toString();
|
query = b.append(" ").append(home.getSubnodeRelation()).toString();
|
||||||
} else {
|
} else {
|
||||||
// let relation object build the query
|
// let relation object build the query
|
||||||
q = b.append(rel.buildQuery(home,
|
query = b.append(rel.buildQuery(home,
|
||||||
home.getNonVirtualParent(),
|
home.getNonVirtualParent(),
|
||||||
null,
|
null,
|
||||||
" WHERE ",
|
" WHERE ",
|
||||||
|
@ -933,15 +922,7 @@ public final class NodeManager {
|
||||||
stmt.setMaxRows(rel.maxSize);
|
stmt.setMaxRows(rel.maxSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
ResultSet result = stmt.executeQuery(query);
|
||||||
|
|
||||||
ResultSet result = stmt.executeQuery(q);
|
|
||||||
|
|
||||||
if (logSql) {
|
|
||||||
long logTimeStop = System.currentTimeMillis();
|
|
||||||
logSqlStatement("SQL SELECT_IDS", table,
|
|
||||||
logTimeStart, logTimeStop, q);
|
|
||||||
}
|
|
||||||
|
|
||||||
// problem: how do we derive a SyntheticKey from a not-yet-persistent Node?
|
// problem: how do we derive a SyntheticKey from a not-yet-persistent Node?
|
||||||
Key k = (rel.groupby != null) ? home.getKey() : null;
|
Key k = (rel.groupby != null) ? home.getKey() : null;
|
||||||
|
@ -972,7 +953,11 @@ public final class NodeManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
// tx.timer.endEvent ("getNodeIDs "+home);
|
if (logSql) {
|
||||||
|
long logTimeStop = System.currentTimeMillis();
|
||||||
|
logSqlStatement("SQL SELECT_IDS", table,
|
||||||
|
logTimeStart, logTimeStop, query);
|
||||||
|
}
|
||||||
if (stmt != null) {
|
if (stmt != null) {
|
||||||
try {
|
try {
|
||||||
stmt.close();
|
stmt.close();
|
||||||
|
@ -1013,33 +998,30 @@ public final class NodeManager {
|
||||||
Statement stmt = con.createStatement();
|
Statement stmt = con.createStatement();
|
||||||
DbColumn[] columns = dbm.getColumns();
|
DbColumn[] columns = dbm.getColumns();
|
||||||
Relation[] joins = dbm.getJoins();
|
Relation[] joins = dbm.getJoins();
|
||||||
StringBuffer q = dbm.getSelect(rel);
|
String query = null;
|
||||||
|
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
StringBuffer b = dbm.getSelect(rel);
|
||||||
|
|
||||||
if (home.getSubnodeRelation() != null) {
|
if (home.getSubnodeRelation() != null) {
|
||||||
q.append(home.getSubnodeRelation());
|
b.append(home.getSubnodeRelation());
|
||||||
} else {
|
} else {
|
||||||
// let relation object build the query
|
// let relation object build the query
|
||||||
q.append(rel.buildQuery(home,
|
b.append(rel.buildQuery(home,
|
||||||
home.getNonVirtualParent(),
|
home.getNonVirtualParent(),
|
||||||
null,
|
null,
|
||||||
" WHERE ",
|
" WHERE ",
|
||||||
true));
|
true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
query = b.toString();
|
||||||
|
|
||||||
if (rel.maxSize > 0) {
|
if (rel.maxSize > 0) {
|
||||||
stmt.setMaxRows(rel.maxSize);
|
stmt.setMaxRows(rel.maxSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
ResultSet rs = stmt.executeQuery(query);
|
||||||
|
|
||||||
ResultSet rs = stmt.executeQuery(q.toString());
|
|
||||||
|
|
||||||
if (logSql) {
|
|
||||||
long logTimeStop = System.currentTimeMillis();
|
|
||||||
logSqlStatement("SQL SELECT_ALL", dbm.getTableName(),
|
|
||||||
logTimeStart, logTimeStop, q.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
// create new Nodes.
|
// create new Nodes.
|
||||||
|
@ -1064,7 +1046,11 @@ public final class NodeManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
// tx.timer.endEvent ("getNodes "+home);
|
if (logSql) {
|
||||||
|
long logTimeStop = System.currentTimeMillis();
|
||||||
|
logSqlStatement("SQL SELECT_ALL", dbm.getTableName(),
|
||||||
|
logTimeStart, logTimeStop, query);
|
||||||
|
}
|
||||||
if (stmt != null) {
|
if (stmt != null) {
|
||||||
try {
|
try {
|
||||||
stmt.close();
|
stmt.close();
|
||||||
|
@ -1098,60 +1084,57 @@ public final class NodeManager {
|
||||||
Statement stmt = con.createStatement();
|
Statement stmt = con.createStatement();
|
||||||
DbColumn[] columns = dbm.getColumns();
|
DbColumn[] columns = dbm.getColumns();
|
||||||
Relation[] joins = dbm.getJoins();
|
Relation[] joins = dbm.getJoins();
|
||||||
StringBuffer q = dbm.getSelect(rel);
|
String query = null;
|
||||||
|
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
StringBuffer b = dbm.getSelect(rel);
|
||||||
|
|
||||||
String idfield = (rel.groupby != null) ? rel.groupby : dbm.getIDField();
|
String idfield = (rel.groupby != null) ? rel.groupby : dbm.getIDField();
|
||||||
boolean needsQuotes = dbm.needsQuotes(idfield);
|
boolean needsQuotes = dbm.needsQuotes(idfield);
|
||||||
|
|
||||||
q.append(" WHERE ");
|
b.append(" WHERE ");
|
||||||
q.append(dbm.getTableName());
|
b.append(dbm.getTableName());
|
||||||
q.append(".");
|
b.append(".");
|
||||||
q.append(idfield);
|
b.append(idfield);
|
||||||
q.append(" IN (");
|
b.append(" IN (");
|
||||||
|
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
|
|
||||||
for (int i = 0; i < keys.length; i++) {
|
for (int i = 0; i < keys.length; i++) {
|
||||||
if (keys[i] != null) {
|
if (keys[i] != null) {
|
||||||
if (!first) {
|
if (!first) {
|
||||||
q.append(',');
|
b.append(',');
|
||||||
} else {
|
} else {
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needsQuotes) {
|
if (needsQuotes) {
|
||||||
q.append("'");
|
b.append("'");
|
||||||
q.append(escape(keys[i].getID()));
|
b.append(escape(keys[i].getID()));
|
||||||
q.append("'");
|
b.append("'");
|
||||||
} else {
|
} else {
|
||||||
q.append(keys[i].getID());
|
b.append(keys[i].getID());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
q.append(") ");
|
b.append(") ");
|
||||||
|
|
||||||
dbm.addJoinConstraints(q, " AND ");
|
dbm.addJoinConstraints(b, " AND ");
|
||||||
|
|
||||||
if (rel.groupby != null) {
|
if (rel.groupby != null) {
|
||||||
rel.renderConstraints(q, home, home.getNonVirtualParent(), " AND ");
|
rel.renderConstraints(b, home, home.getNonVirtualParent(), " AND ");
|
||||||
|
|
||||||
if (rel.order != null) {
|
if (rel.order != null) {
|
||||||
q.append(" ORDER BY ");
|
b.append(" ORDER BY ");
|
||||||
q.append(rel.order);
|
b.append(rel.order);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
query = b.toString();
|
||||||
|
|
||||||
ResultSet rs = stmt.executeQuery(q.toString());
|
ResultSet rs = stmt.executeQuery(query);
|
||||||
|
|
||||||
if (logSql) {
|
|
||||||
long logTimeStop = System.currentTimeMillis();
|
|
||||||
logSqlStatement("SQL SELECT_PREFETCH", dbm.getTableName(),
|
|
||||||
logTimeStart, logTimeStop, q.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
String groupbyProp = null;
|
String groupbyProp = null;
|
||||||
HashMap groupbySubnodes = null;
|
HashMap groupbySubnodes = null;
|
||||||
|
@ -1244,6 +1227,11 @@ public final class NodeManager {
|
||||||
} catch (Exception x) {
|
} catch (Exception x) {
|
||||||
System.err.println ("Error in prefetchNodes(): "+x);
|
System.err.println ("Error in prefetchNodes(): "+x);
|
||||||
} finally {
|
} finally {
|
||||||
|
if (logSql) {
|
||||||
|
long logTimeStop = System.currentTimeMillis();
|
||||||
|
logSqlStatement("SQL SELECT_PREFETCH", dbm.getTableName(),
|
||||||
|
logTimeStart, logTimeStop, query);
|
||||||
|
}
|
||||||
if (stmt != null) {
|
if (stmt != null) {
|
||||||
try {
|
try {
|
||||||
stmt.close();
|
stmt.close();
|
||||||
|
@ -1273,11 +1261,11 @@ public final class NodeManager {
|
||||||
if (!con.isReadOnly()) con.setReadOnly(true);
|
if (!con.isReadOnly()) con.setReadOnly(true);
|
||||||
|
|
||||||
String table = rel.otherType.getTableName();
|
String table = rel.otherType.getTableName();
|
||||||
|
|
||||||
Statement stmt = null;
|
Statement stmt = null;
|
||||||
|
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
||||||
|
String query = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String q = null;
|
|
||||||
StringBuffer tables = new StringBuffer(table);
|
StringBuffer tables = new StringBuffer(table);
|
||||||
|
|
||||||
rel.appendAdditionalTables(tables);
|
rel.appendAdditionalTables(tables);
|
||||||
|
@ -1289,10 +1277,10 @@ public final class NodeManager {
|
||||||
|
|
||||||
if (home.getSubnodeRelation() != null) {
|
if (home.getSubnodeRelation() != null) {
|
||||||
// use the manually set subnoderelation of the home node
|
// use the manually set subnoderelation of the home node
|
||||||
q = b.append(" ").append(home.getSubnodeRelation()).toString();
|
query = b.append(" ").append(home.getSubnodeRelation()).toString();
|
||||||
} else {
|
} else {
|
||||||
// let relation object build the query
|
// let relation object build the query
|
||||||
q = b.append(rel.buildQuery(home,
|
query = b.append(rel.buildQuery(home,
|
||||||
home.getNonVirtualParent(),
|
home.getNonVirtualParent(),
|
||||||
null,
|
null,
|
||||||
" WHERE ",
|
" WHERE ",
|
||||||
|
@ -1301,15 +1289,9 @@ public final class NodeManager {
|
||||||
|
|
||||||
stmt = con.createStatement();
|
stmt = con.createStatement();
|
||||||
|
|
||||||
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
|
||||||
|
|
||||||
ResultSet rs = stmt.executeQuery(q);
|
ResultSet rs = stmt.executeQuery(query);
|
||||||
|
|
||||||
if (logSql) {
|
|
||||||
long logTimeStop = System.currentTimeMillis();
|
|
||||||
logSqlStatement("SQL SELECT_COUNT", table,
|
|
||||||
logTimeStart, logTimeStop, q);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!rs.next()) {
|
if (!rs.next()) {
|
||||||
retval = 0;
|
retval = 0;
|
||||||
|
@ -1317,7 +1299,11 @@ public final class NodeManager {
|
||||||
retval = rs.getInt(1);
|
retval = rs.getInt(1);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
// tx.timer.endEvent ("countNodes "+home);
|
if (logSql) {
|
||||||
|
long logTimeStop = System.currentTimeMillis();
|
||||||
|
logSqlStatement("SQL SELECT_COUNT", table,
|
||||||
|
logTimeStart, logTimeStop, query);
|
||||||
|
}
|
||||||
if (stmt != null) {
|
if (stmt != null) {
|
||||||
try {
|
try {
|
||||||
stmt.close();
|
stmt.close();
|
||||||
|
@ -1350,26 +1336,27 @@ public final class NodeManager {
|
||||||
Connection con = rel.otherType.getConnection();
|
Connection con = rel.otherType.getConnection();
|
||||||
// set connection to read-only mode
|
// set connection to read-only mode
|
||||||
if (!con.isReadOnly()) con.setReadOnly(true);
|
if (!con.isReadOnly()) con.setReadOnly(true);
|
||||||
|
|
||||||
String table = rel.otherType.getTableName();
|
String table = rel.otherType.getTableName();
|
||||||
|
StringBuffer tables = new StringBuffer(table);
|
||||||
|
rel.appendAdditionalTables(tables);
|
||||||
|
|
||||||
Statement stmt = null;
|
Statement stmt = null;
|
||||||
|
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
||||||
StringBuffer tables = new StringBuffer(table);
|
String query = null;
|
||||||
|
|
||||||
rel.appendAdditionalTables(tables);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// NOTE: we explicitly convert tables StringBuffer to a String
|
// NOTE: we explicitly convert tables StringBuffer to a String
|
||||||
// before appending to be compatible with JDK 1.3
|
// before appending to be compatible with JDK 1.3
|
||||||
StringBuffer q = new StringBuffer("SELECT ").append(namefield)
|
StringBuffer b = new StringBuffer("SELECT ").append(namefield)
|
||||||
.append(" FROM ")
|
.append(" FROM ")
|
||||||
.append(tables.toString());
|
.append(tables.toString());
|
||||||
|
|
||||||
if (home.getSubnodeRelation() != null) {
|
if (home.getSubnodeRelation() != null) {
|
||||||
q.append(" ").append(home.getSubnodeRelation());
|
b.append(" ").append(home.getSubnodeRelation());
|
||||||
} else {
|
} else {
|
||||||
// let relation object build the query
|
// let relation object build the query
|
||||||
q.append(rel.buildQuery(home,
|
b.append(rel.buildQuery(home,
|
||||||
home.getNonVirtualParent(),
|
home.getNonVirtualParent(),
|
||||||
null,
|
null,
|
||||||
" WHERE ",
|
" WHERE ",
|
||||||
|
@ -1378,15 +1365,9 @@ public final class NodeManager {
|
||||||
|
|
||||||
stmt = con.createStatement();
|
stmt = con.createStatement();
|
||||||
|
|
||||||
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
query = b.toString();
|
||||||
|
|
||||||
ResultSet rs = stmt.executeQuery(q.toString());
|
ResultSet rs = stmt.executeQuery(query);
|
||||||
|
|
||||||
if (logSql) {
|
|
||||||
long logTimeStop = System.currentTimeMillis();
|
|
||||||
logSqlStatement("SQL SELECT_ACCESSNAMES", table,
|
|
||||||
logTimeStart, logTimeStop, q.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
String n = rs.getString(1);
|
String n = rs.getString(1);
|
||||||
|
@ -1396,7 +1377,12 @@ public final class NodeManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
// tx.timer.endEvent ("getNodeIDs "+home);
|
if (logSql) {
|
||||||
|
long logTimeStop = System.currentTimeMillis();
|
||||||
|
logSqlStatement("SQL SELECT_ACCESSNAMES", table,
|
||||||
|
logTimeStart, logTimeStop, query);
|
||||||
|
}
|
||||||
|
|
||||||
if (stmt != null) {
|
if (stmt != null) {
|
||||||
try {
|
try {
|
||||||
stmt.close();
|
stmt.close();
|
||||||
|
@ -1430,6 +1416,8 @@ public final class NodeManager {
|
||||||
String idfield = dbm.getIDField();
|
String idfield = dbm.getIDField();
|
||||||
|
|
||||||
Statement stmt = null;
|
Statement stmt = null;
|
||||||
|
String query = null;
|
||||||
|
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Connection con = dbm.getConnection();
|
Connection con = dbm.getConnection();
|
||||||
|
@ -1440,31 +1428,25 @@ public final class NodeManager {
|
||||||
|
|
||||||
DbColumn[] columns = dbm.getColumns();
|
DbColumn[] columns = dbm.getColumns();
|
||||||
Relation[] joins = dbm.getJoins();
|
Relation[] joins = dbm.getJoins();
|
||||||
StringBuffer q = dbm.getSelect(null).append("WHERE ")
|
StringBuffer b = dbm.getSelect(null).append("WHERE ")
|
||||||
.append(dbm.getTableName())
|
.append(dbm.getTableName())
|
||||||
.append(".")
|
.append(".")
|
||||||
.append(idfield)
|
.append(idfield)
|
||||||
.append(" = ");
|
.append(" = ");
|
||||||
|
|
||||||
if (dbm.needsQuotes(idfield)) {
|
if (dbm.needsQuotes(idfield)) {
|
||||||
q.append("'");
|
b.append("'");
|
||||||
q.append(escape(kstr));
|
b.append(escape(kstr));
|
||||||
q.append("'");
|
b.append("'");
|
||||||
} else {
|
} else {
|
||||||
q.append(kstr);
|
b.append(kstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
dbm.addJoinConstraints(q, " AND ");
|
dbm.addJoinConstraints(b, " AND ");
|
||||||
|
|
||||||
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
query = b.toString();
|
||||||
|
|
||||||
ResultSet rs = stmt.executeQuery(q.toString());
|
ResultSet rs = stmt.executeQuery(query);
|
||||||
|
|
||||||
if (logSql) {
|
|
||||||
long logTimeStop = System.currentTimeMillis();
|
|
||||||
logSqlStatement("SQL SELECT_BYKEY", dbm.getTableName(),
|
|
||||||
logTimeStart, logTimeStop, q.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!rs.next()) {
|
if (!rs.next()) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -1478,6 +1460,11 @@ public final class NodeManager {
|
||||||
throw new RuntimeException("More than one value returned by query.");
|
throw new RuntimeException("More than one value returned by query.");
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
if (logSql) {
|
||||||
|
long logTimeStop = System.currentTimeMillis();
|
||||||
|
logSqlStatement("SQL SELECT_BYKEY", dbm.getTableName(),
|
||||||
|
logTimeStart, logTimeStop, query);
|
||||||
|
}
|
||||||
if (stmt != null) {
|
if (stmt != null) {
|
||||||
try {
|
try {
|
||||||
stmt.close();
|
stmt.close();
|
||||||
|
@ -1522,38 +1509,41 @@ public final class NodeManager {
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
} else {
|
} else {
|
||||||
|
DbMapping dbm = rel.otherType;
|
||||||
Statement stmt = null;
|
Statement stmt = null;
|
||||||
|
String query = null;
|
||||||
|
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
DbMapping dbm = rel.otherType;
|
|
||||||
|
|
||||||
Connection con = dbm.getConnection();
|
Connection con = dbm.getConnection();
|
||||||
// set connection to read-only mode
|
// set connection to read-only mode
|
||||||
if (!con.isReadOnly()) con.setReadOnly(true);
|
if (!con.isReadOnly()) con.setReadOnly(true);
|
||||||
DbColumn[] columns = dbm.getColumns();
|
DbColumn[] columns = dbm.getColumns();
|
||||||
Relation[] joins = dbm.getJoins();
|
Relation[] joins = dbm.getJoins();
|
||||||
StringBuffer q = dbm.getSelect(rel);
|
StringBuffer b = dbm.getSelect(rel);
|
||||||
|
|
||||||
if (home.getSubnodeRelation() != null && !rel.isComplexReference()) {
|
if (home.getSubnodeRelation() != null && !rel.isComplexReference()) {
|
||||||
// combine our key with the constraints in the manually set subnode relation
|
// combine our key with the constraints in the manually set subnode relation
|
||||||
q.append(" WHERE ");
|
b.append(" WHERE ");
|
||||||
q.append(dbm.getTableName());
|
if (rel.accessName.indexOf('(') == -1 && rel.accessName.indexOf('.') == -1) {
|
||||||
q.append(".");
|
b.append(dbm.getTableName());
|
||||||
q.append(rel.accessName);
|
b.append(".");
|
||||||
q.append(" = '");
|
}
|
||||||
q.append(escape(kstr));
|
b.append(rel.accessName);
|
||||||
q.append("'");
|
b.append(" = '");
|
||||||
|
b.append(escape(kstr));
|
||||||
|
b.append("'");
|
||||||
// add join contraints in case this is an old oracle style join
|
// add join contraints in case this is an old oracle style join
|
||||||
dbm.addJoinConstraints(q, " AND ");
|
dbm.addJoinConstraints(b, " AND ");
|
||||||
// add potential constraints from manually set subnodeRelation
|
// add potential constraints from manually set subnodeRelation
|
||||||
String subrel = home.getSubnodeRelation().trim();
|
String subrel = home.getSubnodeRelation().trim();
|
||||||
if (subrel.length() > 5) {
|
if (subrel.length() > 5) {
|
||||||
q.append(" AND (");
|
b.append(" AND (");
|
||||||
q.append(subrel.substring(5).trim());
|
b.append(subrel.substring(5).trim());
|
||||||
q.append(")");
|
b.append(")");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
q.append(rel.buildQuery(home,
|
b.append(rel.buildQuery(home,
|
||||||
home.getNonVirtualParent(),
|
home.getNonVirtualParent(),
|
||||||
kstr,
|
kstr,
|
||||||
" WHERE ",
|
" WHERE ",
|
||||||
|
@ -1562,15 +1552,9 @@ public final class NodeManager {
|
||||||
|
|
||||||
stmt = con.createStatement();
|
stmt = con.createStatement();
|
||||||
|
|
||||||
long logTimeStart = logSql ? System.currentTimeMillis() : 0;
|
query = b.toString();
|
||||||
|
|
||||||
ResultSet rs = stmt.executeQuery(q.toString());
|
ResultSet rs = stmt.executeQuery(query);
|
||||||
|
|
||||||
if (logSql) {
|
|
||||||
long logTimeStop = System.currentTimeMillis();
|
|
||||||
logSqlStatement("SQL SELECT_BYRELATION", dbm.getTableName(),
|
|
||||||
logTimeStart, logTimeStop, q.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!rs.next()) {
|
if (!rs.next()) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -1595,6 +1579,11 @@ public final class NodeManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
|
if (logSql) {
|
||||||
|
long logTimeStop = System.currentTimeMillis();
|
||||||
|
logSqlStatement("SQL SELECT_BYRELATION", dbm.getTableName(),
|
||||||
|
logTimeStart, logTimeStop, query);
|
||||||
|
}
|
||||||
if (stmt != null) {
|
if (stmt != null) {
|
||||||
try {
|
try {
|
||||||
stmt.close();
|
stmt.close();
|
||||||
|
|
Loading…
Add table
Reference in a new issue