buildDataQuery: These methods are all almost the same. Couldn't we move that into the abstract query strategy by making the methods not abstract? (#263 (comment))
Also, what's the idea behind passing the database as a function parameter? Couldn't we store that as a instance variable on the query strategy class? (#263 (comment))