40 size_t *valid_edges) {
44 edge->
id = *default_id;
69 edge->
id = *default_id;
89 *valid_edges = edge->
cost < 0? *valid_edges: *valid_edges + 1;
90 *valid_edges = edge->
reverse_cost < 0? *valid_edges: *valid_edges + 1;
106 edge->
id = *default_id;
130 *valid_edges = edge->
cost < 0? *valid_edges: *valid_edges + 1;
131 *valid_edges = edge->
reverse_cost < 0? *valid_edges: *valid_edges + 1;
141 clock_t start_t = clock();
143 const int tuple_limit = 1000000;
151 info[0].
name = strdup(
"id");
152 info[1].
name = strdup(
"source");
153 info[2].
name = strdup(
"target");
154 info[3].
name = strdup(
"cost");
155 info[4].
name = strdup(
"reverse_cost");
156 info[5].
name = strdup(
"x1");
157 info[6].
name = strdup(
"y1");
158 info[7].
name = strdup(
"x2");
159 info[8].
name = strdup(
"y2");
162 for (i = 0; i < 3; ++i) {
168 for (i = 3; i < 9; ++i) {
187 bool moredata = TRUE;
188 (*total_edges) = total_tuples = valid_edges = 0;
191 int64_t default_id = 0;
192 while (moredata == TRUE) {
193 SPI_cursor_fetch(SPIportal, TRUE, tuple_limit);
194 if (total_tuples == 0)
197 ntuples = SPI_processed;
198 total_tuples += ntuples;
201 if ((*edges) == NULL)
208 if ((*edges) == NULL) {
209 elog(ERROR,
"Out of memory");
213 SPITupleTable *tuptable = SPI_tuptable;
214 TupleDesc tupdesc = SPI_tuptable->tupdesc;
215 for (t = 0; t < ntuples; t++) {
216 HeapTuple tuple = tuptable->vals[t];
219 &(*edges)[total_tuples - ntuples + t],
220 &valid_edges, normal);
222 SPI_freetuptable(tuptable);
228 SPI_cursor_close(SPIportal);
230 if (total_tuples == 0 || valid_edges == 0) {
234 (*total_edges) = total_tuples;
235 PGR_DBG(
"Finish reading %ld edges", total_tuples);
236 time_msg(
"reading edges", start_t, clock());
249 clock_t start_t = clock();
251 const int tuple_limit = 1000000;
260 for (i = 0; i < 5; ++i) {
266 info[0].
name = strdup(
"id");
267 info[1].
name = strdup(
"source");
268 info[2].
name = strdup(
"target");
269 info[3].
name = strdup(
"cost");
270 info[4].
name = strdup(
"reverse_cost");
272 info[0].
strict = !ignore_id;
286 bool moredata = TRUE;
287 (*totalTuples) = total_tuples = valid_edges = 0;
290 int64_t default_id = 0;
291 while (moredata == TRUE) {
292 SPI_cursor_fetch(SPIportal, TRUE, tuple_limit);
293 if (total_tuples == 0)
296 ntuples = SPI_processed;
297 total_tuples += ntuples;
300 if ((*edges) == NULL)
305 repalloc((*edges), total_tuples *
sizeof(
pgr_edge_t));
307 if ((*edges) == NULL) {
308 elog(ERROR,
"Out of memory");
312 SPITupleTable *tuptable = SPI_tuptable;
313 TupleDesc tupdesc = SPI_tuptable->tupdesc;
314 for (t = 0; t < ntuples; t++) {
315 HeapTuple tuple = tuptable->vals[t];
318 &(*edges)[total_tuples - ntuples + t],
322 SPI_freetuptable(tuptable);
328 SPI_cursor_close(SPIportal);
330 if (total_tuples == 0 || valid_edges == 0) {
334 (*totalTuples) = total_tuples;
335 PGR_DBG(
"Reading %ld edges", total_tuples);
336 time_msg(
"reading edges", start_t, clock());
346 clock_t start_t = clock();
348 const int tuple_limit = 1000000;
357 for (i = 0; i < 5; ++i) {
363 info[0].
name = strdup(
"id");
364 info[1].
name = strdup(
"source");
365 info[2].
name = strdup(
"target");
366 info[3].
name = strdup(
"capacity");
367 info[4].
name = strdup(
"reverse_capacity");
369 info[0].
strict = !ignore_id;
379 bool moredata = TRUE;
380 (*totalTuples) = total_tuples = valid_edges = 0;
383 int64_t default_id = 0;
384 while (moredata == TRUE) {
385 SPI_cursor_fetch(SPIportal, TRUE, tuple_limit);
386 if (total_tuples == 0)
389 ntuples = SPI_processed;
390 total_tuples += ntuples;
393 if ((*edges) == NULL)
398 if ((*edges) == NULL) {
399 elog(ERROR,
"Out of memory");
403 SPITupleTable *tuptable = SPI_tuptable;
404 TupleDesc tupdesc = SPI_tuptable->tupdesc;
406 for (t = 0; t < ntuples; t++) {
407 HeapTuple tuple = tuptable->vals[t];
410 &(*edges)[total_tuples - ntuples + t],
414 SPI_freetuptable(tuptable);
420 SPI_cursor_close(SPIportal);
422 if (total_tuples == 0 || valid_edges == 0) {
426 (*totalTuples) = total_tuples;
427 PGR_DBG(
"Reading %ld edges", total_tuples);
428 time_msg(
"reading edges", start_t, clock());
438 clock_t start_t = clock();
440 const int tuple_limit = 1000000;
449 for (i = 0; i < 5; ++i) {
455 info[0].
name = strdup(
"id");
456 info[1].
name = strdup(
"source");
457 info[2].
name = strdup(
"target");
458 info[3].
name = strdup(
"going");
459 info[4].
name = strdup(
"coming");
461 info[0].
strict = !ignore_id;
475 bool moredata = TRUE;
476 (*totalTuples) = total_tuples = valid_edges = 0;
479 int64_t default_id = 0;
480 while (moredata == TRUE) {
481 SPI_cursor_fetch(SPIportal, TRUE, tuple_limit);
482 if (total_tuples == 0)
485 ntuples = SPI_processed;
486 total_tuples += ntuples;
489 if ((*edges) == NULL)
496 if ((*edges) == NULL) {
497 elog(ERROR,
"Out of memory");
501 SPITupleTable *tuptable = SPI_tuptable;
502 TupleDesc tupdesc = SPI_tuptable->tupdesc;
504 for (t = 0; t < ntuples; t++) {
505 HeapTuple tuple = tuptable->vals[t];
508 &(*edges)[total_tuples - ntuples + t],
511 SPI_freetuptable(tuptable);
517 SPI_cursor_close(SPIportal);
519 if (total_tuples == 0 || valid_edges == 0) {
523 (*totalTuples) = total_tuples;
524 PGR_DBG(
"Reading %ld edges", total_tuples);
525 time_msg(
"reading edges", start_t, clock());
533 size_t *total_edges) {
534 bool ignore_id =
false;
543 size_t *total_edges) {
544 bool ignore_id =
false;
554 size_t *total_edges) {
555 bool ignore_id =
false;
565 size_t *total_edges) {
566 bool ignore_id =
true;
576 size_t *total_edges) {
589 size_t *total_edges) {
598 size_t *total_edges) {
599 bool ignore_id =
false;
int64_t pgr_SPI_getBigInt(HeapTuple *tuple, TupleDesc *tupdesc, Column_info_t info)
static edge_t edges[22573]
void time_msg(char *msg, clock_t start_t, clock_t end_t)
void pgr_fetch_column_info(Column_info_t info[], int info_size)
bool column_found(int colNumber)
Portal pgr_SPI_cursor_open(SPIPlanPtr SPIplan)
double pgr_SPI_getFloat8(HeapTuple *tuple, TupleDesc *tupdesc, Column_info_t info)
SPIPlanPtr pgr_SPI_prepare(char *sql)