Merge pull request #748 from CartoDB/base-dataview-refactor
Base dataview refactor
This commit is contained in:
commit
514aa53152
@ -1,67 +1,16 @@
|
|||||||
var dot = require('dot');
|
const FLOAT_OIDS = {
|
||||||
dot.templateSettings.strip = false;
|
|
||||||
|
|
||||||
function BaseDataview() {}
|
|
||||||
|
|
||||||
module.exports = BaseDataview;
|
|
||||||
|
|
||||||
BaseDataview.prototype.getResult = function(psql, override, callback) {
|
|
||||||
var self = this;
|
|
||||||
this.sql(psql, override, function(err, query) {
|
|
||||||
if (err) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
psql.query(query, function(err, result) {
|
|
||||||
if (err) {
|
|
||||||
return callback(err, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
result = self.format(result, override);
|
|
||||||
result.type = self.getType();
|
|
||||||
|
|
||||||
return callback(null, result);
|
|
||||||
|
|
||||||
}, true); // use read-only transaction
|
|
||||||
});
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
BaseDataview.prototype.search = function(psql, userQuery, callback) {
|
|
||||||
return callback(null, this.format({ rows: [] }));
|
|
||||||
};
|
|
||||||
|
|
||||||
var FLOAT_OIDS = {
|
|
||||||
700: true,
|
700: true,
|
||||||
701: true,
|
701: true,
|
||||||
1700: true
|
1700: true
|
||||||
};
|
};
|
||||||
|
|
||||||
var DATE_OIDS = {
|
const DATE_OIDS = {
|
||||||
1082: true,
|
1082: true,
|
||||||
1114: true,
|
1114: true,
|
||||||
1184: true
|
1184: true
|
||||||
};
|
};
|
||||||
|
|
||||||
var columnTypeQueryTpl = dot.template(
|
const columnTypeQueryTpl = ctx => `SELECT pg_typeof(${ctx.column})::oid FROM (${ctx.query}) _cdb_column_type limit 1`;
|
||||||
'SELECT pg_typeof({{=it.column}})::oid FROM ({{=it.query}}) _cdb_column_type limit 1'
|
|
||||||
);
|
|
||||||
|
|
||||||
BaseDataview.prototype.getColumnType = function (psql, column, query, callback) {
|
|
||||||
var readOnlyTransaction = true;
|
|
||||||
|
|
||||||
var columnTypeQuery = columnTypeQueryTpl({
|
|
||||||
column: column, query: query
|
|
||||||
});
|
|
||||||
|
|
||||||
psql.query(columnTypeQuery, function(err, result) {
|
|
||||||
if (err) {
|
|
||||||
return callback(err);
|
|
||||||
}
|
|
||||||
var pgType = result.rows[0].pg_typeof;
|
|
||||||
callback(null, getPGTypeName(pgType));
|
|
||||||
}, readOnlyTransaction);
|
|
||||||
};
|
|
||||||
|
|
||||||
function getPGTypeName (pgType) {
|
function getPGTypeName (pgType) {
|
||||||
return {
|
return {
|
||||||
@ -69,3 +18,42 @@ function getPGTypeName (pgType) {
|
|||||||
date: DATE_OIDS.hasOwnProperty(pgType)
|
date: DATE_OIDS.hasOwnProperty(pgType)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
module.exports = class BaseDataview {
|
||||||
|
getResult (psql, override, callback) {
|
||||||
|
this.sql(psql, override, (err, query) => {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
psql.query(query, (err, result) => {
|
||||||
|
if (err) {
|
||||||
|
return callback(err, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
result = this.format(result, override);
|
||||||
|
result.type = this.getType();
|
||||||
|
|
||||||
|
return callback(null, result);
|
||||||
|
|
||||||
|
}, true); // use read-only transaction
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
search (psql, userQuery, callback) {
|
||||||
|
return callback(null, this.format({ rows: [] }));
|
||||||
|
}
|
||||||
|
|
||||||
|
getColumnType (psql, column, query, callback) {
|
||||||
|
const readOnlyTransaction = true;
|
||||||
|
const columnTypeQuery = columnTypeQueryTpl({ column, query });
|
||||||
|
|
||||||
|
psql.query(columnTypeQuery, (err, result) => {
|
||||||
|
if (err) {
|
||||||
|
return callback(err);
|
||||||
|
}
|
||||||
|
const pgType = result.rows[0].pg_typeof;
|
||||||
|
callback(null, getPGTypeName(pgType));
|
||||||
|
}, readOnlyTransaction);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user