Changeset 3202
- Timestamp:
- Feb 11, 2005, 4:40:21 PM (21 years ago)
- Location:
- trunk/archive/psdb
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/archive/psdb/psDB.c
r3198 r3202 8 8 * @author Joshua Hoblitt 9 9 * 10 * @version $Revision: 1.1 6$ $Name: not supported by cvs2svn $11 * @date $Date: 2005-02-1 1 23:46:57$10 * @version $Revision: 1.17 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2005-02-12 02:40:21 $ 12 12 * 13 13 * Copyright 2005 Joshua Hoblitt, University of Hawaii … … 41 41 static void psDBPSToMySQLTableCleanup(void); 42 42 static psPtr psDBMySQLTypeAlloc(enum enum_field_types type, bool isUnsigned); 43 static psU32 psDBMySQLToPType(psU32 type, psU32 flags); 43 44 44 45 // pType utility functions … … 421 422 // signed or unsigned. The result is this ugly conversion from 422 423 // mysql -> ascii -> ptype 423 if (field ->flags & UNSIGNED_FLAG) {424 if (field[i].flags & UNSIGNED_FLAG) { 424 425 psStringPrepend(&sqlType, "UNSIGNED "); 425 426 } … … 582 583 { 583 584 return psDBSelectRows(dbh, tableName, NULL); 585 } 586 587 psMetadata *psDBDumpCols(psDB *dbh, const char *tableName) 588 { 589 MYSQL_RES *result; 590 MYSQL_FIELD *field; 591 psU32 fieldCount; 592 psMetadata *table; 593 psMetadataItem *item; 594 psU32 pType; 595 psU32 i; 596 psPtr column; 597 598 // find column types 599 result = mysql_list_fields(dbh->mysql, tableName, NULL); 600 field = mysql_fetch_fields(result); 601 fieldCount = mysql_num_fields(result); 602 603 table = psMetadataAlloc(); 604 605 // fetch each column and load into psMetadata 606 for (i =0; i < fieldCount; i++) { 607 // find ptype of column 608 pType = psDBMySQLToPType(field[i].type, field[i].flags); 609 610 // if the ptype is PS_TYPE_PTR assume that it's a string and fetch the 611 // column as an psArray of strings; otherwise fetch the column as a 612 // psVector. 613 if (pType == PS_TYPE_PTR) { 614 // PS_META_UNKNOWN -> PS_META_ARRAY ? 615 column = psDBSelectColumn(dbh, tableName, field[i].name, 0); 616 item = psMetadataItemAlloc(field[i].name, PS_TYPE_PTR, PS_META_UNKNOWN, "psArray", column); 617 psMetadataAddItem(table, item, 0); 618 psFree(column); 619 psFree(item); 620 } else { 621 column = psDBSelectColumnNum(dbh, tableName, field[i].name, pType, 0); 622 item = psMetadataItemAlloc(field[i].name, PS_TYPE_PTR, PS_META_VEC, "psVector", column); 623 psMetadataAddItem(table, item, 0); 624 //psFree(column); 625 psFree(item); 626 } 627 } 628 629 return table; 584 630 } 585 631 … … 1225 1271 1226 1272 return newSize; 1273 } 1274 1275 static psU32 psDBMySQLToPType(psU32 type, psU32 flags) 1276 { 1277 psHash *mysqlToSQLTable; // type lookup table 1278 psHash *sqlToPSTable; // type lookup table 1279 char *key; // hash tmp value 1280 char *value; // hash tmp value 1281 char *sqlType; // copy of lookup table result 1282 psU32 pType; // psElemType of a field 1283 1284 mysqlToSQLTable = psDBGetMySQLToSQLTable(); 1285 sqlToPSTable = psDBGetSQLToPSTable(); 1286 1287 // lookup MySQL column type 1288 key = psDBIntToString((psU64)type); 1289 value = psHashLookup(mysqlToSQLTable, key); 1290 sqlType = psStringCopy(value); 1291 psFree(key); 1292 1293 // MySQL column types can not be directly translated to PS 1294 // types as the the mysql types do not tell you if the value is 1295 // signed or unsigned. The result is this ugly conversion from 1296 // mysql -> ascii -> ptype 1297 if (flags & UNSIGNED_FLAG) { 1298 psStringPrepend(&sqlType, "UNSIGNED "); 1299 } 1300 1301 // convert MySQL type to PS type 1302 value = psHashLookup(sqlToPSTable, sqlType); 1303 pType = (psU32)atol(value); 1304 psFree(sqlType); 1305 1306 return pType; 1227 1307 } 1228 1308 -
trunk/archive/psdb/psDB.h
r3188 r3202 10 10 * @author Joshua Hoblitt 11 11 * 12 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $13 * @date $Date: 2005-02-1 0 20:56:41 $12 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2005-02-12 02:40:21 $ 14 14 * 15 15 * Copyright 2005 Joshua Hoblitt, University of Hawaii … … 55 55 psArray *psDBDumpRows(psDB *dbh, const char *tableName); 56 56 57 psMetadata *psDBDumpCols(psDB *dbh, const char *tableName); 58 57 59 psS64 psDBUpdateRows(psDB *dbh, const char *tableName, psMetadata *where, psMetadata *values); 58 60 -
trunk/archive/psdb/test.c
r3188 r3202 147 147 } 148 148 149 // psDBInsertOneRow() ;149 // psDBInsertOneRow() 150 150 { 151 151 psMetadata *md; … … 162 162 } 163 163 164 // psDBInsertRows() ;164 // psDBInsertRows() 165 165 { 166 166 psArray *rowSet; … … 197 197 } 198 198 199 // psDBDumpRows() ;199 // psDBDumpRows() 200 200 { 201 201 psArray *resultSet; … … 206 206 } 207 207 208 // psDBUpdateRows(); 208 // psDBDumpCols() 209 { 210 psMetadata *columns; 211 psMetadataItem *item; 212 psListIterator *cursor; 213 214 columns = psDBDumpCols(dbh, "horse"); 215 OK(columns, "psDBDumpCols()"); 216 217 cursor = psListIteratorAlloc(columns->list, 0); 218 219 while ((item = psListGetNext(cursor))) { 220 printf("column name is: %s\n", item->name); 221 } 222 223 psFree(cursor); 224 psFree(columns); 225 } 226 227 // psDBUpdateRows() 209 228 { 210 229 psMetadata *where;
Note:
See TracChangeset
for help on using the changeset viewer.
