Use the SelectClause to obtain our types so that the main record class is
always properly added. Also made SelectClause freak out if it's provided with bogus clauses. git-svn-id: https://samskivert.googlecode.com/svn/trunk@2395 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
@@ -211,8 +211,9 @@ public abstract class DepotRepository
|
|||||||
{
|
{
|
||||||
final List<Key<T>> keys = new ArrayList<Key<T>>();
|
final List<Key<T>> keys = new ArrayList<Key<T>>();
|
||||||
final DepotMarshaller<T> marsh = _ctx.getMarshaller(type);
|
final DepotMarshaller<T> marsh = _ctx.getMarshaller(type);
|
||||||
final SQLBuilder builder = _ctx.getSQLBuilder(DepotTypes.getDepotTypes(_ctx, clauses));
|
SelectClause<T> select = new SelectClause<T>(type, marsh.getPrimaryKeyFields(), clauses);
|
||||||
builder.newQuery(new SelectClause<T>(type, marsh.getPrimaryKeyFields(), clauses));
|
final SQLBuilder builder = _ctx.getSQLBuilder(DepotTypes.getDepotTypes(_ctx, select));
|
||||||
|
builder.newQuery(select);
|
||||||
|
|
||||||
if (forUpdate) {
|
if (forUpdate) {
|
||||||
_ctx.invoke(new Modifier(null) {
|
_ctx.invoke(new Modifier(null) {
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ public abstract class FindAllQuery<T extends PersistentRecord>
|
|||||||
|
|
||||||
if (_marsh.getComputed() != null) {
|
if (_marsh.getComputed() != null) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"This algorithm doesn't work on @Computed records.");
|
"This algorithm doesn't work on @Computed records.");
|
||||||
}
|
}
|
||||||
for (QueryClause clause : clauses) {
|
for (QueryClause clause : clauses) {
|
||||||
if (clause instanceof FieldOverride) {
|
if (clause instanceof FieldOverride) {
|
||||||
@@ -73,10 +73,10 @@ public abstract class FindAllQuery<T extends PersistentRecord>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DepotTypes types = DepotTypes.getDepotTypes(ctx, clauses);
|
SelectClause<T> select =
|
||||||
types.addClass(ctx, type);
|
new SelectClause<T>(_type, _marsh.getPrimaryKeyFields(), clauses);
|
||||||
_builder = _ctx.getSQLBuilder(types);
|
_builder = _ctx.getSQLBuilder(DepotTypes.getDepotTypes(ctx, select));
|
||||||
_clauses = clauses;
|
_builder.newQuery(select);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<T> invoke (Connection conn, DatabaseLiaison liaison)
|
public List<T> invoke (Connection conn, DatabaseLiaison liaison)
|
||||||
@@ -86,7 +86,6 @@ public abstract class FindAllQuery<T extends PersistentRecord>
|
|||||||
List<Key<T>> allKeys = new ArrayList<Key<T>>();
|
List<Key<T>> allKeys = new ArrayList<Key<T>>();
|
||||||
Set<Key<T>> fetchKeys = new HashSet<Key<T>>();
|
Set<Key<T>> fetchKeys = new HashSet<Key<T>>();
|
||||||
|
|
||||||
_builder.newQuery(new SelectClause<T>(_type, _marsh.getPrimaryKeyFields(), _clauses));
|
|
||||||
PreparedStatement stmt = _builder.prepare(conn);
|
PreparedStatement stmt = _builder.prepare(conn);
|
||||||
try {
|
try {
|
||||||
ResultSet rs = stmt.executeQuery();
|
ResultSet rs = stmt.executeQuery();
|
||||||
@@ -166,8 +165,6 @@ public abstract class FindAllQuery<T extends PersistentRecord>
|
|||||||
JDBCUtil.close(stmt);
|
JDBCUtil.close(stmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Collection<? extends QueryClause> _clauses;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -99,6 +99,10 @@ public class SelectClause<T extends PersistentRecord> extends QueryClause
|
|||||||
"Query can't contain multiple For Update clauses.");
|
"Query can't contain multiple For Update clauses.");
|
||||||
}
|
}
|
||||||
_forUpdate = (ForUpdate) clause;
|
_forUpdate = (ForUpdate) clause;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException(
|
||||||
|
"Unknown clause provided in select " + clause + ".");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user