Changeset 22708 for trunk/psLib/src/db/psDB.c
- Timestamp:
- Feb 27, 2009, 12:32:05 PM (17 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/db/psDB.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/db/psDB.c
r21401 r22708 866 866 const psArray *rowSet, 867 867 const char *query 868 ) 868 ) 869 869 { 870 870 PS_ASSERT_PTR_NON_NULL(dbh, -1); … … 1040 1040 1041 1041 for (i = 0; i < fieldCount; i++) { 1042 // lookup MySQL column type1043 pType = psDBMySQLToPType(field[i].type, field[i].flags);1044 if (!pType) {1045 psError(PS_ERR_UNKNOWN, false, "Failed to lookup type.");1046 psFree(md);1047 mysql_free_result(result);1048 psFree(resultSet);1049 return NULL;1050 }1051 1052 len = fieldLength[i];1053 if (len) {1054 // copy the data out of the result set struct1055 data = psAlloc(len + 1);1056 memcpy(data, row[i], len);1057 ((char*)data)[len] = '\0';1058 } else {1059 // if len is zero then the value is NULL1060 psTrace("psLib.db", PS_LOG_INFO, "database field name %s contains a NULL", field[i].name);1061 data = psDBGetPTypeNaN(pType);1062 1063 // the NULL case must be handled for each type differently1064 switch (pType) {1065 case PS_DATA_STRING:1066 if (!psMetadataAddStr(md, PS_LIST_TAIL, field[i].name, 0, "", data)) {1067 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);1068 psFree(data);1069 psFree(md);1070 mysql_free_result(result);1071 psFree(resultSet);1072 return NULL;1073 }1074 break;1075 case PS_DATA_U8:1076 if (!psMetadataAddU8(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU8 *)data)) {1077 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);1078 psFree(data);1079 psFree(md);1080 mysql_free_result(result);1081 psFree(resultSet);1082 return NULL;1083 }1084 break;1085 case PS_DATA_U16:1086 if (!psMetadataAddU16(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU16 *)data)) {1087 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);1088 psFree(data);1089 psFree(md);1090 mysql_free_result(result);1091 psFree(resultSet);1092 return NULL;1093 }1094 break;1095 case PS_DATA_U32:1096 if (!psMetadataAddU32(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU32 *)data)) {1097 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);1098 psFree(data);1099 psFree(md);1100 mysql_free_result(result);1101 psFree(resultSet);1102 return NULL;1103 }1104 break;1105 case PS_DATA_U64:1106 if (!psMetadataAddU64(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU64 *)data)) {1107 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);1108 psFree(data);1109 psFree(md);1110 mysql_free_result(result);1111 psFree(resultSet);1112 return NULL;1113 }1114 break;1115 case PS_DATA_S8:1116 if (!psMetadataAddS8(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS8 *)data)) {1117 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);1118 psFree(data);1119 psFree(md);1120 mysql_free_result(result);1121 psFree(resultSet);1122 return NULL;1123 }1124 break;1125 case PS_DATA_S16:1126 if (!psMetadataAddS16(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS16 *)data)) {1127 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);1128 psFree(data);1129 psFree(md);1130 mysql_free_result(result);1131 psFree(resultSet);1132 return NULL;1133 }1134 break;1135 case PS_DATA_S32:1136 if (!psMetadataAddS32(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS32 *)data)) {1137 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);1138 psFree(data);1139 psFree(md);1140 mysql_free_result(result);1141 psFree(resultSet);1142 return NULL;1143 }1144 break;1145 case PS_DATA_S64:1146 if (!psMetadataAddS64(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS64 *)data)) {1147 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);1148 psFree(data);1149 psFree(md);1150 mysql_free_result(result);1151 psFree(resultSet);1152 return NULL;1153 }1154 break;1155 case PS_DATA_F32:1156 if (!psMetadataAddF32(md, PS_LIST_TAIL, field[i].name, 0, "", *(psF32 *)data)) {1157 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);1158 psFree(data);1159 psFree(md);1160 mysql_free_result(result);1161 psFree(resultSet);1162 return NULL;1163 }1164 break;1165 case PS_DATA_F64:1166 if (!psMetadataAddF64(md, PS_LIST_TAIL, field[i].name, 0, "", *(psF64 *)data)) {1167 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);1168 psFree(data);1169 psFree(md);1170 mysql_free_result(result);1171 psFree(resultSet);1172 return NULL;1173 }1174 break;1175 case PS_DATA_BOOL:1176 if (!psMetadataAddBool(md, PS_LIST_TAIL, field[i].name, 0, "", *(bool *)data)) {1177 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);1178 psFree(data);1179 psFree(md);1180 mysql_free_result(result);1181 psFree(resultSet);1182 return NULL;1183 }1184 break;1185 case PS_DATA_TIME:1186 // just pass NULL values through as there is currently no1187 // concept of a psTime with a NULL value1188 if (!psMetadataAddTime(md, PS_LIST_TAIL, field[i].name, 0, "", NULL)) {1189 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);1190 psFree(data);1191 psFree(md);1192 mysql_free_result(result);1193 psFree(resultSet);1194 return NULL;1195 }1196 break;1197 1198 default:1199 // just pass NULL values for all other types1200 if (!psMetadataAddUnknown(md, PS_LIST_TAIL, field[i].name, 0, "", NULL)) {1201 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);1202 psFree(data);1203 psFree(md);1204 mysql_free_result(result);1205 psFree(resultSet);1206 return NULL;1207 }1208 break;1209 }1210 psFree(data);1211 continue;1212 }1042 // lookup MySQL column type 1043 pType = psDBMySQLToPType(field[i].type, field[i].flags); 1044 if (!pType) { 1045 psError(PS_ERR_UNKNOWN, false, "Failed to lookup type."); 1046 psFree(md); 1047 mysql_free_result(result); 1048 psFree(resultSet); 1049 return NULL; 1050 } 1051 1052 len = fieldLength[i]; 1053 if (len) { 1054 // copy the data out of the result set struct 1055 data = psAlloc(len + 1); 1056 memcpy(data, row[i], len); 1057 ((char*)data)[len] = '\0'; 1058 } else { 1059 // if len is zero then the value is NULL 1060 psTrace("psLib.db", PS_LOG_INFO, "database field name %s contains a NULL", field[i].name); 1061 data = psDBGetPTypeNaN(pType); 1062 1063 // the NULL case must be handled for each type differently 1064 switch (pType) { 1065 case PS_DATA_STRING: 1066 if (!psMetadataAddStr(md, PS_LIST_TAIL, field[i].name, 0, "", data)) { 1067 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name); 1068 psFree(data); 1069 psFree(md); 1070 mysql_free_result(result); 1071 psFree(resultSet); 1072 return NULL; 1073 } 1074 break; 1075 case PS_DATA_U8: 1076 if (!psMetadataAddU8(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU8 *)data)) { 1077 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name); 1078 psFree(data); 1079 psFree(md); 1080 mysql_free_result(result); 1081 psFree(resultSet); 1082 return NULL; 1083 } 1084 break; 1085 case PS_DATA_U16: 1086 if (!psMetadataAddU16(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU16 *)data)) { 1087 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name); 1088 psFree(data); 1089 psFree(md); 1090 mysql_free_result(result); 1091 psFree(resultSet); 1092 return NULL; 1093 } 1094 break; 1095 case PS_DATA_U32: 1096 if (!psMetadataAddU32(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU32 *)data)) { 1097 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name); 1098 psFree(data); 1099 psFree(md); 1100 mysql_free_result(result); 1101 psFree(resultSet); 1102 return NULL; 1103 } 1104 break; 1105 case PS_DATA_U64: 1106 if (!psMetadataAddU64(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU64 *)data)) { 1107 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name); 1108 psFree(data); 1109 psFree(md); 1110 mysql_free_result(result); 1111 psFree(resultSet); 1112 return NULL; 1113 } 1114 break; 1115 case PS_DATA_S8: 1116 if (!psMetadataAddS8(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS8 *)data)) { 1117 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name); 1118 psFree(data); 1119 psFree(md); 1120 mysql_free_result(result); 1121 psFree(resultSet); 1122 return NULL; 1123 } 1124 break; 1125 case PS_DATA_S16: 1126 if (!psMetadataAddS16(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS16 *)data)) { 1127 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name); 1128 psFree(data); 1129 psFree(md); 1130 mysql_free_result(result); 1131 psFree(resultSet); 1132 return NULL; 1133 } 1134 break; 1135 case PS_DATA_S32: 1136 if (!psMetadataAddS32(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS32 *)data)) { 1137 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name); 1138 psFree(data); 1139 psFree(md); 1140 mysql_free_result(result); 1141 psFree(resultSet); 1142 return NULL; 1143 } 1144 break; 1145 case PS_DATA_S64: 1146 if (!psMetadataAddS64(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS64 *)data)) { 1147 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name); 1148 psFree(data); 1149 psFree(md); 1150 mysql_free_result(result); 1151 psFree(resultSet); 1152 return NULL; 1153 } 1154 break; 1155 case PS_DATA_F32: 1156 if (!psMetadataAddF32(md, PS_LIST_TAIL, field[i].name, 0, "", *(psF32 *)data)) { 1157 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name); 1158 psFree(data); 1159 psFree(md); 1160 mysql_free_result(result); 1161 psFree(resultSet); 1162 return NULL; 1163 } 1164 break; 1165 case PS_DATA_F64: 1166 if (!psMetadataAddF64(md, PS_LIST_TAIL, field[i].name, 0, "", *(psF64 *)data)) { 1167 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name); 1168 psFree(data); 1169 psFree(md); 1170 mysql_free_result(result); 1171 psFree(resultSet); 1172 return NULL; 1173 } 1174 break; 1175 case PS_DATA_BOOL: 1176 if (!psMetadataAddBool(md, PS_LIST_TAIL, field[i].name, 0, "", *(bool *)data)) { 1177 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name); 1178 psFree(data); 1179 psFree(md); 1180 mysql_free_result(result); 1181 psFree(resultSet); 1182 return NULL; 1183 } 1184 break; 1185 case PS_DATA_TIME: 1186 // just pass NULL values through as there is currently no 1187 // concept of a psTime with a NULL value 1188 if (!psMetadataAddTime(md, PS_LIST_TAIL, field[i].name, 0, "", NULL)) { 1189 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name); 1190 psFree(data); 1191 psFree(md); 1192 mysql_free_result(result); 1193 psFree(resultSet); 1194 return NULL; 1195 } 1196 break; 1197 1198 default: 1199 // just pass NULL values for all other types 1200 if (!psMetadataAddUnknown(md, PS_LIST_TAIL, field[i].name, 0, "", NULL)) { 1201 psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name); 1202 psFree(data); 1203 psFree(md); 1204 mysql_free_result(result); 1205 psFree(resultSet); 1206 return NULL; 1207 } 1208 break; 1209 } 1210 psFree(data); 1211 continue; 1212 } 1213 1213 1214 1214 switch (pType) { … … 2423 2423 case PS_DATA_TIME: { 2424 2424 if (item->data.V) { 2425 psString timeStr = psTimeTo ISO(item->data.V);2425 psString timeStr = psTimeToString(item->data.V, 6); // MySQL only handles microseconds 2426 2426 psStringAppend(&query, "%s %s '%s'", itemName, opStr, timeStr); 2427 2427 psFree(timeStr);
Note:
See TracChangeset
for help on using the changeset viewer.
