Changeset 160
- Timestamp:
- 04/07/08 14:14:31 (8 months ago)
- Files:
-
- trunk/core/src/shooting_star.c (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/core/src/shooting_star.c
r148 r160 189 189 int t; 190 190 191 DBG("fetching\n");192 193 191 for(t=0; t<MAX_RULE_LENGTH;++t) 194 192 target_edge->rule[t] = -1; 195 193 196 DBG("rule reset\n");197 198 194 binval = SPI_getbinval(*tuple, *tupdesc, edge_columns->id, &isnull); 199 195 if (isnull) 200 196 elog(ERROR, "id contains a null value"); 201 197 target_edge->id = DatumGetInt32(binval); 202 DBG("id: %i\n", target_edge->id);203 198 204 199 binval = SPI_getbinval(*tuple, *tupdesc, edge_columns->source, &isnull); … … 206 201 elog(ERROR, "source contains a null value"); 207 202 target_edge->source = DatumGetInt32(binval); 208 DBG("source: %i\n", target_edge->source);209 203 210 204 binval = SPI_getbinval(*tuple, *tupdesc, edge_columns->target, &isnull); … … 212 206 elog(ERROR, "target contains a null value"); 213 207 target_edge->target = DatumGetInt32(binval); 214 DBG("target: %i\n", target_edge->target);215 208 216 209 binval = SPI_getbinval(*tuple, *tupdesc, edge_columns->cost, &isnull); … … 218 211 elog(ERROR, "cost contains a null value"); 219 212 target_edge->cost = DatumGetFloat8(binval); 220 DBG("cost: %f\n", target_edge->cost);221 213 222 214 if (edge_columns->reverse_cost != -1) … … 227 219 elog(ERROR, "reverse_cost contains a null value"); 228 220 target_edge->reverse_cost = DatumGetFloat8(binval); 229 DBG("r_cost: %f\n", target_edge->reverse_cost);230 231 221 } 232 222 … … 235 225 elog(ERROR, "source x contains a null value"); 236 226 target_edge->s_x = DatumGetFloat8(binval); 237 DBG("s_x: %f\n", target_edge->s_x);238 227 239 228 binval = SPI_getbinval(*tuple, *tupdesc, edge_columns->s_y, &isnull); … … 241 230 elog(ERROR, "source y contains a null value"); 242 231 target_edge->s_y = DatumGetFloat8(binval); 243 DBG("s_y: %f\n", target_edge->s_y);244 232 245 233 binval = SPI_getbinval(*tuple, *tupdesc, edge_columns->t_x, &isnull); … … 247 235 elog(ERROR, "target x contains a null value"); 248 236 target_edge->t_x = DatumGetFloat8(binval); 249 DBG("t_x: %f\n", target_edge->t_x);250 237 251 238 binval = SPI_getbinval(*tuple, *tupdesc, edge_columns->t_y, &isnull); … … 253 240 elog(ERROR, "target y contains a null value"); 254 241 target_edge->t_y = DatumGetFloat8(binval); 255 DBG("t_y: %f\n", target_edge->t_y);256 242 257 243 binval = SPI_getbinval(*tuple, *tupdesc, edge_columns->to_cost, &isnull); 258 244 if (isnull) 259 target_edge->to_cost = 0; 245 target_edge->to_cost = 0; 246 260 247 else 261 248 target_edge->to_cost = DatumGetFloat8(binval); 262 DBG("to_cost: %f\n", target_edge->to_cost);263 249 264 250 char *str = DatumGetCString(SPI_getvalue(*tuple, *tupdesc, edge_columns->rule)); 265 266 if(str !=NULL)251 252 if(str!=NULL) 267 253 { 268 char *str2 = " rule loaded\n"; 269 char *str3; 270 271 str3 = (char *)calloc(strlen(str) + strlen(str2) + 1, sizeof(char)); 272 strcat(str3, str); 273 strcat(str3, str2); 274 275 DBG(str3); 276 277 free(str3); 278 279 char* pch = NULL; 280 int ci = MAX_RULE_LENGTH; 281 282 pch = strtok (str," ,"); 283 284 DBG("parsing rule\n"); 285 while (pch != NULL) 286 { 287 --ci; 288 target_edge->rule[ci] = atoi(pch); 289 pch = (char *)strtok (NULL, " ,"); 290 } 291 DBG("rule: %i\n", target_edge->rule[0]); 254 char* pch = NULL; 255 int ci = MAX_RULE_LENGTH; 256 257 pch = (char *)strtok (str," ,"); 258 259 while (pch != NULL) 260 { 261 --ci; 262 target_edge->rule[ci] = atoi(pch); 263 pch = (char *)strtok (NULL, " ,"); 264 } 292 265 } 293 266 } … … 358 331 } 359 332 360 //DBG("***%i***", ret);333 //DBG("***%i***", ret); 361 334 362 335 ntuples = SPI_processed; 363 DBG("ntuples = %i", ntuples);364 365 336 total_tuples += ntuples; 366 DBG("<%i> tuples", total_tuples); 367 368 // if (!edges) 369 if (total_tuples <= TUPLIMIT) 337 338 if (!edges) 370 339 edges = palloc(total_tuples * sizeof(edge_shooting_star_t)); 371 340 else … … 373 342 374 343 if (edges == NULL) 375 {376 elog(ERROR, "Out of memory");377 return finish(SPIcode, ret);378 }344 { 345 elog(ERROR, "Out of memory"); 346 return finish(SPIcode, ret); 347 } 379 348 380 349 if (ntuples > 0) 381 {350 { 382 351 int t; 383 352 SPITupleTable *tuptable = SPI_tuptable; 384 353 TupleDesc tupdesc = SPI_tuptable->tupdesc; 385 354 386 355 for (t = 0; t < ntuples; t++) 387 {388 HeapTuple tuple = tuptable->vals[t];389 fetch_edge_shooting_star(&tuple, &tupdesc, &edge_columns,356 { 357 HeapTuple tuple = tuptable->vals[t]; 358 fetch_edge_shooting_star(&tuple, &tupdesc, &edge_columns, 390 359 &edges[total_tuples - ntuples + t]); 391 392 DBG("edges[%i].id = %i", total_tuples - ntuples + t, edges[total_tuples - ntuples + t].id); 393 394 if(edges[total_tuples - ntuples + t].id<e_min_id) 395 e_min_id=edges[total_tuples - ntuples + t].id; 396 397 if(edges[total_tuples - ntuples + t].id>e_max_id) 398 e_max_id=edges[total_tuples - ntuples + t].id; 399 400 401 if(edges[total_tuples - ntuples + t].id == source_edge_id) 402 ++s_count; 403 if(edges[total_tuples - ntuples + t].id == target_edge_id) 404 ++t_count; 405 406 } 360 } 407 361 SPI_freetuptable(tuptable); 408 }362 } 409 363 else 410 {364 { 411 365 moredata = FALSE; 412 }413 } 414 415 416 DBG("Total <%i>tuples", total_tuples);417 418 419 /* 366 } 367 } 368 369 370 DBG("Total %i tuples", total_tuples); 371 372 373 420 374 for(z=0; z<total_tuples; z++) 421 375 { … … 427 381 428 382 } 429 */ 383 430 384 DBG("E : %i <-> %i", e_min_id, e_max_id); 431 385 432 //for(z=0; z<total_tuples; ++z)433 //{386 for(z=0; z<total_tuples; ++z) 387 { 434 388 435 389 //check if edges[] contains source and target 436 437 //DBG("edges[%i].id (%i) == %i", z, edges[z].id, source_edge_id); 438 439 /* 440 if(edges[z].id == source_edge_id) 390 if(edges[z].id == source_edge_id || 391 edges[z].id == source_edge_id) 441 392 ++s_count; 442 if(edges[z].id == target_edge_id) 393 if(edges[z].id == target_edge_id || 394 edges[z].id == target_edge_id) 443 395 ++t_count; 444 */ 396 445 397 446 398 //edges[z].source-=v_min_id; 447 399 //edges[z].target-=v_min_id; 448 400 449 //}450 451 //DBG("Total %i tuples", total_tuples);401 } 402 403 DBG("Total %i tuples", total_tuples); 452 404 453 405 if(s_count == 0) … … 469 421 //time_t stime = time(NULL); 470 422 471 DBG("ret = %i\n",ret);472 473 423 ret = boost_shooting_star(edges, total_tuples, source_edge_id, 474 424 target_edge_id, … … 489 439 ereport(ERROR, (errcode(ERRCODE_E_R_E_CONTAINING_SQL_NOT_PERMITTED), 490 440 errmsg("Error computing path: %s", err_msg))); 491 // errmsg("Error computing path: %i", ret)));492 441 } 493 442 return finish(SPIcode, ret);

