From 92ffdab0e35d5affcdffd9e239f7aafdbbe5cc34 Mon Sep 17 00:00:00 2001 From: rk Date: Mon, 24 Nov 2003 21:45:26 +0000 Subject: [PATCH] testing extension of EntityBrowser, EntityAdaptor --- source/mir/entity/EntityBrowser.java | 20 ++++++++++++++++---- source/mir/entity/adapter/EntityAdapter.java | 17 +++++++++++++++++ .../mir/entity/adapter/EntityIteratorAdapter.java | 10 ++++++++++ source/mir/storage/Database.java | 10 +++++----- source/mir/storage/StorageObject.java | 5 +++++ .../localizer/basic/MirBasicDataModelLocalizer.java | 21 ++++++++++++++------- .../mircoders/storage/DatabaseContentToTopics.java | 15 ++++----------- 7 files changed, 71 insertions(+), 27 deletions(-) diff --git a/source/mir/entity/EntityBrowser.java b/source/mir/entity/EntityBrowser.java index 44b21f4a..1e4f1fe2 100755 --- a/source/mir/entity/EntityBrowser.java +++ b/source/mir/entity/EntityBrowser.java @@ -30,6 +30,8 @@ package mir.entity; +import java.util.List; + import mir.storage.StorageObject; import mir.storage.StorageObjectFailure; import mir.util.RewindableIterator; @@ -37,6 +39,8 @@ 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; @@ -49,19 +53,27 @@ public class EntityBrowser implements RewindableIterator { 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 { @@ -69,7 +81,7 @@ public class EntityBrowser implements RewindableIterator { } 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; } diff --git a/source/mir/entity/adapter/EntityAdapter.java b/source/mir/entity/adapter/EntityAdapter.java index 42faf0ba..1b21f3e9 100755 --- a/source/mir/entity/adapter/EntityAdapter.java +++ b/source/mir/entity/adapter/EntityAdapter.java @@ -32,6 +32,7 @@ package mir.entity.adapter; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Set; @@ -141,6 +142,22 @@ public class EntityAdapter implements Map { 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 diff --git a/source/mir/entity/adapter/EntityIteratorAdapter.java b/source/mir/entity/adapter/EntityIteratorAdapter.java index 0b29d42c..49df936d 100755 --- a/source/mir/entity/adapter/EntityIteratorAdapter.java +++ b/source/mir/entity/adapter/EntityIteratorAdapter.java @@ -29,6 +29,8 @@ */ package mir.entity.adapter; +import java.util.List; + import mir.entity.Entity; import mir.entity.EntityBrowser; import mir.storage.StorageObjectFailure; @@ -57,6 +59,14 @@ public class EntityIteratorAdapter implements RewindableIterator { 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(); } diff --git a/source/mir/storage/Database.java b/source/mir/storage/Database.java index fde49b27..ab93c7ee 100755 --- a/source/mir/storage/Database.java +++ b/source/mir/storage/Database.java @@ -75,7 +75,7 @@ import com.codestudio.util.SQLManager; * 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 * */ @@ -474,7 +474,7 @@ public class Database implements StorageObject { */ public EntityList selectByWhereClauseWithExtraTables(String mainTablePrefix, - Vector extraTables, String aWhereClause ) + List extraTables, String aWhereClause ) throws StorageObjectFailure { return selectByWhereClause( mainTablePrefix, extraTables, aWhereClause, "", 0, -1); } @@ -576,7 +576,7 @@ public class Database implements StorageObject { * @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 { @@ -624,8 +624,8 @@ public class Database implements StorageObject { // 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)); } } diff --git a/source/mir/storage/StorageObject.java b/source/mir/storage/StorageObject.java index 921ce85d..dc68091b 100755 --- a/source/mir/storage/StorageObject.java +++ b/source/mir/storage/StorageObject.java @@ -153,6 +153,11 @@ public interface StorageObject { */ 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 diff --git a/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java b/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java index 744e5463..17eb268c 100755 --- a/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java +++ b/source/mircoders/localizer/basic/MirBasicDataModelLocalizer.java @@ -461,7 +461,7 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer { 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)"; @@ -494,14 +494,21 @@ public class MirBasicDataModelLocalizer implements MirDataModelLocalizer { 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()); diff --git a/source/mircoders/storage/DatabaseContentToTopics.java b/source/mircoders/storage/DatabaseContentToTopics.java index 0695ac7d..3d19a17e 100755 --- a/source/mircoders/storage/DatabaseContentToTopics.java +++ b/source/mircoders/storage/DatabaseContentToTopics.java @@ -82,21 +82,14 @@ public class DatabaseContentToTopics extends Database implements StorageObject{ 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= - - 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()); @@ -281,9 +274,9 @@ public class DatabaseContentToTopics extends Database implements StorageObject{ 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; -- 2.11.0