tedious
Version:
A TDS driver, for connecting to MS SQLServer databases.
81 lines (68 loc) • 2.71 kB
JavaScript
// Generated by CoffeeScript 1.7.1
var OPTION, RpcRequestPayload, STATUS, WritableTrackingBuffer, typeByName, writeAllHeaders;
WritableTrackingBuffer = require('./tracking-buffer/tracking-buffer').WritableTrackingBuffer;
writeAllHeaders = require('./all-headers').writeToTrackingBuffer;
typeByName = require('./data-type').typeByName;
OPTION = {
WITH_RECOMPILE: 0x01,
NO_METADATA: 0x02,
REUSE_METADATA: 0x04
};
STATUS = {
BY_REF_VALUE: 0x01,
DEFAULT_VALUE: 0x02
};
/*
s2.2.6.5
*/
RpcRequestPayload = (function() {
function RpcRequestPayload(request, txnDescriptor, options) {
var buffer, optionFlags, outstandingRequestCount, param, parameter, statusFlags, _base, _base1, _base2, _i, _len, _ref, _ref1, _ref2, _ref3;
this.request = request;
buffer = new WritableTrackingBuffer(500);
this.procedure = this.request.sqlTextOrProcedure;
if (options.tdsVersion >= '7_2') {
outstandingRequestCount = 1;
writeAllHeaders(buffer, txnDescriptor, outstandingRequestCount);
}
if (typeof this.procedure === 'string') {
buffer.writeUsVarchar(this.procedure);
} else {
buffer.writeUShort(0xFFFF);
buffer.writeUShort(this.procedure);
}
optionFlags = 0;
buffer.writeUInt16LE(optionFlags);
_ref = this.request.parameters;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
parameter = _ref[_i];
statusFlags = 0;
if (parameter.output) {
statusFlags |= STATUS.BY_REF_VALUE;
}
buffer.writeBVarchar('@' + parameter.name);
buffer.writeUInt8(statusFlags);
param = {
value: parameter.value
};
if ((parameter.type.id & 0x30) === 0x20) {
param.length = (_ref1 = parameter.length) != null ? _ref1 : typeof (_base = parameter.type).resolveLength === "function" ? _base.resolveLength(parameter) : void 0;
}
if (parameter.type.hasPrecision) {
param.precision = (_ref2 = parameter.precision) != null ? _ref2 : typeof (_base1 = parameter.type).resolvePrecision === "function" ? _base1.resolvePrecision(parameter) : void 0;
}
if (parameter.type.hasScale) {
param.scale = (_ref3 = parameter.scale) != null ? _ref3 : typeof (_base2 = parameter.type).resolveScale === "function" ? _base2.resolveScale(parameter) : void 0;
}
parameter.type.writeTypeInfo(buffer, param, options);
parameter.type.writeParameterData(buffer, param, options);
}
this.data = buffer.data;
}
RpcRequestPayload.prototype.toString = function(indent) {
indent || (indent = '');
return indent + ("RPC Request - " + this.procedure);
};
return RpcRequestPayload;
})();
module.exports = RpcRequestPayload;