o_store fixx
authorrk <rk>
Thu, 27 Nov 2003 21:11:53 +0000 (21:11 +0000)
committerrk <rk>
Thu, 27 Nov 2003 21:11:53 +0000 (21:11 +0000)
source/mir/entity/StorableObjectEntity.java
source/mir/storage/Database.java

index 79dc3bd..796d560 100755 (executable)
@@ -38,8 +38,11 @@ package mir.entity;
  * @version       1.0
  */
 
+import java.sql.ResultSet;
+import java.sql.SQLException;
 import java.util.Set;
 
+import mir.storage.Database;
 import mir.storage.store.StorableObject;
 import mir.storage.store.StoreIdentifier;
 
@@ -61,6 +64,29 @@ public class StorableObjectEntity extends Entity
     return null;
   }
 
+  public static final StoreIdentifier getStoreIdentifier(
+     Class theEntityClass, String theTable, String id) {
+     if (id == null) {
+        return null;
+     } else {
+        return new StoreIdentifier(theEntityClass, id + "@" + theTable);
+     }
+  }
+  
+  public static final StoreIdentifier getStoreIdentifier(Database theStorage,
+     Class theEntityClass, ResultSet rs) throws SQLException {
+     
+        String idcol = theStorage.getIdName();
+        String idval = rs.getObject(idcol).toString();
+
+        if (idval != null) {
+           return getStoreIdentifier(theEntityClass,
+              theStorage.getTableName(), idval);
+        }
+     
+     return null;
+  }
+
   /**
    *  Method:       getNotifyOnReleaseSet()
    *  Description:  returns empty Set, GenericContainer does not implement
index 50b9081..7acbb67 100755 (executable)
@@ -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.17 2003/11/27 20:45:03 rk Exp $
+ * @version $Id: Database.java,v 1.44.2.18 2003/11/27 21:11:53 rk Exp $
  * @author rk
  *
  */
@@ -750,13 +750,21 @@ public class Database implements StorageObject {
    */
   private Entity makeEntityFromResultSet(ResultSet rs)
     throws StorageObjectFailure {
-    /** @todo OS: get Pkey from ResultSet and consult ObjectStore */
     Map theResultHash = new HashMap();
     String theResult = null;
     int theType;
     Entity returnEntity = null;
 
     try {
+      // ask object store for object @ thePKeyIndex
+      if (StoreUtil.extendsStorableEntity(theEntityClass)) {
+         StoreIdentifier searchSid = StorableObjectEntity.getStoreIdentifier(this,
+               theEntityClass, rs);
+         Entity hit = (Entity) o_store.use(searchSid);
+         if (hit != null) return hit;
+      }
+
+
       int size = metadataFields.size();
 
       for (int i = 0; i < size; i++) {