11 my $sd_condition= sub {
13 my $islandid= $islandids[$ix];
14 if (defined $islandid) {
15 return "${bs}.islandid = $islandid";
17 push @query_params, $archipelagoes[$ix];
18 return "${bs}_islands.archipelago = ?";
22 foreach my $src_i (0..$#islandids) {
23 my $src_cond= $sd_condition->('sell',$src_i);
25 foreach my $dst_i ($src_i..$#islandids) {
26 my $dst_cond= $sd_condition->('buy',$dst_i);
27 if ($dst_i==$src_i and !defined $islandids[$src_i]) {
28 # we always want arbitrage, but mentioning an arch
29 # once shouldn't produce intra-arch trades
31 "($dst_cond AND sell.islandid = buy.islandid)";
33 push @dst_conds, $dst_cond;
35 push @flow_conds, "$src_cond AND (
42 SELECT commods.commodname commodname,
43 commods.commodid commodid,
44 commods.unitmass mass,
45 commods.unitvolume volume,
46 sell_islands.islandid org_id,
47 sell_islands.islandname org_name,
49 sum(sell.qty) org_qty,
50 buy_islands.islandid dst_id,
51 buy_islands.islandname dst_name,
55 JOIN buy on commods.commodid = buy.commodid
56 JOIN sell on commods.commodid = sell.commodid
57 JOIN islands as sell_islands on sell.islandid = sell_islands.islandid
58 JOIN islands as buy_islands on buy.islandid = buy_islands.islandid
63 AND buy.price > sell.price
64 GROUP BY commodname, commods.commodid,
65 org_id, org_price, dst_id, dst_price
68 my $sth= $dbh->prepare($stmt);
69 $sth->execute(@query_params);
74 <% join(' | ',@query_params) |h %>
77 <& dumpqueryresults, sth =>$sth &>