IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 5216 for trunk/psLib/src/db


Ignore:
Timestamp:
Sep 30, 2005, 4:22:26 PM (21 years ago)
Author:
desonia
Message:

changed psArrayGet/psArraySet/psArrayRemove to do proper reference counting.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/db/psDB.c

    r5136 r5216  
    1212 *  @author Joshua Hoblitt
    1313 *
    14  *  @version $Revision: 1.43 $ $Name: not supported by cvs2svn $
    15  *  @date $Date: 2005-09-26 21:13:16 $
     14 *  @version $Revision: 1.44 $ $Name: not supported by cvs2svn $
     15 *  @date $Date: 2005-10-01 02:22:09 $
    1616 *
    1717 *  Copyright 2005 Joshua Hoblitt, University of Hawaii
     
    4343}
    4444mysqlType;
     45
     46static psHash   *pTypeToSQLlookupTable = NULL;
     47static psHash   *sqlToPTypeLookupTable = NULL;
     48static psHash   *mysqlToSqlLookupTable = NULL;
     49static psHash   *pTypeToMysqlLookupTable = NULL;
    4550
    4651// database utility functions
     
    14211426static psHash *psDBGetPTypeToSQLTable(void)
    14221427{
    1423     static psHash   *lookupTable = NULL;
    1424 
    1425     if (!lookupTable) {
    1426         lookupTable = psHashAlloc(14);
     1428
     1429    if (!pTypeToSQLlookupTable) {
     1430        pTypeToSQLlookupTable = psHashAlloc(14);
    14271431
    14281432        // no support for CHAR, TEXT or GLOB
    1429         psDBAddToLookupTable(lookupTable, PS_TYPE_S8,  "TINYINT");
    1430         psDBAddToLookupTable(lookupTable, PS_TYPE_S16, "SMALLINT");
    1431         psDBAddToLookupTable(lookupTable, PS_TYPE_S32, "INT");
    1432         psDBAddToLookupTable(lookupTable, PS_TYPE_S64, "BIGINT");
    1433         psDBAddToLookupTable(lookupTable, PS_TYPE_U8,  "UNSIGNED TINYINT");
    1434         psDBAddToLookupTable(lookupTable, PS_TYPE_U16, "UNSIGNED SMALLINT");
    1435         psDBAddToLookupTable(lookupTable, PS_TYPE_U32, "UNSIGNED INT");
    1436         psDBAddToLookupTable(lookupTable, PS_TYPE_U64, "UNSIGNED BIGINT");
    1437         psDBAddToLookupTable(lookupTable, PS_TYPE_F32, "FLOAT");
    1438         psDBAddToLookupTable(lookupTable, PS_TYPE_F64, "DOUBLE");
    1439         psDBAddToLookupTable(lookupTable, PS_TYPE_C32, "PS_TYPE_C32 is not supported");
    1440         psDBAddToLookupTable(lookupTable, PS_TYPE_C64, "PS_TYPE_C64 is not supported");
    1441         psDBAddToLookupTable(lookupTable, PS_TYPE_BOOL,"TINYINT");
    1442         psDBAddToLookupTable(lookupTable, PS_DATA_STRING, "VARCHAR");
     1433        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_S8,  "TINYINT");
     1434        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_S16, "SMALLINT");
     1435        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_S32, "INT");
     1436        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_S64, "BIGINT");
     1437        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_U8,  "UNSIGNED TINYINT");
     1438        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_U16, "UNSIGNED SMALLINT");
     1439        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_U32, "UNSIGNED INT");
     1440        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_U64, "UNSIGNED BIGINT");
     1441        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_F32, "FLOAT");
     1442        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_F64, "DOUBLE");
     1443        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_C32, "PS_TYPE_C32 is not supported");
     1444        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_C64, "PS_TYPE_C64 is not supported");
     1445        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_TYPE_BOOL,"TINYINT");
     1446        psDBAddToLookupTable(pTypeToSQLlookupTable, PS_DATA_STRING, "VARCHAR");
    14431447    }
    14441448
    14451449    // simulate true ref counting
    1446     psMemIncrRefCounter(lookupTable);
    1447 
    1448     return lookupTable;
     1450    psMemIncrRefCounter(pTypeToSQLlookupTable);
     1451
     1452    return pTypeToSQLlookupTable;
    14491453}
    14501454
    14511455static void psDBPTypeToSQLTableCleanup(void)
    14521456{
    1453     psHash          *lookupTable;
    1454 
    1455     lookupTable = psDBGetPTypeToSQLTable();
    1456 
    1457     psMemDecrRefCounter(lookupTable);
    1458     psFree(lookupTable);
     1457    psFree(pTypeToSQLlookupTable);
     1458    pTypeToSQLlookupTable = NULL;
    14591459}
    14601460
    14611461static psHash *psDBGetSQLToPTypeTable(void)
    14621462{
    1463     static psHash   *lookupTable = NULL;
    14641463    psHash          *psToSQLTable;
    14651464    psList          *list;
     
    14681467    char            *value;
    14691468
    1470     if (!lookupTable) {
     1469    if (!sqlToPTypeLookupTable) {
    14711470        // invert the PSToSQL table
    14721471        psToSQLTable = psDBGetPTypeToSQLTable();
    1473         lookupTable = psHashAlloc(psToSQLTable->n);
     1472        sqlToPTypeLookupTable = psHashAlloc(psToSQLTable->n);
    14741473
    14751474        list = psHashKeyList(psToSQLTable);
     
    14791478            value = psHashLookup(psToSQLTable, key);
    14801479            // switch key and value
    1481             psHashAdd(lookupTable, value, key);
     1480            psHashAdd(sqlToPTypeLookupTable, value, key);
    14821481        }
    14831482
    14841483        // Add BLOB & TEXT reverse mappings
    14851484        value = psDBIntToString((psU64)PS_DATA_STRING);
    1486         psHashAdd(lookupTable, "BLOB",    value);
    1487         psHashAdd(lookupTable, "TEXT",    value);
     1485        psHashAdd(sqlToPTypeLookupTable, "BLOB",    value);
     1486        psHashAdd(sqlToPTypeLookupTable, "TEXT",    value);
    14881487        psFree(value);
    14891488
    14901489        // DECIMAL does not exist in the pType to SQL table
    14911490        value = psDBIntToString(0);
    1492         psHashAdd(lookupTable, "DECIMAL", value);
     1491        psHashAdd(sqlToPTypeLookupTable, "DECIMAL", value);
    14931492        psFree(value);
    14941493
     
    14991498
    15001499    // simulate true ref counting
    1501     psMemIncrRefCounter(lookupTable);
    1502 
    1503     return lookupTable;
     1500    psMemIncrRefCounter(sqlToPTypeLookupTable);
     1501
     1502    return sqlToPTypeLookupTable;
    15041503}
    15051504
    15061505static void psDBSQLToPTypeTableCleanup(void)
    15071506{
    1508     psHash          *lookupTable;
    1509 
    1510     lookupTable = psDBGetSQLToPTypeTable();
    1511 
    1512     psMemDecrRefCounter(lookupTable);
    1513     psFree(lookupTable);
     1507    psFree(sqlToPTypeLookupTable);
     1508    sqlToPTypeLookupTable = NULL;
    15141509}
    15151510
    15161511static psHash *psDBGetMySQLToSQLTable(void)
    15171512{
    1518     static psHash   *lookupTable = NULL;
    1519 
    1520     if (!lookupTable) {
    1521         lookupTable = psHashAlloc(20);
    1522 
    1523         psDBAddToLookupTable(lookupTable, FIELD_TYPE_TINY,      "TINYINT");
    1524         psDBAddToLookupTable(lookupTable, FIELD_TYPE_SHORT,     "SMALLINT");
    1525         psDBAddToLookupTable(lookupTable, FIELD_TYPE_LONG,      "INT");
    1526         psDBAddToLookupTable(lookupTable, FIELD_TYPE_INT24,     "MEDIUMINT");
    1527         psDBAddToLookupTable(lookupTable, FIELD_TYPE_LONGLONG,  "BIGINT");
    1528         psDBAddToLookupTable(lookupTable, FIELD_TYPE_DECIMAL,   "DECIMAL");
    1529         psDBAddToLookupTable(lookupTable, FIELD_TYPE_FLOAT,     "FLOAT");
    1530         psDBAddToLookupTable(lookupTable, FIELD_TYPE_DOUBLE,    "DOUBLE");
    1531         psDBAddToLookupTable(lookupTable, FIELD_TYPE_TIMESTAMP, "TIMESTAMP");
    1532         psDBAddToLookupTable(lookupTable, FIELD_TYPE_DATE,      "DATE");
    1533         psDBAddToLookupTable(lookupTable, FIELD_TYPE_TIME,      "TIME");
    1534         psDBAddToLookupTable(lookupTable, FIELD_TYPE_DATETIME,  "DATETIME");
    1535         psDBAddToLookupTable(lookupTable, FIELD_TYPE_YEAR,      "YEAR");
    1536         psDBAddToLookupTable(lookupTable, FIELD_TYPE_STRING,    "CHAR");
    1537         psDBAddToLookupTable(lookupTable, FIELD_TYPE_VAR_STRING,"VARCHAR");
    1538         psDBAddToLookupTable(lookupTable, FIELD_TYPE_BLOB,      "BLOB");
    1539         psDBAddToLookupTable(lookupTable, FIELD_TYPE_SET,       "SET");
    1540         psDBAddToLookupTable(lookupTable, FIELD_TYPE_ENUM,      "ENUM");
    1541         psDBAddToLookupTable(lookupTable, FIELD_TYPE_NULL,      "NULL-type");
    1542         psDBAddToLookupTable(lookupTable, FIELD_TYPE_CHAR,      "TINYINT");
     1513    if (!mysqlToSqlLookupTable) {
     1514        mysqlToSqlLookupTable = psHashAlloc(20);
     1515
     1516        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_TINY,      "TINYINT");
     1517        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_SHORT,     "SMALLINT");
     1518        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_LONG,      "INT");
     1519        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_INT24,     "MEDIUMINT");
     1520        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_LONGLONG,  "BIGINT");
     1521        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_DECIMAL,   "DECIMAL");
     1522        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_FLOAT,     "FLOAT");
     1523        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_DOUBLE,    "DOUBLE");
     1524        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_TIMESTAMP, "TIMESTAMP");
     1525        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_DATE,      "DATE");
     1526        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_TIME,      "TIME");
     1527        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_DATETIME,  "DATETIME");
     1528        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_YEAR,      "YEAR");
     1529        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_STRING,    "CHAR");
     1530        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_VAR_STRING,"VARCHAR");
     1531        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_BLOB,      "BLOB");
     1532        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_SET,       "SET");
     1533        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_ENUM,      "ENUM");
     1534        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_NULL,      "NULL-type");
     1535        psDBAddToLookupTable(mysqlToSqlLookupTable, FIELD_TYPE_CHAR,      "TINYINT");
    15431536    }
    15441537
    15451538    // simulate true ref counting
    1546     psMemIncrRefCounter(lookupTable);
    1547 
    1548     return lookupTable;
     1539    psMemIncrRefCounter(mysqlToSqlLookupTable);
     1540
     1541    return mysqlToSqlLookupTable;
    15491542}
    15501543
    15511544static void psDBMySQLToSQLTableCleanup(void)
    15521545{
    1553     psHash          *lookupTable;
    1554 
    1555     lookupTable = psDBGetMySQLToSQLTable();
    1556 
    1557     psMemDecrRefCounter(lookupTable);
    1558     psFree(lookupTable);
     1546    psFree(mysqlToSqlLookupTable);
     1547    mysqlToSqlLookupTable = NULL;
    15591548}
    15601549
    15611550static psHash *psDBGetPTypeToMySQLTable(void)
    15621551{
    1563     static psHash   *lookupTable = NULL;
    1564 
    1565     if (!lookupTable) {
    1566         lookupTable = psHashAlloc(14);
    1567 
    1568         psDBAddVoidToLookupTable(lookupTable, PS_TYPE_S8,     psDBMySQLTypeAlloc(MYSQL_TYPE_TINY,       false));
    1569         psDBAddVoidToLookupTable(lookupTable, PS_TYPE_S16,    psDBMySQLTypeAlloc(MYSQL_TYPE_SHORT,      false));
    1570         psDBAddVoidToLookupTable(lookupTable, PS_TYPE_S32,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONG,       false));
    1571         psDBAddVoidToLookupTable(lookupTable, PS_TYPE_S64,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONGLONG,   false));
    1572         psDBAddVoidToLookupTable(lookupTable, PS_TYPE_U8,     psDBMySQLTypeAlloc(MYSQL_TYPE_TINY,       true));
    1573         psDBAddVoidToLookupTable(lookupTable, PS_TYPE_U16,    psDBMySQLTypeAlloc(MYSQL_TYPE_SHORT,      true));
    1574         psDBAddVoidToLookupTable(lookupTable, PS_TYPE_U32,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONG,       true));
    1575         psDBAddVoidToLookupTable(lookupTable, PS_TYPE_U64,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONGLONG,   true));
    1576         psDBAddVoidToLookupTable(lookupTable, PS_TYPE_F32,    psDBMySQLTypeAlloc(MYSQL_TYPE_FLOAT,      false));
    1577         psDBAddVoidToLookupTable(lookupTable, PS_TYPE_F64,    psDBMySQLTypeAlloc(MYSQL_TYPE_DOUBLE,     false));
     1552    if (!pTypeToMysqlLookupTable) {
     1553        pTypeToMysqlLookupTable = psHashAlloc(14);
     1554
     1555        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_S8,     psDBMySQLTypeAlloc(MYSQL_TYPE_TINY,       false));
     1556        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_S16,    psDBMySQLTypeAlloc(MYSQL_TYPE_SHORT,      false));
     1557        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_S32,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONG,       false));
     1558        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_S64,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONGLONG,   false));
     1559        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_U8,     psDBMySQLTypeAlloc(MYSQL_TYPE_TINY,       true));
     1560        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_U16,    psDBMySQLTypeAlloc(MYSQL_TYPE_SHORT,      true));
     1561        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_U32,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONG,       true));
     1562        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_U64,    psDBMySQLTypeAlloc(MYSQL_TYPE_LONGLONG,   true));
     1563        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_F32,    psDBMySQLTypeAlloc(MYSQL_TYPE_FLOAT,      false));
     1564        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_F64,    psDBMySQLTypeAlloc(MYSQL_TYPE_DOUBLE,     false));
    15781565        // bogus type
    1579         psDBAddVoidToLookupTable(lookupTable, PS_TYPE_C32,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1566        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_C32,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
    15801567        // bogus type
    1581         psDBAddVoidToLookupTable(lookupTable, PS_TYPE_C64,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
    1582         psDBAddVoidToLookupTable(lookupTable, PS_TYPE_BOOL,   psDBMySQLTypeAlloc(MYSQL_TYPE_TINY,       true));
     1568        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_C64,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1569        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_BOOL,   psDBMySQLTypeAlloc(MYSQL_TYPE_TINY,       true));
    15831570        // XXX: removed PS_TYPE_PTR, can this be removed too?
    1584         // psDBAddVoidToLookupTable(lookupTable, PS_TYPE_PTR,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
    1585 
    1586         psDBAddVoidToLookupTable(lookupTable, PS_DATA_STRING,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
    1587         psDBAddVoidToLookupTable(lookupTable, PS_DATA_VECTOR,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
    1588         psDBAddVoidToLookupTable(lookupTable, PS_DATA_IMAGE,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
    1589         psDBAddVoidToLookupTable(lookupTable, PS_DATA_HASH,   psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
    1590         psDBAddVoidToLookupTable(lookupTable, PS_DATA_LOOKUPTABLE,
     1571        // psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_TYPE_PTR,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1572
     1573        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_STRING,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1574        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_VECTOR,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1575        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_IMAGE,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1576        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_HASH,   psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1577        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_LOOKUPTABLE,
    15911578                                 psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
    1592         //        psDBAddVoidToLookupTable(lookupTable, PS_DATA_JPEG,   psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
    1593         //        psDBAddVoidToLookupTable(lookupTable, PS_DATA_PNG,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
    1594         //        psDBAddVoidToLookupTable(lookupTable, PS_DATA_ASTROM, psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
    1595         psDBAddVoidToLookupTable(lookupTable, PS_DATA_UNKNOWN,psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1579        //        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_JPEG,   psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1580        //        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_PNG,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1581        //        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_ASTROM, psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1582        psDBAddVoidToLookupTable(pTypeToMysqlLookupTable, PS_DATA_UNKNOWN,psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
    15961583    }
    15971584
    15981585    // simulate true ref counting
    1599     psMemIncrRefCounter(lookupTable);
    1600 
    1601     return lookupTable;
     1586    psMemIncrRefCounter(pTypeToMysqlLookupTable);
     1587
     1588    return pTypeToMysqlLookupTable;
    16021589}
    16031590
    16041591static void psDBPTypeToMySQLTableCleanup(void)
    16051592{
    1606     psHash          *lookupTable;
    1607 
    1608     lookupTable = psDBGetPTypeToMySQLTable();
    1609 
    1610     psMemDecrRefCounter(lookupTable);
    1611     psFree(lookupTable);
     1593    psFree(pTypeToMysqlLookupTable);
     1594    pTypeToMysqlLookupTable = NULL;
    16121595}
    16131596
Note: See TracChangeset for help on using the changeset viewer.