Changeset 19804 for trunk/psLib/src/db/psDB.c
- Timestamp:
- Oct 2, 2008, 7:41:21 AM (18 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/db/psDB.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/db/psDB.c
r18617 r19804 23 23 * 4.1.2 or newer is required. 24 24 * 25 * $Id: psDB.c,v 1.16 8 2008-07-18 22:09:19 price Exp $25 * $Id: psDB.c,v 1.169 2008-10-02 17:41:21 eugene Exp $ 26 26 */ 27 27 … … 1027 1027 1028 1028 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 } 1066 1217 1067 1218 switch (pType) {
Note:
See TracChangeset
for help on using the changeset viewer.
