- SQL_MUST( sqlite3_prepare(db,
- "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=?\n"
- " AND buy.islandid=?\n"
- " GROUP BY sell.commodid, sell.price, buy.price",
- -1, &ss_ipair_trades, 0) );
-
- SQL_MUST( sqlite3_prepare(db,
- " SELECT dist from dists where aiid=? and biid=?",
- -1, &ss_ipair_dist, 0) );
-
- ipairs= mcalloc(sizeof(*ipairs) * nislands);
+ SQL_PREPARE(ss_ipair_dist,
+ " SELECT dist FROM dists\n"
+ " WHERE aiid=? and biid=?");
+
+ SQL_PREPARE(ss_ipair_trades,
+ "SELECT DISTINCT\n"
+ " sell.commodid commodid,\n"
+ " sell.price src_price,\n"
+ " buy.price dst_price\n"
+ " FROM sell JOIN buy\n"
+ " ON sell.commodid = buy.commodid\n"
+ " AND buy.price > sell.price\n"
+ " WHERE sell.islandid=?\n"
+ " AND buy.islandid=?");
+
+#define BS(bs) \
+ SQL_PREPARE(ss_ite_##bs, \
+ "SELECT\n" \
+ " sum(qty)\n" \
+ " FROM " #bs "\n" \
+ " WHERE islandid=?\n" \
+ " AND commodid=?\n" \
+ " AND price=?");
+ BS(buy)
+ BS(sell)
+#undef BS
+
+ ipairs= mcalloc(sizeof(*ipairs) * islandtablesz);