tedious
Version:
A TDS driver, for connecting to MS SQLServer databases.
96 lines (85 loc) • 2.31 kB
JavaScript
const metadataParse = require('../metadata-parser');
function readTableName(parser, options, metadata, callback) {
if (metadata.type.hasTableName) {
if (options.tdsVersion >= '7_2') {
parser.readUInt8(numberOfTableNameParts => {
const tableName = [];
let i = 0;
function next(done) {
if (numberOfTableNameParts === i) {
return done();
}
parser.readUsVarChar(part => {
tableName.push(part);
i++;
next(done);
});
}
next(() => {
callback(tableName);
});
});
} else {
parser.readUsVarChar(callback);
}
} else {
callback(undefined);
}
}
function readColumnName(parser, options, index, metadata, callback) {
parser.readBVarChar(colName => {
if (options.columnNameReplacer) {
callback(options.columnNameReplacer(colName, index, metadata));
} else if (options.camelCaseColumns) {
callback(colName.replace(/^[A-Z]/, function (s) {
return s.toLowerCase();
}));
} else {
callback(colName);
}
});
}
function readColumn(parser, options, index, callback) {
metadataParse(parser, options, metadata => {
readTableName(parser, options, metadata, tableName => {
readColumnName(parser, options, index, metadata, colName => {
callback({
userType: metadata.userType,
flags: metadata.flags,
type: metadata.type,
colName: colName,
collation: metadata.collation,
precision: metadata.precision,
scale: metadata.scale,
udtInfo: metadata.udtInfo,
dataLength: metadata.dataLength,
tableName: tableName
});
});
});
});
}
module.exports = function (parser, colMetadata, options, callback) {
parser.readUInt16LE(columnCount => {
const columns = [];
let i = 0;
function next(done) {
if (i === columnCount) {
return done();
}
readColumn(parser, options, i, column => {
columns.push(column);
i++;
next(done);
});
}
next(() => {
callback({
name: 'COLMETADATA',
event: 'columnMetadata',
columns: columns
});
});
});
};
;