From 1d199f8713c8d34ed574d272ed65213c0222277f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Mon, 30 Jul 2018 15:19:53 +0200 Subject: [PATCH 01/80] Remove step in method --- lib/cartodb/backends/dataview.js | 79 ++++++++++++++++---------------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index 4eebb2a2..4a79612f 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -21,51 +21,52 @@ function DataviewBackend(analysisBackend) { module.exports = DataviewBackend; DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, params, callback) { + const dataviewName = params.dataviewName; - var dataviewName = params.dataviewName; - step( - function getMapConfig() { - mapConfigProvider.getMapConfig(this); - }, - function runDataviewQuery(err, mapConfig) { - assert.ifError(err); + mapConfigProvider.getMapConfig(function (err, mapConfig) { + if (err) { + return callback(err); + } - var dataviewDefinition = getDataviewDefinition(mapConfig.obj(), dataviewName); - if (!dataviewDefinition) { - throw new Error("Dataview '" + dataviewName + "' does not exists"); - } + var dataviewDefinition = getDataviewDefinition(mapConfig.obj(), dataviewName); + if (!dataviewDefinition) { + throw new Error("Dataview '" + dataviewName + "' does not exists"); + } - var ownFilter = +params.own_filter; - var noFilters = +params.no_filters; - if (Number.isFinite(ownFilter) && Number.isFinite(noFilters)) { - err = new Error(); - err.message = 'Both own_filter and no_filters cannot be sent in the same request'; - err.type = 'dataview'; - err.http_status = 400; + var ownFilter = +params.own_filter; + var noFilters = +params.no_filters; + if (Number.isFinite(ownFilter) && Number.isFinite(noFilters)) { + err = new Error(); + err.message = 'Both own_filter and no_filters cannot be sent in the same request'; + err.type = 'dataview'; + err.http_status = 400; + return callback(err); + } + + var pg = new PSQL(dbParamsFromReqParams(params)); + + var query = getDataviewQuery(dataviewDefinition, ownFilter, noFilters); + if (params.bbox) { + var bboxFilter = new BBoxFilter({column: 'the_geom_webmercator', srid: 3857}, {bbox: params.bbox}); + query = bboxFilter.sql(query); + } + + var queryRewriteData = getQueryRewriteData(mapConfig, dataviewDefinition, params); + + var dataviewFactory = DataviewFactoryWithOverviews.getFactory( + overviewsQueryRewriter, queryRewriteData, { bbox: params.bbox } + ); + + var dataview = dataviewFactory.getDataview(query, dataviewDefinition); + + dataview.getResult(pg, getOverrideParams(params, !!ownFilter), function (err, dataview) { + if (err) { return callback(err); } - var pg = new PSQL(dbParamsFromReqParams(params)); - - var query = getDataviewQuery(dataviewDefinition, ownFilter, noFilters); - if (params.bbox) { - var bboxFilter = new BBoxFilter({column: 'the_geom_webmercator', srid: 3857}, {bbox: params.bbox}); - query = bboxFilter.sql(query); - } - - var queryRewriteData = getQueryRewriteData(mapConfig, dataviewDefinition, params); - - var dataviewFactory = DataviewFactoryWithOverviews.getFactory( - overviewsQueryRewriter, queryRewriteData, { bbox: params.bbox } - ); - - var dataview = dataviewFactory.getDataview(query, dataviewDefinition); - dataview.getResult(pg, getOverrideParams(params, !!ownFilter), this); - }, - function returnCallback(err, result) { - return callback(err, result); - } - ); + return callback(null, dataview); + }); + }); }; function getDataviewQuery(dataviewDefinition, ownFilter, noFilters) { From 60cd91f1446e96203131687050ffe71fb29ddb1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 15:50:41 +0200 Subject: [PATCH 02/80] indentation --- lib/cartodb/backends/filter-stats.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/cartodb/backends/filter-stats.js b/lib/cartodb/backends/filter-stats.js index ba427405..08861b21 100644 --- a/lib/cartodb/backends/filter-stats.js +++ b/lib/cartodb/backends/filter-stats.js @@ -24,8 +24,8 @@ function getEstimatedRows(pgQueryRunner, username, query, callback) { } FilterStatsBackends.prototype.getFilterStats = function (username, unfiltered_query, filters, callback) { - var stats = {}; - var self = this; + var stats = {}; + var self = this; step( function getUnfilteredRows() { getEstimatedRows(self.pgQueryRunner, username, unfiltered_query, this); From 94b7353fbf20553633a19b1ab2597d3c77a8f14d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Mon, 30 Jul 2018 15:52:04 +0200 Subject: [PATCH 03/80] Fix uncaught exception --- lib/cartodb/backends/dataview.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index 4a79612f..c62d6bb7 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -59,7 +59,15 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param var dataview = dataviewFactory.getDataview(query, dataviewDefinition); - dataview.getResult(pg, getOverrideParams(params, !!ownFilter), function (err, dataview) { + let overrideParams; + + try { + overrideParams = getOverrideParams(params, !!ownFilter); + } catch (error) { + return callback(error); + } + + dataview.getResult(pg, overrideParams, function (err, dataview) { if (err) { return callback(err); } From eeafad7cd97d4f1bc6b79ba87656c4c6a79fa461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 15:52:41 +0200 Subject: [PATCH 04/80] remove step --- lib/cartodb/backends/filter-stats.js | 60 ++++++++++++++-------------- 1 file changed, 29 insertions(+), 31 deletions(-) diff --git a/lib/cartodb/backends/filter-stats.js b/lib/cartodb/backends/filter-stats.js index 08861b21..7aa3adc7 100644 --- a/lib/cartodb/backends/filter-stats.js +++ b/lib/cartodb/backends/filter-stats.js @@ -1,5 +1,4 @@ var _ = require('underscore'); -var step = require('step'); var AnalysisFilter = require('../models/filter/analysis'); function FilterStatsBackends(pgQueryRunner) { @@ -26,34 +25,33 @@ function getEstimatedRows(pgQueryRunner, username, query, callback) { FilterStatsBackends.prototype.getFilterStats = function (username, unfiltered_query, filters, callback) { var stats = {}; var self = this; - step( - function getUnfilteredRows() { - getEstimatedRows(self.pgQueryRunner, username, unfiltered_query, this); - }, - function receiveUnfilteredRows(err, rows) { - if (err){ - callback(err); - return; - } - stats.unfiltered_rows = rows; - this(null, rows); - }, - function getFilteredRows() { - if ( filters && !_.isEmpty(filters)) { - var analysisFilter = new AnalysisFilter(filters); - var query = analysisFilter.sql(unfiltered_query); - getEstimatedRows(self.pgQueryRunner, username, query, this); - } else { - this(null, null); - } - }, - function receiveFilteredRows(err, rows) { - if (err){ - callback(err); - return; - } - stats.filtered_rows = rows; - callback(null, stats); - } - ); + + function getUnfilteredRows() { + getEstimatedRows(self.pgQueryRunner, username, unfiltered_query, this); + }, + function receiveUnfilteredRows(err, rows) { + if (err){ + callback(err); + return; + } + stats.unfiltered_rows = rows; + this(null, rows); + }, + function getFilteredRows() { + if ( filters && !_.isEmpty(filters)) { + var analysisFilter = new AnalysisFilter(filters); + var query = analysisFilter.sql(unfiltered_query); + getEstimatedRows(self.pgQueryRunner, username, query, this); + } else { + this(null, null); + } + }, + function receiveFilteredRows(err, rows) { + if (err){ + callback(err); + return; + } + stats.filtered_rows = rows; + callback(null, stats); + } }; From bafeceeb6ee4fe7ebfdadd993f067901dd42f0bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 15:54:26 +0200 Subject: [PATCH 05/80] remove step: first funcion --- lib/cartodb/backends/filter-stats.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/cartodb/backends/filter-stats.js b/lib/cartodb/backends/filter-stats.js index 7aa3adc7..de41da3f 100644 --- a/lib/cartodb/backends/filter-stats.js +++ b/lib/cartodb/backends/filter-stats.js @@ -26,17 +26,14 @@ FilterStatsBackends.prototype.getFilterStats = function (username, unfiltered_qu var stats = {}; var self = this; - function getUnfilteredRows() { - getEstimatedRows(self.pgQueryRunner, username, unfiltered_query, this); - }, - function receiveUnfilteredRows(err, rows) { + getEstimatedRows(self.pgQueryRunner, username, unfiltered_query, function (err, rows) { if (err){ callback(err); return; } stats.unfiltered_rows = rows; this(null, rows); - }, + }) function getFilteredRows() { if ( filters && !_.isEmpty(filters)) { var analysisFilter = new AnalysisFilter(filters); From 2196a89ec3b27bcf7b36885635f014e4bdb7623a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 15:55:24 +0200 Subject: [PATCH 06/80] remove step: 2 function refactor --- lib/cartodb/backends/filter-stats.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/cartodb/backends/filter-stats.js b/lib/cartodb/backends/filter-stats.js index de41da3f..2afd5ffc 100644 --- a/lib/cartodb/backends/filter-stats.js +++ b/lib/cartodb/backends/filter-stats.js @@ -28,11 +28,10 @@ FilterStatsBackends.prototype.getFilterStats = function (username, unfiltered_qu getEstimatedRows(self.pgQueryRunner, username, unfiltered_query, function (err, rows) { if (err){ - callback(err); - return; + return callback(err); } + stats.unfiltered_rows = rows; - this(null, rows); }) function getFilteredRows() { if ( filters && !_.isEmpty(filters)) { From fb683e438d291f5a728c7d74d4f8a8e3d13d8c3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 15:56:18 +0200 Subject: [PATCH 07/80] remove step: second function --- lib/cartodb/backends/filter-stats.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/cartodb/backends/filter-stats.js b/lib/cartodb/backends/filter-stats.js index 2afd5ffc..d2ffe6ba 100644 --- a/lib/cartodb/backends/filter-stats.js +++ b/lib/cartodb/backends/filter-stats.js @@ -32,8 +32,7 @@ FilterStatsBackends.prototype.getFilterStats = function (username, unfiltered_qu } stats.unfiltered_rows = rows; - }) - function getFilteredRows() { + if ( filters && !_.isEmpty(filters)) { var analysisFilter = new AnalysisFilter(filters); var query = analysisFilter.sql(unfiltered_query); @@ -41,7 +40,7 @@ FilterStatsBackends.prototype.getFilterStats = function (username, unfiltered_qu } else { this(null, null); } - }, + }) function receiveFilteredRows(err, rows) { if (err){ callback(err); From 6be1a77a29e01f4e17496166d6098e6b2ce175e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Mon, 30 Jul 2018 15:57:47 +0200 Subject: [PATCH 08/80] Use callback to return the error --- lib/cartodb/backends/dataview.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index c62d6bb7..b4eee7fa 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -30,7 +30,7 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param var dataviewDefinition = getDataviewDefinition(mapConfig.obj(), dataviewName); if (!dataviewDefinition) { - throw new Error("Dataview '" + dataviewName + "' does not exists"); + return callback(new Error("Dataview '" + dataviewName + "' does not exists")); } var ownFilter = +params.own_filter; From 150658d58d999bb21eecd85c70423d71b5216ab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 15:59:37 +0200 Subject: [PATCH 09/80] remove step: 3 function refactor --- lib/cartodb/backends/filter-stats.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/cartodb/backends/filter-stats.js b/lib/cartodb/backends/filter-stats.js index d2ffe6ba..5458c637 100644 --- a/lib/cartodb/backends/filter-stats.js +++ b/lib/cartodb/backends/filter-stats.js @@ -36,9 +36,9 @@ FilterStatsBackends.prototype.getFilterStats = function (username, unfiltered_qu if ( filters && !_.isEmpty(filters)) { var analysisFilter = new AnalysisFilter(filters); var query = analysisFilter.sql(unfiltered_query); - getEstimatedRows(self.pgQueryRunner, username, query, this); - } else { - this(null, null); + getEstimatedRows(self.pgQueryRunner, username, query, function () { + + }); } }) function receiveFilteredRows(err, rows) { From cca0848e6d0ef457a58aa25f0beef9699fb82fa1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Mon, 30 Jul 2018 15:59:43 +0200 Subject: [PATCH 10/80] Improve error --- lib/cartodb/backends/dataview.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index b4eee7fa..1be165e8 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -30,7 +30,10 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param var dataviewDefinition = getDataviewDefinition(mapConfig.obj(), dataviewName); if (!dataviewDefinition) { - return callback(new Error("Dataview '" + dataviewName + "' does not exists")); + const error = new Error(`Dataview '${dataviewName}' does not exists`); + error.type = 'dataview'; + error.http_status = 400; + return callback(error); } var ownFilter = +params.own_filter; From 13075460acbb362bce53e8f8fba86144d7e9f545 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Mon, 30 Jul 2018 16:00:30 +0200 Subject: [PATCH 11/80] Do not override incoming arguments --- lib/cartodb/backends/dataview.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index 1be165e8..25684711 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -39,10 +39,9 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param var ownFilter = +params.own_filter; var noFilters = +params.no_filters; if (Number.isFinite(ownFilter) && Number.isFinite(noFilters)) { - err = new Error(); - err.message = 'Both own_filter and no_filters cannot be sent in the same request'; - err.type = 'dataview'; - err.http_status = 400; + const error = new Error('Both own_filter and no_filters cannot be sent in the same request'); + error.type = 'dataview'; + error.http_status = 400; return callback(err); } From c2577d1d2538da3c783e7145b9a69950a094567a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 16:02:04 +0200 Subject: [PATCH 12/80] remove step: last function --- lib/cartodb/backends/filter-stats.js | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/cartodb/backends/filter-stats.js b/lib/cartodb/backends/filter-stats.js index 5458c637..338e9f10 100644 --- a/lib/cartodb/backends/filter-stats.js +++ b/lib/cartodb/backends/filter-stats.js @@ -36,17 +36,16 @@ FilterStatsBackends.prototype.getFilterStats = function (username, unfiltered_qu if ( filters && !_.isEmpty(filters)) { var analysisFilter = new AnalysisFilter(filters); var query = analysisFilter.sql(unfiltered_query); - getEstimatedRows(self.pgQueryRunner, username, query, function () { - + getEstimatedRows(self.pgQueryRunner, username, query, function (err, rows) { + if (err){ + callback(err); + return; + } + stats.filtered_rows = rows; + callback(null, stats); }); } - }) - function receiveFilteredRows(err, rows) { - if (err){ - callback(err); - return; - } - stats.filtered_rows = rows; + callback(null, stats); - } + }) }; From cd08ad693f7df2515d436d3bb71aa07079954732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 16:38:04 +0200 Subject: [PATCH 13/80] remove step: last function refactor --- lib/cartodb/backends/filter-stats.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/cartodb/backends/filter-stats.js b/lib/cartodb/backends/filter-stats.js index 338e9f10..48692c41 100644 --- a/lib/cartodb/backends/filter-stats.js +++ b/lib/cartodb/backends/filter-stats.js @@ -38,14 +38,14 @@ FilterStatsBackends.prototype.getFilterStats = function (username, unfiltered_qu var query = analysisFilter.sql(unfiltered_query); getEstimatedRows(self.pgQueryRunner, username, query, function (err, rows) { if (err){ - callback(err); - return; + return callback(err); } - stats.filtered_rows = rows; - callback(null, stats); - }); - } - callback(null, stats); + stats.filtered_rows = rows; + return callback(null, stats); + }); + } else { + return callback(null, stats); + } }) }; From 898bac5b042d9d7ed2b790a25db7cba837f826be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 16:42:17 +0200 Subject: [PATCH 14/80] jshint and style --- lib/cartodb/backends/filter-stats.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/cartodb/backends/filter-stats.js b/lib/cartodb/backends/filter-stats.js index 48692c41..9c410362 100644 --- a/lib/cartodb/backends/filter-stats.js +++ b/lib/cartodb/backends/filter-stats.js @@ -36,6 +36,7 @@ FilterStatsBackends.prototype.getFilterStats = function (username, unfiltered_qu if ( filters && !_.isEmpty(filters)) { var analysisFilter = new AnalysisFilter(filters); var query = analysisFilter.sql(unfiltered_query); + getEstimatedRows(self.pgQueryRunner, username, query, function (err, rows) { if (err){ return callback(err); @@ -44,8 +45,9 @@ FilterStatsBackends.prototype.getFilterStats = function (username, unfiltered_qu stats.filtered_rows = rows; return callback(null, stats); }); + } else { return callback(null, stats); } - }) + }); }; From 384f4f74e04eddbb38b52ae139b2d7e71b869629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 16:44:30 +0200 Subject: [PATCH 15/80] remove 'self' with arrows functions --- lib/cartodb/backends/filter-stats.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/cartodb/backends/filter-stats.js b/lib/cartodb/backends/filter-stats.js index 9c410362..76179ff3 100644 --- a/lib/cartodb/backends/filter-stats.js +++ b/lib/cartodb/backends/filter-stats.js @@ -24,9 +24,8 @@ function getEstimatedRows(pgQueryRunner, username, query, callback) { FilterStatsBackends.prototype.getFilterStats = function (username, unfiltered_query, filters, callback) { var stats = {}; - var self = this; - getEstimatedRows(self.pgQueryRunner, username, unfiltered_query, function (err, rows) { + getEstimatedRows(this.pgQueryRunner, username, unfiltered_query, (err, rows) => { if (err){ return callback(err); } @@ -37,7 +36,7 @@ FilterStatsBackends.prototype.getFilterStats = function (username, unfiltered_qu var analysisFilter = new AnalysisFilter(filters); var query = analysisFilter.sql(unfiltered_query); - getEstimatedRows(self.pgQueryRunner, username, query, function (err, rows) { + getEstimatedRows(this.pgQueryRunner, username, query, (err, rows) => { if (err){ return callback(err); } From 6c3b546648a52bba2991b2f4993afd00a5b15d32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 17:09:34 +0200 Subject: [PATCH 16/80] remove step --- lib/cartodb/backends/user-limits.js | 54 +++++++++++++---------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/lib/cartodb/backends/user-limits.js b/lib/cartodb/backends/user-limits.js index 519f1cd1..3a137269 100644 --- a/lib/cartodb/backends/user-limits.js +++ b/lib/cartodb/backends/user-limits.js @@ -1,5 +1,3 @@ -var step = require('step'); - /** * * @param metadataBackend @@ -43,41 +41,39 @@ UserLimitsBackend.prototype.getRenderLimits = function (username, apiKey, callba UserLimitsBackend.prototype.getTimeoutRenderLimit = function (username, apiKey, callback) { var self = this; - step( - function isAuthorized() { - var next = this; + function isAuthorized() { + var next = this; - if (!apiKey) { - return next(null, false); - } - - self.metadataBackend.getUserMapKey(username, function (err, userApiKey) { - if (err) { - return next(err); - } - - return next(null, userApiKey === apiKey); - }); - }, - function getUserTimeoutRenderLimits(err, authorized) { - var next = this; + if (!apiKey) { + return next(null, false); + } + self.metadataBackend.getUserMapKey(username, function (err, userApiKey) { if (err) { return next(err); } - self.metadataBackend.getUserTimeoutRenderLimits(username, function (err, timeoutRenderLimit) { - if (err) { - return next(err); - } + return next(null, userApiKey === apiKey); + }); + }, + function getUserTimeoutRenderLimits(err, authorized) { + var next = this; - next(null, { - render: authorized ? timeoutRenderLimit.render : timeoutRenderLimit.renderPublic - }); + if (err) { + return next(err); + } + + self.metadataBackend.getUserTimeoutRenderLimits(username, function (err, timeoutRenderLimit) { + if (err) { + return next(err); + } + + next(null, { + render: authorized ? timeoutRenderLimit.render : timeoutRenderLimit.renderPublic }); - }, - callback - ); + }); + }, + callback }; UserLimitsBackend.prototype.preprareRateLimit = function () { From eaff11ef6e143a5d9a738d8b1e171bedfe412985 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 17:15:04 +0200 Subject: [PATCH 17/80] remove step: function 1 --- lib/cartodb/backends/user-limits.js | 32 ++++++++++++++++------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/lib/cartodb/backends/user-limits.js b/lib/cartodb/backends/user-limits.js index 3a137269..7ce0f2a3 100644 --- a/lib/cartodb/backends/user-limits.js +++ b/lib/cartodb/backends/user-limits.js @@ -41,21 +41,11 @@ UserLimitsBackend.prototype.getRenderLimits = function (username, apiKey, callba UserLimitsBackend.prototype.getTimeoutRenderLimit = function (username, apiKey, callback) { var self = this; - function isAuthorized() { - var next = this; - - if (!apiKey) { - return next(null, false); + isAuthorized(self.metadataBackend, username, apiKey, (err, authorized) => { + if (err) { + return callback(err); } - - self.metadataBackend.getUserMapKey(username, function (err, userApiKey) { - if (err) { - return next(err); - } - - return next(null, userApiKey === apiKey); - }); - }, + }) function getUserTimeoutRenderLimits(err, authorized) { var next = this; @@ -76,6 +66,20 @@ UserLimitsBackend.prototype.getTimeoutRenderLimit = function (username, apiKey, callback }; +function isAuthorized(metadataBackend, username, apiKey, callback) { + if (!apiKey) { + return callback(null, false); + } + + metadataBackend.getUserMapKey(username, function (err, userApiKey) { + if (err) { + return callback(err); + } + + return callback(null, userApiKey === apiKey); + }); +} + UserLimitsBackend.prototype.preprareRateLimit = function () { if (this.options.limits.rateLimitsEnabled) { this.metadataBackend.loadRateLimitsScript(); From 70000f9df144ad30bc9ba2bbd5972df879dc0b6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 17:16:27 +0200 Subject: [PATCH 18/80] remove step: function 2 --- lib/cartodb/backends/user-limits.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/lib/cartodb/backends/user-limits.js b/lib/cartodb/backends/user-limits.js index 7ce0f2a3..3586432a 100644 --- a/lib/cartodb/backends/user-limits.js +++ b/lib/cartodb/backends/user-limits.js @@ -45,13 +45,6 @@ UserLimitsBackend.prototype.getTimeoutRenderLimit = function (username, apiKey, if (err) { return callback(err); } - }) - function getUserTimeoutRenderLimits(err, authorized) { - var next = this; - - if (err) { - return next(err); - } self.metadataBackend.getUserTimeoutRenderLimits(username, function (err, timeoutRenderLimit) { if (err) { @@ -62,8 +55,7 @@ UserLimitsBackend.prototype.getTimeoutRenderLimit = function (username, apiKey, render: authorized ? timeoutRenderLimit.render : timeoutRenderLimit.renderPublic }); }); - }, - callback + }); }; function isAuthorized(metadataBackend, username, apiKey, callback) { From 12ad4420aaf09be55140a3a8690ff8315f74f144 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 17:18:35 +0200 Subject: [PATCH 19/80] remove step: function 2 refactor --- lib/cartodb/backends/user-limits.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/cartodb/backends/user-limits.js b/lib/cartodb/backends/user-limits.js index 3586432a..f306cadf 100644 --- a/lib/cartodb/backends/user-limits.js +++ b/lib/cartodb/backends/user-limits.js @@ -48,12 +48,13 @@ UserLimitsBackend.prototype.getTimeoutRenderLimit = function (username, apiKey, self.metadataBackend.getUserTimeoutRenderLimits(username, function (err, timeoutRenderLimit) { if (err) { - return next(err); + return callback(err); } - next(null, { - render: authorized ? timeoutRenderLimit.render : timeoutRenderLimit.renderPublic - }); + callback( + null, + { render: authorized ? timeoutRenderLimit.render : timeoutRenderLimit.renderPublic } + ); }); }); }; From 3cf378e045d9b3404882ab38f32dd10f374d2c15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 17:21:19 +0200 Subject: [PATCH 20/80] remove 'self' --- lib/cartodb/backends/user-limits.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/cartodb/backends/user-limits.js b/lib/cartodb/backends/user-limits.js index f306cadf..87587f37 100644 --- a/lib/cartodb/backends/user-limits.js +++ b/lib/cartodb/backends/user-limits.js @@ -39,14 +39,12 @@ UserLimitsBackend.prototype.getRenderLimits = function (username, apiKey, callba }; UserLimitsBackend.prototype.getTimeoutRenderLimit = function (username, apiKey, callback) { - var self = this; - - isAuthorized(self.metadataBackend, username, apiKey, (err, authorized) => { + isAuthorized(this.metadataBackend, username, apiKey, (err, authorized) => { if (err) { return callback(err); } - self.metadataBackend.getUserTimeoutRenderLimits(username, function (err, timeoutRenderLimit) { + this.metadataBackend.getUserTimeoutRenderLimits(username, (err, timeoutRenderLimit) => { if (err) { return callback(err); } From 1e7071755405d4e96dbbfc09af3149afd2bcfe79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 17:31:42 +0200 Subject: [PATCH 21/80] indentation --- .../adapter/mapconfig-overviews-adapter.js | 162 +++++++++--------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index a104c592..308b078d 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -9,93 +9,93 @@ function MapConfigOverviewsAdapter(overviewsMetadataBackend, filterStatsBackend) module.exports = MapConfigOverviewsAdapter; -MapConfigOverviewsAdapter.prototype.getMapConfig = function(user, requestMapConfig, params, context, callback) { - var self = this; +MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapConfig, params, context, callback) { + var self = this; - var layers = requestMapConfig.layers; - var analysesResults = context.analysesResults; - - if (!layers || layers.length === 0) { - return callback(null, requestMapConfig); - } - - var augmentLayersQueue = queue(layers.length); - - function augmentLayer(layer, done) { - if ( layer.type !== 'mapnik' && layer.type !== 'cartodb' ) { - return done(null, layer); - } - self.overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, function(err, metadata){ - if (err) { - done(err, layer); - } else { - var query_rewrite_data = { overviews: metadata }; - step( - function collectFiltersData() { - var filters, unfiltered_query; - if ( layer.options.source && analysesResults && !layer.options.sql_wrap) { - var sourceId = layer.options.source.id; - var node = _.find(analysesResults, function(a){ return a.rootNode.params.id === sourceId; }); - if ( node ) { - node = node.rootNode; - filters = node.getFilters(); - var filters_disabler = Object.keys(filters).reduce( - function(disabler, filter_id){ disabler[filter_id] = false; return disabler; }, - {} - ); - unfiltered_query = node.getQuery(filters_disabler); - query_rewrite_data.filters = filters; - query_rewrite_data.unfiltered_query = unfiltered_query; - } - } - this(null, filters, unfiltered_query); - }, - function collectStatsData(err, filters, unfiltered_query) { - var next_step = this; - if ( filters ) { - self.filterStatsBackend.getFilterStats( - user, - unfiltered_query, filters, - function(err, stats) { - if ( !err ) { - query_rewrite_data.filter_stats = stats; - } - return next_step(err); - } - ); - } else { - return next_step(null); - } - }, - function addDataToLayer(err) { - if ( !err && !_.isEmpty(metadata) ) { - layer = _.extend({}, layer); - layer.options = _.extend({}, layer.options, { query_rewrite_data: query_rewrite_data }); - } - done(null, layer); - } - ); - } - }); - } - - function layersAugmentQueueFinish(err, layers) { - if (err) { - return callback(err); - } + var layers = requestMapConfig.layers; + var analysesResults = context.analysesResults; if (!layers || layers.length === 0) { - return callback(new Error('Missing layers array from layergroup config')); + return callback(null, requestMapConfig); } - requestMapConfig.layers = layers; + var augmentLayersQueue = queue(layers.length); - return callback(null, requestMapConfig); - } + function augmentLayer(layer, done) { + if (layer.type !== 'mapnik' && layer.type !== 'cartodb') { + return done(null, layer); + } + self.overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, function (err, metadata) { + if (err) { + done(err, layer); + } else { + var query_rewrite_data = { overviews: metadata }; + step( + function collectFiltersData() { + var filters, unfiltered_query; + if (layer.options.source && analysesResults && !layer.options.sql_wrap) { + var sourceId = layer.options.source.id; + var node = _.find(analysesResults, function (a) { return a.rootNode.params.id === sourceId; }); + if (node) { + node = node.rootNode; + filters = node.getFilters(); + var filters_disabler = Object.keys(filters).reduce( + function (disabler, filter_id) { disabler[filter_id] = false; return disabler; }, + {} + ); + unfiltered_query = node.getQuery(filters_disabler); + query_rewrite_data.filters = filters; + query_rewrite_data.unfiltered_query = unfiltered_query; + } + } + this(null, filters, unfiltered_query); + }, + function collectStatsData(err, filters, unfiltered_query) { + var next_step = this; + if (filters) { + self.filterStatsBackend.getFilterStats( + user, + unfiltered_query, filters, + function (err, stats) { + if (!err) { + query_rewrite_data.filter_stats = stats; + } + return next_step(err); + } + ); + } else { + return next_step(null); + } + }, + function addDataToLayer(err) { + if (!err && !_.isEmpty(metadata)) { + layer = _.extend({}, layer); + layer.options = _.extend({}, layer.options, { query_rewrite_data: query_rewrite_data }); + } + done(null, layer); + } + ); + } + }); + } - layers.forEach(function(layer) { - augmentLayersQueue.defer(augmentLayer, layer); - }); - augmentLayersQueue.awaitAll(layersAugmentQueueFinish); + function layersAugmentQueueFinish(err, layers) { + if (err) { + return callback(err); + } + + if (!layers || layers.length === 0) { + return callback(new Error('Missing layers array from layergroup config')); + } + + requestMapConfig.layers = layers; + + return callback(null, requestMapConfig); + } + + layers.forEach(function (layer) { + augmentLayersQueue.defer(augmentLayer, layer); + }); + augmentLayersQueue.awaitAll(layersAugmentQueueFinish); }; From 1f6bb6839a90aaf824d1a39f02c2ae667cd6df95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 17:32:57 +0200 Subject: [PATCH 22/80] remove step --- .../adapter/mapconfig-overviews-adapter.js | 84 +++++++++---------- 1 file changed, 41 insertions(+), 43 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 308b078d..c8df8b21 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -1,4 +1,3 @@ -var step = require('step'); var queue = require('queue-async'); var _ = require('underscore'); @@ -30,51 +29,50 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon done(err, layer); } else { var query_rewrite_data = { overviews: metadata }; - step( - function collectFiltersData() { - var filters, unfiltered_query; - if (layer.options.source && analysesResults && !layer.options.sql_wrap) { - var sourceId = layer.options.source.id; - var node = _.find(analysesResults, function (a) { return a.rootNode.params.id === sourceId; }); - if (node) { - node = node.rootNode; - filters = node.getFilters(); - var filters_disabler = Object.keys(filters).reduce( - function (disabler, filter_id) { disabler[filter_id] = false; return disabler; }, - {} - ); - unfiltered_query = node.getQuery(filters_disabler); - query_rewrite_data.filters = filters; - query_rewrite_data.unfiltered_query = unfiltered_query; - } - } - this(null, filters, unfiltered_query); - }, - function collectStatsData(err, filters, unfiltered_query) { - var next_step = this; - if (filters) { - self.filterStatsBackend.getFilterStats( - user, - unfiltered_query, filters, - function (err, stats) { - if (!err) { - query_rewrite_data.filter_stats = stats; - } - return next_step(err); - } + + function collectFiltersData() { + var filters, unfiltered_query; + if (layer.options.source && analysesResults && !layer.options.sql_wrap) { + var sourceId = layer.options.source.id; + var node = _.find(analysesResults, function (a) { return a.rootNode.params.id === sourceId; }); + if (node) { + node = node.rootNode; + filters = node.getFilters(); + var filters_disabler = Object.keys(filters).reduce( + function (disabler, filter_id) { disabler[filter_id] = false; return disabler; }, + {} ); - } else { - return next_step(null); + unfiltered_query = node.getQuery(filters_disabler); + query_rewrite_data.filters = filters; + query_rewrite_data.unfiltered_query = unfiltered_query; } - }, - function addDataToLayer(err) { - if (!err && !_.isEmpty(metadata)) { - layer = _.extend({}, layer); - layer.options = _.extend({}, layer.options, { query_rewrite_data: query_rewrite_data }); - } - done(null, layer); } - ); + this(null, filters, unfiltered_query); + }, + function collectStatsData(err, filters, unfiltered_query) { + var next_step = this; + if (filters) { + self.filterStatsBackend.getFilterStats( + user, + unfiltered_query, filters, + function (err, stats) { + if (!err) { + query_rewrite_data.filter_stats = stats; + } + return next_step(err); + } + ); + } else { + return next_step(null); + } + }, + function addDataToLayer(err) { + if (!err && !_.isEmpty(metadata)) { + layer = _.extend({}, layer); + layer.options = _.extend({}, layer.options, { query_rewrite_data: query_rewrite_data }); + } + done(null, layer); + } } }); } From a89131c043f2321997b6ee175c6890cf97894734 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 17:34:14 +0200 Subject: [PATCH 23/80] remove step: function 1 --- .../adapter/mapconfig-overviews-adapter.js | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index c8df8b21..9bae339b 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -30,25 +30,23 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon } else { var query_rewrite_data = { overviews: metadata }; - function collectFiltersData() { - var filters, unfiltered_query; - if (layer.options.source && analysesResults && !layer.options.sql_wrap) { - var sourceId = layer.options.source.id; - var node = _.find(analysesResults, function (a) { return a.rootNode.params.id === sourceId; }); - if (node) { - node = node.rootNode; - filters = node.getFilters(); - var filters_disabler = Object.keys(filters).reduce( - function (disabler, filter_id) { disabler[filter_id] = false; return disabler; }, - {} - ); - unfiltered_query = node.getQuery(filters_disabler); - query_rewrite_data.filters = filters; - query_rewrite_data.unfiltered_query = unfiltered_query; - } + var filters, unfiltered_query; + if (layer.options.source && analysesResults && !layer.options.sql_wrap) { + var sourceId = layer.options.source.id; + var node = _.find(analysesResults, function (a) { return a.rootNode.params.id === sourceId; }); + if (node) { + node = node.rootNode; + filters = node.getFilters(); + var filters_disabler = Object.keys(filters).reduce( + function (disabler, filter_id) { disabler[filter_id] = false; return disabler; }, + {} + ); + unfiltered_query = node.getQuery(filters_disabler); + query_rewrite_data.filters = filters; + query_rewrite_data.unfiltered_query = unfiltered_query; } - this(null, filters, unfiltered_query); - }, + } + function collectStatsData(err, filters, unfiltered_query) { var next_step = this; if (filters) { From fe9f4939d5c883005a95a7c5216aeb70556026a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 17:49:20 +0200 Subject: [PATCH 24/80] remove step: function 2 --- .../adapter/mapconfig-overviews-adapter.js | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 9bae339b..dd07ccd9 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -47,23 +47,26 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon } } - function collectStatsData(err, filters, unfiltered_query) { - var next_step = this; - if (filters) { - self.filterStatsBackend.getFilterStats( - user, - unfiltered_query, filters, - function (err, stats) { - if (!err) { - query_rewrite_data.filter_stats = stats; - } - return next_step(err); + if (filters) { + self.filterStatsBackend.getFilterStats( + user, + unfiltered_query, + filters, + function (err, stats) { + if (err) { + // next with error } - ); - } else { - return next_step(null); - } - }, + + query_rewrite_data.filter_stats = stats; + + // next + } + ); + } else { + // next + } + + function addDataToLayer(err) { if (!err && !_.isEmpty(metadata)) { layer = _.extend({}, layer); From 20c8d07a4653b949eeb4ef7d8b54eb4f8cf17d0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 17:59:06 +0200 Subject: [PATCH 25/80] remove step: last function --- .../adapter/mapconfig-overviews-adapter.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index dd07ccd9..06b67b64 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -54,25 +54,26 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon filters, function (err, stats) { if (err) { - // next with error + return done(null, layer); } query_rewrite_data.filter_stats = stats; - // next + if (!_.isEmpty(metadata)) { + layer = _.extend({}, layer); + layer.options = _.extend({}, layer.options, { query_rewrite_data: query_rewrite_data }); + } + + return done(null, layer); } ); } else { - // next - } - - - function addDataToLayer(err) { - if (!err && !_.isEmpty(metadata)) { + if (!_.isEmpty(metadata)) { layer = _.extend({}, layer); layer.options = _.extend({}, layer.options, { query_rewrite_data: query_rewrite_data }); } - done(null, layer); + + return done(null, layer); } } }); From 324e61490267ae93324bf21bdd7a9fd026963fd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Mon, 30 Jul 2018 18:25:26 +0200 Subject: [PATCH 26/80] change _.extend by Object.assign --- .../mapconfig/adapter/mapconfig-overviews-adapter.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 06b67b64..4134b19f 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -60,8 +60,8 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon query_rewrite_data.filter_stats = stats; if (!_.isEmpty(metadata)) { - layer = _.extend({}, layer); - layer.options = _.extend({}, layer.options, { query_rewrite_data: query_rewrite_data }); + layer = Object.assign({}, layer); + layer.options = Object.assign({}, layer.options, { query_rewrite_data }); } return done(null, layer); @@ -69,8 +69,8 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon ); } else { if (!_.isEmpty(metadata)) { - layer = _.extend({}, layer); - layer.options = _.extend({}, layer.options, { query_rewrite_data: query_rewrite_data }); + layer = Object.assign({}, layer); + layer.options = Object.assign({}, layer.options, { query_rewrite_data }); } return done(null, layer); From bb24b1dfccdc52ce6d4b0c509d9c2e57eb055014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Tue, 31 Jul 2018 10:25:56 +0200 Subject: [PATCH 27/80] indentation --- lib/cartodb/backends/template_maps.js | 34 +++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 75a482fe..7a7e38a0 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -73,23 +73,23 @@ TemplateMaps.prototype._redisCmd = function(redisFunc, redisArgs, callback) { var that = this; var db = that.db_signatures; - step( - function getRedisClient() { - that.redis_pool.acquire(db, this); - }, - function executeQuery(err, data) { - assert.ifError(err); - redisClient = data; - redisArgs.push(this); - redisClient[redisFunc.toUpperCase()].apply(redisClient, redisArgs); - }, - function releaseRedisClient(err, data) { - if ( ! _.isUndefined(redisClient) ) { - that.redis_pool.release(db, redisClient); - } - callback(err, data); - } - ); + step( + function getRedisClient() { + that.redis_pool.acquire(db, this); + }, + function executeQuery(err, data) { + assert.ifError(err); + redisClient = data; + redisArgs.push(this); + redisClient[redisFunc.toUpperCase()].apply(redisClient, redisArgs); + }, + function releaseRedisClient(err, data) { + if ( ! _.isUndefined(redisClient) ) { + that.redis_pool.release(db, redisClient); + } + callback(err, data); + } + ); }; var _reValidNameIdentifier = /^[a-z0-9][0-9a-z_\-]*$/i; From 23ef884e9b3b033b4559d8620fcbc540c1e8a78c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Tue, 31 Jul 2018 10:26:46 +0200 Subject: [PATCH 28/80] remove step 1 --- lib/cartodb/backends/template_maps.js | 30 +++++++++++++-------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 7a7e38a0..8d4008e6 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -73,23 +73,21 @@ TemplateMaps.prototype._redisCmd = function(redisFunc, redisArgs, callback) { var that = this; var db = that.db_signatures; - step( - function getRedisClient() { - that.redis_pool.acquire(db, this); - }, - function executeQuery(err, data) { - assert.ifError(err); - redisClient = data; - redisArgs.push(this); - redisClient[redisFunc.toUpperCase()].apply(redisClient, redisArgs); - }, - function releaseRedisClient(err, data) { - if ( ! _.isUndefined(redisClient) ) { - that.redis_pool.release(db, redisClient); - } - callback(err, data); + function getRedisClient() { + that.redis_pool.acquire(db, this); + }, + function executeQuery(err, data) { + assert.ifError(err); + redisClient = data; + redisArgs.push(this); + redisClient[redisFunc.toUpperCase()].apply(redisClient, redisArgs); + }, + function releaseRedisClient(err, data) { + if ( ! _.isUndefined(redisClient) ) { + that.redis_pool.release(db, redisClient); } - ); + callback(err, data); + } }; var _reValidNameIdentifier = /^[a-z0-9][0-9a-z_\-]*$/i; From 230b1bb3db020642d41c2b403bc6ab494504c345 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 31 Jul 2018 11:59:39 +0200 Subject: [PATCH 29/80] Remove step .searchDataview() --- lib/cartodb/backends/dataview.js | 79 ++++++++++++++++++-------------- 1 file changed, 45 insertions(+), 34 deletions(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index 25684711..1abf488c 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -1,7 +1,5 @@ -var assert = require('assert'); var _ = require('underscore'); var PSQL = require('cartodb-psql'); -var step = require('step'); var BBoxFilter = require('../models/filter/bbox'); var DataviewFactory = require('../models/dataview/factory'); var DataviewFactoryWithOverviews = require('../models/dataview/overviews/factory'); @@ -140,39 +138,52 @@ function getOverrideParams(params, ownFilter) { } DataviewBackend.prototype.search = function (mapConfigProvider, user, dataviewName, params, callback) { - step( - function getMapConfig() { - mapConfigProvider.getMapConfig(this); - }, - function runDataviewSearchQuery(err, mapConfig) { - assert.ifError(err); - - var dataviewDefinition = getDataviewDefinition(mapConfig.obj(), dataviewName); - if (!dataviewDefinition) { - throw new Error("Dataview '" + dataviewName + "' does not exists"); - } - - var pg = new PSQL(dbParamsFromReqParams(params)); - - var ownFilter = +params.own_filter; - ownFilter = !!ownFilter; - - var query = (ownFilter) ? dataviewDefinition.sql.own_filter_on : dataviewDefinition.sql.own_filter_off; - - if (params.bbox) { - var bboxFilter = new BBoxFilter({column: 'the_geom', srid: 4326}, {bbox: params.bbox}); - query = bboxFilter.sql(query); - } - - var userQuery = params.q; - - var dataview = DataviewFactory.getDataview(query, dataviewDefinition); - dataview.search(pg, userQuery, this); - }, - function returnCallback(err, result) { - return callback(err, result); + mapConfigProvider.getMapConfig(function (err, mapConfig) { + if (err) { + return callback(err); } - ); + + var dataviewDefinition = getDataviewDefinition(mapConfig.obj(), dataviewName); + if (!dataviewDefinition) { + const error = new Error(`Dataview '${dataviewName}' does not exists`); + error.type = 'dataview'; + error.http_status = 400; + return callback(error); + } + + var pg; + + try { + pg = new PSQL(dbParamsFromReqParams(params)); + } catch (error) { + return callback(error); + } + + var ownFilter = +params.own_filter; + ownFilter = !!ownFilter; + + var query = (ownFilter) ? dataviewDefinition.sql.own_filter_on : dataviewDefinition.sql.own_filter_off; + + if (params.bbox) { + try { + var bboxFilter = new BBoxFilter({ column: 'the_geom', srid: 4326 }, { bbox: params.bbox }); + query = bboxFilter.sql(query); + } catch (error) { + return callback(error); + } + } + + var userQuery = params.q; + + var dataview = DataviewFactory.getDataview(query, dataviewDefinition); + dataview.search(pg, userQuery, function (err, result) { + if (err) { + return callback(err); + } + + return callback(null, result); + }); + }); }; function getDataviewDefinition(mapConfig, dataviewName) { From 70ac0587dba800b219920a26a9bd83f4d1950ee3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 31 Jul 2018 12:15:20 +0200 Subject: [PATCH 30/80] Missing error --- lib/cartodb/backends/dataview.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index 1abf488c..fe549092 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -40,7 +40,7 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param const error = new Error('Both own_filter and no_filters cannot be sent in the same request'); error.type = 'dataview'; error.http_status = 400; - return callback(err); + return callback(error); } var pg = new PSQL(dbParamsFromReqParams(params)); From 18603ad24f5c0bd636fa5f0eb350f526fde8f018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 31 Jul 2018 12:43:54 +0200 Subject: [PATCH 31/80] Reduce cyclomatic complexity --- lib/cartodb/backends/dataview.js | 34 +++++++++++++++++--------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index fe549092..1b13a930 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -152,30 +152,18 @@ DataviewBackend.prototype.search = function (mapConfigProvider, user, dataviewNa } var pg; + var query; + var dataview; try { pg = new PSQL(dbParamsFromReqParams(params)); + query = getQueryWithFilters(dataviewDefinition, params); + dataview = DataviewFactory.getDataview(query, dataviewDefinition); } catch (error) { return callback(error); } - var ownFilter = +params.own_filter; - ownFilter = !!ownFilter; - - var query = (ownFilter) ? dataviewDefinition.sql.own_filter_on : dataviewDefinition.sql.own_filter_off; - - if (params.bbox) { - try { - var bboxFilter = new BBoxFilter({ column: 'the_geom', srid: 4326 }, { bbox: params.bbox }); - query = bboxFilter.sql(query); - } catch (error) { - return callback(error); - } - } - var userQuery = params.q; - - var dataview = DataviewFactory.getDataview(query, dataviewDefinition); dataview.search(pg, userQuery, function (err, result) { if (err) { return callback(err); @@ -186,6 +174,20 @@ DataviewBackend.prototype.search = function (mapConfigProvider, user, dataviewNa }); }; +function getQueryWithFilters (dataviewDefinition, params) { + var ownFilter = +params.own_filter; + ownFilter = !!ownFilter; + + var query = (ownFilter) ? dataviewDefinition.sql.own_filter_on : dataviewDefinition.sql.own_filter_off; + + if (params.bbox) { + var bboxFilter = new BBoxFilter({ column: 'the_geom', srid: 4326 }, { bbox: params.bbox }); + query = bboxFilter.sql(query); + } + + return query; +} + function getDataviewDefinition(mapConfig, dataviewName) { var dataviews = mapConfig.dataviews || {}; return dataviews[dataviewName]; From 9124a26a45d7553c5fcde54197b5ee8db8205c52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 31 Jul 2018 12:47:03 +0200 Subject: [PATCH 32/80] Move veriable declaration --- lib/cartodb/backends/dataview.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index 1b13a930..87605ce6 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -154,6 +154,7 @@ DataviewBackend.prototype.search = function (mapConfigProvider, user, dataviewNa var pg; var query; var dataview; + var userQuery = params.q; try { pg = new PSQL(dbParamsFromReqParams(params)); @@ -163,7 +164,6 @@ DataviewBackend.prototype.search = function (mapConfigProvider, user, dataviewNa return callback(error); } - var userQuery = params.q; dataview.search(pg, userQuery, function (err, result) { if (err) { return callback(err); From d4de54f2921f5cc1b474fd58a64878ad8cb943e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 31 Jul 2018 13:26:38 +0200 Subject: [PATCH 33/80] Extract get query with filters --- lib/cartodb/backends/dataview.js | 38 +++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index 87605ce6..1c7a02f5 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -34,9 +34,7 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param return callback(error); } - var ownFilter = +params.own_filter; - var noFilters = +params.no_filters; - if (Number.isFinite(ownFilter) && Number.isFinite(noFilters)) { + if (!validFilterParams(params)) { const error = new Error('Both own_filter and no_filters cannot be sent in the same request'); error.type = 'dataview'; error.http_status = 400; @@ -44,15 +42,8 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param } var pg = new PSQL(dbParamsFromReqParams(params)); - - var query = getDataviewQuery(dataviewDefinition, ownFilter, noFilters); - if (params.bbox) { - var bboxFilter = new BBoxFilter({column: 'the_geom_webmercator', srid: 3857}, {bbox: params.bbox}); - query = bboxFilter.sql(query); - } - + var query = getQueryWithFilters(dataviewDefinition, params); var queryRewriteData = getQueryRewriteData(mapConfig, dataviewDefinition, params); - var dataviewFactory = DataviewFactoryWithOverviews.getFactory( overviewsQueryRewriter, queryRewriteData, { bbox: params.bbox } ); @@ -62,6 +53,7 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param let overrideParams; try { + var ownFilter = +params.own_filter; overrideParams = getOverrideParams(params, !!ownFilter); } catch (error) { return callback(error); @@ -77,6 +69,26 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param }); }; +function validFilterParams (params) { + var ownFilter = +params.own_filter; + var noFilters = +params.no_filters; + + return !(Number.isFinite(ownFilter) && Number.isFinite(noFilters)); +} + +function getQueryWithFilters (dataviewDefinition, params) { + var ownFilter = +params.own_filter; + var noFilters = +params.no_filters; + var query = getDataviewQuery(dataviewDefinition, ownFilter, noFilters); + + if (params.bbox) { + var bboxFilter = new BBoxFilter({column: 'the_geom_webmercator', srid: 3857}, {bbox: params.bbox}); + query = bboxFilter.sql(query); + } + + return query; +} + function getDataviewQuery(dataviewDefinition, ownFilter, noFilters) { if (noFilters) { return dataviewDefinition.sql.no_filters; @@ -158,7 +170,7 @@ DataviewBackend.prototype.search = function (mapConfigProvider, user, dataviewNa try { pg = new PSQL(dbParamsFromReqParams(params)); - query = getQueryWithFilters(dataviewDefinition, params); + query = getQueryWithOwnFilters(dataviewDefinition, params); dataview = DataviewFactory.getDataview(query, dataviewDefinition); } catch (error) { return callback(error); @@ -174,7 +186,7 @@ DataviewBackend.prototype.search = function (mapConfigProvider, user, dataviewNa }); }; -function getQueryWithFilters (dataviewDefinition, params) { +function getQueryWithOwnFilters (dataviewDefinition, params) { var ownFilter = +params.own_filter; ownFilter = !!ownFilter; From ec0e90e8ce1b3d4347cfcd66080a8e3e35bc25a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 31 Jul 2018 13:33:33 +0200 Subject: [PATCH 34/80] Avoid uncaught exceptions --- lib/cartodb/backends/dataview.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index 1c7a02f5..bf0b31bf 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -41,18 +41,18 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param return callback(error); } - var pg = new PSQL(dbParamsFromReqParams(params)); - var query = getQueryWithFilters(dataviewDefinition, params); - var queryRewriteData = getQueryRewriteData(mapConfig, dataviewDefinition, params); - var dataviewFactory = DataviewFactoryWithOverviews.getFactory( - overviewsQueryRewriter, queryRewriteData, { bbox: params.bbox } - ); - - var dataview = dataviewFactory.getDataview(query, dataviewDefinition); - - let overrideParams; + var pg; + var overrideParams; + var dataview; try { + pg = new PSQL(dbParamsFromReqParams(params)); + var query = getQueryWithFilters(dataviewDefinition, params); + var queryRewriteData = getQueryRewriteData(mapConfig, dataviewDefinition, params); + var dataviewFactory = DataviewFactoryWithOverviews.getFactory(overviewsQueryRewriter, queryRewriteData, { + bbox: params.bbox + }); + dataview = dataviewFactory.getDataview(query, dataviewDefinition); var ownFilter = +params.own_filter; overrideParams = getOverrideParams(params, !!ownFilter); } catch (error) { From ea0805b017559bd58be3655a2bf01faefacb753d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Tue, 31 Jul 2018 15:01:22 +0200 Subject: [PATCH 35/80] early return --- .../adapter/mapconfig-overviews-adapter.js | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 4134b19f..2f458f0d 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -26,55 +26,55 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon } self.overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, function (err, metadata) { if (err) { - done(err, layer); - } else { - var query_rewrite_data = { overviews: metadata }; + return done(err, layer); + } - var filters, unfiltered_query; - if (layer.options.source && analysesResults && !layer.options.sql_wrap) { - var sourceId = layer.options.source.id; - var node = _.find(analysesResults, function (a) { return a.rootNode.params.id === sourceId; }); - if (node) { - node = node.rootNode; - filters = node.getFilters(); - var filters_disabler = Object.keys(filters).reduce( - function (disabler, filter_id) { disabler[filter_id] = false; return disabler; }, - {} - ); - unfiltered_query = node.getQuery(filters_disabler); - query_rewrite_data.filters = filters; - query_rewrite_data.unfiltered_query = unfiltered_query; - } + var query_rewrite_data = { overviews: metadata }; + + var filters, unfiltered_query; + if (layer.options.source && analysesResults && !layer.options.sql_wrap) { + var sourceId = layer.options.source.id; + var node = _.find(analysesResults, function (a) { return a.rootNode.params.id === sourceId; }); + if (node) { + node = node.rootNode; + filters = node.getFilters(); + var filters_disabler = Object.keys(filters).reduce( + function (disabler, filter_id) { disabler[filter_id] = false; return disabler; }, + {} + ); + unfiltered_query = node.getQuery(filters_disabler); + query_rewrite_data.filters = filters; + query_rewrite_data.unfiltered_query = unfiltered_query; } + } - if (filters) { - self.filterStatsBackend.getFilterStats( - user, - unfiltered_query, - filters, - function (err, stats) { - if (err) { - return done(null, layer); - } - - query_rewrite_data.filter_stats = stats; - - if (!_.isEmpty(metadata)) { - layer = Object.assign({}, layer); - layer.options = Object.assign({}, layer.options, { query_rewrite_data }); - } - + if (filters) { + self.filterStatsBackend.getFilterStats( + user, + unfiltered_query, + filters, + function (err, stats) { + if (err) { return done(null, layer); } - ); - } else { - if (!_.isEmpty(metadata)) { - layer = Object.assign({}, layer); - layer.options = Object.assign({}, layer.options, { query_rewrite_data }); - } - return done(null, layer); + query_rewrite_data.filter_stats = stats; + + if (!_.isEmpty(metadata)) { + layer = Object.assign({}, layer); + layer.options = Object.assign({}, layer.options, { query_rewrite_data }); + } + + return done(null, layer); + } + ); + } else { + if (!_.isEmpty(metadata)) { + layer = Object.assign({}, layer); + layer.options = Object.assign({}, layer.options, { query_rewrite_data }); } + + return done(null, layer); } }); } From 515e4828868fbc762aebd701f2519441111c0f60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Tue, 31 Jul 2018 15:07:34 +0200 Subject: [PATCH 36/80] early return --- lib/cartodb/backends/filter-stats.js | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/lib/cartodb/backends/filter-stats.js b/lib/cartodb/backends/filter-stats.js index 76179ff3..b37d8704 100644 --- a/lib/cartodb/backends/filter-stats.js +++ b/lib/cartodb/backends/filter-stats.js @@ -32,21 +32,20 @@ FilterStatsBackends.prototype.getFilterStats = function (username, unfiltered_qu stats.unfiltered_rows = rows; - if ( filters && !_.isEmpty(filters)) { - var analysisFilter = new AnalysisFilter(filters); - var query = analysisFilter.sql(unfiltered_query); - - getEstimatedRows(this.pgQueryRunner, username, query, (err, rows) => { - if (err){ - return callback(err); - } - - stats.filtered_rows = rows; - return callback(null, stats); - }); - - } else { + if (!filters || _.isEmpty(filters)) { return callback(null, stats); } + + var analysisFilter = new AnalysisFilter(filters); + var query = analysisFilter.sql(unfiltered_query); + + getEstimatedRows(this.pgQueryRunner, username, query, (err, rows) => { + if (err){ + return callback(err); + } + + stats.filtered_rows = rows; + return callback(null, stats); + }); }); }; From b8d320c434420eeae76c521f966ffdcb2b89ba3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Tue, 31 Jul 2018 15:19:41 +0200 Subject: [PATCH 37/80] return callback --- lib/cartodb/backends/user-limits.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cartodb/backends/user-limits.js b/lib/cartodb/backends/user-limits.js index 87587f37..2dc70470 100644 --- a/lib/cartodb/backends/user-limits.js +++ b/lib/cartodb/backends/user-limits.js @@ -49,7 +49,7 @@ UserLimitsBackend.prototype.getTimeoutRenderLimit = function (username, apiKey, return callback(err); } - callback( + return callback( null, { render: authorized ? timeoutRenderLimit.render : timeoutRenderLimit.renderPublic } ); From 3a3baf3c853f4229dd5527e0aca93a52b3ff2a23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Tue, 31 Jul 2018 15:41:29 +0200 Subject: [PATCH 38/80] Rename variable --- lib/cartodb/backends/dataview.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/cartodb/backends/dataview.js b/lib/cartodb/backends/dataview.js index bf0b31bf..542bbb4e 100644 --- a/lib/cartodb/backends/dataview.js +++ b/lib/cartodb/backends/dataview.js @@ -59,12 +59,12 @@ DataviewBackend.prototype.getDataview = function (mapConfigProvider, user, param return callback(error); } - dataview.getResult(pg, overrideParams, function (err, dataview) { + dataview.getResult(pg, overrideParams, function (err, dataviewResult) { if (err) { return callback(err); } - return callback(null, dataview); + return callback(null, dataviewResult); }); }); }; From 5c0b7487f73d58ad9ab356685b373fb2825d132e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 11:25:55 +0200 Subject: [PATCH 39/80] using calbacks instead of step --- lib/cartodb/backends/template_maps.js | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 8d4008e6..19c11efe 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -73,21 +73,17 @@ TemplateMaps.prototype._redisCmd = function(redisFunc, redisArgs, callback) { var that = this; var db = that.db_signatures; - function getRedisClient() { - that.redis_pool.acquire(db, this); - }, - function executeQuery(err, data) { + that.redis_pool.acquire(db, (err, data) => { assert.ifError(err); redisClient = data; - redisArgs.push(this); + redisArgs.push((err, data) => { + if ( ! _.isUndefined(redisClient) ) { + that.redis_pool.release(db, redisClient); + } + callback(err, data); + }); redisClient[redisFunc.toUpperCase()].apply(redisClient, redisArgs); - }, - function releaseRedisClient(err, data) { - if ( ! _.isUndefined(redisClient) ) { - that.redis_pool.release(db, redisClient); - } - callback(err, data); - } + }); }; var _reValidNameIdentifier = /^[a-z0-9][0-9a-z_\-]*$/i; From 79f2a8dde98284bc3f031317d0f5deb6e88a8f87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 11:30:17 +0200 Subject: [PATCH 40/80] vars refactor: that to this, ... --- lib/cartodb/backends/template_maps.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 19c11efe..907e1c83 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -69,16 +69,11 @@ TemplateMaps.prototype._userTemplateLimit = function() { * @param callback - function to pass results too. */ TemplateMaps.prototype._redisCmd = function(redisFunc, redisArgs, callback) { - var redisClient; - var that = this; - var db = that.db_signatures; - - that.redis_pool.acquire(db, (err, data) => { + this.redis_pool.acquire(this.db_signatures, (err, redisClient) => { assert.ifError(err); - redisClient = data; redisArgs.push((err, data) => { if ( ! _.isUndefined(redisClient) ) { - that.redis_pool.release(db, redisClient); + this.redis_pool.release(this.db_signatures, redisClient); } callback(err, data); }); From 5471a218eb5ecc25004ee395956887b2b21a7743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 11:39:07 +0200 Subject: [PATCH 41/80] return errors --- lib/cartodb/backends/template_maps.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 907e1c83..e50f078b 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -70,13 +70,22 @@ TemplateMaps.prototype._userTemplateLimit = function() { */ TemplateMaps.prototype._redisCmd = function(redisFunc, redisArgs, callback) { this.redis_pool.acquire(this.db_signatures, (err, redisClient) => { - assert.ifError(err); + if (err) { + return callback(err); + } + redisArgs.push((err, data) => { + if (err) { + return callback(err); + } + if ( ! _.isUndefined(redisClient) ) { this.redis_pool.release(this.db_signatures, redisClient); } - callback(err, data); + + callback(null, data); }); + redisClient[redisFunc.toUpperCase()].apply(redisClient, redisArgs); }); }; From 74831c9b7f8578f04d9c1dece181f2d01c8ae437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 11:48:12 +0200 Subject: [PATCH 42/80] using ... operator instead of apply --- lib/cartodb/backends/template_maps.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index e50f078b..39abd163 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -74,7 +74,7 @@ TemplateMaps.prototype._redisCmd = function(redisFunc, redisArgs, callback) { return callback(err); } - redisArgs.push((err, data) => { + redisClient[redisFunc.toUpperCase()](...redisArgs, (err, data) => { if (err) { return callback(err); } @@ -85,8 +85,6 @@ TemplateMaps.prototype._redisCmd = function(redisFunc, redisArgs, callback) { callback(null, data); }); - - redisClient[redisFunc.toUpperCase()].apply(redisClient, redisArgs); }); }; From 04faaea10dfc7781e272508cd926221e3e3b2d87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 11:49:40 +0200 Subject: [PATCH 43/80] remove unneded check --- lib/cartodb/backends/template_maps.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 39abd163..6b39742f 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -79,10 +79,7 @@ TemplateMaps.prototype._redisCmd = function(redisFunc, redisArgs, callback) { return callback(err); } - if ( ! _.isUndefined(redisClient) ) { - this.redis_pool.release(this.db_signatures, redisClient); - } - + this.redis_pool.release(this.db_signatures, redisClient); callback(null, data); }); }); From 750798d0a311e968b2bf698de0b91016183ed729 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 12:10:09 +0200 Subject: [PATCH 44/80] ensuring redis_pool connection release --- lib/cartodb/backends/template_maps.js | 68 ++++++++++++--------------- 1 file changed, 31 insertions(+), 37 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 6b39742f..87d2f055 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -75,12 +75,8 @@ TemplateMaps.prototype._redisCmd = function(redisFunc, redisArgs, callback) { } redisClient[redisFunc.toUpperCase()](...redisArgs, (err, data) => { - if (err) { - return callback(err); - } - this.redis_pool.release(this.db_signatures, redisClient); - callback(null, data); + return callback(err, data); }); }); }; @@ -205,39 +201,37 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { var userTemplatesKey = this.key_usr_tpl({ owner:owner }); var limit = this._userTemplateLimit(); - step( - function checkLimit() { - if ( ! limit ) { - return 0; - } - self._redisCmd('HLEN', [ userTemplatesKey ], this); - }, - function installTemplateIfDoesNotExist(err, numberOfTemplates) { - assert.ifError(err); - if ( limit && numberOfTemplates >= limit ) { - var limitReachedError = new Error("User '" + owner + "' reached limit on number of templates (" + - numberOfTemplates + "/" + limit + ")"); - limitReachedError.http_status = 409; - throw limitReachedError; - } - self._redisCmd('HSETNX', [ userTemplatesKey, templateName, JSON.stringify(template) ], this); - }, - function validateInstallation(err, wasSet) { - assert.ifError(err); - if ( ! wasSet ) { - throw new Error("Template '" + templateName + "' of user '" + owner + "' already exists"); - } - - return true; - }, - function finish(err) { - if (!err) { - self.emit('add', owner, templateName, template); - } - - callback(err, templateName, template); + function checkLimit() { + if ( ! limit ) { + return 0; } - ); + self._redisCmd('HLEN', [ userTemplatesKey ], this); + }, + function installTemplateIfDoesNotExist(err, numberOfTemplates) { + assert.ifError(err); + if ( limit && numberOfTemplates >= limit ) { + var limitReachedError = new Error("User '" + owner + "' reached limit on number of templates (" + + numberOfTemplates + "/" + limit + ")"); + limitReachedError.http_status = 409; + throw limitReachedError; + } + self._redisCmd('HSETNX', [ userTemplatesKey, templateName, JSON.stringify(template) ], this); + }, + function validateInstallation(err, wasSet) { + assert.ifError(err); + if ( ! wasSet ) { + throw new Error("Template '" + templateName + "' of user '" + owner + "' already exists"); + } + + return true; + }, + function finish(err) { + if (!err) { + self.emit('add', owner, templateName, template); + } + + callback(err, templateName, template); + } }; // Delete a template From fd875c41c7abaea17b9ef9b7b3d380f9f4e05c4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 12:20:01 +0200 Subject: [PATCH 45/80] remove step 2 --- lib/cartodb/backends/template_maps.js | 38 +++++++++++---------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 87d2f055..4175eba1 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -201,13 +201,11 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { var userTemplatesKey = this.key_usr_tpl({ owner:owner }); var limit = this._userTemplateLimit(); - function checkLimit() { - if ( ! limit ) { - return 0; - } - self._redisCmd('HLEN', [ userTemplatesKey ], this); - }, - function installTemplateIfDoesNotExist(err, numberOfTemplates) { + if ( ! limit ) { + return 0; + } + + self._redisCmd('HLEN', [ userTemplatesKey ], (err, numberOfTemplates) => { assert.ifError(err); if ( limit && numberOfTemplates >= limit ) { var limitReachedError = new Error("User '" + owner + "' reached limit on number of templates (" + @@ -215,23 +213,19 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { limitReachedError.http_status = 409; throw limitReachedError; } - self._redisCmd('HSETNX', [ userTemplatesKey, templateName, JSON.stringify(template) ], this); - }, - function validateInstallation(err, wasSet) { - assert.ifError(err); - if ( ! wasSet ) { - throw new Error("Template '" + templateName + "' of user '" + owner + "' already exists"); - } + self._redisCmd('HSETNX', [ userTemplatesKey, templateName, JSON.stringify(template) ], (err, wasSet) => { + assert.ifError(err); + if ( ! wasSet ) { + throw new Error("Template '" + templateName + "' of user '" + owner + "' already exists"); + } - return true; - }, - function finish(err) { - if (!err) { - self.emit('add', owner, templateName, template); - } + if (!err) { + self.emit('add', owner, templateName, template); + } - callback(err, templateName, template); - } + callback(err, templateName, template); + }); + }); }; // Delete a template From 410cbd082c37b77b0a9d19c4a280354d1fde05b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 12:26:40 +0200 Subject: [PATCH 46/80] manage errors --- lib/cartodb/backends/template_maps.js | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 4175eba1..4f100a4f 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -206,23 +206,28 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { } self._redisCmd('HLEN', [ userTemplatesKey ], (err, numberOfTemplates) => { - assert.ifError(err); + if (err) { + return callback(err); + } + if ( limit && numberOfTemplates >= limit ) { - var limitReachedError = new Error("User '" + owner + "' reached limit on number of templates (" + - numberOfTemplates + "/" + limit + ")"); + var limitReachedError = new Error( + `User '${owner}' reached limit on number of templates (${numberOfTemplates}/${limit})` + ); limitReachedError.http_status = 409; - throw limitReachedError; + return callback(limitReachedError); } self._redisCmd('HSETNX', [ userTemplatesKey, templateName, JSON.stringify(template) ], (err, wasSet) => { - assert.ifError(err); - if ( ! wasSet ) { - throw new Error("Template '" + templateName + "' of user '" + owner + "' already exists"); + if (err) { + return callback(err); } - if (!err) { - self.emit('add', owner, templateName, template); + if (!wasSet) { + const ownerExistsError = new Error(`Template '${templateName}' of user '${owner}' already exists`); + return callback(ownerExistsError); } + self.emit('add', owner, templateName, template); callback(err, templateName, template); }); }); From d45d0018d20462ec1bfa2aaecf8d45159923553d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 12:32:20 +0200 Subject: [PATCH 47/80] self to this --- lib/cartodb/backends/template_maps.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 4f100a4f..9e17cad4 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -188,8 +188,6 @@ function templateDefaults(template) { // Return template identifier (only valid for given user) // TemplateMaps.prototype.addTemplate = function(owner, template, callback) { - var self = this; - template = templateDefaults(template); var invalidError = this._checkInvalidTemplate(template); @@ -197,7 +195,6 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { return callback(invalidError); } - var templateName = template.name; var userTemplatesKey = this.key_usr_tpl({ owner:owner }); var limit = this._userTemplateLimit(); @@ -205,7 +202,7 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { return 0; } - self._redisCmd('HLEN', [ userTemplatesKey ], (err, numberOfTemplates) => { + this._redisCmd('HLEN', [ userTemplatesKey ], (err, numberOfTemplates) => { if (err) { return callback(err); } @@ -217,18 +214,19 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { limitReachedError.http_status = 409; return callback(limitReachedError); } - self._redisCmd('HSETNX', [ userTemplatesKey, templateName, JSON.stringify(template) ], (err, wasSet) => { + + this._redisCmd('HSETNX', [ userTemplatesKey, template.name, JSON.stringify(template) ], (err, wasSet) => { if (err) { return callback(err); } if (!wasSet) { - const ownerExistsError = new Error(`Template '${templateName}' of user '${owner}' already exists`); + var ownerExistsError = new Error(`Template '${template.name}' of user '${owner}' already exists`); return callback(ownerExistsError); } - self.emit('add', owner, templateName, template); - callback(err, templateName, template); + this.emit('add', owner, template.name, template); + callback(err, template.name, template); }); }); }; From cec9994addee0be179efe06aafd417f69f4f3b8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 12:33:59 +0200 Subject: [PATCH 48/80] style details --- lib/cartodb/backends/template_maps.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 9e17cad4..dc439a4e 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -191,23 +191,23 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { template = templateDefaults(template); var invalidError = this._checkInvalidTemplate(template); - if ( invalidError ) { + if (invalidError) { return callback(invalidError); } - var userTemplatesKey = this.key_usr_tpl({ owner:owner }); + var userTemplatesKey = this.key_usr_tpl({ owner }); var limit = this._userTemplateLimit(); - if ( ! limit ) { + if (!limit) { return 0; } - this._redisCmd('HLEN', [ userTemplatesKey ], (err, numberOfTemplates) => { + this._redisCmd('HLEN', [userTemplatesKey], (err, numberOfTemplates) => { if (err) { return callback(err); } - if ( limit && numberOfTemplates >= limit ) { + if (limit && numberOfTemplates >= limit) { var limitReachedError = new Error( `User '${owner}' reached limit on number of templates (${numberOfTemplates}/${limit})` ); @@ -215,7 +215,7 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { return callback(limitReachedError); } - this._redisCmd('HSETNX', [ userTemplatesKey, template.name, JSON.stringify(template) ], (err, wasSet) => { + this._redisCmd('HSETNX', [userTemplatesKey, template.name, JSON.stringify(template)], (err, wasSet) => { if (err) { return callback(err); } From 09a67871fb88a2b134558545ddece5d811cdca1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 12:38:50 +0200 Subject: [PATCH 49/80] manage JSON.stringify sync error --- lib/cartodb/backends/template_maps.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index dc439a4e..cdfaf638 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -215,7 +215,14 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { return callback(limitReachedError); } - this._redisCmd('HSETNX', [userTemplatesKey, template.name, JSON.stringify(template)], (err, wasSet) => { + let templateString; + try { + templateString = JSON.stringify(template); + } catch (error) { + return callback(error); + } + + this._redisCmd('HSETNX', [userTemplatesKey, template.name, templateString], (err, wasSet) => { if (err) { return callback(err); } From f27d5ba7d1a619f9d6b895fd60932ee5b67913cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 12:40:22 +0200 Subject: [PATCH 50/80] unneeded check --- lib/cartodb/backends/template_maps.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index cdfaf638..bb7d5485 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -207,7 +207,7 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { return callback(err); } - if (limit && numberOfTemplates >= limit) { + if (numberOfTemplates >= limit) { var limitReachedError = new Error( `User '${owner}' reached limit on number of templates (${numberOfTemplates}/${limit})` ); From 2134bf898aaaab50fbe4a0da764446342afe8388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 13:13:25 +0200 Subject: [PATCH 51/80] check user template limit in the right way --- lib/cartodb/backends/template_maps.js | 46 +++++++++++++++++++-------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index bb7d5485..7ba0b13f 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -173,6 +173,37 @@ function templateDefaults(template) { }); } +/** + * Checks if the if the user reaches the templetes limit + * + * @param userTemplatesKey user templat key in Redis + * @param owner cartodb username of the template owner + * @param callback returns error if the user reaches the limit + */ +TemplateMaps.prototype._checkUserTemplatesLimit = function(userTemplatesKey, owner, callback) { + const limit = this._userTemplateLimit(); + + if(!limit) { + return callback(null); + } + + this._redisCmd('HLEN', [userTemplatesKey], (err, numberOfTemplates) => { + if (err) { + return callback(err); + } + + if (numberOfTemplates >= limit) { + const limitReachedError = new Error( + `User '${owner}' reached limit on number of templates (${numberOfTemplates}/${limit})` + ); + limitReachedError.http_status = 409; + return callback(limitReachedError); + } + + return callback(null); + }); +}; + //--------------- PUBLIC API ------------------------------------- // Add a template @@ -196,25 +227,12 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { } var userTemplatesKey = this.key_usr_tpl({ owner }); - var limit = this._userTemplateLimit(); - if (!limit) { - return 0; - } - - this._redisCmd('HLEN', [userTemplatesKey], (err, numberOfTemplates) => { + this._checkUserTemplatesLimit(userTemplatesKey, owner, err => { if (err) { return callback(err); } - if (numberOfTemplates >= limit) { - var limitReachedError = new Error( - `User '${owner}' reached limit on number of templates (${numberOfTemplates}/${limit})` - ); - limitReachedError.http_status = 409; - return callback(limitReachedError); - } - let templateString; try { templateString = JSON.stringify(template); From da8d92b78ebadff880f523634c29af191bfde398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 13:20:10 +0200 Subject: [PATCH 52/80] remove step 3 --- lib/cartodb/backends/template_maps.js | 28 +++++++++++---------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 7ba0b13f..cb0cd4c9 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -267,25 +267,19 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { // TemplateMaps.prototype.delTemplate = function(owner, tpl_id, callback) { var self = this; - step( - function deleteTemplate() { - self._redisCmd('HDEL', [ self.key_usr_tpl({ owner:owner }), tpl_id ], this); - }, - function handleDeletion(err, deleted) { - assert.ifError(err); - if (!deleted) { - throw new Error("Template '" + tpl_id + "' of user '" + owner + "' does not exist"); - } - return true; - }, - function finish(err) { - if (!err) { - self.emit('delete', owner, tpl_id); - } - callback(err); + self._redisCmd('HDEL', [ self.key_usr_tpl({ owner:owner }), tpl_id ], (err, deleted) => { + assert.ifError(err); + if (!deleted) { + throw new Error("Template '" + tpl_id + "' of user '" + owner + "' does not exist"); } - ); + + if (!err) { + self.emit('delete', owner, tpl_id); + } + + return callback(err); + }); }; // Update a template From 085d26f1b2aecf47507c176baed059701b297a66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 13:27:07 +0200 Subject: [PATCH 53/80] remove step 3: refactor --- lib/cartodb/backends/template_maps.js | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index cb0cd4c9..cf62a8cb 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -266,19 +266,17 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { // @param callback function(err) // TemplateMaps.prototype.delTemplate = function(owner, tpl_id, callback) { - var self = this; + this._redisCmd('HDEL', [ this.key_usr_tpl({ owner:owner }), tpl_id ], (err, deleted) => { + if (err) { + return callback(err); + } - self._redisCmd('HDEL', [ self.key_usr_tpl({ owner:owner }), tpl_id ], (err, deleted) => { - assert.ifError(err); if (!deleted) { - throw new Error("Template '" + tpl_id + "' of user '" + owner + "' does not exist"); + return callback(new Error(`Template '${tpl_id}' of user '${owner}' does not exist`)); } - if (!err) { - self.emit('delete', owner, tpl_id); - } - - return callback(err); + this.emit('delete', owner, tpl_id); + return callback(); }); }; From e9f88a78d5c8e3cf42981c53757f72cd065a71f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 15:28:15 +0200 Subject: [PATCH 54/80] remove step 4 --- lib/cartodb/backends/template_maps.js | 29 ++++++++++----------------- 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index cf62a8cb..b31e5fb5 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -318,26 +318,19 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) var previousTemplate = null; - step( - function getExistingTemplate() { - self._redisCmd('HGET', [ userTemplatesKey, tpl_id ], this); - }, - function updateTemplate(err, _currentTemplate) { - assert.ifError(err); - if (!_currentTemplate) { - throw new Error("Template '" + tpl_id + "' of user '" + owner + "' does not exist"); - } - previousTemplate = _currentTemplate; - self._redisCmd('HSET', [ userTemplatesKey, templateName, JSON.stringify(template) ], this); - }, - function handleTemplateUpdate(err, didSetNewField) { + + self._redisCmd('HGET', [ userTemplatesKey, tpl_id ], (err, _currentTemplate) => { + assert.ifError(err); + if (!_currentTemplate) { + throw new Error("Template '" + tpl_id + "' of user '" + owner + "' does not exist"); + } + previousTemplate = _currentTemplate; + self._redisCmd('HSET', [ userTemplatesKey, templateName, JSON.stringify(template) ], (err, didSetNewField) => { assert.ifError(err); if (didSetNewField) { debug('New template created on update operation'); } - return true; - }, - function finish(err) { + if (!err) { if (self.fingerPrint(JSON.parse(previousTemplate)) !== self.fingerPrint(template)) { self.emit('update', owner, templateName, template); @@ -345,8 +338,8 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) } callback(err, template); - } - ); + }); + }); }; // List user templates From bcad6dbe2240a693c34629b0d158e30452dbd1ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 15:32:44 +0200 Subject: [PATCH 55/80] anage errors --- lib/cartodb/backends/template_maps.js | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index b31e5fb5..9ba54837 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -320,24 +320,29 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) self._redisCmd('HGET', [ userTemplatesKey, tpl_id ], (err, _currentTemplate) => { - assert.ifError(err); - if (!_currentTemplate) { - throw new Error("Template '" + tpl_id + "' of user '" + owner + "' does not exist"); + if (err) { + return callback(err); } + + if (!_currentTemplate) { + return callback(new Error(`Template '${tpl_id}' of user '${owner}' does not exist`)); + } + previousTemplate = _currentTemplate; self._redisCmd('HSET', [ userTemplatesKey, templateName, JSON.stringify(template) ], (err, didSetNewField) => { - assert.ifError(err); + if (err) { + return callback(err); + } + if (didSetNewField) { debug('New template created on update operation'); } - if (!err) { - if (self.fingerPrint(JSON.parse(previousTemplate)) !== self.fingerPrint(template)) { - self.emit('update', owner, templateName, template); - } + if (self.fingerPrint(JSON.parse(previousTemplate)) !== self.fingerPrint(template)) { + self.emit('update', owner, templateName, template); } - callback(err, template); + return callback(err, template); }); }); }; From e85f4e4129f42c972f7979d146b424519db81975 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 15:39:25 +0200 Subject: [PATCH 56/80] selft to this --- lib/cartodb/backends/template_maps.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 9ba54837..1151bc46 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -298,8 +298,6 @@ TemplateMaps.prototype.delTemplate = function(owner, tpl_id, callback) { // TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) { - var self = this; - template = templateDefaults(template); var invalidError = this._checkInvalidTemplate(template); @@ -319,7 +317,7 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) var previousTemplate = null; - self._redisCmd('HGET', [ userTemplatesKey, tpl_id ], (err, _currentTemplate) => { + this._redisCmd('HGET', [ userTemplatesKey, tpl_id ], (err, _currentTemplate) => { if (err) { return callback(err); } @@ -329,7 +327,7 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) } previousTemplate = _currentTemplate; - self._redisCmd('HSET', [ userTemplatesKey, templateName, JSON.stringify(template) ], (err, didSetNewField) => { + this._redisCmd('HSET', [ userTemplatesKey, templateName, JSON.stringify(template) ], (err, didSetNewField) => { if (err) { return callback(err); } @@ -338,8 +336,8 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) debug('New template created on update operation'); } - if (self.fingerPrint(JSON.parse(previousTemplate)) !== self.fingerPrint(template)) { - self.emit('update', owner, templateName, template); + if (this.fingerPrint(JSON.parse(previousTemplate)) !== this.fingerPrint(template)) { + this.emit('update', owner, templateName, template); } return callback(err, template); From 2a2f703abce4476d039af398205b5b120a4f4f4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 15:40:40 +0200 Subject: [PATCH 57/80] style details --- lib/cartodb/backends/template_maps.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 1151bc46..8bec7c36 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -301,23 +301,20 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) template = templateDefaults(template); var invalidError = this._checkInvalidTemplate(template); - - if ( invalidError ) { + if (invalidError) { return callback(invalidError); } var templateName = template.name; - if ( tpl_id !== templateName ) { + if (tpl_id !== templateName) { return callback(new Error("Cannot update name of a map template ('" + tpl_id + "' != '" + templateName + "')")); } - var userTemplatesKey = this.key_usr_tpl({ owner:owner }); - + var userTemplatesKey = this.key_usr_tpl({ owner }); var previousTemplate = null; - - this._redisCmd('HGET', [ userTemplatesKey, tpl_id ], (err, _currentTemplate) => { + this._redisCmd('HGET', [userTemplatesKey, tpl_id], (err, _currentTemplate) => { if (err) { return callback(err); } @@ -327,7 +324,7 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) } previousTemplate = _currentTemplate; - this._redisCmd('HSET', [ userTemplatesKey, templateName, JSON.stringify(template) ], (err, didSetNewField) => { + this._redisCmd('HSET', [userTemplatesKey, templateName, JSON.stringify(template)], (err, didSetNewField) => { if (err) { return callback(err); } From 7b7bee2901a7dfbf42a9a9d482d7c65fc6160df7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 15:43:45 +0200 Subject: [PATCH 58/80] improve naming --- lib/cartodb/backends/template_maps.js | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 8bec7c36..d6ab6c46 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -305,26 +305,22 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) return callback(invalidError); } - var templateName = template.name; - - if (tpl_id !== templateName) { - return callback(new Error("Cannot update name of a map template ('" + tpl_id + "' != '" + templateName + "')")); + if (tpl_id !== template.name) { + return callback(new Error("Cannot update name of a map template ('" + tpl_id + "' != '" + template.name + "')")); } var userTemplatesKey = this.key_usr_tpl({ owner }); - var previousTemplate = null; - this._redisCmd('HGET', [userTemplatesKey, tpl_id], (err, _currentTemplate) => { + this._redisCmd('HGET', [userTemplatesKey, tpl_id], (err, beforeUpdateTemplate) => { if (err) { return callback(err); } - if (!_currentTemplate) { + if (!beforeUpdateTemplate) { return callback(new Error(`Template '${tpl_id}' of user '${owner}' does not exist`)); } - previousTemplate = _currentTemplate; - this._redisCmd('HSET', [userTemplatesKey, templateName, JSON.stringify(template)], (err, didSetNewField) => { + this._redisCmd('HSET', [userTemplatesKey, template.name, JSON.stringify(template)], (err, didSetNewField) => { if (err) { return callback(err); } @@ -333,8 +329,8 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) debug('New template created on update operation'); } - if (this.fingerPrint(JSON.parse(previousTemplate)) !== this.fingerPrint(template)) { - this.emit('update', owner, templateName, template); + if (this.fingerPrint(JSON.parse(beforeUpdateTemplate)) !== this.fingerPrint(template)) { + this.emit('update', owner, template.name, template); } return callback(err, template); From 0e28348e160c5fa1122b1348691caeff5d79fc94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 15:48:24 +0200 Subject: [PATCH 59/80] manage JSON parse and stringify sinc errors --- lib/cartodb/backends/template_maps.js | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index d6ab6c46..ac1308cd 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -297,7 +297,6 @@ TemplateMaps.prototype.delTemplate = function(owner, tpl_id, callback) { // @param callback function(err) // TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) { - template = templateDefaults(template); var invalidError = this._checkInvalidTemplate(template); @@ -320,7 +319,14 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) return callback(new Error(`Template '${tpl_id}' of user '${owner}' does not exist`)); } - this._redisCmd('HSET', [userTemplatesKey, template.name, JSON.stringify(template)], (err, didSetNewField) => { + let templateString; + try { + templateString = JSON.stringify(template) + } catch (error) { + return callback(error); + } + + this._redisCmd('HSET', [userTemplatesKey, template.name, templateString], (err, didSetNewField) => { if (err) { return callback(err); } @@ -329,7 +335,14 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) debug('New template created on update operation'); } - if (this.fingerPrint(JSON.parse(beforeUpdateTemplate)) !== this.fingerPrint(template)) { + let beforeUpdateTemplateObject; + try { + beforeUpdateTemplateObject = JSON.parse(beforeUpdateTemplate) + } catch (error) { + return callback(error); + } + + if (this.fingerPrint(beforeUpdateTemplateObject) !== this.fingerPrint(template)) { this.emit('update', owner, template.name, template); } From e5b75abc762280e24c2d523be45a2167e18565f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 15:53:41 +0200 Subject: [PATCH 60/80] some details --- lib/cartodb/backends/template_maps.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index ac1308cd..1e8dc51e 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -305,7 +305,7 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) } if (tpl_id !== template.name) { - return callback(new Error("Cannot update name of a map template ('" + tpl_id + "' != '" + template.name + "')")); + return callback(new Error(`Cannot update name of a map template ('${tpl_id}' != '${template.name}')`)); } var userTemplatesKey = this.key_usr_tpl({ owner }); @@ -321,7 +321,7 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) let templateString; try { - templateString = JSON.stringify(template) + templateString = JSON.stringify(template); } catch (error) { return callback(error); } @@ -337,7 +337,7 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) let beforeUpdateTemplateObject; try { - beforeUpdateTemplateObject = JSON.parse(beforeUpdateTemplate) + beforeUpdateTemplateObject = JSON.parse(beforeUpdateTemplate); } catch (error) { return callback(error); } From 843f4b8e28c16fef807d74f8c322282f948e3c29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Wed, 1 Aug 2018 15:53:43 +0200 Subject: [PATCH 61/80] Use early return --- .../adapter/mapconfig-overviews-adapter.js | 37 ++++++++----------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 2f458f0d..6e8619e1 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -48,27 +48,7 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon } } - if (filters) { - self.filterStatsBackend.getFilterStats( - user, - unfiltered_query, - filters, - function (err, stats) { - if (err) { - return done(null, layer); - } - - query_rewrite_data.filter_stats = stats; - - if (!_.isEmpty(metadata)) { - layer = Object.assign({}, layer); - layer.options = Object.assign({}, layer.options, { query_rewrite_data }); - } - - return done(null, layer); - } - ); - } else { + if (!filters) { if (!_.isEmpty(metadata)) { layer = Object.assign({}, layer); layer.options = Object.assign({}, layer.options, { query_rewrite_data }); @@ -76,6 +56,21 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon return done(null, layer); } + + self.filterStatsBackend.getFilterStats(user, unfiltered_query, filters, function (err, stats) { + if (err) { + return done(null, layer); + } + + query_rewrite_data.filter_stats = stats; + + if (!_.isEmpty(metadata)) { + layer = Object.assign({}, layer); + layer.options = Object.assign({}, layer.options, { query_rewrite_data }); + } + + return done(null, layer); + }); }); } From b169c96f1c87d05ec9225114ea152c25abc0b055 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 15:57:22 +0200 Subject: [PATCH 62/80] remove step 5 --- lib/cartodb/backends/template_maps.js | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 1e8dc51e..3e555fb0 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -374,18 +374,10 @@ TemplateMaps.prototype.listTemplates = function(owner, callback) { // TemplateMaps.prototype.getTemplate = function(owner, tpl_id, callback) { var self = this; - step( - function getTemplate() { - self._redisCmd('HGET', [ self.key_usr_tpl({owner:owner}), tpl_id ], this); - }, - function parseTemplate(err, tpl_val) { - assert.ifError(err); - return JSON.parse(tpl_val); - }, - function finish(err, tpl) { - callback(err, tpl); - } - ); + self._redisCmd('HGET', [ self.key_usr_tpl({owner:owner}), tpl_id ], (err, tpl_val) => { + assert.ifError(err); + return callback(err, JSON.parse(tpl_val)); + }); }; TemplateMaps.prototype.isAuthorized = function(template, authTokens) { From 3bb4ad86ff2655fce6e931976723b1e872bf6e7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 16:00:31 +0200 Subject: [PATCH 63/80] remove template 5 refactor --- lib/cartodb/backends/template_maps.js | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 3e555fb0..ea639084 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -373,10 +373,19 @@ TemplateMaps.prototype.listTemplates = function(owner, callback) { // Return full template definition // TemplateMaps.prototype.getTemplate = function(owner, tpl_id, callback) { - var self = this; - self._redisCmd('HGET', [ self.key_usr_tpl({owner:owner}), tpl_id ], (err, tpl_val) => { - assert.ifError(err); - return callback(err, JSON.parse(tpl_val)); + this._redisCmd('HGET', [this.key_usr_tpl({owner:owner}), tpl_id], (err, template) => { + if (err) { + return callback(err); + } + + let templateObject; + try { + templateObject = JSON.parse(template); + } catch (error) { + return callback(error); + } + + return callback(null, templateObject); }); }; From d25740ed51eace3dbadec11b7ab758e2ba35ccdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Wed, 1 Aug 2018 16:02:05 +0200 Subject: [PATCH 64/80] Extract function to avoid dynamic clousures --- .../adapter/mapconfig-overviews-adapter.js | 125 +++++++++--------- 1 file changed, 66 insertions(+), 59 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 6e8619e1..ec44ef0f 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -20,61 +20,18 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon var augmentLayersQueue = queue(layers.length); - function augmentLayer(layer, done) { - if (layer.type !== 'mapnik' && layer.type !== 'cartodb') { - return done(null, layer); - } - self.overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, function (err, metadata) { - if (err) { - return done(err, layer); - } + layers.forEach(function (layer) { + augmentLayersQueue.defer( + augmentLayer, + self.overviewsMetadataBackend, + self.filterStatsBackend, + user, + layer, + analysesResults + ); + }); - var query_rewrite_data = { overviews: metadata }; - - var filters, unfiltered_query; - if (layer.options.source && analysesResults && !layer.options.sql_wrap) { - var sourceId = layer.options.source.id; - var node = _.find(analysesResults, function (a) { return a.rootNode.params.id === sourceId; }); - if (node) { - node = node.rootNode; - filters = node.getFilters(); - var filters_disabler = Object.keys(filters).reduce( - function (disabler, filter_id) { disabler[filter_id] = false; return disabler; }, - {} - ); - unfiltered_query = node.getQuery(filters_disabler); - query_rewrite_data.filters = filters; - query_rewrite_data.unfiltered_query = unfiltered_query; - } - } - - if (!filters) { - if (!_.isEmpty(metadata)) { - layer = Object.assign({}, layer); - layer.options = Object.assign({}, layer.options, { query_rewrite_data }); - } - - return done(null, layer); - } - - self.filterStatsBackend.getFilterStats(user, unfiltered_query, filters, function (err, stats) { - if (err) { - return done(null, layer); - } - - query_rewrite_data.filter_stats = stats; - - if (!_.isEmpty(metadata)) { - layer = Object.assign({}, layer); - layer.options = Object.assign({}, layer.options, { query_rewrite_data }); - } - - return done(null, layer); - }); - }); - } - - function layersAugmentQueueFinish(err, layers) { + augmentLayersQueue.awaitAll(function layersAugmentQueueFinish (err, layers) { if (err) { return callback(err); } @@ -86,11 +43,61 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon requestMapConfig.layers = layers; return callback(null, requestMapConfig); - } - - layers.forEach(function (layer) { - augmentLayersQueue.defer(augmentLayer, layer); }); - augmentLayersQueue.awaitAll(layersAugmentQueueFinish); }; + +function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, analysesResults, done) { + if (layer.type !== 'mapnik' && layer.type !== 'cartodb') { + return done(null, layer); + } + + overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, function (err, metadata) { + if (err) { + return done(err, layer); + } + + var query_rewrite_data = { overviews: metadata }; + + var filters, unfiltered_query; + if (layer.options.source && analysesResults && !layer.options.sql_wrap) { + var sourceId = layer.options.source.id; + var node = _.find(analysesResults, function (a) { return a.rootNode.params.id === sourceId; }); + if (node) { + node = node.rootNode; + filters = node.getFilters(); + var filters_disabler = Object.keys(filters).reduce( + function (disabler, filter_id) { disabler[filter_id] = false; return disabler; }, + {} + ); + unfiltered_query = node.getQuery(filters_disabler); + query_rewrite_data.filters = filters; + query_rewrite_data.unfiltered_query = unfiltered_query; + } + } + + if (!filters) { + if (!_.isEmpty(metadata)) { + layer = Object.assign({}, layer); + layer.options = Object.assign({}, layer.options, { query_rewrite_data }); + } + + return done(null, layer); + } + + filterStatsBackend.getFilterStats(user, unfiltered_query, filters, function (err, stats) { + if (err) { + return done(null, layer); + } + + query_rewrite_data.filter_stats = stats; + + if (!_.isEmpty(metadata)) { + layer = Object.assign({}, layer); + layer.options = Object.assign({}, layer.options, { query_rewrite_data }); + } + + return done(null, layer); + }); + }); +} From efafd4cb3e69eaef797106327095d7f5b7ffbf18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 16:02:53 +0200 Subject: [PATCH 65/80] success callback without err --- lib/cartodb/backends/template_maps.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index ea639084..17ed8f6e 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -184,7 +184,7 @@ TemplateMaps.prototype._checkUserTemplatesLimit = function(userTemplatesKey, own const limit = this._userTemplateLimit(); if(!limit) { - return callback(null); + return callback(); } this._redisCmd('HLEN', [userTemplatesKey], (err, numberOfTemplates) => { @@ -200,7 +200,7 @@ TemplateMaps.prototype._checkUserTemplatesLimit = function(userTemplatesKey, own return callback(limitReachedError); } - return callback(null); + return callback(); }); }; @@ -251,7 +251,7 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { } this.emit('add', owner, template.name, template); - callback(err, template.name, template); + callback(null, template.name, template); }); }); }; @@ -346,7 +346,7 @@ TemplateMaps.prototype.updTemplate = function(owner, tpl_id, template, callback) this.emit('update', owner, template.name, template); } - return callback(err, template); + return callback(null, template); }); }); }; From 01658c33fd531fc99fd8adc42ce50f9b863e0fff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 16:03:36 +0200 Subject: [PATCH 66/80] remove step and assert dependencies --- lib/cartodb/backends/template_maps.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 17ed8f6e..e362be3b 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -1,7 +1,5 @@ -var assert = require('assert'); var crypto = require('crypto'); var debug = require('debug')('windshaft:templates'); -var step = require('step'); var _ = require('underscore'); var dot = require('dot'); From 44ba5aa5688969f214cf4e0cdad5e7e77599bd80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Wed, 1 Aug 2018 16:22:43 +0200 Subject: [PATCH 67/80] forgotten return --- lib/cartodb/backends/template_maps.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index e362be3b..e2c53e8c 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -249,7 +249,7 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { } this.emit('add', owner, template.name, template); - callback(null, template.name, template); + return callback(null, template.name, template); }); }); }; From 6a6ec4300b0cdce9fe20b29496a413f18328bf6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Wed, 1 Aug 2018 16:30:59 +0200 Subject: [PATCH 68/80] Extract functions to compose query-rewrite-data --- .../adapter/mapconfig-overviews-adapter.js | 50 ++++++++++++++----- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index ec44ef0f..6da4a726 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -59,23 +59,15 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, var query_rewrite_data = { overviews: metadata }; - var filters, unfiltered_query; if (layer.options.source && analysesResults && !layer.options.sql_wrap) { var sourceId = layer.options.source.id; - var node = _.find(analysesResults, function (a) { return a.rootNode.params.id === sourceId; }); - if (node) { - node = node.rootNode; - filters = node.getFilters(); - var filters_disabler = Object.keys(filters).reduce( - function (disabler, filter_id) { disabler[filter_id] = false; return disabler; }, - {} - ); - unfiltered_query = node.getQuery(filters_disabler); - query_rewrite_data.filters = filters; - query_rewrite_data.unfiltered_query = unfiltered_query; - } + + query_rewrite_data.filters = getFilters(analysesResults, sourceId); + query_rewrite_data.unfiltered_query = getUnfilteredQuery(analysesResults, sourceId); } + var filters = query_rewrite_data.filters; + if (!filters) { if (!_.isEmpty(metadata)) { layer = Object.assign({}, layer); @@ -85,6 +77,8 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, return done(null, layer); } + var unfiltered_query = query_rewrite_data.unfiltered_query; + filterStatsBackend.getFilterStats(user, unfiltered_query, filters, function (err, stats) { if (err) { return done(null, layer); @@ -101,3 +95,33 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, }); }); } + +function getRootNode (analysesResults, sourceId) { + var node = _.find(analysesResults, function (a) { + return a.rootNode.params.id === sourceId; + }); + + return node ? node.rootNode : undefined; +} + +function getUnfilteredQuery (analysesResults, sourceId) { + var node = getRootNode(analysesResults, sourceId); + + if (node) { + var filters = node.getFilters(); + var filters_disabler = Object.keys(filters).reduce(function (disabler, filter_id) { + disabler[filter_id] = false; + return disabler; + }, {}); + + return node.getQuery(filters_disabler); + } +} + +function getFilters (analysesResults, sourceId) { + var node = getRootNode(analysesResults, sourceId); + + if (node) { + return node.getFilters(); + } +} From c8c22a787e6bd7b3632fc407cdd9abf31375a06e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Wed, 1 Aug 2018 16:34:35 +0200 Subject: [PATCH 69/80] CamelCase --- .../adapter/mapconfig-overviews-adapter.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 6da4a726..2f55f3ff 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -57,38 +57,38 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, return done(err, layer); } - var query_rewrite_data = { overviews: metadata }; + var queryRewriteData = { overviews: metadata }; if (layer.options.source && analysesResults && !layer.options.sql_wrap) { var sourceId = layer.options.source.id; - query_rewrite_data.filters = getFilters(analysesResults, sourceId); - query_rewrite_data.unfiltered_query = getUnfilteredQuery(analysesResults, sourceId); + queryRewriteData.filters = getFilters(analysesResults, sourceId); + queryRewriteData.unfiltered_query = getUnfilteredQuery(analysesResults, sourceId); } - var filters = query_rewrite_data.filters; + var filters = queryRewriteData.filters; if (!filters) { if (!_.isEmpty(metadata)) { layer = Object.assign({}, layer); - layer.options = Object.assign({}, layer.options, { query_rewrite_data }); + layer.options = Object.assign({}, layer.options, { queryRewriteData }); } return done(null, layer); } - var unfiltered_query = query_rewrite_data.unfiltered_query; + var unfilteredQuery = queryRewriteData.unfiltered_query; - filterStatsBackend.getFilterStats(user, unfiltered_query, filters, function (err, stats) { + filterStatsBackend.getFilterStats(user, unfilteredQuery, filters, function (err, stats) { if (err) { return done(null, layer); } - query_rewrite_data.filter_stats = stats; + queryRewriteData.filter_stats = stats; if (!_.isEmpty(metadata)) { layer = Object.assign({}, layer); - layer.options = Object.assign({}, layer.options, { query_rewrite_data }); + layer.options = Object.assign({}, layer.options, { queryRewriteData }); } return done(null, layer); From 64329c3facb5d09a0d496deb4275f0020c6c2a5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Wed, 1 Aug 2018 16:39:15 +0200 Subject: [PATCH 70/80] Rename callback --- .../mapconfig/adapter/mapconfig-overviews-adapter.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 2f55f3ff..074129ad 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -47,14 +47,14 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon }; -function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, analysesResults, done) { +function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, analysesResults, callback) { if (layer.type !== 'mapnik' && layer.type !== 'cartodb') { - return done(null, layer); + return callback(null, layer); } overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, function (err, metadata) { if (err) { - return done(err, layer); + return callback(err, layer); } var queryRewriteData = { overviews: metadata }; @@ -74,14 +74,14 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, layer.options = Object.assign({}, layer.options, { queryRewriteData }); } - return done(null, layer); + return callback(null, layer); } var unfilteredQuery = queryRewriteData.unfiltered_query; filterStatsBackend.getFilterStats(user, unfilteredQuery, filters, function (err, stats) { if (err) { - return done(null, layer); + return callback(null, layer); } queryRewriteData.filter_stats = stats; @@ -91,7 +91,7 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, layer.options = Object.assign({}, layer.options, { queryRewriteData }); } - return done(null, layer); + return callback(null, layer); }); }); } From 8f763d655d2a9e6e94aec58cf7293ca1fb6cdfe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Wed, 1 Aug 2018 17:16:14 +0200 Subject: [PATCH 71/80] Do not rename output values --- .../models/mapconfig/adapter/mapconfig-overviews-adapter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 074129ad..057a008c 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -71,7 +71,7 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, if (!filters) { if (!_.isEmpty(metadata)) { layer = Object.assign({}, layer); - layer.options = Object.assign({}, layer.options, { queryRewriteData }); + layer.options = Object.assign({}, layer.options, { query_rewrite_data: queryRewriteData }); } return callback(null, layer); @@ -88,7 +88,7 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, if (!_.isEmpty(metadata)) { layer = Object.assign({}, layer); - layer.options = Object.assign({}, layer.options, { queryRewriteData }); + layer.options = Object.assign({}, layer.options, { query_rewrite_data: queryRewriteData }); } return callback(null, layer); From 78f4cf3155cc5c85cef5981e0dcd9f5856b2645f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Wed, 1 Aug 2018 17:33:20 +0200 Subject: [PATCH 72/80] Move code --- .../adapter/mapconfig-overviews-adapter.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 057a008c..7ba3c1f1 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -52,19 +52,21 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, return callback(null, layer); } + var queryRewriteData = {}; + + if (layer.options.source && analysesResults && !layer.options.sql_wrap) { + var sourceId = layer.options.source.id; + + queryRewriteData.filters = getFilters(analysesResults, sourceId); + queryRewriteData.unfiltered_query = getUnfilteredQuery(analysesResults, sourceId); + } + overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, function (err, metadata) { if (err) { return callback(err, layer); } - var queryRewriteData = { overviews: metadata }; - - if (layer.options.source && analysesResults && !layer.options.sql_wrap) { - var sourceId = layer.options.source.id; - - queryRewriteData.filters = getFilters(analysesResults, sourceId); - queryRewriteData.unfiltered_query = getUnfilteredQuery(analysesResults, sourceId); - } + queryRewriteData.overviews = metadata; var filters = queryRewriteData.filters; From 732a2d77425f63680220795d9ce9bae8e5892a84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Wed, 1 Aug 2018 17:39:08 +0200 Subject: [PATCH 73/80] Early return is the way to go. Avoid checking conditions later --- .../adapter/mapconfig-overviews-adapter.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 7ba3c1f1..9a5a1417 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -66,15 +66,17 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, return callback(err, layer); } + if (_.isEmpty(metadata)) { + return callback(null, layer); + } + queryRewriteData.overviews = metadata; var filters = queryRewriteData.filters; if (!filters) { - if (!_.isEmpty(metadata)) { - layer = Object.assign({}, layer); - layer.options = Object.assign({}, layer.options, { query_rewrite_data: queryRewriteData }); - } + layer = Object.assign({}, layer); + layer.options = Object.assign({}, layer.options, { query_rewrite_data: queryRewriteData }); return callback(null, layer); } @@ -88,10 +90,8 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, queryRewriteData.filter_stats = stats; - if (!_.isEmpty(metadata)) { - layer = Object.assign({}, layer); - layer.options = Object.assign({}, layer.options, { query_rewrite_data: queryRewriteData }); - } + layer = Object.assign({}, layer); + layer.options = Object.assign({}, layer.options, { query_rewrite_data: queryRewriteData }); return callback(null, layer); }); From df14afb55f5157de452ca36daf84305bd4ac5e44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Wed, 1 Aug 2018 19:15:28 +0200 Subject: [PATCH 74/80] Remove unnecessary code --- .../models/mapconfig/adapter/mapconfig-overviews-adapter.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 9a5a1417..240ace22 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -75,7 +75,6 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, var filters = queryRewriteData.filters; if (!filters) { - layer = Object.assign({}, layer); layer.options = Object.assign({}, layer.options, { query_rewrite_data: queryRewriteData }); return callback(null, layer); @@ -90,7 +89,6 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, queryRewriteData.filter_stats = stats; - layer = Object.assign({}, layer); layer.options = Object.assign({}, layer.options, { query_rewrite_data: queryRewriteData }); return callback(null, layer); From a910f1442ef85baae53bfd50ef2c8ed459526bc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Thu, 2 Aug 2018 11:35:54 +0200 Subject: [PATCH 75/80] explicit error return --- lib/cartodb/backends/template_maps.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index e2c53e8c..00f0cd2e 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -74,7 +74,10 @@ TemplateMaps.prototype._redisCmd = function(redisFunc, redisArgs, callback) { redisClient[redisFunc.toUpperCase()](...redisArgs, (err, data) => { this.redis_pool.release(this.db_signatures, redisClient); - return callback(err, data); + if (err) { + return callback(err); + } + return callback(null, data); }); }); }; From 6c8f38a2412f04e389983bb4e5c2afc119029213 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Mart=C3=ADn?= Date: Thu, 2 Aug 2018 11:38:54 +0200 Subject: [PATCH 76/80] improve var naming --- lib/cartodb/backends/template_maps.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/cartodb/backends/template_maps.js b/lib/cartodb/backends/template_maps.js index 00f0cd2e..41e655bd 100644 --- a/lib/cartodb/backends/template_maps.js +++ b/lib/cartodb/backends/template_maps.js @@ -247,8 +247,8 @@ TemplateMaps.prototype.addTemplate = function(owner, template, callback) { } if (!wasSet) { - var ownerExistsError = new Error(`Template '${template.name}' of user '${owner}' already exists`); - return callback(ownerExistsError); + var templateExistsError = new Error(`Template '${template.name}' of user '${owner}' already exists`); + return callback(templateExistsError); } this.emit('add', owner, template.name, template); From 593a72a967d8026e4731bc5cf27a2f03f5547f13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Thu, 2 Aug 2018 11:40:41 +0200 Subject: [PATCH 77/80] Reorganize code, estract methods and rename others --- .../adapter/mapconfig-overviews-adapter.js | 80 ++++++++++--------- 1 file changed, 44 insertions(+), 36 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 240ace22..a50bfae0 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -9,8 +9,6 @@ function MapConfigOverviewsAdapter(overviewsMetadataBackend, filterStatsBackend) module.exports = MapConfigOverviewsAdapter; MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapConfig, params, context, callback) { - var self = this; - var layers = requestMapConfig.layers; var analysesResults = context.analysesResults; @@ -23,8 +21,8 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon layers.forEach(function (layer) { augmentLayersQueue.defer( augmentLayer, - self.overviewsMetadataBackend, - self.filterStatsBackend, + this.overviewsMetadataBackend, + this.filterStatsBackend, user, layer, analysesResults @@ -44,7 +42,6 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon return callback(null, requestMapConfig); }); - }; function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, analysesResults, callback) { @@ -52,15 +49,6 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, return callback(null, layer); } - var queryRewriteData = {}; - - if (layer.options.source && analysesResults && !layer.options.sql_wrap) { - var sourceId = layer.options.source.id; - - queryRewriteData.filters = getFilters(analysesResults, sourceId); - queryRewriteData.unfiltered_query = getUnfilteredQuery(analysesResults, sourceId); - } - overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, function (err, metadata) { if (err) { return callback(err, layer); @@ -70,26 +58,27 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, return callback(null, layer); } - queryRewriteData.overviews = metadata; - - var filters = queryRewriteData.filters; + var filters = getFilters(analysesResults, layer); if (!filters) { - layer.options = Object.assign({}, layer.options, { query_rewrite_data: queryRewriteData }); + layer.options = Object.assign({}, layer.options, getQueryRewriteData(layer, analysesResults, { + overviews: metadata + })); return callback(null, layer); } - var unfilteredQuery = queryRewriteData.unfiltered_query; + var unfilteredQuery = getUnfilteredQuery(analysesResults, layer); filterStatsBackend.getFilterStats(user, unfilteredQuery, filters, function (err, stats) { if (err) { return callback(null, layer); } - queryRewriteData.filter_stats = stats; - - layer.options = Object.assign({}, layer.options, { query_rewrite_data: queryRewriteData }); + layer.options = Object.assign({}, layer.options, getQueryRewriteData(layer, analysesResults, { + overviews: metadata, + filter_stats: stats + })); return callback(null, layer); }); @@ -104,24 +93,43 @@ function getRootNode (analysesResults, sourceId) { return node ? node.rootNode : undefined; } -function getUnfilteredQuery (analysesResults, sourceId) { - var node = getRootNode(analysesResults, sourceId); +function getFilters (analysesResults, layer) { + if (layer.options.source && analysesResults && !layer.options.sql_wrap) { + var sourceId = layer.options.source.id; + var node = getRootNode(analysesResults, sourceId); - if (node) { - var filters = node.getFilters(); - var filters_disabler = Object.keys(filters).reduce(function (disabler, filter_id) { - disabler[filter_id] = false; - return disabler; - }, {}); - - return node.getQuery(filters_disabler); + if (node) { + return node.getFilters(); + } } } -function getFilters (analysesResults, sourceId) { - var node = getRootNode(analysesResults, sourceId); +function getUnfilteredQuery (analysesResults, layer) { + if (layer.options.source && analysesResults && !layer.options.sql_wrap) { + var sourceId = layer.options.source.id; + var node = getRootNode(analysesResults, sourceId); - if (node) { - return node.getFilters(); + if (node) { + var filters = node.getFilters(); + var filters_disabler = Object.keys(filters).reduce(function (disabler, filter_id) { + disabler[filter_id] = false; + return disabler; + }, {}); + + return node.getQuery(filters_disabler); + } } } + +function getQueryRewriteData (layer, analysesResults, extend = {}) { + var queryRewriteData = {}; + + if (layer.options.source && analysesResults && !layer.options.sql_wrap) { + queryRewriteData.filters = getFilters(analysesResults, layer); + queryRewriteData.unfiltered_query = getUnfilteredQuery(analysesResults, layer); + } + + queryRewriteData = Object.assign({}, queryRewriteData, extend); + + return { query_rewrite_data: queryRewriteData }; +} From 63e4bcebefdd77f6be347472268f05bb9b11b02a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Thu, 2 Aug 2018 13:13:48 +0200 Subject: [PATCH 78/80] Move function to class as private method --- .../adapter/mapconfig-overviews-adapter.js | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index a50bfae0..e67a2513 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -18,16 +18,7 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon var augmentLayersQueue = queue(layers.length); - layers.forEach(function (layer) { - augmentLayersQueue.defer( - augmentLayer, - this.overviewsMetadataBackend, - this.filterStatsBackend, - user, - layer, - analysesResults - ); - }); + layers.forEach(layer => augmentLayersQueue.defer(this._augmentLayer.bind(this), user, layer, analysesResults)); augmentLayersQueue.awaitAll(function layersAugmentQueueFinish (err, layers) { if (err) { @@ -44,12 +35,12 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon }); }; -function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, analysesResults, callback) { +MapConfigOverviewsAdapter.prototype._augmentLayer = function (user, layer, analysesResults, callback) { if (layer.type !== 'mapnik' && layer.type !== 'cartodb') { return callback(null, layer); } - overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, function (err, metadata) { + this.overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, (err, metadata) => { if (err) { return callback(err, layer); } @@ -70,7 +61,7 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, var unfilteredQuery = getUnfilteredQuery(analysesResults, layer); - filterStatsBackend.getFilterStats(user, unfilteredQuery, filters, function (err, stats) { + this.filterStatsBackend.getFilterStats(user, unfilteredQuery, filters, function (err, stats) { if (err) { return callback(null, layer); } @@ -83,7 +74,7 @@ function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, return callback(null, layer); }); }); -} +}; function getRootNode (analysesResults, sourceId) { var node = _.find(analysesResults, function (a) { From 9f831b2c40dc2ccd2b854bc11770fc0ac84e3a83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Thu, 2 Aug 2018 15:14:10 +0200 Subject: [PATCH 79/80] Move step as development dependency --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0a4274e1..163cfe43 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,6 @@ "redis-mpool": "0.5.0", "request": "2.87.0", "semver": "5.5.0", - "step": "1.0.0", "step-profiler": "0.3.0", "turbo-carto": "0.20.4", "underscore": "1.6.0", @@ -59,6 +58,7 @@ "moment": "2.22.1", "nock": "9.2.6", "redis": "2.8.0", + "step": "1.0.0", "strftime": "0.10.0" }, "scripts": { From e7a6ddb4ffe5184e3a63ff27396cd264b66ae679 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Thu, 2 Aug 2018 16:15:10 +0200 Subject: [PATCH 80/80] Update NEWS --- NEWS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index 9c68466c..d3ea6364 100644 --- a/NEWS.md +++ b/NEWS.md @@ -3,6 +3,8 @@ ## 6.3.1 Released 2018-mm-dd +- Remove use of `step` module to handle asynchronous code, now it's defined as development dependency. + ## 6.3.0 Released 2018-07-26