124 lines
13 KiB
JavaScript
124 lines
13 KiB
JavaScript
|
|
"use strict";
|
||
|
|
|
||
|
|
Object.defineProperty(exports, "__esModule", {
|
||
|
|
value: true
|
||
|
|
});
|
||
|
|
exports.default = void 0;
|
||
|
|
var _metadataParser = require("../metadata-parser");
|
||
|
|
var _token = require("./token");
|
||
|
|
var _helpers = require("./helpers");
|
||
|
|
function readTableName(buf, offset, metadata, options) {
|
||
|
|
if (!metadata.type.hasTableName) {
|
||
|
|
return new _helpers.Result(undefined, offset);
|
||
|
|
}
|
||
|
|
if (options.tdsVersion < '7_2') {
|
||
|
|
return (0, _helpers.readUsVarChar)(buf, offset);
|
||
|
|
}
|
||
|
|
let numberOfTableNameParts;
|
||
|
|
({
|
||
|
|
offset,
|
||
|
|
value: numberOfTableNameParts
|
||
|
|
} = (0, _helpers.readUInt8)(buf, offset));
|
||
|
|
const tableName = [];
|
||
|
|
for (let i = 0; i < numberOfTableNameParts; i++) {
|
||
|
|
let tableNamePart;
|
||
|
|
({
|
||
|
|
offset,
|
||
|
|
value: tableNamePart
|
||
|
|
} = (0, _helpers.readUsVarChar)(buf, offset));
|
||
|
|
tableName.push(tableNamePart);
|
||
|
|
}
|
||
|
|
return new _helpers.Result(tableName, offset);
|
||
|
|
}
|
||
|
|
function readColumnName(buf, offset, index, metadata, options) {
|
||
|
|
let colName;
|
||
|
|
({
|
||
|
|
offset,
|
||
|
|
value: colName
|
||
|
|
} = (0, _helpers.readBVarChar)(buf, offset));
|
||
|
|
if (options.columnNameReplacer) {
|
||
|
|
return new _helpers.Result(options.columnNameReplacer(colName, index, metadata), offset);
|
||
|
|
} else if (options.camelCaseColumns) {
|
||
|
|
return new _helpers.Result(colName.replace(/^[A-Z]/, function (s) {
|
||
|
|
return s.toLowerCase();
|
||
|
|
}), offset);
|
||
|
|
} else {
|
||
|
|
return new _helpers.Result(colName, offset);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
function readColumn(buf, offset, options, index) {
|
||
|
|
let metadata;
|
||
|
|
({
|
||
|
|
offset,
|
||
|
|
value: metadata
|
||
|
|
} = (0, _metadataParser.readMetadata)(buf, offset, options));
|
||
|
|
let tableName;
|
||
|
|
({
|
||
|
|
offset,
|
||
|
|
value: tableName
|
||
|
|
} = readTableName(buf, offset, metadata, options));
|
||
|
|
let colName;
|
||
|
|
({
|
||
|
|
offset,
|
||
|
|
value: colName
|
||
|
|
} = readColumnName(buf, offset, index, metadata, options));
|
||
|
|
return new _helpers.Result({
|
||
|
|
userType: metadata.userType,
|
||
|
|
flags: metadata.flags,
|
||
|
|
type: metadata.type,
|
||
|
|
collation: metadata.collation,
|
||
|
|
precision: metadata.precision,
|
||
|
|
scale: metadata.scale,
|
||
|
|
udtInfo: metadata.udtInfo,
|
||
|
|
dataLength: metadata.dataLength,
|
||
|
|
schema: metadata.schema,
|
||
|
|
colName: colName,
|
||
|
|
tableName: tableName
|
||
|
|
}, offset);
|
||
|
|
}
|
||
|
|
async function colMetadataParser(parser) {
|
||
|
|
let columnCount;
|
||
|
|
while (true) {
|
||
|
|
let offset;
|
||
|
|
try {
|
||
|
|
({
|
||
|
|
offset,
|
||
|
|
value: columnCount
|
||
|
|
} = (0, _helpers.readUInt16LE)(parser.buffer, parser.position));
|
||
|
|
} catch (err) {
|
||
|
|
if (err instanceof _helpers.NotEnoughDataError) {
|
||
|
|
await parser.waitForChunk();
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
parser.position = offset;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
const columns = [];
|
||
|
|
for (let i = 0; i < columnCount; i++) {
|
||
|
|
while (true) {
|
||
|
|
let column;
|
||
|
|
let offset;
|
||
|
|
try {
|
||
|
|
({
|
||
|
|
offset,
|
||
|
|
value: column
|
||
|
|
} = readColumn(parser.buffer, parser.position, parser.options, i));
|
||
|
|
} catch (err) {
|
||
|
|
if (err instanceof _helpers.NotEnoughDataError) {
|
||
|
|
await parser.waitForChunk();
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
throw err;
|
||
|
|
}
|
||
|
|
parser.position = offset;
|
||
|
|
columns.push(column);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return new _token.ColMetadataToken(columns);
|
||
|
|
}
|
||
|
|
var _default = exports.default = colMetadataParser;
|
||
|
|
module.exports = colMetadataParser;
|
||
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWV0YWRhdGFQYXJzZXIiLCJyZXF1aXJlIiwiX3Rva2VuIiwiX2hlbHBlcnMiLCJyZWFkVGFibGVOYW1lIiwiYnVmIiwib2Zmc2V0IiwibWV0YWRhdGEiLCJvcHRpb25zIiwidHlwZSIsImhhc1RhYmxlTmFtZSIsIlJlc3VsdCIsInVuZGVmaW5lZCIsInRkc1ZlcnNpb24iLCJyZWFkVXNWYXJDaGFyIiwibnVtYmVyT2ZUYWJsZU5hbWVQYXJ0cyIsInZhbHVlIiwicmVhZFVJbnQ4IiwidGFibGVOYW1lIiwiaSIsInRhYmxlTmFtZVBhcnQiLCJwdXNoIiwicmVhZENvbHVtbk5hbWUiLCJpbmRleCIsImNvbE5hbWUiLCJyZWFkQlZhckNoYXIiLCJjb2x1bW5OYW1lUmVwbGFjZXIiLCJjYW1lbENhc2VDb2x1bW5zIiwicmVwbGFjZSIsInMiLCJ0b0xvd2VyQ2FzZSIsInJlYWRDb2x1bW4iLCJyZWFkTWV0YWRhdGEiLCJ1c2VyVHlwZSIsImZsYWdzIiwiY29sbGF0aW9uIiwicHJlY2lzaW9uIiwic2NhbGUiLCJ1ZHRJbmZvIiwiZGF0YUxlbmd0aCIsInNjaGVtYSIsImNvbE1ldGFkYXRhUGFyc2VyIiwicGFyc2VyIiwiY29sdW1uQ291bnQiLCJyZWFkVUludDE2TEUiLCJidWZmZXIiLCJwb3NpdGlvbiIsImVyciIsIk5vdEVub3VnaERhdGFFcnJvciIsIndhaXRGb3JDaHVuayIsImNvbHVtbnMiLCJjb2x1bW4iLCJDb2xNZXRhZGF0YVRva2VuIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbi9jb2xtZXRhZGF0YS10b2tlbi1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZE1ldGFkYXRhLCB0eXBlIE1ldGFkYXRhIH0gZnJvbSAnLi4vbWV0YWRhdGEtcGFyc2VyJztcblxuaW1wb3J0IFBhcnNlciwgeyB0eXBlIFBhcnNlck9wdGlvbnMgfSBmcm9tICcuL3N0cmVhbS1wYXJzZXInO1xuaW1wb3J0IHsgQ29sTWV0YWRhdGFUb2tlbiB9IGZyb20gJy4vdG9rZW4nO1xuaW1wb3J0IHsgTm90RW5vdWdoRGF0YUVycm9yLCBSZXN1bHQsIHJlYWRCVmFyQ2hhciwgcmVhZFVJbnQxNkxFLCByZWFkVUludDgsIHJlYWRVc1ZhckNoYXIgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbk1ldGFkYXRhIGV4dGVuZHMgTWV0YWRhdGEge1xuICAvKipcbiAgICogVGhlIGNvbHVtbidzIG5hbWXjgIJcbiAgICovXG4gIGNvbE5hbWU6IHN0cmluZztcblxuICB0YWJsZU5hbWU/OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVhZFRhYmxlTmFtZShidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIG1ldGFkYXRhOiBNZXRhZGF0YSwgb3B0aW9uczogUGFyc2VyT3B0aW9ucyk6IFJlc3VsdDxzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIW1ldGFkYXRhLnR5cGUuaGFzVGFibGVOYW1lKSB7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodW5kZWZpbmVkLCBvZmZzZXQpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudGRzVmVyc2lvbiA8ICc3XzInKSB7XG4gICAgcmV0dXJuIHJlYWRVc1ZhckNoYXIoYnVmLCBvZmZzZXQpO1xuICB9XG5cbiAgbGV0IG51bWJlck9mVGFibGVOYW1lUGFydHM7XG4gICh7IG9mZnNldCwgdmFsdWU6IG51bWJlck9mVGFibGVOYW1lUGFydHMgfSA9IHJlYWRVSW50OChidWYsIG9mZnNldCkpO1xuXG4gIGNvbnN0IHRhYmxlTmFtZTogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZlRhYmxlTmFtZVBhcnRzOyBpKyspIHtcbiAgICBsZXQgdGFibGVOYW1lUGFydDtcbiAgICAoeyBvZmZzZXQsIHZhbHVlOiB0YWJsZU5hbWVQYXJ0IH0gPSByZWFkVXNWYXJDaGFyKGJ1Ziwgb2Zmc2V0KSk7XG5cbiAgICB0YWJsZU5hbWUucHVzaCh0YWJsZU5hbWVQYXJ0KTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVzdWx0KHRhYmxlTmFtZSwgb2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gcmVhZENvbHVtbk5hbWUoYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBpbmRleDogbnVtYmVyLCBtZXRhZGF0YTogTWV0YWRhdGEsIG9wdGlvbnM6IFBhcnNlck9wdGlvbnMpOiBSZXN1bHQ8c3RyaW5nPiB7XG4gIGxldCBjb2xOYW1lO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBjb2xOYW1lIH0gPSByZWFkQlZhckNoYXIoYnVmLCBvZmZzZXQpKTtcblxuICBpZiAob3B0aW9ucy5jb2x1bW5OYW1lUmVwbGFjZXIpIHtcbiAgICByZXR1cm4gbmV3IFJlc3VsdChvcHRpb25zLmNvbHVtbk5hbWVSZXBsYWNlcihjb2xOYW1lLCBpbmRleCwgbWV0YWRhdGEpLCBvZmZzZXQpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuY2FtZWxDYXNlQ29sdW1ucykge1xuICAgIHJldHVybiBuZXcgUmVzdWx0KGNvbE5hbWUucmVwbGFjZSgvXltBLVpdLywgZnVuY3Rpb24ocykge1xuICAgICAgcmV0dXJuIHMudG9Mb3dlckNhc2UoKTtcbiAgICB9KSwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IFJlc3VsdChjb2xOYW1lLCBvZmZzZXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRDb2x1bW4oYnVmOiBCdWZmZXIsIG9mZnNldDogbnVtYmVyLCBvcHRpb25zOiBQYXJzZXJPcHRpb25zLCBpbmRleDogbnVtYmVyKSB7XG4gIGxldCBtZXRhZGF0YTtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogbWV0YWRhdGEgfSA9IHJlYWRNZXRhZGF0YShidWYsIG9mZnNldCwgb3B0aW9ucykpO1xuXG4gIGxldCB0YWJsZU5hbWU7XG4gICh7IG9mZnNldCwgdmFsdWU6IHRhYmxlTmFtZSB9ID0gcmVhZFRhYmxlTmFtZShidWYsIG9mZnNldCwgbWV0YWRhdGEsIG9wdGlvbnMpKTtcblxuICBsZXQgY29sTmFtZTtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogY29sTmFtZSB9ID0gcmVhZENvbHVtbk5hbWUoYnVmLCBvZmZzZXQsIGluZGV4LCBtZXRhZGF0YSwgb3B0aW9ucykpO1xuXG4gIHJldHVybiBuZXcgUmVzdWx0KHtcbiAgICB1c2VyVHlwZTogbWV0YWRhdGEudXNlclR5cGUsXG4gICAgZmxhZ3M6IG1ldGFkYXRhLmZsYWdzLFxuICAgIHR5cGU6IG1ldGFkYXRhLnR5cGUsXG4gICAgY29sbGF0aW9uOiBtZXRhZGF0YS5jb2xsYXRpb24sXG4gICAgcHJ
|