Index: trunk/psLib/src/db/psDB.c
===================================================================
--- trunk/psLib/src/db/psDB.c	(revision 5136)
+++ trunk/psLib/src/db/psDB.c	(revision 5216)
@@ -12,6 +12,6 @@
  *  @author Joshua Hoblitt
  *
- *  @version $Revision: 1.43 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-09-26 21:13:16 $
+ *  @version $Revision: 1.44 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-10-01 02:22:09 $
  *
  *  Copyright 2005 Joshua Hoblitt, University of Hawaii
@@ -43,4 +43,9 @@
 }
 mysqlType;
+
+static psHash   *pTypeToSQLlookupTable = NULL;
+static psHash   *sqlToPTypeLookupTable = NULL;
+static psHash   *mysqlToSqlLookupTable = NULL;
+static psHash   *pTypeToMysqlLookupTable = NULL;
 
 // database utility functions
@@ -1421,45 +1426,39 @@
 static psHash *psDBGetPTypeToSQLTable(void)
 {
-    static psHash   *lookupTable = NULL;
-
-    if (!lookupTable) {
-        lookupTable = psHashAlloc(14);
+
+    if (!pTypeToSQLlookupTable) {
+        pTypeToSQLlookupTable = psHashAlloc(14);
 
         // no support for CHAR, TEXT or GLOB
-        psDBAddToLookupTable(lookupTable, PS_TYPE_S8,  "TINYINT");
-        psDBAddToLookupTable(lookupTable, PS_TYPE_S16, "SMALLINT");
-        psDBAddToLookupTable(lookupTable, PS_TYPE_S32, "INT");
-        psDBAddToLookupTable(lookupTable, PS_TYPE_S64, "BIGINT");
-        psDBAddToLookupTable(lookupTable, PS_TYPE_U8,  "UNSIGNED TINYINT");
-        psDBAddToLookupTable(lookupTable, PS_TYPE_U16, "UNSIGNED SMALLINT");
-        psDBAddToLookupTable(lookupTable, PS_TYPE_U32, "UNSIGNED INT");
-        psDBAddToLookupTable(lookupTable, PS_TYPE_U64, "UNSIGNED BIGINT");
-        psDBAddToLookupTable(lookupTable, PS_TYPE_F32, "FLOAT");
-        psDBAddToLookupTable(lookupTable, PS_TYPE_F64, "DOUBLE");
-        psDBAddToLookupTable(lookupTable, PS_TYPE_C32, "PS_TYPE_C32 is not supported");
-        psDBAddToLookupTable(lookupTable, PS_TYPE_C64, "PS_TYPE_C64 is not supported");
-        psDBAddToLookupTable(lookupTable, PS_TYPE_BOOL,"TINYINT");
-        psDBAddToLookupTable(lookupTable, PS_DATA_STRING, "VARCHAR");
+        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_S8,  "TINYINT");
+        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_S16, "SMALLINT");
+        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_S32, "INT");
+        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_S64, "BIGINT");
+        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_U8,  "UNSIGNED TINYINT");
+        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_U16, "UNSIGNED SMALLINT");
+        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_U32, "UNSIGNED INT");
+        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_U64, "UNSIGNED BIGINT");
+        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_F32, "FLOAT");
+        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_F64, "DOUBLE");
+        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_C32, "PS_TYPE_C32 is not supported");
+        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_C64, "PS_TYPE_C64 is not supported");
+        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_BOOL,"TINYINT");
+        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_DATA_STRING, "VARCHAR");
     }
 
     // simulate true ref counting
-    psMemIncrRefCounter(lookupTable);
-
-    return lookupTable;
+    psMemIncrRefCounter(pTypeToSQLlookupTable);
+
+    return pTypeToSQLlookupTable;
 }
 
 static void psDBPTypeToSQLTableCleanup(void)
 {
-    psHash          *lookupTable;
-
-    lookupTable = psDBGetPTypeToSQLTable();
-
-    psMemDecrRefCounter(lookupTable);
-    psFree(lookupTable);
+    psFree(pTypeToSQLlookupTable);
+    pTypeToSQLlookupTable = NULL;
 }
 
 static psHash *psDBGetSQLToPTypeTable(void)
 {
-    static psHash   *lookupTable = NULL;
     psHash          *psToSQLTable;
     psList          *list;
@@ -1468,8 +1467,8 @@
     char            *value;
 
-    if (!lookupTable) {
+    if (!sqlToPTypeLookupTable) {
         // invert the PSToSQL table
         psToSQLTable = psDBGetPTypeToSQLTable();
-        lookupTable = psHashAlloc(psToSQLTable->n);
+        sqlToPTypeLookupTable = psHashAlloc(psToSQLTable->n);
 
         list = psHashKeyList(psToSQLTable);
@@ -1479,16 +1478,16 @@
             value = psHashLookup(psToSQLTable, key);
             // switch key and value
-            psHashAdd(lookupTable, value, key);
+            psHashAdd(sqlToPTypeLookupTable, value, key);
         }
 
         // Add BLOB & TEXT reverse mappings
         value = psDBIntToString((psU64)PS_DATA_STRING);
-        psHashAdd(lookupTable, "BLOB",    value);
-        psHashAdd(lookupTable, "TEXT",    value);
+        psHashAdd(sqlToPTypeLookupTable, "BLOB",    value);
+        psHashAdd(sqlToPTypeLookupTable, "TEXT",    value);
         psFree(value);
 
         // DECIMAL does not exist in the pType to SQL table
         value = psDBIntToString(0);
-        psHashAdd(lookupTable, "DECIMAL", value);
+        psHashAdd(sqlToPTypeLookupTable, "DECIMAL", value);
         psFree(value);
 
@@ -1499,115 +1498,99 @@
 
     // simulate true ref counting
-    psMemIncrRefCounter(lookupTable);
-
-    return lookupTable;
+    psMemIncrRefCounter(sqlToPTypeLookupTable);
+
+    return sqlToPTypeLookupTable;
 }
 
 static void psDBSQLToPTypeTableCleanup(void)
 {
-    psHash          *lookupTable;
-
-    lookupTable = psDBGetSQLToPTypeTable();
-
-    psMemDecrRefCounter(lookupTable);
-    psFree(lookupTable);
+    psFree(sqlToPTypeLookupTable);
+    sqlToPTypeLookupTable = NULL;
 }
 
 static psHash *psDBGetMySQLToSQLTable(void)
 {
-    static psHash   *lookupTable = NULL;
-
-    if (!lookupTable) {
-        lookupTable = psHashAlloc(20);
-
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_TINY,      "TINYINT");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_SHORT,     "SMALLINT");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_LONG,      "INT");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_INT24,     "MEDIUMINT");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_LONGLONG,  "BIGINT");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_DECIMAL,   "DECIMAL");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_FLOAT,     "FLOAT");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_DOUBLE,    "DOUBLE");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_TIMESTAMP, "TIMESTAMP");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_DATE,      "DATE");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_TIME,      "TIME");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_DATETIME,  "DATETIME");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_YEAR,      "YEAR");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_STRING,    "CHAR");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_VAR_STRING,"VARCHAR");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_BLOB,      "BLOB");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_SET,       "SET");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_ENUM,      "ENUM");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_NULL,      "NULL-type");
-        psDBAddToLookupTable(lookupTable, FIELD_TYPE_CHAR,      "TINYINT");
+    if (!mysqlToSqlLookupTable) {
+        mysqlToSqlLookupTable = psHashAlloc(20);
+
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_TINY,      "TINYINT");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_SHORT,     "SMALLINT");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_LONG,      "INT");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_INT24,     "MEDIUMINT");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_LONGLONG,  "BIGINT");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_DECIMAL,   "DECIMAL");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_FLOAT,     "FLOAT");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_DOUBLE,    "DOUBLE");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_TIMESTAMP, "TIMESTAMP");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_DATE,      "DATE");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_TIME,      "TIME");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_DATETIME,  "DATETIME");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_YEAR,      "YEAR");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_STRING,    "CHAR");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_VAR_STRING,"VARCHAR");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_BLOB,      "BLOB");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_SET,       "SET");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_ENUM,      "ENUM");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_NULL,      "NULL-type");
+        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_CHAR,      "TINYINT");
     }
 
     // simulate true ref counting
-    psMemIncrRefCounter(lookupTable);
-
-    return lookupTable;
+    psMemIncrRefCounter(mysqlToSqlLookupTable);
+
+    return mysqlToSqlLookupTable;
 }
 
 static void psDBMySQLToSQLTableCleanup(void)
 {
-    psHash          *lookupTable;
-
-    lookupTable = psDBGetMySQLToSQLTable();
-
-    psMemDecrRefCounter(lookupTable);
-    psFree(lookupTable);
+    psFree(mysqlToSqlLookupTable);
+    mysqlToSqlLookupTable = NULL;
 }
 
 static psHash *psDBGetPTypeToMySQLTable(void)
 {
-    static psHash   *lookupTable = NULL;
-
-    if (!lookupTable) {
-        lookupTable = psHashAlloc(14);
-
-        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_S8,     psDBMySQLTypeAlloc(MYSQL_TYPE_TINY,       false));
-        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_S16,    psDBMySQLTypeAlloc(MYSQL_TYPE_SHORT,      false));
-        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_S32,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONG,       false));
-        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_S64,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONGLONG,   false));
-        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_U8,     psDBMySQLTypeAlloc(MYSQL_TYPE_TINY,       true));
-        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_U16,    psDBMySQLTypeAlloc(MYSQL_TYPE_SHORT,      true));
-        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_U32,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONG,       true));
-        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_U64,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONGLONG,   true));
-        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_F32,    psDBMySQLTypeAlloc(MYSQL_TYPE_FLOAT,      false));
-        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_F64,    psDBMySQLTypeAlloc(MYSQL_TYPE_DOUBLE,     false));
+    if (!pTypeToMysqlLookupTable) {
+        pTypeToMysqlLookupTable = psHashAlloc(14);
+
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_S8,     psDBMySQLTypeAlloc(MYSQL_TYPE_TINY,       false));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_S16,    psDBMySQLTypeAlloc(MYSQL_TYPE_SHORT,      false));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_S32,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONG,       false));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_S64,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONGLONG,   false));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_U8,     psDBMySQLTypeAlloc(MYSQL_TYPE_TINY,       true));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_U16,    psDBMySQLTypeAlloc(MYSQL_TYPE_SHORT,      true));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_U32,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONG,       true));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_U64,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONGLONG,   true));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_F32,    psDBMySQLTypeAlloc(MYSQL_TYPE_FLOAT,      false));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_F64,    psDBMySQLTypeAlloc(MYSQL_TYPE_DOUBLE,     false));
         // bogus type
-        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_C32,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_C32,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
         // bogus type
-        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_C64,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
-        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_BOOL,   psDBMySQLTypeAlloc(MYSQL_TYPE_TINY,       true));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_C64,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_BOOL,   psDBMySQLTypeAlloc(MYSQL_TYPE_TINY,       true));
         // XXX: removed PS_TYPE_PTR, can this be removed too?
-        // psDBAddVoidToLookupTable(lookupTable, PS_TYPE_PTR,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
-
-        psDBAddVoidToLookupTable(lookupTable, PS_DATA_STRING,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
-        psDBAddVoidToLookupTable(lookupTable, PS_DATA_VECTOR,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
-        psDBAddVoidToLookupTable(lookupTable, PS_DATA_IMAGE,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
-        psDBAddVoidToLookupTable(lookupTable, PS_DATA_HASH,   psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
-        psDBAddVoidToLookupTable(lookupTable, PS_DATA_LOOKUPTABLE,
+        // psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_PTR,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
+
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_STRING,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_VECTOR,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_IMAGE,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_HASH,   psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_LOOKUPTABLE,
                                  psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
-        //        psDBAddVoidToLookupTable(lookupTable, PS_DATA_JPEG,   psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
-        //        psDBAddVoidToLookupTable(lookupTable, PS_DATA_PNG,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
-        //        psDBAddVoidToLookupTable(lookupTable, PS_DATA_ASTROM, psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
-        psDBAddVoidToLookupTable(lookupTable, PS_DATA_UNKNOWN,psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
+        //        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_JPEG,   psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
+        //        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_PNG,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
+        //        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_ASTROM, psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
+        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_UNKNOWN,psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     }
 
     // simulate true ref counting
-    psMemIncrRefCounter(lookupTable);
-
-    return lookupTable;
+    psMemIncrRefCounter(pTypeToMysqlLookupTable);
+
+    return pTypeToMysqlLookupTable;
 }
 
 static void psDBPTypeToMySQLTableCleanup(void)
 {
-    psHash          *lookupTable;
-
-    lookupTable = psDBGetPTypeToMySQLTable();
-
-    psMemDecrRefCounter(lookupTable);
-    psFree(lookupTable);
+    psFree(pTypeToMysqlLookupTable);
+    pTypeToMysqlLookupTable = NULL;
 }
 
