From: Ian Jackson Date: Sat, 22 Aug 2009 13:01:05 +0000 (+0100) Subject: Better answers for arch queries X-Git-Tag: 3.4~151 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-live.git;a=commitdiff_plain;h=4e84fbcc162553d4520a4d68c2d46978ba7a514c Better answers for arch queries --- diff --git a/yarrg/web/routetrade b/yarrg/web/routetrade index ad82657..9a7b036 100644 --- a/yarrg/web/routetrade +++ b/yarrg/web/routetrade @@ -12,7 +12,7 @@ my $sd_condition= sub { my ($bs, $ix) = @_; my $islandid= $islandids[$ix]; if (defined $islandid) { - return "${bs}_islands.islandid = $islandid"; + return "${bs}.islandid = $islandid"; } else { push @query_params, $archipelagoes[$ix]; return "${bs}_islands.archipelago = ?"; @@ -23,7 +23,14 @@ foreach my $src_i (0..$#islandids) { my $src_cond= $sd_condition->('sell',$src_i); my @dst_conds; foreach my $dst_i ($src_i..$#islandids) { - push @dst_conds, $sd_condition->('buy',$dst_i); + my $dst_cond= $sd_condition->('buy',$dst_i); + if ($dst_i==$src_i and !defined $islandids[$src_i]) { + # we always want arbitrage, but mentioning an arch + # once shouldn't produce intra-arch trades + $dst_cond= + "($dst_cond AND sell.islandid = buy.islandid)"; + } + push @dst_conds, $dst_cond; } push @flow_conds, "$src_cond AND ( ".join("