fixed / clean ups
[mir.git] / source / mir / storage / Database.java
index 599af40..38e7583 100755 (executable)
@@ -75,56 +75,33 @@ 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.20 2003/11/28 17:21:50 rk Exp $
+ * @version $Id: Database.java,v 1.44.2.21 2004/01/18 17:30:57 zapata Exp $
  * @author rk
  *
  */
 public class Database implements StorageObject {
   private static Class GENERIC_ENTITY_CLASS = mir.entity.StorableObjectEntity.class;
-  private static Class STORABLE_OBJECT_ENTITY_CLASS = mir.entity.StorableObjectEntity.class;
-
-
-  private static Map POPUP_EMPTYLINE = new HashMap();
   protected static final ObjectStore o_store = ObjectStore.getInstance();
   private static final int _millisPerHour = 60 * 60 * 1000;
-  private static final int _millisPerMinute = 60 * 1000;
-
-  static {
-    // always same object saves a little space
-    POPUP_EMPTYLINE.put("key", "");
-    POPUP_EMPTYLINE.put("value", "--");
-  }
 
   protected LoggerWrapper logger;
   protected MirPropertiesConfiguration configuration;
-  protected String theTable;
-  protected String theCoreTable = null;
-  protected String thePKeyName = "id";
-  protected int thePKeyType;
-  protected int thePKeyIndex;
+  protected String mainTable;
+  protected String primaryKeySequence = null;
+  protected String primaryKeyField = "id";
+
   protected boolean evaluatedMetaData = false;
   protected ArrayList metadataFields;
   protected ArrayList metadataLabels;
   protected ArrayList metadataNotNullFields;
   protected int[] metadataTypes;
   protected Class theEntityClass;
-  protected List popupCache = null;
-  protected boolean hasPopupCache = false;
-  protected Map hashCache = null;
   protected boolean hasTimestamp = true;
-  private String database_driver;
-  private String database_url;
   private int defaultLimit;
 
   TimeZone timezone;
   SimpleDateFormat internalDateFormat;
   SimpleDateFormat userInputDateFormat;
-/*
-  private SimpleDateFormat _dateFormatterOut;
-  private SimpleDateFormat _dateFormatterIn;
-  _dateFormatterOut = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-  _dateFormatterIn = new SimpleDateFormat("yyyy-MM-dd HH:mm");
-*/
 
   /**
    * Kontruktor bekommt den Filenamen des Konfigurationsfiles ?bergeben.
@@ -133,8 +110,6 @@ public class Database implements StorageObject {
    * <code>Database.Host</code> und <code>Database.Adaptor</code>
    * ausgelesen und ein Broker f?r die Verbindugen zur Datenbank
    * erzeugt.
-   *
-   * @param   String confFilename Dateiname der Konfigurationsdatei
    */
   public Database() throws StorageObjectFailure {
     try {
@@ -151,7 +126,6 @@ public class Database implements StorageObject {
     userInputDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
     userInputDateFormat.setTimeZone(timezone);
 
-
     String theAdaptorName = configuration.getString("Database.Adaptor");
     defaultLimit = Integer.parseInt(configuration.getString("Database.Limit"));
 
@@ -191,7 +165,7 @@ public class Database implements StorageObject {
    * @return Name des Primary-Keys
    */
   public String getIdName() {
-    return thePKeyName;
+    return primaryKeyField;
   }
 
   /**
@@ -200,29 +174,27 @@ public class Database implements StorageObject {
    * @return Name der Tabelle
    */
   public String getTableName() {
-    return theTable;
+    return mainTable;
   }
 
-  /*
-  *   Dient dazu vererbte Tabellen bei objectrelationalen DBMS
-  *   zu speichern, wenn die id einer Tabelle in der parenttabelle verwaltet
-  *   wird.
-  *   @return liefert theCoreTabel als String zurueck, wenn gesetzt, sonst
-  *    the Table
+  /**
+   * Returns the id that was most recently added to the database
    */
-  public String getCoreTable() {
-    if (theCoreTable != null) {
-      return theCoreTable;
-    }
-    else {
-      return theTable;
-    }
+  private String getLatestInsertedId(Connection aConnection) throws SQLException {
+    if (primaryKeySequence==null)
+      primaryKeySequence = mainTable+"_id_seq";
+
+    PreparedStatement statement = aConnection.prepareStatement("select currval('" + primaryKeySequence + "')");
+
+    ResultSet rs = statement.executeQuery();
+    rs.next();
+    return rs.getString(1);
   }
 
   /**
    * Liefert Feldtypen der Felder der Tabelle zurueck (s.a. java.sql.Types)
    * @return int-Array mit den Typen der Felder
-   * @exception StorageObjectException
+   * @exception StorageObjectFailure
    */
   public int[] getTypes() throws StorageObjectFailure {
     if (metadataTypes == null) {
@@ -234,8 +206,6 @@ public class Database implements StorageObject {
 
   /**
    * Liefert eine Liste der Labels der Tabellenfelder
-   * @return ArrayListe mit Labeln
-   * @exception StorageObjectException
    */
   public List getLabels() throws StorageObjectFailure {
     if (metadataLabels == null) {
@@ -248,7 +218,6 @@ public class Database implements StorageObject {
   /**
    * Liefert eine Liste der Felder der Tabelle
    * @return ArrayList mit Feldern
-   * @exception StorageObjectException
    */
   public List getFields() throws StorageObjectFailure {
     if (metadataFields == null) {
@@ -262,7 +231,7 @@ public class Database implements StorageObject {
    *   Gets value out of ResultSet according to type and converts to String
    *   @param rs  ResultSet.
    *   @param aType  a type from java.sql.Types.*
-   *   @param index  index in ResultSet
+   *   @param valueIndex  index in ResultSet
    *   @return returns the value as String. If no conversion is possible
    *                            /unsupported value/ is returned
    */
@@ -293,7 +262,7 @@ public class Database implements StorageObject {
 
           case java.sql.Types.NUMERIC:
 
-            /** @todo Numeric can be float or double depending upon
+            /** todo Numeric can be float or double depending upon
              *  metadata.getScale() / especially with oracle */
             long outl = rs.getLong(valueIndex);
 
@@ -405,7 +374,7 @@ public class Database implements StorageObject {
       String uniqueId = id;
 
       if (theEntityClass.equals(StorableObjectEntity.class)) {
-        uniqueId += ("@" + theTable);
+        uniqueId += ("@" + mainTable);
       }
 
       StoreIdentifier search_sid = new StoreIdentifier(theEntityClass, uniqueId);
@@ -425,9 +394,9 @@ public class Database implements StorageObject {
     try {
       ResultSet rs;
 
-      /** @todo better prepared statement */
+      /** todo better prepared statement */
       String selectSql =
-        "select * from " + theTable + " where " + thePKeyName + "=" + id;
+        "select * from " + mainTable + " where " + primaryKeyField + "=" + id;
       stmt = con.createStatement();
       rs = executeSql(stmt, selectSql);
 
@@ -440,13 +409,13 @@ public class Database implements StorageObject {
           returnEntity = makeEntityFromResultSet(rs);
         }
         else {
-          logger.warn("No data for id: " + id + " in table " + theTable);
+          logger.warn("No data for id: " + id + " in table " + mainTable);
         }
 
         rs.close();
       }
       else {
-        logger.warn("No Data for Id " + id + " in Table " + theTable);
+        logger.warn("No Data for Id " + id + " in Table " + mainTable);
       }
     }
     catch (SQLException sqe) {
@@ -465,7 +434,7 @@ public class Database implements StorageObject {
 
   /**
    * This method makes it possible to make selects across multiple tables
-   * 
+   *
    * @param mainTablePrefix prefix for the mainTable
    * @param extraTables a vector of tables for relational select
    * @param aWhereClause whereClause
@@ -473,7 +442,7 @@ public class Database implements StorageObject {
    * @throws StorageObjectFailure
    */
 
-  public EntityList selectByWhereClauseWithExtraTables(String mainTablePrefix, 
+  public EntityList selectByWhereClauseWithExtraTables(String mainTablePrefix,
                                                List extraTables, String aWhereClause )
    throws StorageObjectFailure {
        return selectByWhereClause( mainTablePrefix, extraTables, aWhereClause, "", 0, defaultLimit);
@@ -481,8 +450,8 @@ public class Database implements StorageObject {
 
   /**
    *   select-Operator um Datensaetze zu bekommen, die key = value erfuellen.
-   *   @param key  Datenbankfeld der Bedingung.
-   *   @param value  Wert die der key anehmen muss.
+   *   @param aField  Datenbankfeld der Bedingung.
+   *   @param aValue  Wert die der key anehmen muss.
    *   @return EntityList mit den gematchten Entities
    */
   public EntityList selectByFieldValue(String aField, String aValue) throws StorageObjectFailure {
@@ -491,8 +460,8 @@ public class Database implements StorageObject {
 
   /**
    *   select-Operator um Datensaetze zu bekommen, die key = value erfuellen.
-   *   @param key  Datenbankfeld der Bedingung.
-   *   @param value  Wert die der key anehmen muss.
+   *   @param aField  Datenbankfeld der Bedingung.
+   *   @param aValue  Wert die der key anehmen muss.
    *   @param offset  Gibt an ab welchem Datensatz angezeigt werden soll.
    *   @return EntityList mit den gematchten Entities
    */
@@ -504,9 +473,9 @@ public class Database implements StorageObject {
    * select-Operator liefert eine EntityListe mit den gematchten Datens?tzen zur?ck.
    * Also offset wird der erste Datensatz genommen.
    *
-   * @param wc where-Clause
+   * @param where where-Clause
    * @return EntityList mit den gematchten Entities
-   * @exception StorageObjectException
+   * @exception StorageObjectFailure
    */
   public EntityList selectByWhereClause(String where) throws StorageObjectFailure {
     return selectByWhereClause(where, 0);
@@ -516,10 +485,10 @@ public class Database implements StorageObject {
    * select-Operator liefert eine EntityListe mit den gematchten Datens?tzen zur?ck.
    * Als maximale Anzahl wird das Limit auf der Konfiguration genommen.
    *
-   * @param wc where-Clause
+   * @param whereClause where-Clause
    * @param offset ab welchem Datensatz.
    * @return EntityList mit den gematchten Entities
-   * @exception StorageObjectException
+   * @exception StorageObjectFailure
    */
   public EntityList selectByWhereClause(String whereClause, int offset) throws StorageObjectFailure {
     return selectByWhereClause(whereClause, null, offset);
@@ -530,10 +499,10 @@ public class Database implements StorageObject {
    * Also offset wird der erste Datensatz genommen.
    * Als maximale Anzahl wird das Limit auf der Konfiguration genommen.
    *
-   * @param wc where-Clause
-   * @param ob orderBy-Clause
+   * @param where where-Clause
+   * @param order orderBy-Clause
    * @return EntityList mit den gematchten Entities
-   * @exception StorageObjectException
+   * @exception StorageObjectFailure
    */
   public EntityList selectByWhereClause(String where, String order) throws StorageObjectFailure {
     return selectByWhereClause(where, order, 0);
@@ -547,11 +516,11 @@ public class Database implements StorageObject {
    * select-Operator liefert eine EntityListe mit den gematchten Datens?tzen zur?ck.
    * Als maximale Anzahl wird das Limit auf der Konfiguration genommen.
    *
-   * @param wc where-Clause
-   * @param ob orderBy-Clause
+   * @param whereClause where-Clause
+   * @param orderBy orderBy-Clause
    * @param offset ab welchem Datensatz
    * @return EntityList mit den gematchten Entities
-   * @exception StorageObjectException
+   * @exception StorageObjectFailure
    */
   public EntityList selectByWhereClause(String whereClause, String orderBy, int offset) throws StorageObjectFailure {
     return selectByWhereClause(whereClause, orderBy, offset, defaultLimit);
@@ -564,11 +533,11 @@ public class Database implements StorageObject {
    * @param offset ab welchem Datensatz
    * @param limit wieviele Datens?tze
    * @return EntityList mit den gematchten Entities
-   * @exception StorageObjectException
+   * @exception StorageObjectFailure
    */
   public EntityList selectByWhereClause(String aWhereClause, String anOrderByClause,
             int offset, int limit) throws StorageObjectFailure {
-    return selectByWhereClause("", null, aWhereClause, anOrderByClause, offset, limit);              
+    return selectByWhereClause("", null, aWhereClause, anOrderByClause, offset, limit);
   }
 
 
@@ -579,35 +548,35 @@ public class Database implements StorageObject {
    * @param offset ab welchem Datensatz
    * @param limit wieviele Datens?tze
    * @return EntityList mit den gematchten Entities
-   * @exception StorageObjectException
+   * @exception StorageObjectFailure
    */
   public EntityList selectByWhereClause(String mainTablePrefix, List extraTables,
       String aWhereClause, String anOrderByClause,
                        int offset, int limit) throws StorageObjectFailure {
-    
+
     // TODO get rid of emtpy Strings in extraTables
     // make extraTables null, if single empty String in it
-    // cause StringUtil.splitString puts in emptyString        
+    // cause StringUtil.splitString puts in emptyString
     if (extraTables != null && ((String)extraTables.get(0)).trim().equals(""))
       {
         logger.debug("+++ made extraTables to null!");
         extraTables=null;
       }
-    
-      String useTable = theTable;
+
+      String useTable = mainTable;
           String selectStar = "*";
           if (mainTablePrefix!=null && mainTablePrefix.trim().length()>0) {
             useTable+=" "+mainTablePrefix;
             selectStar=mainTablePrefix.trim() + ".*";
           }
-    
+
     // check o_store for entitylist
     // only if no relational select
     if (extraTables==null) {
       if (StoreUtil.extendsStorableEntity(theEntityClass)) {
          StoreIdentifier searchSid = new StoreIdentifier(theEntityClass,
                StoreContainerType.STOC_TYPE_ENTITYLIST,
-               StoreUtil.getEntityListUniqueIdentifierFor(theTable, 
+               StoreUtil.getEntityListUniqueIdentifierFor(mainTable,
                 aWhereClause, anOrderByClause, offset, limit));
          EntityList hit = (EntityList) o_store.use(searchSid);
 
@@ -635,17 +604,17 @@ public class Database implements StorageObject {
       new StringBuffer("select count(*) from ").append(useTable);
     StringBuffer selectSql =
       new StringBuffer("select "+selectStar+" from ").append(useTable);
+
     // append extratables, if necessary
     if (extraTables!=null) {
       for (int i=0;i < extraTables.size();i++) {
-        if (!extraTables.get(i).equals("")) {        
+        if (!extraTables.get(i).equals("")) {
           countSql.append( ", " + extraTables.get(i));
           selectSql.append( ", " + extraTables.get(i));
         }
       }
     }
-    
+
     if (aWhereClause != null) {
       selectSql.append(" where ").append(aWhereClause);
       countSql.append(" where ").append(aWhereClause);
@@ -757,7 +726,6 @@ public class Database implements StorageObject {
     Entity returnEntity = null;
 
     try {
-      // ask object store for object @ thePKeyIndex
       if (StoreUtil.extendsStorableEntity(theEntityClass)) {
          StoreIdentifier searchSid = StorableObjectEntity.getStoreIdentifier(this,
                theEntityClass, rs);
@@ -805,7 +773,7 @@ public class Database implements StorageObject {
         returnEntity.setValues(theResultHash);
 
         if (returnEntity instanceof StorableObject) {
-          logger.debug("CACHE: ( in) " + returnEntity.getId() + " :" + theTable);
+          logger.debug("CACHE: ( in) " + returnEntity.getId() + " :" + mainTable);
           o_store.add(((StorableObject) returnEntity).getStoreIdentifier());
         }
       } else {
@@ -853,7 +821,6 @@ public class Database implements StorageObject {
     PreparedStatement pstmt = null;
 
     try {
-      List streamedInput = theEntity.streamedInput();
       StringBuffer f = new StringBuffer();
       StringBuffer v = new StringBuffer();
       String aField;
@@ -864,26 +831,21 @@ public class Database implements StorageObject {
       for (int i = 0; i < getFields().size(); i++) {
         aField = (String) getFields().get(i);
 
-        if (!aField.equals(thePKeyName)) {
+        if (!aField.equals(primaryKeyField)) {
           aValue = null;
 
           // exceptions
-          if (!theEntity.hasValueForField(aField) && (
+          if (!theEntity.hasFieldValue(aField) && (
               aField.equals("webdb_create") ||
               aField.equals("webdb_lastchange"))) {
             aValue = "NOW()";
           }
           else {
-            if ((streamedInput != null) && streamedInput.contains(aField)) {
-              aValue = "?";
-            }
-            else {
-              if (theEntity.hasValueForField(aField)) {
+              if (theEntity.hasFieldValue(aField)) {
                 aValue =
                   "'" +
-                   JDBCStringRoutines.escapeStringLiteral((String) theEntity.getValue(aField)) + "'";
+                   JDBCStringRoutines.escapeStringLiteral(theEntity.getFieldValue(aField)) + "'";
               }
-            }
           }
 
           // wenn Wert gegeben, dann einbauen
@@ -905,7 +867,7 @@ public class Database implements StorageObject {
 
       // insert into db
       StringBuffer sqlBuf =
-        new StringBuffer("insert into ").append(theTable).append("(").append(f)
+        new StringBuffer("insert into ").append(mainTable).append("(").append(f)
                                         .append(") values (").append(v).append(")");
       String sql = sqlBuf.toString();
 
@@ -914,14 +876,6 @@ public class Database implements StorageObject {
       con.setAutoCommit(false);
       pstmt = con.prepareStatement(sql);
 
-      if (streamedInput != null) {
-        for (int i = 0; i < streamedInput.size(); i++) {
-          String inputString =
-            (String) theEntity.getValue((String) streamedInput.get(i));
-          pstmt.setBytes(i + 1, inputString.getBytes());
-        }
-      }
-
       int ret = pstmt.executeUpdate();
 
       if (ret == 0) {
@@ -929,11 +883,9 @@ public class Database implements StorageObject {
         return null;
       }
 
-      pstmt = con.prepareStatement("select currval('" + getCoreTable() + "_id_seq')");
+//      pstmt = con.prepareStatement("select currval('" +  + "_id_seq')");
 
-      ResultSet rs = pstmt.executeQuery();
-      rs.next();
-      returnId = rs.getString(1);
+      returnId = getLatestInsertedId(con);
       theEntity.setId(returnId);
     }
     catch (SQLException sqe) {
@@ -949,7 +901,7 @@ public class Database implements StorageObject {
       freeConnection(con, pstmt);
     }
 
-    /** @todo store entity in o_store */
+    /** todo store entity in o_store */
     return returnId;
   }
 
@@ -962,13 +914,13 @@ public class Database implements StorageObject {
     Connection con = null;
     PreparedStatement pstmt = null;
 
-    /** @todo this is stupid: why do we prepare statement, when we
+    /** todo this is stupid: why do we prepare statement, when we
      *  throw it away afterwards. should be regular statement
      *  update/insert could better be one routine called save()
      *  that chooses to either insert or update depending if we
      *  have a primary key in the entity. i don't know if we
      *  still need the streamed input fields. // rk  */
-    /** @todo extension: check if Entity did change, otherwise we don't need
+    /** todo extension: check if Entity did change, otherwise we don't need
      *  the roundtrip to the database */
     /** invalidating corresponding entitylists in o_store*/
     if (StoreUtil.extendsStorableEntity(theEntityClass)) {
@@ -978,7 +930,6 @@ public class Database implements StorageObject {
       o_store.invalidate(stoc_type);
     }
 
-    List streamedInput = theEntity.streamedInput();
     String id = theEntity.getId();
     String aField;
     StringBuffer fv = new StringBuffer();
@@ -992,11 +943,11 @@ public class Database implements StorageObject {
       aField = (String) metadataFields.get(i);
 
       // only normal cases
-      if (  !(aField.equals(thePKeyName) ||
+      // todo if entity.hasFieldValue returns false, then the value should be stored as null
+      if (!(aField.equals(primaryKeyField) ||
             aField.equals("webdb_create") ||
-            aField.equals("webdb_lastchange") ||
-            ((streamedInput != null) && streamedInput.contains(aField)))) {
-        if (theEntity.hasValueForField(aField)) {
+            aField.equals("webdb_lastchange"))) {
+        if (theEntity.hasFieldValue(aField)) {
           if (firstField == false) {
             fv.append(", ");
           }
@@ -1004,15 +955,15 @@ public class Database implements StorageObject {
             firstField = false;
           }
 
-          fv.append(aField).append("='").append(JDBCStringRoutines.escapeStringLiteral((String) theEntity.getValue(aField))).append("'");
+          fv.append(aField).append("='").append(JDBCStringRoutines.escapeStringLiteral(theEntity.getFieldValue(aField))).append("'");
 
-          //              fv.append(aField).append("='").append(StringUtil.quote((String)theEntity.getValue(aField))).append("'");
+          //              fv.append(aField).append("='").append(StringUtil.quote((String)theEntity.getFieldValue(aField))).append("'");
         }
       }
     }
 
     StringBuffer sql =
-      new StringBuffer("update ").append(theTable).append(" set ").append(fv);
+      new StringBuffer("update ").append(mainTable).append(" set ").append(fv);
 
     // exceptions
     if (metadataFields.contains("webdb_lastchange")) {
@@ -1022,10 +973,10 @@ public class Database implements StorageObject {
     // special case: the webdb_create requires the field in yyyy-mm-dd HH:mm
     // format so anything extra will be ignored. -mh
     if (metadataFields.contains("webdb_create") &&
-        theEntity.hasValueForField("webdb_create")) {
+        theEntity.hasFieldValue("webdb_create")) {
       // minimum of 10 (yyyy-mm-dd)...
-      if (theEntity.getValue("webdb_create").length() >= 10) {
-        String dateString = theEntity.getValue("webdb_create");
+      if (theEntity.getFieldValue("webdb_create").length() >= 10) {
+        String dateString = theEntity.getFieldValue("webdb_create");
 
         // if only 10, then add 00:00 so it doesn't throw a ParseException
         if (dateString.length() == 10) {
@@ -1044,12 +995,6 @@ public class Database implements StorageObject {
       }
     }
 
-    if (streamedInput != null) {
-      for (int i = 0; i < streamedInput.size(); i++) {
-        sql.append(",").append(streamedInput.get(i)).append("=?");
-      }
-    }
-
     sql.append(" where id=").append(id);
     logger.info("UPDATE: " + sql);
 
@@ -1058,14 +1003,6 @@ public class Database implements StorageObject {
       con.setAutoCommit(false);
       pstmt = con.prepareStatement(sql.toString());
 
-      if (streamedInput != null) {
-        for (int i = 0; i < streamedInput.size(); i++) {
-          String inputString =
-            theEntity.getValue((String) streamedInput.get(i));
-          pstmt.setBytes(i + 1, inputString.getBytes());
-        }
-      }
-
       pstmt.executeUpdate();
     }
     catch (SQLException sqe) {
@@ -1096,7 +1033,7 @@ public class Database implements StorageObject {
       String uniqueId = id;
 
       if (theEntityClass.equals(StorableObjectEntity.class)) {
-        uniqueId += ("@" + theTable);
+        uniqueId += ("@" + mainTable);
       }
 
       logger.debug("CACHE: (del) " + id);
@@ -1107,12 +1044,12 @@ public class Database implements StorageObject {
       o_store.invalidate(search_sid);
     }
 
-    /** @todo could be prepared Statement */
+    /** todo could be prepared Statement */
     Statement stmt = null;
     Connection con = null;
     int res = 0;
     String sql =
-      "delete from " + theTable + " where " + thePKeyName + "='" + id + "'";
+      "delete from " + mainTable + " where " + primaryKeyField + "='" + id + "'";
 
     //theLog.printInfo("DELETE " + sql);
     try {
@@ -1146,7 +1083,7 @@ public class Database implements StorageObject {
     Connection con = null;
     int res = 0;
     String sql =
-      "delete from " + theTable + " where " + aWhereClause;
+      "delete from " + mainTable + " where " + aWhereClause;
 
     //theLog.printInfo("DELETE " + sql);
     try {
@@ -1173,20 +1110,14 @@ public class Database implements StorageObject {
     return false;
   }
 
-  /* invalidates the popupCache
-   */
   protected void invalidatePopupCache() {
-    /** @todo  invalidates toooo much */
-    popupCache = null;
-    hashCache = null;
+    /** todo  invalidates toooo much */
   }
 
   /**
    * Diese Methode fuehrt den Sqlstring <i>sql</i> aus und timed im Logfile.
    * @param stmt Statemnt
    * @param sql Sql-String
-   * @return ResultSet
-   * @exception StorageObjectException
    */
   public ResultSet executeSql(Statement stmt, String sql)
                             throws StorageObjectFailure, SQLException {
@@ -1206,7 +1137,7 @@ public class Database implements StorageObject {
     return rs;
   }
 
-  private Map processRow(ResultSet aResultSet) throws StorageObjectFailure, StorageObjectExc {
+  private Map processRow(ResultSet aResultSet) throws StorageObjectFailure {
     try {
       Map result = new HashMap();
       ResultSetMetaData metaData = aResultSet.getMetaData();
@@ -1288,10 +1219,10 @@ public class Database implements StorageObject {
    * returns the number of rows in the table
    */
   public int getSize(String mainTablePrefix, List extraTables, String where) throws SQLException, StorageObjectFailure {
-    
+
     long startTime = System.currentTimeMillis();
-    
-    String useTable = theTable;
+
+    String useTable = mainTable;
     if (mainTablePrefix!=null && mainTablePrefix.trim().length()>0) {
           useTable+=" "+mainTablePrefix;
     }
@@ -1300,7 +1231,7 @@ public class Database implements StorageObject {
         // append extratables, if necessary
       if (extraTables!=null) {
         for (int i=0;i < extraTables.size();i++) {
-          if (!extraTables.get(i).equals("")) {        
+          if (!extraTables.get(i).equals("")) {
             countSql.append( ", " + extraTables.get(i));
           }
         }
@@ -1380,7 +1311,6 @@ public class Database implements StorageObject {
   /**
    * Wertet ResultSetMetaData aus und setzt interne Daten entsprechend
    * @param md ResultSetMetaData
-   * @exception StorageObjectException
    */
   private void evalMetaData(ResultSetMetaData md) throws StorageObjectFailure {
     this.evaluatedMetaData = true;
@@ -1402,9 +1332,7 @@ public class Database implements StorageObject {
         aType = md.getColumnType(i);
         metadataTypes[i - 1] = aType;
 
-        if (aField.equals(thePKeyName)) {
-          thePKeyType = aType;
-          thePKeyIndex = i;
+        if (aField.equals(primaryKeyField)) {
         }
 
         if (md.isNullable(i) == ResultSetMetaData.columnNullable) {
@@ -1424,7 +1352,7 @@ public class Database implements StorageObject {
   private void get_meta_data() throws StorageObjectFailure {
     Connection con = null;
     PreparedStatement pstmt = null;
-    String sql = "select * from " + theTable + " where 0=1";
+    String sql = "select * from " + mainTable + " where 0=1";
 
     try {
       con = getPooledCon();
@@ -1467,8 +1395,7 @@ public class Database implements StorageObject {
   /**
    * Wertet SQLException aus und wirft dannach eine StorageObjectException
    * @param sqe SQLException
-   * @param wo Funktonsname, in der die SQLException geworfen wurde
-   * @exception StorageObjectException
+   * @param aFunction Funktonsname, in der die SQLException geworfen wurde
    */
   protected void throwSQLException(SQLException sqe, String aFunction) throws StorageObjectFailure {
     String state = "";
@@ -1505,8 +1432,8 @@ public class Database implements StorageObject {
   /**
    * Loggt Fehlermeldung mit dem Parameter Message und wirft dannach
    * eine StorageObjectException
-   * @param message Nachricht mit dem Fehler
-   * @exception StorageObjectException
+   * @param aMessage Nachricht mit dem Fehler
+   * @exception StorageObjectFailure
    */
   void throwStorageObjectException(String aMessage) throws StorageObjectFailure {
     logger.error(aMessage);