Source: model/QueryResults.js

Ext.ns('Oracle.BDD.Portlets.Visualization.Model');

/**
 * <b>Do NOT instantiate this class directly.</b>  QueryResults are provided 
 * as an argument to the callback function of 
 * {@link Oracle.BDD.Portlets.Visualization.Renderers.BaseRenderer#executeQuery}
 * <p>
 * For example:
 * <pre>
 *     init: function() {
 *       
 *        this.executeQuery("eql", true, this.renderVisualization);
 *
 *     },
 *   
 *    renderVisualization: function(queryResults) {
 *
 *        var records = queryResults.getRecords();
 *        var queryConfig = queryResults.getQueryConfig();
 *        
 *         ...
 *    }
 * </pre>      
 * @class Oracle.BDD.Portlets.Visualization.Model.QueryResults
 * 
 */
Oracle.BDD.Portlets.Visualization.Model.QueryResults = function(config) {
	
	var self = this;
	
	config = config || {};
	config.records = config.records || [];

	if (config.records) {
		
		this._records = config.records;
		this._totalRecordCount = config.totalRecordCount;		
		this._attributeTypeMap = config.attributeTypes;
		
		Ext.each(config.records, function(rec, idx, allRecs) {
			
			for(var prop in rec) {
				if (rec.hasOwnProperty(prop) && self._attributeTypeMap.hasOwnProperty(prop)) {
					var type = self._attributeTypeMap[prop];
					if (!Ext.isArray(rec[prop])) {
						
						rec[prop] = convertToType(rec[prop], type);

					} else {
						var values = rec[prop];
						var returnValues = [];
						Ext.each(values, function(v) {
							returnValues.push(convertToType(v, type));
						});
						rec[prop] = returnValues;
 					}
 				}
			}
		});
	}
	
	function convertToType(value, type) {
		if (type === 'mdex:long' || type === 'mdex:double' || type === 'mdex:int' || type === 'mdex:long-set' || type === 'mdex:double-set' || type === 'mdex:int-set') {
			return Number(value);
		} else if (type === 'mdex:dateTime' || type === 'mdex:dateTime-set') {
			return new Date(value);
		} 
		return value;
	}
	
	this._queryConfig = new Oracle.BDD.Portlets.Visualization.Model.QueryConfig(config.queryConfig, config.attributes);
	
	return this;
};

Oracle.BDD.Portlets.Visualization.Model.QueryResults.prototype = {

	_attributeTypeMap: {},
	_queryConfig : undefined,
	_records : [],
	_totalRecordCount : 0,
	
	/** 
	 * Returns the Oracle.BDD.Portlets.Visualization.Model.QueryConfig that prompted
	 * the query response
     * @return {QueryConfig} The QueryConfig object
    */
    getQueryConfig: function() {
		return this._queryConfig;
	},
	
	/** 
     * Returns an array of data records returned by the query.  The structure
     * of a data record is dependent upon on EQL of the query executed.
     * <p>
     * For example, the eql query:
     * <pre>
     * RETURN data AS
     * SELECT
     * COALESCE(%metric_1%, 0) as metric_1,
     * COALESCE(%metric_2%, 0) as metric_2,
     * %groupby_1% AS groupby_1
     * FROM "%dataview%"
     * GROUP BY groupby_1
     * </pre>
     * <p>
     * returns:
     * </p>
     * <pre>
     * [{metric_1: 12.0, metric_2: 35.5, groupby_1: "Alaska"}, 
     * {metric_1: 18.2, metric_2: 22.8, groupby_1: "Arizona"}, ...]
     * </pre>
     * @return {Object[]} An array of data records return by the query
    */
    getRecords: function() {
		return this._records;
	},
	
	/**
	 * Gets the number of records returned in the query
	 *   
	 * @return {Number} Record count
	 */
    getRecordCount: function() {
    	return this._records.length;
    },
	
    /**
	 * Gets the total number of records in the query.  This may exceed the 
	 * number returned by getRecordCount() if the EQL had a paging statement
	 * or if the number of records returned by the query exceeded the maximum 
	 * number of records allowed by the portlet (i.e. 1000).
	 *   
	 * @return {Number} Total record count
	 */
	getTotalRecordCount : function() {
		return this._totalRecordCount;
	}
};
//@ sourceURL=QueryResults.js