Initial commit
This commit is contained in:
67
lib/assets/javascripts/builder/data/column-row-data.js
Executable file
67
lib/assets/javascripts/builder/data/column-row-data.js
Executable file
@@ -0,0 +1,67 @@
|
||||
var _ = require('underscore');
|
||||
var Backbone = require('backbone');
|
||||
var CDB = require('internal-carto.js');
|
||||
|
||||
var queryTemplate = _.template('SELECT <%= column %> FROM (<%= sql %>) _table_sql GROUP BY <%= column %> ORDER BY <%= column %> ASC');
|
||||
var MAX_ROW_COUNT = 100;
|
||||
|
||||
module.exports = Backbone.Model.extend({
|
||||
initialize: function (attrs, opts) {
|
||||
if (!opts.configModel) throw new Error('configModel param is required');
|
||||
if (!opts.nodeDefModel) throw new Error('nodeDefModel param is required');
|
||||
|
||||
this._query = opts.nodeDefModel.querySchemaModel.get('query');
|
||||
this._rowData = [];
|
||||
|
||||
this._SQL = new CDB.SQL({
|
||||
user: opts.configModel.get('user_name'),
|
||||
sql_api_template: opts.configModel.get('sql_api_template'),
|
||||
api_key: opts.configModel.get('api_key')
|
||||
});
|
||||
|
||||
this.on('change:column', this.fetch, this);
|
||||
},
|
||||
|
||||
_onQueryDone: function (r) {
|
||||
var resultCount = _.size(r.rows);
|
||||
|
||||
if (resultCount && resultCount < MAX_ROW_COUNT) {
|
||||
this._rowData = _.pluck(r.rows, this.get('column'));
|
||||
this.trigger('columnsFetched', this._rowData);
|
||||
}
|
||||
},
|
||||
|
||||
fetch: function () {
|
||||
if (this.get('column') && this._query) {
|
||||
this._SQL.execute(
|
||||
queryTemplate({
|
||||
sql: this._query,
|
||||
column: this.get('column')
|
||||
}),
|
||||
null,
|
||||
{
|
||||
extra_params: ['page', 'rows_per_page'],
|
||||
page: 0,
|
||||
rows_per_page: 40,
|
||||
success: this._onQueryDone.bind(this),
|
||||
error: function () {
|
||||
// TODO: what happens if fails?
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
getRows: function () {
|
||||
var rowDataCount = _.size(this._rowData);
|
||||
if (rowDataCount > 0) {
|
||||
if (rowDataCount && rowDataCount < MAX_ROW_COUNT) {
|
||||
return _.reject(this._rowData, _.isNull);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user