Changeset 5216 for trunk/psLib/src/db
- Timestamp:
- Sep 30, 2005, 4:22:26 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/db/psDB.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/db/psDB.c
r5136 r5216 12 12 * @author Joshua Hoblitt 13 13 * 14 * @version $Revision: 1.4 3$ $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 $ 16 16 * 17 17 * Copyright 2005 Joshua Hoblitt, University of Hawaii … … 43 43 } 44 44 mysqlType; 45 46 static psHash *pTypeToSQLlookupTable = NULL; 47 static psHash *sqlToPTypeLookupTable = NULL; 48 static psHash *mysqlToSqlLookupTable = NULL; 49 static psHash *pTypeToMysqlLookupTable = NULL; 45 50 46 51 // database utility functions … … 1421 1426 static psHash *psDBGetPTypeToSQLTable(void) 1422 1427 { 1423 static psHash *lookupTable = NULL; 1424 1425 if (!lookupTable) { 1426 lookupTable = psHashAlloc(14); 1428 1429 if (!pTypeToSQLlookupTable) { 1430 pTypeToSQLlookupTable = psHashAlloc(14); 1427 1431 1428 1432 // 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"); 1443 1447 } 1444 1448 1445 1449 // simulate true ref counting 1446 psMemIncrRefCounter( lookupTable);1447 1448 return lookupTable;1450 psMemIncrRefCounter(pTypeToSQLlookupTable); 1451 1452 return pTypeToSQLlookupTable; 1449 1453 } 1450 1454 1451 1455 static void psDBPTypeToSQLTableCleanup(void) 1452 1456 { 1453 psHash *lookupTable; 1454 1455 lookupTable = psDBGetPTypeToSQLTable(); 1456 1457 psMemDecrRefCounter(lookupTable); 1458 psFree(lookupTable); 1457 psFree(pTypeToSQLlookupTable); 1458 pTypeToSQLlookupTable = NULL; 1459 1459 } 1460 1460 1461 1461 static psHash *psDBGetSQLToPTypeTable(void) 1462 1462 { 1463 static psHash *lookupTable = NULL;1464 1463 psHash *psToSQLTable; 1465 1464 psList *list; … … 1468 1467 char *value; 1469 1468 1470 if (! lookupTable) {1469 if (!sqlToPTypeLookupTable) { 1471 1470 // invert the PSToSQL table 1472 1471 psToSQLTable = psDBGetPTypeToSQLTable(); 1473 lookupTable = psHashAlloc(psToSQLTable->n);1472 sqlToPTypeLookupTable = psHashAlloc(psToSQLTable->n); 1474 1473 1475 1474 list = psHashKeyList(psToSQLTable); … … 1479 1478 value = psHashLookup(psToSQLTable, key); 1480 1479 // switch key and value 1481 psHashAdd( lookupTable, value, key);1480 psHashAdd(sqlToPTypeLookupTable, value, key); 1482 1481 } 1483 1482 1484 1483 // Add BLOB & TEXT reverse mappings 1485 1484 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); 1488 1487 psFree(value); 1489 1488 1490 1489 // DECIMAL does not exist in the pType to SQL table 1491 1490 value = psDBIntToString(0); 1492 psHashAdd( lookupTable, "DECIMAL", value);1491 psHashAdd(sqlToPTypeLookupTable, "DECIMAL", value); 1493 1492 psFree(value); 1494 1493 … … 1499 1498 1500 1499 // simulate true ref counting 1501 psMemIncrRefCounter( lookupTable);1502 1503 return lookupTable;1500 psMemIncrRefCounter(sqlToPTypeLookupTable); 1501 1502 return sqlToPTypeLookupTable; 1504 1503 } 1505 1504 1506 1505 static void psDBSQLToPTypeTableCleanup(void) 1507 1506 { 1508 psHash *lookupTable; 1509 1510 lookupTable = psDBGetSQLToPTypeTable(); 1511 1512 psMemDecrRefCounter(lookupTable); 1513 psFree(lookupTable); 1507 psFree(sqlToPTypeLookupTable); 1508 sqlToPTypeLookupTable = NULL; 1514 1509 } 1515 1510 1516 1511 static psHash *psDBGetMySQLToSQLTable(void) 1517 1512 { 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"); 1543 1536 } 1544 1537 1545 1538 // simulate true ref counting 1546 psMemIncrRefCounter( lookupTable);1547 1548 return lookupTable;1539 psMemIncrRefCounter(mysqlToSqlLookupTable); 1540 1541 return mysqlToSqlLookupTable; 1549 1542 } 1550 1543 1551 1544 static void psDBMySQLToSQLTableCleanup(void) 1552 1545 { 1553 psHash *lookupTable; 1554 1555 lookupTable = psDBGetMySQLToSQLTable(); 1556 1557 psMemDecrRefCounter(lookupTable); 1558 psFree(lookupTable); 1546 psFree(mysqlToSqlLookupTable); 1547 mysqlToSqlLookupTable = NULL; 1559 1548 } 1560 1549 1561 1550 static psHash *psDBGetPTypeToMySQLTable(void) 1562 1551 { 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)); 1578 1565 // 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)); 1580 1567 // 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)); 1583 1570 // 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, 1591 1578 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)); 1596 1583 } 1597 1584 1598 1585 // simulate true ref counting 1599 psMemIncrRefCounter( lookupTable);1600 1601 return lookupTable;1586 psMemIncrRefCounter(pTypeToMysqlLookupTable); 1587 1588 return pTypeToMysqlLookupTable; 1602 1589 } 1603 1590 1604 1591 static void psDBPTypeToMySQLTableCleanup(void) 1605 1592 { 1606 psHash *lookupTable; 1607 1608 lookupTable = psDBGetPTypeToMySQLTable(); 1609 1610 psMemDecrRefCounter(lookupTable); 1611 psFree(lookupTable); 1593 psFree(pTypeToMysqlLookupTable); 1594 pTypeToMysqlLookupTable = NULL; 1612 1595 } 1613 1596
Note:
See TracChangeset
for help on using the changeset viewer.
