12 my $sd_condition= sub {
14 my $islandid= $islandids[$ix];
15 if (defined $islandid) {
16 return "${bs}.islandid = $islandid";
18 push @query_params, $archipelagoes[$ix];
19 return "${bs}_islands.archipelago = ?";
23 foreach my $src_i (0..$#islandids) {
24 my $src_cond= $sd_condition->('sell',$src_i);
26 foreach my $dst_i ($src_i..$#islandids) {
27 my $dst_cond= $sd_condition->('buy',$dst_i);
28 if ($dst_i==$src_i and !defined $islandids[$src_i]) {
29 # we always want arbitrage, but mentioning an arch
30 # once shouldn't produce intra-arch trades
32 "($dst_cond AND sell.islandid = buy.islandid)";
34 push @dst_conds, $dst_cond;
36 push @flow_conds, "$src_cond AND (
43 SELECT commods.commodname commodname,
44 commods.commodid commodid,
45 commods.unitmass mass,
46 commods.unitvolume volume,
47 sell_islands.islandid org_id,
48 sell_islands.islandname org_name,
50 sum(sell.qty) org_qty,
51 buy_islands.islandid dst_id,
52 buy_islands.islandname dst_name,
56 JOIN buy on commods.commodid = buy.commodid
57 JOIN sell on commods.commodid = sell.commodid
58 JOIN islands as sell_islands on sell.islandid = sell_islands.islandid
59 JOIN islands as buy_islands on buy.islandid = buy_islands.islandid
64 AND buy.price > sell.price
65 GROUP BY commodname, commods.commodid,
66 org_id, org_price, dst_id, dst_price
69 my $sth= $dbh->prepare($stmt);
70 $sth->execute(@query_params);
73 % if ($qa->{'debug'}) {
76 <% join(' | ',@query_params) |h %>
80 <& dumpqueryresults, sth =>$sth &>