UNPKG

tedious

Version:

A TDS driver, for connecting to MS SQLServer databases.

96 lines (85 loc) 2.31 kB
"use strict"; 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 }); }); }); };