From 2a8a8f6e6a7cf0e6a184c59a8bf5be693473ee69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Fri, 23 Aug 2019 17:10:46 +0200 Subject: [PATCH] Export methods to get max, min, values od a column and sample based on a range --- lib/cartodb/utils/query-utils.js | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/lib/cartodb/utils/query-utils.js b/lib/cartodb/utils/query-utils.js index f5daf0e1..63d66110 100644 --- a/lib/cartodb/utils/query-utils.js +++ b/lib/cartodb/utils/query-utils.js @@ -150,6 +150,36 @@ function simpleQueryTable(sql) { return false; } +module.exports.getMaxMinColumnQuery = function (query, column = 'cartodb_id') { + return ` + SELECT + min(${column}) AS min_id, + max(${column}) AS max_id, + (max(${column}) - min(${column})) AS id_span + FROM (${query}) _cdb_metadata_max_min; + `; +}; + +module.exports.getSampleValuesFromRange = function getSampleValuesFromRange (min, span, limit) { + const sample = new Set(); + + limit = limit < span ? limit : span; + + while (sample.size < limit) { + sample.add(Math.floor(min + Math.random() * span)); + } + + return Array.from(sample); +}; + +module.exports.getSampleFromIdsQuery = function (query, ids, columns, column = 'cartodb_id') { + return ` + SELECT + ${columnSelector(columns)} + FROM (${query}) _cdb_metadata_sample + WHERE ${column} IN (${ids.join(',')}) + `; +}; function getQueryLimited(query, limit = 0) { return `