/* MODIFY AS NEEDED */ static void process( char* edges_sql, int64_t start_vid, int64_t *end_vidsArr, size_t size_end_vidsArr, bool directed, MY_RETURN_VALUE_TYPE **result_tuples, size_t *result_count) { pgr_SPI_connect(); PGR_DBG("Load data"); MY_EDGE_TYPE *edges = NULL; size_t total_edges = 0; MY_EDGE_FUNCTION(edges_sql, &edges, &total_edges); PGR_DBG("Total %ld edges in query:", total_edges); if (total_edges == 0) { PGR_DBG("No edges found"); (*result_count) = 0; (*result_tuples) = NULL; pgr_SPI_finish(); return; } PGR_DBG("Starting processing"); char *err_msg = NULL; char *log_msg = NULL; // Code standard: // Pass the arrays and the sizes on the same line clock_t start_t = clock(); do_pgr_MY_FUNCTION_NAME( edges, total_edges, start_vid, end_vidsArr, size_end_vidsArr, directed, result_tuples, result_count, &log_msg, &err_msg); time_msg(" processing pgr_funnyDijkstra", start_t, clock()); PGR_DBG("Returning %ld tuples\n", *result_count); PGR_DBG("LOG: %s\n", log_msg); if (log_msg) free(log_msg); if (err_msg) { if (*result_tuples) free(*result_tuples); if (end_vidsArr) free(end_vidsArr); elog(ERROR, "%s", err_msg); free(err_msg); } pfree(edges); pgr_SPI_finish(); }
/* MODIFY AS NEEDED */ static void process( char* edges_sql, int64_t start_vid, int64_t end_vid, #if 0 /* * handling arrays example */ ArrayType *starts, ArrayType *ends, #endif bool directed, bool only_cost, MY_RETURN_VALUE_TYPE **result_tuples, size_t *result_count) { /* * https://www.postgresql.org/docs/current/static/spi-spi-connect.html */ pgr_SPI_connect(); #if 0 /* * handling arrays example */ PGR_DBG("Initializing arrays"); int64_t* start_vidsArr = NULL; size_t size_start_vidsArr = 0; start_vidsArr = (int64_t*) pgr_get_bigIntArray(&size_start_vidsArr, starts); PGR_DBG("start_vidsArr size %ld ", size_start_vidsArr); int64_t* end_vidsArr = NULL; size_t size_end_vidsArr = 0; end_vidsArr = (int64_t*) pgr_get_bigIntArray(&size_end_vidsArr, ends); PGR_DBG("end_vidsArr size %ld ", size_end_vidsArr); #endif (*result_tuples) = NULL; (*result_count) = 0; PGR_DBG("Load data"); MY_EDGE_TYPE *edges = NULL; size_t total_edges = 0; if (start_vid == end_vid) { /* * https://www.postgresql.org/docs/current/static/spi-spi-finish.html */ pgr_SPI_finish(); return; } MY_EDGE_FUNCTION(edges_sql, &edges, &total_edges); PGR_DBG("Total %ld edges in query:", total_edges); if (total_edges == 0) { PGR_DBG("No edges found"); pgr_SPI_finish(); return; } PGR_DBG("Starting processing"); clock_t start_t = clock(); char *log_msg = NULL; char *notice_msg = NULL; char *err_msg = NULL; do_pgr_MY_FUNCTION_NAME( edges, total_edges, start_vid, end_vid, #if 0 /* * handling arrays example */ start_vidsArr, size_start_vidsArr, end_vidsArr, size_end_vidsArr, #endif directed, only_cost, result_tuples, result_count, &log_msg, ¬ice_msg, &err_msg); time_msg(" processing pgr_MY_FUNCTION_NAME", start_t, clock()); PGR_DBG("Returning %ld tuples", *result_count); if (err_msg) { if (*result_tuples) pfree(*result_tuples); } pgr_global_report(log_msg, notice_msg, err_msg); if (edges) pfree(edges); if (log_msg) pfree(log_msg); if (notice_msg) pfree(notice_msg); if (err_msg) pfree(err_msg); #if 0 /* * handling arrays example */ if (end_vidsArr) pfree(end_vidsArr); if (start_vidsArr) pfree(start_vidsArr); #endif pgr_SPI_finish(); }