Changeset 3193
- Timestamp:
- Feb 11, 2005, 11:40:49 AM (21 years ago)
- File:
-
- 1 edited
-
trunk/archive/psdb/psDB.c (modified) (19 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/archive/psdb/psDB.c
r3188 r3193 8 8 * @author Joshua Hoblitt 9 9 * 10 * @version $Revision: 1.1 0$ $Name: not supported by cvs2svn $11 * @date $Date: 2005-02-1 0 20:56:41$10 * @version $Revision: 1.11 $ $Name: not supported by cvs2svn $ 11 * @date $Date: 2005-02-11 21:40:49 $ 12 12 * 13 13 * Copyright 2005 Joshua Hoblitt, University of Hawaii … … 145 145 psStringAppend(&query, dbname); 146 146 147 // the MySQL C API notes that mysql_dro db() is deprecated147 // the MySQL C API notes that mysql_drop_db() is deprecated 148 148 status = psDBRunQuery(dbh, query); 149 149 … … 209 209 } 210 210 211 psFree(query); 212 211 213 result = mysql_store_result(dbh->mysql); 212 214 if (!result) { … … 214 216 fieldCount = mysql_field_count(dbh->mysql); 215 217 216 // if field count is zero the query should have returned no data. If217 // it's non-zerothen something bad has happened.218 // if field count is zero the query returned no data. If it's non-zero 219 // then something bad has happened. 218 220 if (fieldCount != 0) { 219 221 // error, should have gotten data 220 222 fprintf(stderr, "Query returned no data. Error: %s\n", mysql_error(dbh->mysql)); 221 222 psFree(query);223 223 224 224 return NULL; … … 251 251 252 252 mysql_free_result(result); 253 psFree(query);254 253 255 254 return column; … … 258 257 // dest = assign too, source = source string psArray, conv = conversion function, 259 258 // type = type to cast to, pType = psElemType 260 #define STRINGARRAYTOPTYPE(dest, source, conv, type, pType) \259 #define PS_STR_ARRAY_TO_PTYPE(dest, source, conv, type, pType) \ 261 260 { \ 262 261 psPtr myNaN; \ … … 289 288 switch (pType) { 290 289 case PS_TYPE_S8: 291 STRINGARRAYTOPTYPE(column->data.S8, stringColumn, atoi, psS8, PS_TYPE_S8);290 PS_STR_ARRAY_TO_PTYPE(column->data.S8, stringColumn, atoi, psS8, PS_TYPE_S8); 292 291 break; 293 292 case PS_TYPE_S16: 294 STRINGARRAYTOPTYPE(column->data.S16, stringColumn, atoi, psS16, PS_TYPE_S16);293 PS_STR_ARRAY_TO_PTYPE(column->data.S16, stringColumn, atoi, psS16, PS_TYPE_S16); 295 294 break; 296 295 case PS_TYPE_S32: 297 STRINGARRAYTOPTYPE(column->data.S32, stringColumn, atoi, psS32, PS_TYPE_S32);296 PS_STR_ARRAY_TO_PTYPE(column->data.S32, stringColumn, atoi, psS32, PS_TYPE_S32); 298 297 break; 299 298 case PS_TYPE_S64: 300 STRINGARRAYTOPTYPE(column->data.S64, stringColumn, atoll, psS64, PS_TYPE_S64);299 PS_STR_ARRAY_TO_PTYPE(column->data.S64, stringColumn, atoll, psS64, PS_TYPE_S64); 301 300 break; 302 301 case PS_TYPE_U8: 303 // missing from psVector in SDRS 304 STRINGARRAYTOPTYPE(column->data.U8, stringColumn, atoi, psU8, PS_TYPE_U8); 302 PS_STR_ARRAY_TO_PTYPE(column->data.U8, stringColumn, atoi, psU8, PS_TYPE_U8); 305 303 break; 306 304 case PS_TYPE_U16: 307 STRINGARRAYTOPTYPE(column->data.U16, stringColumn, atoi, psU16, PS_TYPE_U16);305 PS_STR_ARRAY_TO_PTYPE(column->data.U16, stringColumn, atoi, psU16, PS_TYPE_U16); 308 306 break; 309 307 case PS_TYPE_U32: 310 STRINGARRAYTOPTYPE(column->data.U32, stringColumn, atoi, psU32, PS_TYPE_U32);308 PS_STR_ARRAY_TO_PTYPE(column->data.U32, stringColumn, atoi, psU32, PS_TYPE_U32); 311 309 break; 312 310 case PS_TYPE_U64: 313 STRINGARRAYTOPTYPE(column->data.U64, stringColumn, atoll, psU64, PS_TYPE_U64);311 PS_STR_ARRAY_TO_PTYPE(column->data.U64, stringColumn, atoll, psU64, PS_TYPE_U64); 314 312 break; 315 313 case PS_TYPE_F32: 316 STRINGARRAYTOPTYPE(column->data.F32, stringColumn, atof, psF32, PS_TYPE_F32);314 PS_STR_ARRAY_TO_PTYPE(column->data.F32, stringColumn, atof, psF32, PS_TYPE_F32); 317 315 break; 318 316 case PS_TYPE_F64: 319 STRINGARRAYTOPTYPE(column->data.F64, stringColumn, atof, psF64, PS_TYPE_F64);317 PS_STR_ARRAY_TO_PTYPE(column->data.F64, stringColumn, atof, psF64, PS_TYPE_F64); 320 318 break; 321 319 case PS_TYPE_C32: 322 320 // this is a bogus SQL type 323 STRINGARRAYTOPTYPE(column->data.C32, stringColumn, atof, psC32, PS_TYPE_C32);321 PS_STR_ARRAY_TO_PTYPE(column->data.C32, stringColumn, atof, psC32, PS_TYPE_C32); 324 322 break; 325 323 case PS_TYPE_C64: 326 324 // this is a bogus SQL type 327 STRINGARRAYTOPTYPE(column->data.C64, stringColumn, atof, psC64, PS_TYPE_C64);325 PS_STR_ARRAY_TO_PTYPE(column->data.C64, stringColumn, atof, psC64, PS_TYPE_C64); 328 326 break; 329 327 case PS_TYPE_BOOL: … … 374 372 } 375 373 374 psFree(query); 375 376 376 result = mysql_store_result(dbh->mysql); 377 377 if (!result) { … … 384 384 // error, should have gotten data 385 385 fprintf(stderr, "Query returned no data. Error: %s\n", mysql_error(dbh->mysql)); 386 387 psFree(query);388 386 389 387 return NULL; … … 462 460 463 461 mysql_free_result(result); 464 psFree(query);465 462 466 463 return resultSet; … … 1049 1046 1050 1047 // select everything if where is NULL 1051 if ( where != NULL) {1048 if (!where) { 1052 1049 psStringAppend(&query, " "); 1050 1053 1051 string = psDBGenerateWhereSQL(where); 1054 if (string == NULL) { 1052 if (!string) { 1053 psFree(query); 1054 1055 1055 return NULL; 1056 1056 } … … 1062 1062 } 1063 1063 1064 #define MYNAN(dest, type, nan) \1064 #define PS_NAN_ALLOC(dest, type, nan) \ 1065 1065 dest = psAlloc(sizeof(type)); \ 1066 1066 *(type *)dest = nan; … … 1068 1068 static psPtr psDBGetPTypeNaN(psElemType pType) 1069 1069 { 1070 psPtr myNaN;1070 psPtr PS_NAN_ALLOC; 1071 1071 1072 1072 switch (pType) { 1073 1073 case PS_TYPE_S8: 1074 MYNAN(myNaN, psS8, PS_MAX_S8);1074 PS_NAN_ALLOC(myNaN, psS8, PS_MAX_S8); 1075 1075 break; 1076 1076 case PS_TYPE_S16: 1077 MYNAN(myNaN, psS16, PS_MAX_S16);1077 PS_NAN_ALLOC(myNaN, psS16, PS_MAX_S16); 1078 1078 break; 1079 1079 case PS_TYPE_S32: 1080 MYNAN(myNaN, psS32, PS_MAX_S32);1080 PS_NAN_ALLOC(myNaN, psS32, PS_MAX_S32); 1081 1081 break; 1082 1082 case PS_TYPE_S64: 1083 MYNAN(myNaN, psS64, PS_MAX_S64);1083 PS_NAN_ALLOC(myNaN, psS64, PS_MAX_S64); 1084 1084 break; 1085 1085 case PS_TYPE_U8: 1086 MYNAN(myNaN, psU8, PS_MAX_U8);1086 PS_NAN_ALLOC(myNaN, psU8, PS_MAX_U8); 1087 1087 break; 1088 1088 case PS_TYPE_U16: 1089 MYNAN(myNaN, psU16, PS_MAX_U16);1089 PS_NAN_ALLOC(myNaN, psU16, PS_MAX_U16); 1090 1090 break; 1091 1091 case PS_TYPE_U32: 1092 MYNAN(myNaN, psU32, PS_MAX_U32);1092 PS_NAN_ALLOC(myNaN, psU32, PS_MAX_U32); 1093 1093 break; 1094 1094 case PS_TYPE_U64: 1095 MYNAN(myNaN, psU64, PS_MAX_U64);1095 PS_NAN_ALLOC(myNaN, psU64, PS_MAX_U64); 1096 1096 break; 1097 1097 case PS_TYPE_F32: 1098 MYNAN(myNaN, psF32, NAN);1098 PS_NAN_ALLOC(myNaN, psF32, NAN); 1099 1099 break; 1100 1100 case PS_TYPE_F64: 1101 MYNAN(myNaN, psF64, NAN);1101 PS_NAN_ALLOC(myNaN, psF64, NAN); 1102 1102 break; 1103 1103 case PS_TYPE_C32: 1104 1104 // this is a bogus SQL type 1105 MYNAN(myNaN, psC32, NAN);1105 PS_NAN_ALLOC(myNaN, psC32, NAN); 1106 1106 break; 1107 1107 case PS_TYPE_C64: 1108 1108 // this is a bogus SQL type 1109 MYNAN(myNaN, psC64, NAN);1109 PS_NAN_ALLOC(myNaN, psC64, NAN); 1110 1110 break; 1111 1111 case PS_TYPE_BOOL: … … 1113 1113 break; 1114 1114 case PS_TYPE_PTR: 1115 MYNAN(myNaN, char, '\0');1116 break; 1117 } 1118 1119 return myNaN;1120 } 1121 1122 #define ISTYPENAN(type, data, nan) *(type *)data == nan1115 PS_NAN_ALLOC(myNaN, char, '\0'); 1116 break; 1117 } 1118 1119 return PS_NAN_ALLOC; 1120 } 1121 1122 #define PS_IS_NAN(type, data, nan) *(type *)data == nan 1123 1123 1124 1124 static bool psDBIsPTypeNaN(psElemType pType, psPtr data) … … 1128 1128 switch (pType) { 1129 1129 case PS_TYPE_S8: 1130 isNaN = ISTYPENAN(psS8, data, PS_MAX_S8);1130 isNaN = PS_IS_NAN(psS8, data, PS_MAX_S8); 1131 1131 break; 1132 1132 case PS_TYPE_S16: 1133 isNaN = ISTYPENAN(psS16, data, PS_MAX_S16);1133 isNaN = PS_IS_NAN(psS16, data, PS_MAX_S16); 1134 1134 break; 1135 1135 case PS_TYPE_S32: 1136 isNaN = ISTYPENAN(psS32, data, PS_MAX_S32);1136 isNaN = PS_IS_NAN(psS32, data, PS_MAX_S32); 1137 1137 break; 1138 1138 case PS_TYPE_S64: 1139 isNaN = ISTYPENAN(psS64, data, PS_MAX_S64);1139 isNaN = PS_IS_NAN(psS64, data, PS_MAX_S64); 1140 1140 break; 1141 1141 case PS_TYPE_U8: 1142 isNaN = ISTYPENAN(psU8, data, PS_MAX_U8);1142 isNaN = PS_IS_NAN(psU8, data, PS_MAX_U8); 1143 1143 break; 1144 1144 case PS_TYPE_U16: 1145 isNaN = ISTYPENAN(psU16, data, PS_MAX_U16);1145 isNaN = PS_IS_NAN(psU16, data, PS_MAX_U16); 1146 1146 break; 1147 1147 case PS_TYPE_U32: 1148 isNaN = ISTYPENAN(psU32, data, PS_MAX_U32);1148 isNaN = PS_IS_NAN(psU32, data, PS_MAX_U32); 1149 1149 break; 1150 1150 case PS_TYPE_U64: 1151 isNaN = ISTYPENAN(psU64, data, PS_MAX_U64);1151 isNaN = PS_IS_NAN(psU64, data, PS_MAX_U64); 1152 1152 break; 1153 1153 case PS_TYPE_F32: 1154 isNaN = ISTYPENAN(psF32, data, NAN);1154 isNaN = PS_IS_NAN(psF32, data, NAN); 1155 1155 break; 1156 1156 case PS_TYPE_F64: 1157 isNaN = ISTYPENAN(psF64, data, NAN);1157 isNaN = PS_IS_NAN(psF64, data, NAN); 1158 1158 break; 1159 1159 case PS_TYPE_C32: 1160 1160 // this is a bogus SQL type 1161 isNaN = ISTYPENAN(psC32, data, NAN);1161 isNaN = PS_IS_NAN(psC32, data, NAN); 1162 1162 break; 1163 1163 case PS_TYPE_C64: 1164 1164 // this is a bogus SQL type 1165 isNaN = ISTYPENAN(psC64, data, NAN);1165 isNaN = PS_IS_NAN(psC64, data, NAN); 1166 1166 break; 1167 1167 case PS_TYPE_BOOL: … … 1169 1169 break; 1170 1170 case PS_TYPE_PTR: 1171 isNaN = ISTYPENAN(char, data, '\0');1171 isNaN = PS_IS_NAN(char, data, '\0'); 1172 1172 break; 1173 1173 } … … 1176 1176 } 1177 1177 1178 #define TYPETOSTRING(type, format, data) \1178 #define PS_PTYPE_TO_STR(type, format, data) \ 1179 1179 (size_t)log10((double)*(type *)data) + 1; \ 1180 1180 string = psAlloc(length); \ … … 1189 1189 switch (pType) { 1190 1190 case PS_TYPE_S8: 1191 length = TYPETOSTRING(psS8, "%i", data);1191 length = PS_PTYPE_TO_STR(psS8, "%i", data); 1192 1192 break; 1193 1193 case PS_TYPE_S16: 1194 length = TYPETOSTRING(psS16, "%i", data);1194 length = PS_PTYPE_TO_STR(psS16, "%i", data); 1195 1195 break; 1196 1196 case PS_TYPE_S32: 1197 length = TYPETOSTRING(psS32, "%i", data);1197 length = PS_PTYPE_TO_STR(psS32, "%i", data); 1198 1198 break; 1199 1199 case PS_TYPE_S64: 1200 length = TYPETOSTRING(psS64, "%li", data);1200 length = PS_PTYPE_TO_STR(psS64, "%li", data); 1201 1201 break; 1202 1202 case PS_TYPE_U8: 1203 length = TYPETOSTRING(psU8, "%u", data);1203 length = PS_PTYPE_TO_STR(psU8, "%u", data); 1204 1204 break; 1205 1205 case PS_TYPE_U16: 1206 length = TYPETOSTRING(psU16, "%u", data);1206 length = PS_PTYPE_TO_STR(psU16, "%u", data); 1207 1207 break; 1208 1208 case PS_TYPE_U32: 1209 length = TYPETOSTRING(psU32, "%u", data);1209 length = PS_PTYPE_TO_STR(psU32, "%u", data); 1210 1210 break; 1211 1211 case PS_TYPE_U64: 1212 length = TYPETOSTRING(psU64, "%lu", data);1212 length = PS_PTYPE_TO_STR(psU64, "%lu", data); 1213 1213 break; 1214 1214 case PS_TYPE_F32: 1215 length = TYPETOSTRING(psF32, "%f", data);1215 length = PS_PTYPE_TO_STR(psF32, "%f", data); 1216 1216 break; 1217 1217 case PS_TYPE_F64: 1218 length = TYPETOSTRING(psF32, "%f", data);1218 length = PS_PTYPE_TO_STR(psF32, "%f", data); 1219 1219 break; 1220 1220 case PS_TYPE_C32: … … 1225 1225 break; 1226 1226 case PS_TYPE_BOOL: 1227 length = TYPETOSTRING(bool, "%u", data);1227 length = PS_PTYPE_TO_STR(bool, "%u", data); 1228 1228 break; 1229 1229 case PS_TYPE_PTR:
Note:
See TracChangeset
for help on using the changeset viewer.
