From 10661867657203f4deea060ab734c82bcd9c328b Mon Sep 17 00:00:00 2001 From: samskivert Date: Fri, 5 Sep 2008 23:17:37 +0000 Subject: [PATCH] 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 --- .../com/samskivert/jdbc/depot/DepotRepository.java | 5 +++-- .../com/samskivert/jdbc/depot/FindAllQuery.java | 13 +++++-------- .../samskivert/jdbc/depot/clause/SelectClause.java | 4 ++++ 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/java/com/samskivert/jdbc/depot/DepotRepository.java b/src/java/com/samskivert/jdbc/depot/DepotRepository.java index 2a541d0b..643c24f4 100644 --- a/src/java/com/samskivert/jdbc/depot/DepotRepository.java +++ b/src/java/com/samskivert/jdbc/depot/DepotRepository.java @@ -211,8 +211,9 @@ public abstract class DepotRepository { final List> keys = new ArrayList>(); final DepotMarshaller marsh = _ctx.getMarshaller(type); - final SQLBuilder builder = _ctx.getSQLBuilder(DepotTypes.getDepotTypes(_ctx, clauses)); - builder.newQuery(new SelectClause(type, marsh.getPrimaryKeyFields(), clauses)); + SelectClause select = new SelectClause(type, marsh.getPrimaryKeyFields(), clauses); + final SQLBuilder builder = _ctx.getSQLBuilder(DepotTypes.getDepotTypes(_ctx, select)); + builder.newQuery(select); if (forUpdate) { _ctx.invoke(new Modifier(null) { diff --git a/src/java/com/samskivert/jdbc/depot/FindAllQuery.java b/src/java/com/samskivert/jdbc/depot/FindAllQuery.java index e5603bf0..653e98e3 100644 --- a/src/java/com/samskivert/jdbc/depot/FindAllQuery.java +++ b/src/java/com/samskivert/jdbc/depot/FindAllQuery.java @@ -64,7 +64,7 @@ public abstract class FindAllQuery if (_marsh.getComputed() != null) { throw new IllegalArgumentException( - "This algorithm doesn't work on @Computed records."); + "This algorithm doesn't work on @Computed records."); } for (QueryClause clause : clauses) { if (clause instanceof FieldOverride) { @@ -73,10 +73,10 @@ public abstract class FindAllQuery } } - DepotTypes types = DepotTypes.getDepotTypes(ctx, clauses); - types.addClass(ctx, type); - _builder = _ctx.getSQLBuilder(types); - _clauses = clauses; + SelectClause select = + new SelectClause(_type, _marsh.getPrimaryKeyFields(), clauses); + _builder = _ctx.getSQLBuilder(DepotTypes.getDepotTypes(ctx, select)); + _builder.newQuery(select); } public List invoke (Connection conn, DatabaseLiaison liaison) @@ -86,7 +86,6 @@ public abstract class FindAllQuery List> allKeys = new ArrayList>(); Set> fetchKeys = new HashSet>(); - _builder.newQuery(new SelectClause(_type, _marsh.getPrimaryKeyFields(), _clauses)); PreparedStatement stmt = _builder.prepare(conn); try { ResultSet rs = stmt.executeQuery(); @@ -166,8 +165,6 @@ public abstract class FindAllQuery JDBCUtil.close(stmt); } } - - protected Collection _clauses; } /** diff --git a/src/java/com/samskivert/jdbc/depot/clause/SelectClause.java b/src/java/com/samskivert/jdbc/depot/clause/SelectClause.java index 8dbc79d1..6216d5a1 100644 --- a/src/java/com/samskivert/jdbc/depot/clause/SelectClause.java +++ b/src/java/com/samskivert/jdbc/depot/clause/SelectClause.java @@ -99,6 +99,10 @@ public class SelectClause extends QueryClause "Query can't contain multiple For Update clauses."); } _forUpdate = (ForUpdate) clause; + + } else { + throw new IllegalArgumentException( + "Unknown clause provided in select " + clause + "."); } } }