Use the Windshaft query-rewriter interface to adapt queries so
they use available overview tables.
This requires a version of Windshaft that implements the query-rewriter
interface (package.json/npm-shrinkwap.json have yet to be updated)
Now data for multiple tables is obtained in one call, simplifying the
use of this function. Also base table is returned as an oid, so we
now have the overview base table names with schema only when needed.
Errors without an explicit status code with the error message
containing 'does not exist' were assigned codes 404 or 403.
Now if the error message is 'function X does not exist'
(originated in SQL) the error code assigned is 400.
Now an error occurs before craeeteLayergroup when checking affected
tables for overviews information. This prevents the creation of the
map configuration, so the corresponding redis keys need not be deleted.
The error message changes also because now the error originates in
a different function call, QueryTablesApi.prototype.getAffectedTablesInQuery
vs getAffectedTablesAndLastUpdatedTime.
The invalid SQL in this test (missing comma) was unnoticed because
the test was provoking a failed before the SQL was parsed, but new
features may cause the SQL to be evaluated (to get affected tables)
before the CartoCSS validity is checked.
Last param is callback function, receiving err + result, no need to
keep passing two functions, the query handler and the final callback.
It should be easier to understand now as query handler was in a position
where it had to know about receiving a callback, that was exposing an
implementation detail of PgQueryRunner.