Remove the detail that the error occurred trying to get overviews metadata from the error message. This should be less confusing to the user.
45 lines
1.5 KiB
JavaScript
45 lines
1.5 KiB
JavaScript
function OverviewsMetadataApi(pgQueryRunner) {
|
|
this.pgQueryRunner = pgQueryRunner;
|
|
}
|
|
|
|
module.exports = OverviewsMetadataApi;
|
|
|
|
// TODO: share this with QueryTablesApi? ... 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')
|
|
;
|
|
}
|
|
|
|
OverviewsMetadataApi.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(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);
|
|
});
|
|
|
|
};
|