query-analyzer
Version:
A utility for enhancing Sequelize queries with EXPLAIN options and logging detailed query plans.
86 lines (85 loc) • 2.71 kB
JavaScript
"use strict";
/**
* Custom error classes for Query Analyzer
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.ParseError = exports.QueryExecutionError = exports.CsvError = exports.ExplainError = exports.AnalyzerError = void 0;
/**
* Base error class for all analyzer errors
*/
class AnalyzerError extends Error {
constructor(message, code, query, originalError) {
super(message);
this.name = 'AnalyzerError';
this.code = code;
this.query = query;
this.originalError = originalError;
this.timestamp = new Date();
// Maintains proper stack trace for where our error was thrown (only available on V8)
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
}
}
/**
* Get a formatted error message
*/
getFormattedMessage() {
return `[${this.code}] ${this.message}\n\tQuery: ${this.query}\n\tTime: ${this.timestamp.toISOString()}`;
}
/**
* Convert error to JSON
*/
toJSON() {
var _a;
return {
name: this.name,
code: this.code,
message: this.message,
query: this.query,
timestamp: this.timestamp.toISOString(),
originalError: (_a = this.originalError) === null || _a === void 0 ? void 0 : _a.message,
stack: this.stack
};
}
}
exports.AnalyzerError = AnalyzerError;
/**
* Error thrown when EXPLAIN analysis fails
*/
class ExplainError extends AnalyzerError {
constructor(query, originalError) {
super('Failed to analyze query with EXPLAIN', 'EXPLAIN_FAILED', query, originalError);
this.name = 'ExplainError';
}
}
exports.ExplainError = ExplainError;
/**
* Error thrown when CSV logging fails
*/
class CsvError extends AnalyzerError {
constructor(query, originalError) {
super('Failed to log query analysis to CSV', 'CSV_WRITE_FAILED', query, originalError);
this.name = 'CsvError';
}
}
exports.CsvError = CsvError;
/**
* Error thrown when query execution fails
*/
class QueryExecutionError extends AnalyzerError {
constructor(query, originalError) {
super('Query execution failed', 'QUERY_EXECUTION_FAILED', query, originalError);
this.name = 'QueryExecutionError';
}
}
exports.QueryExecutionError = QueryExecutionError;
/**
* Error thrown when query plan parsing fails
*/
class ParseError extends AnalyzerError {
constructor(query, field, originalError) {
super(`Failed to parse ${field} from query plan`, 'PARSE_FAILED', query, originalError);
this.name = 'ParseError';
}
}
exports.ParseError = ParseError;