// utility for field
var consts_1 = require('./consts');
var util = require('./util');
var time = require('./compiler/time');
var schema = require('./schema/schema');
function fieldRef(field, opt) {
opt = opt || {};
var f = (opt.datum ? 'datum.' : '') + (opt.prefn || ''), name = field.name;
if (isCount(field)) {
return f + 'count';
}
else Iif (opt.fn) {
return f + opt.fn + '_' + name;
}
else if (!opt.nofn && field.bin) {
var bin_suffix = opt.bin_suffix || '_start';
return f + 'bin_' + name + bin_suffix;
}
else if (!opt.nofn && !opt.noAggregate && field.aggregate) {
return f + field.aggregate + '_' + name;
}
else if (!opt.nofn && field.timeUnit) {
return f + field.timeUnit + '_' + name;
}
else {
return f + name;
}
}
exports.fieldRef = fieldRef;
;
function shorthand(f) {
return (f.aggregate ? f.aggregate + consts_1.Shorthand.Func : '') +
(f.timeUnit ? f.timeUnit + consts_1.Shorthand.Func : '') +
(f.bin ? 'bin' + consts_1.Shorthand.Func : '') +
(f.name || '') + consts_1.Shorthand.Type + f.type;
}
exports.shorthand = shorthand;
;
function shorthands(fields, delim) {
delim = delim || consts_1.Shorthand.Delim;
return fields.map(shorthand).join(delim);
}
exports.shorthands = shorthands;
;
function fromShorthand(shorthand) {
var split = shorthand.split(consts_1.Shorthand.Type), i;
var o = {
name: split[0].trim(),
type: split[1].trim()
};
for (i in schema.aggregate.enum) {
var a = schema.aggregate.enum[i];
if (o.name.indexOf(a + '_') === 0) {
o.name = o.name.substr(a.length + 1);
Iif (a == 'count' && o.name.length === 0)
o.name = '*';
o.aggregate = a;
break;
}
}
for (i in schema.timeUnits) {
var tu = schema.timeUnits[i];
Iif (o.name && o.name.indexOf(tu + '_') === 0) {
o.name = o.name.substr(o.name.length + 1);
o.timeUnit = tu;
break;
}
}
Iif (o.name && o.name.indexOf('bin_') === 0) {
o.name = o.name.substr(4);
o.bin = true;
}
return o;
}
exports.fromShorthand = fromShorthand;
;
function isType(fieldDef, type) {
return fieldDef.type === type;
}
exports.isType = isType;
;
function isTypes(fieldDef, types) {
for (var t = 0; t < types.length; t++) {
if (fieldDef.type === types[t])
return true;
}
return false;
}
exports.isTypes = isTypes;
;
function isOrdinalScale(field) {
return isTypes(field, [consts_1.Type.N, consts_1.Type.O]) ||
(isType(field, consts_1.Type.T) && field.timeUnit && time.isOrdinalFn(field.timeUnit));
}
exports.isOrdinalScale = isOrdinalScale;
;
function isFieldDimension(field) {
return isTypes(field, [consts_1.Type.N, consts_1.Type.O]) || !!field.bin ||
(isType(field, consts_1.Type.T) && !!field.timeUnit);
}
function isDimension(field) {
return field && isFieldDimension(field);
}
exports.isDimension = isDimension;
;
function isMeasure(field) {
return field && !isFieldDimension(field);
}
exports.isMeasure = isMeasure;
;
function count() {
return { name: '*', aggregate: 'count', type: consts_1.Type.Q, displayName: exports.COUNT_DISPLAYNAME };
}
exports.count = count;
;
exports.COUNT_DISPLAYNAME = 'Number of Records';
function isCount(field) {
return field.aggregate === 'count';
}
exports.isCount = isCount;
;
function cardinality(field, stats, filterNull) {
// FIXME need to take filter into account
if (filterNull === void 0) { filterNull = {}; }
var stat = stats[field.name];
var type = field.type;
if (field.bin) {
var bins = util.getbins(stat, field.bin.maxbins || schema.MAXBINS_DEFAULT);
return (bins.stop - bins.start) / bins.step;
}
if (isType(field, consts_1.Type.T)) {
var cardinality = time.cardinality(field, stats, filterNull, type);
Iif (cardinality !== null)
return cardinality;
}
if (field.aggregate) {
return 1;
}
return stat.distinct -
(stat.missing > 0 && filterNull[type] ? 1 : 0);
}
exports.cardinality = cardinality;
;
//# sourceMappingURL=encdef.js.map |