implemented _subnodes.filter to specify additional static constraints
on subnode relations in type.properties
This commit is contained in:
parent
07fa89f251
commit
6b8424f61e
2 changed files with 24 additions and 6 deletions
|
@ -259,6 +259,7 @@ public class Relation {
|
||||||
vr.groupbyorder = groupbyorder;
|
vr.groupbyorder = groupbyorder;
|
||||||
vr.groupbyprototype = groupbyprototype;
|
vr.groupbyprototype = groupbyprototype;
|
||||||
vr.order = order;
|
vr.order = order;
|
||||||
|
vr.filter = filter;
|
||||||
vr.subnoderelation = subnoderelation;
|
vr.subnoderelation = subnoderelation;
|
||||||
vr.aggressiveLoading = aggressiveLoading;
|
vr.aggressiveLoading = aggressiveLoading;
|
||||||
vr.aggressiveCaching = aggressiveCaching;
|
vr.aggressiveCaching = aggressiveCaching;
|
||||||
|
@ -276,6 +277,7 @@ public class Relation {
|
||||||
vr.groupbyorder = groupbyorder;
|
vr.groupbyorder = groupbyorder;
|
||||||
vr.groupbyprototype = groupbyprototype;
|
vr.groupbyprototype = groupbyprototype;
|
||||||
vr.order = order;
|
vr.order = order;
|
||||||
|
vr.filter = filter;
|
||||||
vr.subnoderelation = subnoderelation;
|
vr.subnoderelation = subnoderelation;
|
||||||
return vr;
|
return vr;
|
||||||
}
|
}
|
||||||
|
@ -293,6 +295,7 @@ public class Relation {
|
||||||
vr = makeClone ();
|
vr = makeClone ();
|
||||||
vr.order = order;
|
vr.order = order;
|
||||||
vr.prototype = groupbyprototype;
|
vr.prototype = groupbyprototype;
|
||||||
|
vr.filter = filter;
|
||||||
return vr;
|
return vr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -305,6 +308,7 @@ public class Relation {
|
||||||
Relation vr = makeClone ();
|
Relation vr = makeClone ();
|
||||||
vr.order = order;
|
vr.order = order;
|
||||||
vr.prototype = groupbyprototype;
|
vr.prototype = groupbyprototype;
|
||||||
|
vr.filter = filter;
|
||||||
return vr;
|
return vr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -583,7 +583,7 @@ public final class NodeManager {
|
||||||
|
|
||||||
if (rel == null || rel.other == null || !rel.other.isRelational ()) {
|
if (rel == null || rel.other == null || !rel.other.isRelational ()) {
|
||||||
// this should never be called for embedded nodes
|
// this should never be called for embedded nodes
|
||||||
throw new RuntimeException ("NodeMgr.countNodes called for non-relational node "+home);
|
throw new RuntimeException ("NodeMgr.getNodeIDs called for non-relational node "+home);
|
||||||
} else {
|
} else {
|
||||||
List retval = new ArrayList ();
|
List retval = new ArrayList ();
|
||||||
// if we do a groupby query (creating an intermediate layer of groupby nodes),
|
// if we do a groupby query (creating an intermediate layer of groupby nodes),
|
||||||
|
@ -606,7 +606,10 @@ public final class NodeManager {
|
||||||
if (subrel.direction == Relation.BACKWARD) {
|
if (subrel.direction == Relation.BACKWARD) {
|
||||||
String homeid = home.getNonVirtualHomeID (); // home.getState() == Node.VIRTUAL ? home.parentID : home.getID ();
|
String homeid = home.getNonVirtualHomeID (); // home.getState() == Node.VIRTUAL ? home.parentID : home.getID ();
|
||||||
q += " WHERE "+subrel.getRemoteField()+" = '"+homeid+"'";
|
q += " WHERE "+subrel.getRemoteField()+" = '"+homeid+"'";
|
||||||
}
|
if (subrel.filter != null)
|
||||||
|
q += " AND "+subrel.filter;
|
||||||
|
} else if (subrel.filter != null)
|
||||||
|
q += " WHERE "+subrel.filter;
|
||||||
// set order, if specified and if not using subnode's relation
|
// set order, if specified and if not using subnode's relation
|
||||||
if (rel.groupby != null)
|
if (rel.groupby != null)
|
||||||
q += " GROUP BY "+rel.groupby+" ORDER BY "+(rel.groupbyorder == null ? rel.groupby : rel.groupbyorder);
|
q += " GROUP BY "+rel.groupby+" ORDER BY "+(rel.groupbyorder == null ? rel.groupby : rel.groupbyorder);
|
||||||
|
@ -673,12 +676,17 @@ public final class NodeManager {
|
||||||
tds.where (home.getSubnodeRelation().trim().substring(5));
|
tds.where (home.getSubnodeRelation().trim().substring(5));
|
||||||
} else if (subrel.direction == Relation.BACKWARD) {
|
} else if (subrel.direction == Relation.BACKWARD) {
|
||||||
String homeid = home.getState() == Node.VIRTUAL ? home.parentID : home.getID ();
|
String homeid = home.getState() == Node.VIRTUAL ? home.parentID : home.getID ();
|
||||||
tds.where (subrel.getRemoteField()+" = '"+homeid+"'");
|
if (rel.filter != null)
|
||||||
|
tds.where (subrel.getRemoteField()+" = '"+homeid+"' AND "+subrel.filter);
|
||||||
|
else
|
||||||
|
tds.where (subrel.getRemoteField()+" = '"+homeid+"'");
|
||||||
// set order if specified
|
// set order if specified
|
||||||
if (rel.order != null)
|
if (rel.order != null)
|
||||||
tds.order (rel.order);
|
tds.order (rel.order);
|
||||||
} else {
|
} else {
|
||||||
// don't set where clause, but set order.
|
// don't set where clause except for static filter, but set order.
|
||||||
|
if (subrel.filter != null)
|
||||||
|
tds.where (subrel.filter);
|
||||||
if (rel.order != null)
|
if (rel.order != null)
|
||||||
tds.order (rel.order);
|
tds.order (rel.order);
|
||||||
}
|
}
|
||||||
|
@ -736,9 +744,15 @@ public final class NodeManager {
|
||||||
qds = new QueryDataSet (con, "SELECT count(*) FROM "+table+" "+home.getSubnodeRelation());
|
qds = new QueryDataSet (con, "SELECT count(*) FROM "+table+" "+home.getSubnodeRelation());
|
||||||
} else if (subrel.direction == Relation.BACKWARD) {
|
} else if (subrel.direction == Relation.BACKWARD) {
|
||||||
String homeid = home.getState() == Node.VIRTUAL ? home.parentID : home.getID ();
|
String homeid = home.getState() == Node.VIRTUAL ? home.parentID : home.getID ();
|
||||||
qds = new QueryDataSet (con, "SELECT count(*) FROM "+table+" WHERE "+subrel.getRemoteField()+" = '"+homeid+"'");
|
String qstr = "SELECT count(*) FROM "+table+" WHERE "+subrel.getRemoteField()+" = '"+homeid+"'";
|
||||||
|
if (subrel.filter != null)
|
||||||
|
qstr += " AND "+subrel.filter;
|
||||||
|
qds = new QueryDataSet (con, qstr);
|
||||||
} else {
|
} else {
|
||||||
qds = new QueryDataSet (con, "SELECT count(*) FROM "+table);
|
String qstr = "SELECT count(*) FROM "+table;
|
||||||
|
if (subrel.filter != null)
|
||||||
|
qstr += " WHERE "+subrel.filter;
|
||||||
|
qds = new QueryDataSet (con, qstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (logSql)
|
if (logSql)
|
||||||
|
|
Loading…
Add table
Reference in a new issue