package mir.entity;
+import java.util.List;
+
import mir.storage.StorageObject;
import mir.storage.StorageObjectFailure;
import mir.util.RewindableIterator;
public class EntityBrowser implements RewindableIterator {
private StorageObject storage;
+ private String mainTablePrefix;
+ private List extraTables;
private String whereClause;
private String orderByClause;
private int batchSize;
private int batchPosition;
private int positionInBatch;
- public EntityBrowser(StorageObject aStorage, String aWhereClause, String anOrderByClause,
- int aBatchSize, int aLimit, int aSkip) throws StorageObjectFailure {
+ public EntityBrowser(StorageObject aStorage, String aMainTablePrefix, List someExtraTables,
+ String aWhereClause, String anOrderByClause,
+ int aBatchSize, int aLimit, int aSkip) throws StorageObjectFailure {
storage=aStorage;
+ mainTablePrefix=aMainTablePrefix;
+ extraTables=someExtraTables;
whereClause=aWhereClause;
orderByClause=anOrderByClause;
batchSize=aBatchSize;
skip=aSkip;
limit=aLimit;
-
+
rewind();
}
+ public EntityBrowser(StorageObject aStorage, String aWhereClause, String anOrderByClause,
+ int aBatchSize, int aLimit, int aSkip) throws StorageObjectFailure {
+ this(aStorage, "", null, aWhereClause, anOrderByClause, aBatchSize, aLimit, aSkip);
+ }
+
public EntityBrowser(StorageObject aStorage,
String aWhereClause, String anOrderByClause,
int aBatchSize) throws StorageObjectFailure {
}
public void readCurrentBatch(int aSkip) throws StorageObjectFailure {
- currentBatch = storage.selectByWhereClause(whereClause, orderByClause, aSkip, batchSize);
+ currentBatch = storage.selectByWhereClause (whereClause, orderByClause, aSkip, batchSize);
batchPosition = aSkip;
positionInBatch = 0;
}
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Set;
throw new UnsupportedOperationException("EntityAdapter.entrySet()");
}
+ public Object getComplexRelation(String aMainTablePrefix, List someExtraTables,
+ String aWhereClause, String anOrderByClause, String aDefinition) {
+ try {
+ return
+ new CachingRewindableIterator(
+ new EntityIteratorAdapter(aMainTablePrefix, someExtraTables,
+ aWhereClause, anOrderByClause,
+ -1, getModel(), aDefinition, -1, 0)
+ );
+ }
+ catch (Throwable t) {
+ throw new RuntimeException(t.getMessage());
+ }
+ }
+
+
public Object getRelation(String aWhereClause, String anOrderByClause, String aDefinition) {
try {
return
*/
package mir.entity.adapter;
+import java.util.List;
+
import mir.entity.Entity;
import mir.entity.EntityBrowser;
import mir.storage.StorageObjectFailure;
this(new EntityBrowser(aModel.getMappingForName(aDefinitionName).getStorage(), aWhereClause, anOrderByClause, aBatchSize, aLimit, aSkip), aModel, aDefinitionName);
}
+ public EntityIteratorAdapter(String aMainTablePrefix, List someExtraTables,
+ String aWhereClause, String anOrderByClause,
+ int aBatchSize, EntityAdapterModel aModel, String aDefinitionName,
+ int aLimit, int aSkip) throws StorageObjectFailure, EntityAdapterExc {
+ this(new EntityBrowser(aModel.getMappingForName(aDefinitionName).getStorage(), aMainTablePrefix, someExtraTables, aWhereClause, anOrderByClause, aBatchSize, aLimit, aSkip), aModel, aDefinitionName);
+ }
+
+
public boolean hasNext() {
return iterator.hasNext();
}
* Treiber, Host, User und Passwort, ueber den der Zugriff auf die
* Datenbank erfolgt.
*
- * @version $Id: Database.java,v 1.44.2.8 2003/11/24 19:57:54 rk Exp $
+ * @version $Id: Database.java,v 1.44.2.9 2003/11/24 21:45:26 rk Exp $
* @author rk
*
*/
*/
public EntityList selectByWhereClauseWithExtraTables(String mainTablePrefix,
- Vector extraTables, String aWhereClause )
+ List extraTables, String aWhereClause )
throws StorageObjectFailure {
return selectByWhereClause( mainTablePrefix, extraTables, aWhereClause, "", 0, -1);
}
* @return EntityList mit den gematchten Entities
* @exception StorageObjectException
*/
- public EntityList selectByWhereClause(String mainTablePrefix, Vector extraTables,
+ public EntityList selectByWhereClause(String mainTablePrefix, List extraTables,
String aWhereClause, String anOrderByClause,
int offset, int limit) throws StorageObjectFailure {
// append extratables, if necessary
if (extraTables!=null) {
for (int i=0;i < extraTables.size();i++) {
- countSql.append( ", " + extraTables.elementAt(i));
- selectSql.append( ", " + extraTables.elementAt(i));
+ countSql.append( ", " + extraTables.get(i));
+ selectSql.append( ", " + extraTables.get(i));
}
}
*/
abstract public void update(Entity a) throws StorageObjectFailure;
+ abstract public EntityList selectByWhereClause(String mainTablePrefix, List extraTables,
+ String aWhereClause, String anOrderByClause,
+ int offset, int limit) throws StorageObjectFailure;
+
+
/**
* Dokumentation siehe Database.java
* @param a
topicOrder = aTopicOrder;
}
- // TODO rewrite as relational select
+ // TODO rewrite as relational select
public Object getValue(EntityAdapter anEntityAdapter) {
try {
String condition = "exists (select * from content_x_topic where content_id="+anEntityAdapter.get("id")+" and topic_id=id)";
public Object getValue(EntityAdapter anEntityAdapter) {
try {
- // TODO rewrite as relational select
- String condition = "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)";
+ // TODO rewrite as relational select
+ // select * from content where exists
+ // (select * from content_x_media where content_id="+
+ // anEntityAdapter.get("id")+" and media_id=id)
+ String condition = "cxm.content_id="+ anEntityAdapter.get("id") +
+ "cxm.media_id = m.id";
+ List extraTables = new Vector();
+ extraTables.add("content_x_media cxm");
+ // String condition = "exists (select * from content_x_media where content_id="+anEntityAdapter.get("id")+" and media_id=id)";
if (published)
condition = "is_published='t' and " + condition;
- return anEntityAdapter.getRelation(
- condition,
- "id",
- definition);
+ // return anEntityAdapter.getRelation(
+ // condition, "id", definition);
+
+ return anEntityAdapter.getComplexRelation("m", extraTables, condition, "id", definition);
}
catch (Throwable t) {
throw new RuntimeException(t.getMessage());
public EntityList getTopics(EntityContent content) {
EntityList returnList=null;
if (content != null) {
- // get all to_topic from content_x_topic
- // TODO rewrite with getByWhereClauseWithExtraTables
- // select t.* from topics t, content_x_topic cxt where t.id=cxt.topic_id
- // and cxt.content_id=<id>
-
- String id = content.getId();
- //String subselect = "id in (select topic_id from " + theTable + " where content_id=" + id+")";
+ String id = content.getId();
try {
Vector extraTables = new Vector();
extraTables.add(theTable+" cxt");
returnList = DatabaseTopics.getInstance()
.selectByWhereClauseWithExtraTables("t",extraTables,
- "t.id=cxt.topic_id and cxt.content_id="+id );
- // .selectByWhereClause(subselect,-1);
+ "t.id=cxt.topic_id and cxt.content_id="+id );
}
catch (Exception e) {
logger.error("-- get topics failed " + e.toString());
throws StorageObjectFailure {
EntityList returnList=null;
if (topic != null) {
- // TODO rewrite with getByWhereClauseWithExtraTables
- //
+ // TODO rewrite with getByWhereClauseWithExtraTables
+
String id = topic.getId();
String select = "select content_id from " + theTable + " where topic_id=" + id;