X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;ds=sidebyside;f=yarrg%2Frsvalue.c;h=fe9c992acb4220ce9e15b5f7fb7bd1d93c7685f7;hb=61bfadfe4401bd21f2582fcd9d7f1bc550088c3f;hp=67785239c473297ac1201f39cfca51834d36d8f6;hpb=3ca67ce14212ba4421029d7b8db90f03f106c67c;p=ypp-sc-tools.db-live.git diff --git a/yarrg/rsvalue.c b/yarrg/rsvalue.c index 6778523..fe9c992 100644 --- a/yarrg/rsvalue.c +++ b/yarrg/rsvalue.c @@ -1,52 +1,45 @@ /**/ +typedef struct { + int commodid, src_price, src_qty, dst_price, dst_qty; +} Trade; + +typedef struct { + int ntrades; + Trade *trades; +} IslandPair; + #include "rscommon.h" +static void ipair_gettrades(int si, int di) { + char *stmt= masprintf + ("SELECT\n" + " sell.commodid commodid,\n" + " sell.price src_price,\n" + " sum(sell.qty) src_qty,\n" + " buy.price dst_price,\n" + " sum(buy.qty) dst_qty\n" + " FROM sell JOIN buy\n" + " ON sell.commodid = buy.commodid\n" + " AND buy.price > sell.price\n" + " WHERE sell.islandid=%d\n" + " AND buy.islandid=%d\n" + " GROUP BY sell.commodid, sell.price, buy.price\n", + si, di); + + printf("SQL\n[\n%s\n]\n", stmt); + + free(stmt); +} + void value_route(int nislands, const int *islands) { - char stmt[1024+80*nislands+40*nislands*nislands], *sp; int s,d; - sp= stmt; - sp += sprintf(sp, - "SELECT\n" - " sell.islandid src_id,\n" - " sell.price src_price,\n" - " sum(sell.qty) src_qty,\n" - " buy.islandid dst_id,\n" - " buy.price dst_price,\n" - " sum(buy.qty) dst_qty,\n" - " commods.commodid commodid,\n" - " commods.unitmass unitmass,\n" - " commods.unitvolume unitvolume,\n" - " dist dist,\n" - " buy.price-sell.price unitprofit\n" - " FROM commods\n" - " JOIN sell ON commods.commodid = sell.commodid\n" - " JOIN buy ON commods.commodid = buy.commodid\n" - " JOIN dists ON aiid = sell.islandid AND biid = buy.islandid\n" - " WHERE buy.price > sell.price\n" - " AND ("); for (s=0; s