epiquery2
Version:
run templated queries from the http's using learnings from 1
44 lines (39 loc) • 1.5 kB
text/coffeescript
events = require 'events'
log = require 'simplog'
xmla = require 'xmla4js'
# Need to emit data, error, end, row endquery, beginRowset
class MDXDriver extends events.EventEmitter
constructor: (@query, @config) ->
execute: () =>
xmlaRequest =
async: true
url: @config.url
success: (xmla, xmlaRequest, xmlaResponse) =>
try
if(!xmlaResponse)
msg = 'no response for MDX query' + @query
log.error msg
this.emit 'error', msg
else
obj = xmlaResponse.fetchAsObject()
output = obj || {}
this.emit 'data', JSON.stringify(output)
catch error
msg = 'error parsing MDX response: ' + error
log.error msg
log.error 'MDX response=' + xmlaResponse
this.emit 'error', msg
error: (xmla, xmlaRequest, error) =>
msg = 'MDX query failed to execute, exception=' + error.message
log.error msg
this.emit 'error', msg
callback: () =>
this.emit 'endquery'
xmlaRequest.properties = {}
xmlaRequest.properties[xmla.Xmla.PROP_CATALOG] = @config.catalog
xmlaRequest.properties[xmla.Xmla.PROP_FORMAT] = xmla.Xmla.PROP_FORMAT_MULTIDIMENSIONAL
xmlaRequest.properties[xmla.Xmla.PROP_DATASOURCEINFO] = @config.server
xmlaRequest.method = xmla.Xmla.METHOD_EXECUTE
xmlaRequest.statement = @query
new xmla.Xmla().request(xmlaRequest)
module.exports.DriverClass = MDXDriver