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.
46 lines
1.5 KiB
JavaScript
46 lines
1.5 KiB
JavaScript
// TODO: use pgQueryRunner parameter directly
|
|
function OverviewsApi(queryTablesApi) {
|
|
this.pgQueryRunner = queryTablesApi.pgQueryRunner;
|
|
}
|
|
|
|
module.exports = OverviewsApi;
|
|
|
|
// TODO: share this with OverviewsApi? ... or maintain independence?
|
|
var affectedTableRegexCache = {
|
|
bbox: /!bbox!/g,
|
|
scale_denominator: /!scale_denominator!/g,
|
|
pixel_width: /!pixel_width!/g,
|
|
pixel_height: /!pixel_height!/g
|
|
};
|
|
|
|
function prepareSql(sql) {
|
|
return sql
|
|
.replace(affectedTableRegexCache.bbox, 'ST_MakeEnvelope(0,0,0,0)')
|
|
.replace(affectedTableRegexCache.scale_denominator, '0')
|
|
.replace(affectedTableRegexCache.pixel_width, '1')
|
|
.replace(affectedTableRegexCache.pixel_height, '1')
|
|
;
|
|
}
|
|
|
|
OverviewsApi.prototype.getOverviewsMetadata = function (username, sql, callback) {
|
|
var query = 'SELECT * FROM CDB_Overviews(CDB_QueryTablesText($windshaft$' + prepareSql(sql) + '$windshaft$))';
|
|
this.pgQueryRunner.run(username, query, function handleOverviewsRows(err, rows) {
|
|
if (err){
|
|
var msg = err.message ? err.message : err;
|
|
callback(new Error('could not get overviews metadata: ' + msg));
|
|
return;
|
|
}
|
|
var metadata = {};
|
|
rows.forEach(function(row) {
|
|
var table = row.base_table;
|
|
var table_metadata = metadata[table];
|
|
if ( !table_metadata ) {
|
|
table_metadata = metadata[table] = {};
|
|
}
|
|
table_metadata[row.z] = { table: row.overview_table };
|
|
});
|
|
return callback(null, metadata);
|
|
});
|
|
|
|
};
|