IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 2, 2008, 7:41:21 AM (18 years ago)
Author:
eugene
Message:

fix casting error for NAN / NULL values

File:
1 edited

Legend:

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

    r18617 r19804  
    2323 * 4.1.2 or newer is required.
    2424 *
    25  * $Id: psDB.c,v 1.168 2008-07-18 22:09:19 price Exp $
     25 * $Id: psDB.c,v 1.169 2008-10-02 17:41:21 eugene Exp $
    2626 */
    2727
     
    10271027
    10281028    while ((row = mysql_fetch_row(result))) {
    1029         // allocate new psMetadata to represent a row
    1030         md = psMetadataAlloc();
    1031 
    1032         fieldLength = mysql_fetch_lengths(result);
    1033 
    1034         for (i = 0; i < fieldCount; i++) {
    1035             // lookup MySQL column type
    1036             pType = psDBMySQLToPType(field[i].type, field[i].flags);
    1037             if (!pType) {
    1038                 psError(PS_ERR_UNKNOWN, false, "Failed to lookup type.");
    1039                 psFree(md);
    1040                 mysql_free_result(result);
    1041                 psFree(resultSet);
    1042                 return NULL;
    1043             }
    1044 
    1045             len = fieldLength[i];
    1046             if (len) {
    1047                 // copy the data out of the result set struct
    1048                 data = psAlloc(len + 1);
    1049                 memcpy(data, row[i], len);
    1050                 ((char*)data)[len] = '\0';
    1051             } else {
    1052                 // if len is zero then the value is NULL
    1053                 psTrace("psLib.db", PS_LOG_INFO, "database field name %s contains a NULL", field[i].name);
    1054                 data = psDBGetPTypeNaN(pType);
    1055                 if (!psMetadataAdd(md, PS_LIST_TAIL, field[i].name, pType, "", data)) {
    1056                     psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
    1057                     psFree(data);
    1058                     psFree(md);
    1059                     mysql_free_result(result);
    1060                     psFree(resultSet);
    1061                     return NULL;
    1062                 }
    1063                 psFree(data);
    1064                 continue;
    1065             }
     1029      // allocate new psMetadata to represent a row
     1030      md = psMetadataAlloc();
     1031
     1032      fieldLength = mysql_fetch_lengths(result);
     1033
     1034      for (i = 0; i < fieldCount; i++) {
     1035        // lookup MySQL column type
     1036        pType = psDBMySQLToPType(field[i].type, field[i].flags);
     1037        if (!pType) {
     1038          psError(PS_ERR_UNKNOWN, false, "Failed to lookup type.");
     1039          psFree(md);
     1040          mysql_free_result(result);
     1041          psFree(resultSet);
     1042          return NULL;
     1043        }
     1044
     1045        len = fieldLength[i];
     1046        if (len) {
     1047          // copy the data out of the result set struct
     1048          data = psAlloc(len + 1);
     1049          memcpy(data, row[i], len);
     1050          ((char*)data)[len] = '\0';
     1051        } else {
     1052          // if len is zero then the value is NULL
     1053          psTrace("psLib.db", PS_LOG_INFO, "database field name %s contains a NULL", field[i].name);
     1054          data = psDBGetPTypeNaN(pType);
     1055
     1056          // the NULL case must be handled for each type differently
     1057          switch (pType) {
     1058            case PS_DATA_STRING:
     1059              if (!psMetadataAddStr(md, PS_LIST_TAIL, field[i].name, 0, "", data)) {
     1060                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
     1061                psFree(data);
     1062                psFree(md);
     1063                mysql_free_result(result);
     1064                psFree(resultSet);
     1065                return NULL;
     1066              }
     1067              break;
     1068            case PS_DATA_U8:
     1069              if (!psMetadataAddU8(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU8 *)data)) {
     1070                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
     1071                psFree(data);
     1072                psFree(md);
     1073                mysql_free_result(result);
     1074                psFree(resultSet);
     1075                return NULL;
     1076              }
     1077              break;
     1078            case PS_DATA_U16:
     1079              if (!psMetadataAddU16(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU16 *)data)) {
     1080                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
     1081                psFree(data);
     1082                psFree(md);
     1083                mysql_free_result(result);
     1084                psFree(resultSet);
     1085                return NULL;
     1086              }
     1087              break;
     1088            case PS_DATA_U32:
     1089              if (!psMetadataAddU32(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU32 *)data)) {
     1090                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
     1091                psFree(data);
     1092                psFree(md);
     1093                mysql_free_result(result);
     1094                psFree(resultSet);
     1095                return NULL;
     1096              }
     1097              break;
     1098            case PS_DATA_U64:
     1099              if (!psMetadataAddU64(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU64 *)data)) {
     1100                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
     1101                psFree(data);
     1102                psFree(md);
     1103                mysql_free_result(result);
     1104                psFree(resultSet);
     1105                return NULL;
     1106              }
     1107              break;
     1108            case PS_DATA_S8:
     1109              if (!psMetadataAddS8(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS8 *)data)) {
     1110                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
     1111                psFree(data);
     1112                psFree(md);
     1113                mysql_free_result(result);
     1114                psFree(resultSet);
     1115                return NULL;
     1116              }
     1117              break;
     1118            case PS_DATA_S16:
     1119              if (!psMetadataAddS16(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS16 *)data)) {
     1120                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
     1121                psFree(data);
     1122                psFree(md);
     1123                mysql_free_result(result);
     1124                psFree(resultSet);
     1125                return NULL;
     1126              }
     1127              break;
     1128            case PS_DATA_S32:
     1129              if (!psMetadataAddS32(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS32 *)data)) {
     1130                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
     1131                psFree(data);
     1132                psFree(md);
     1133                mysql_free_result(result);
     1134                psFree(resultSet);
     1135                return NULL;
     1136              }
     1137              break;
     1138            case PS_DATA_S64:
     1139              if (!psMetadataAddS64(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS64 *)data)) {
     1140                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
     1141                psFree(data);
     1142                psFree(md);
     1143                mysql_free_result(result);
     1144                psFree(resultSet);
     1145                return NULL;
     1146              }
     1147              break;
     1148            case PS_DATA_F32:
     1149              if (!psMetadataAddF32(md, PS_LIST_TAIL, field[i].name, 0, "", *(psF32 *)data)) {
     1150                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
     1151                psFree(data);
     1152                psFree(md);
     1153                mysql_free_result(result);
     1154                psFree(resultSet);
     1155                return NULL;
     1156              }
     1157              break;
     1158            case PS_DATA_F64:
     1159              if (!psMetadataAddF64(md, PS_LIST_TAIL, field[i].name, 0, "", *(psF64 *)data)) {
     1160                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
     1161                psFree(data);
     1162                psFree(md);
     1163                mysql_free_result(result);
     1164                psFree(resultSet);
     1165                return NULL;
     1166              }
     1167              break;
     1168            case PS_DATA_BOOL:
     1169              if (!psMetadataAddBool(md, PS_LIST_TAIL, field[i].name, 0, "", *(bool *)data)) {
     1170                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
     1171                psFree(data);
     1172                psFree(md);
     1173                mysql_free_result(result);
     1174                psFree(resultSet);
     1175                return NULL;
     1176              }
     1177              break;
     1178            case PS_DATA_TIME:
     1179              // just pass NULL values through as there is currently no
     1180              // concept of a psTime with a NULL value
     1181              if (!psMetadataAddTime(md, PS_LIST_TAIL, field[i].name, 0, "", NULL)) {
     1182                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
     1183                psFree(data);
     1184                psFree(md);
     1185                mysql_free_result(result);
     1186                psFree(resultSet);
     1187                return NULL;
     1188              }
     1189              break;
     1190
     1191            default:
     1192              psError(PS_ERR_BAD_PARAMETER_TYPE , true,
     1193                      "field name: %s FIXME: Only type of "
     1194                      "PS_DATA_U8 (PS_DATA_U8), "
     1195                      "PS_DATA_U16 (PS_DATA_U16), "
     1196                      "PS_DATA_U32 (PS_DATA_U32), "
     1197                      "PS_DATA_U64 (PS_DATA_U64), "
     1198                      "PS_DATA_S8 (PS_DATA_S8), "
     1199                      "PS_DATA_S16 (PS_DATA_S16), "
     1200                      "PS_DATA_S32 (PS_DATA_S32), "
     1201                      "PS_DATA_S64 (PS_DATA_S64), "
     1202                      "PS_DATA_F32 (PS_DATA_F32), "
     1203                      "PS_DATA_F64 (PS_DATA_F64), "
     1204                      "PS_DATA_BOOL (PS_DATA_BOOL), "
     1205                      "PS_DATA_STRING "
     1206                      "and PS_DATA_TIME are supported.", field[i].name);
     1207              psFree(data);
     1208              psFree(md);
     1209              mysql_free_result(result);
     1210              psFree(resultSet);
     1211              return NULL;
     1212          }
     1213
     1214          psFree(data);
     1215          continue;
     1216        }
    10661217
    10671218            switch (pType) {
Note: See TracChangeset for help on using the changeset viewer.