IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 29, 2005, 12:13:28 PM (21 years ago)
Author:
asc
Message:

bugfixes.

File:
1 edited

Legend:

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

    r3532 r3543  
    11/** @file  psDB.c
     2 *
     3 * -*- mode: C; c-basic-indent: 4; tab-width: 8; indent-tabs-mode: nil -*-
     4 * vim: set cindent ts=8 sw=4 expandtab:
    25 *
    36 *  @brief database functions
     
    811 *  @author Joshua Hoblitt
    912 *
    10  *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
    11  *  @date $Date: 2005-03-28 22:54:19 $
     13 *  @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
     14 *  @date $Date: 2005-03-29 22:13:28 $
    1215 *
    1316 *  Copyright 2005 Joshua Hoblitt, University of Hawaii
     
    430433
    431434            // copy field data and convert NULLs to the appropriate NaN value
    432             if (pType == PS_TYPE_PTR) {
     435            if ((pType == PS_TYPE_PTR) || (pType == PS_META_STR)) {
     436                pType = PS_META_STR;
    433437                data = fieldLength[i] ? psStringNCopy(row[i], fieldLength[i])
    434438                       : psDBGetPTypeNaN(pType);
     
    443447
    444448            // add new field to row
    445             psMetadataAdd(md, i, field[i].name, pType, "no comment", data);
     449            psMetadataAdd(md, 0, field[i].name, pType, "no comment", data);
    446450
    447451            psFree(data);
     
    450454        // add row to result set
    451455        psArrayAdd(resultSet, 0, md);
     456        psFree(md);
    452457    }
    453458
     
    460465{
    461466    psArray         *rowSet;            // psArray of row to insert
    462 
    463     // this is to prevent row from being free'd when rowSet is free'd. this
    464     // will have to be removed when psArrayAdd is modified to do this for you.
    465     psMemIncrRefCounter(row);
    466467
    467468    rowSet = psArrayAlloc(1);
     
    603604        // find ptype of column
    604605        pType = psDBMySQLToPType(field[i].type, field[i].flags);
     606        //psLogMsg( __func__, PS_LOG_INFO, "pType=[%ld]\n", pType );
    605607
    606608        // if the ptype is PS_TYPE_PTR assume that it's a string and fetch the
    607609        // column as an psArray of strings; otherwise fetch the column as a
    608610        // psVector.
    609         if (pType == PS_TYPE_PTR) {
     611        if ((pType == PS_TYPE_PTR) || (pType == PS_META_STR)) {
    610612            // PS_META_UNKNOWN -> PS_META_ARRAY ?
    611613            column = psDBSelectColumn(dbh, tableName, field[i].name, 0);
    612             psMetadataAdd(table, 0, field[i].name, PS_TYPE_PTR, "psArray", column);
    613             // FIXME
    614             //psFree(column);
     614            psMetadataAdd(table, 0, field[i].name, PS_META_STR, "no comment", column);
     615            psFree(column);
    615616        } else {
    616617            column = psDBSelectColumnNum(dbh, tableName, field[i].name, pType, 0);
    617             psMetadataAdd(table, 0, field[i].name, PS_TYPE_PTR, "psVector", column);
    618             // FIXME
    619             //psFree(column);
     618            psMetadataAdd(table, 0, field[i].name, pType, "no comment", column);
     619            psFree(column);
    620620        }
    621621    }
     
    799799            // convert NaNs to NULL and set the buffer_length for strings
    800800            //} else if ((item->type == PS_META_STR) && (item->pType == PS_TYPE_PTR)) {
    801         } else if (item->type == PS_TYPE_PTR) {
     801        } else if ((item->type == PS_META_STR)         || (item->type == PS_META_VEC)    ||
     802                   (item->type == PS_META_IMG)         || (item->type == PS_META_HASH)   ||
     803                   (item->type == PS_META_LOOKUPTABLE) || (item->type == PS_META_JPEG)   ||
     804                   (item->type == PS_META_PNG)         || (item->type == PS_META_ASTROM) ||
     805                   (item->type == PS_META_UNKNOWN)     || (item->type == PS_TYPE_PTR)) {
     806
    802807            bind[i].buffer_length = (unsigned long)strlen((char *)item->data.V);
    803808            bind[i].length  = &bind[i].buffer_length;
     
    848853    // find column name and type
    849854    while ((item = psListGetAndIncrement(cursor))) {
    850         if ((item->type == PS_META_S32) || (item->type == PS_META_F32) || (item->type == PS_META_F64)) {
     855        if ((item->type == PS_META_S32) || (item->type == PS_META_F32) || (item->type == PS_META_F64) ||
     856                (item->type == PS_TYPE_S32) || (item->type == PS_TYPE_F32) || (item->type == PS_TYPE_F64)) {
    851857            // + column name + _ + column type
    852858            colType = psDBPTypeToSQL(item->type);
     
    857863                   (item->type == PS_META_LOOKUPTABLE) || (item->type == PS_META_JPEG)   ||
    858864                   (item->type == PS_META_PNG)         || (item->type == PS_META_ASTROM) ||
    859                    (item->type == PS_META_UNKNOWN)) {
     865                   (item->type == PS_META_UNKNOWN)     || (item->type == PS_TYPE_PTR)) {
    860866            // + column name + _ + varchar( + length + )
    861867            psStringAppend(&query, "%s VARCHAR(%s)", item->name, item->data.V);
     
    10291035
    10301036    psStringAppend(&query, "DELETE FROM %s %s", tableName, whereSQL);
     1037    psFree(whereSQL);
    10311038
    10321039    return query;
     
    10521059    while ((item = psListGetAndIncrement(cursor))) {
    10531060        // item->data must be a string
    1054         if (item->type == PS_META_STR) {
     1061        if ((item->type == PS_META_S32) || (item->type == PS_TYPE_S32)) {
     1062            psStringAppend(&query, "%s=%d", item->name, (int)(item->data.S32));
     1063        } else if ((item->type == PS_META_F32) || (item->type == PS_TYPE_F32)) {
     1064            psStringAppend(&query, "%s=%g", item->name, (double)(item->data.F32));
     1065        } else if ((item->type == PS_META_F64) || (item->type == PS_TYPE_F64)) {
     1066            psStringAppend(&query, "%s=%g", item->name, (double)(item->data.F64));
     1067        } else if (item->type == PS_META_STR) {
    10551068            // + column name + _ + like + _ + ' + value + '
    10561069            if (*(char *)item->data.V == '\0') {
    10571070                psStringAppend(&query, "%s IS NULL", item->name);
    10581071            } else {
     1072                // XXX ASC NOTE: we should have a better match for
     1073                // char & varchar columns than this.  LIKE is OK for
     1074                // very large TEXT columns that really shouldn't be
     1075                // used in a where clause...
    10591076                psStringAppend(&query, "%s LIKE '%s'", item->name, item->data.V);
    10601077            }
    10611078        } else {
    1062             psError(PS_ERR_BAD_PARAMETER_TYPE, true, "Only a type of PS_META_STR is supported.");
     1079            psError(PS_ERR_BAD_PARAMETER_TYPE, true,
     1080                    "Only types PS_META_S32, PS_META_F32, PS_META_F64, PS_META_STR is supported");
    10631081
    10641082            psFree(cursor);
     
    11281146
    11291147    mysqlToSQLTable = psDBGetMySQLToSQLTable();
    1130     sqlToPSTable    = psDBGetSQLToPTypeTable();
    11311148
    11321149    // lookup MySQL column type
     
    11381155    if (!sqlType) {
    11391156        psError(PS_ERR_UNEXPECTED_NULL, true, "type lookup failed.");
    1140 
    1141         psFree(sqlToPSTable);
    1142 
    11431157        return -1;
    11441158    }
     
    11521166    }
    11531167
     1168    psLogMsg( __func__, PS_LOG_INFO, "sqlType=[%s]\n", sqlType );
     1169
    11541170    // convert MySQL type to PS type
     1171    sqlToPSTable = psDBGetSQLToPTypeTable();
    11551172    value = psHashLookup(sqlToPSTable, sqlType);
    11561173    psFree(sqlToPSTable);
     
    12361253        psDBAddToLookupTable(lookupTable, PS_TYPE_C64, "PS_TYPE_C64 is not supported");
    12371254        psDBAddToLookupTable(lookupTable, PS_TYPE_BOOL,"BOOLEAN");
    1238         psDBAddToLookupTable(lookupTable, PS_TYPE_PTR, "VARCHAR");
     1255        psDBAddToLookupTable(lookupTable, PS_TYPE_PTR, "BLOB");
     1256        psDBAddToLookupTable(lookupTable, PS_META_STR, "BLOB");
    12391257    }
    12401258
     
    12741292        while ((key = psListGetAndIncrement(cursor))) {
    12751293            value = psHashLookup(psToSQLTable, key);
     1294            if (!strcmp(value, "BLOB")) {
     1295                continue; // ignore reverse BLOB mapping, fill in below
     1296            }
    12761297            // switch key and value
    12771298            psHashAdd(lookupTable, value, key);
    12781299        }
     1300
     1301        value = psDBIntToString((psU64)PS_META_STR);
     1302        psHashAdd(lookupTable, "VARCHAR", value);
     1303        psHashAdd(lookupTable, "BLOB",    value);
     1304        psHashAdd(lookupTable, "TEXT",    value);
     1305        psFree(value);
    12791306
    12801307        // DECIMAL does not exist in the pType to SQL table
     
    13721399        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_BOOL,   psDBMySQLTypeAlloc(MYSQL_TYPE_TINY,       true));
    13731400        psDBAddVoidToLookupTable(lookupTable, PS_TYPE_PTR,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1401
     1402        psDBAddVoidToLookupTable(lookupTable, PS_META_STR,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1403        psDBAddVoidToLookupTable(lookupTable, PS_META_VEC,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1404        psDBAddVoidToLookupTable(lookupTable, PS_META_IMG,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1405        psDBAddVoidToLookupTable(lookupTable, PS_META_HASH,   psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1406        psDBAddVoidToLookupTable(lookupTable, PS_META_LOOKUPTABLE,
     1407                                 psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1408        psDBAddVoidToLookupTable(lookupTable, PS_META_JPEG,   psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1409        psDBAddVoidToLookupTable(lookupTable, PS_META_PNG,    psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1410        psDBAddVoidToLookupTable(lookupTable, PS_META_ASTROM, psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
     1411        psDBAddVoidToLookupTable(lookupTable, PS_META_UNKNOWN,psDBMySQLTypeAlloc(MYSQL_TYPE_VAR_STRING, false));
    13741412    }
    13751413
Note: See TracChangeset for help on using the changeset viewer.