1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- const {EOL} = require('os');
- const {addInspection, messageGap} = require('./utils');
- const parsingErrorCode = {
- unclosedMLC: 0, // Unclosed multi-line comment.
- unclosedText: 1, // Unclosed text block.
- unclosedQI: 2, // Unclosed quoted identifier.
- multiLineQI: 3 // Multi-line quoted identifiers are not supported.
- };
- Object.freeze(parsingErrorCode);
- const errorMessages = [
- {name: 'unclosedMLC', message: 'Unclosed multi-line comment.'},
- {name: 'unclosedText', message: 'Unclosed text block.'},
- {name: 'unclosedQI', message: 'Unclosed quoted identifier.'},
- {name: 'multiLineQI', message: 'Multi-line quoted identifiers are not supported.'}
- ];
- class SQLParsingError extends Error {
- constructor(code, position) {
- const err = errorMessages[code].message;
- const message = `Error parsing SQL at {line:${position.line},col:${position.column}}: ${err}`;
- super(message);
- this.name = this.constructor.name;
- this.error = err;
- this.code = code;
- this.position = position;
- Error.captureStackTrace(this, this.constructor);
- }
- }
- SQLParsingError.prototype.toString = function (level) {
- level = level > 0 ? parseInt(level) : 0;
- const gap = messageGap(level + 1);
- const lines = [
- `SQLParsingError {`,
- `${gap}code: parsingErrorCode.${errorMessages[this.code].name}`,
- `${gap}error: "${this.error}"`,
- `${gap}position: {line: ${this.position.line}, col: ${this.position.column}}`,
- `${messageGap(level)}}`
- ];
- return lines.join(EOL);
- };
- addInspection(SQLParsingError.prototype, function () {
- return this.toString();
- });
- module.exports = {
- SQLParsingError,
- parsingErrorCode
- };
|