Skip to main content
Glama

MCP SQL Server

by ryudg
InMemoryQueryRepository.ts2.78 kB
import { Query } from '../../domain/query/entities/Query.js'; import { QueryId } from '../../domain/query/value-objects/QueryId.js'; import { QueryRepository } from '../../domain/query/repositories/QueryRepository.js'; /** * InMemoryQueryRepository * * In-memory implementation of QueryRepository interface. * Used for development, testing, and caching. */ export class InMemoryQueryRepository implements QueryRepository { private queries: Map<string, Query> = new Map(); /** * Saves a query to the in-memory repository. * @param query The query to save */ async save(query: Query): Promise<void> { this.queries.set(query.id.value, query); } /** * Finds a query by its ID. * @param id The query ID * @returns The query if found, null otherwise */ async findById(id: QueryId): Promise<Query | null> { const query = this.queries.get(id.value); return query || null; } /** * Finds queries matching a pattern. * @param pattern The search pattern * @returns Array of matching queries */ async findByPattern(pattern: string): Promise<Query[]> { const regex = new RegExp(pattern, 'i'); return Array.from(this.queries.values()).filter(query => regex.test(query.sql)); } /** * Gets aggregated statistics about queries. * @returns Query statistics */ async getStatistics(): Promise<any> { const queries = Array.from(this.queries.values()); // Calculate aggregate statistics const totalQueries = queries.length; const executedQueries = queries.filter(q => q.statistics.executionCount > 0); const totalExecutions = executedQueries.reduce( (sum, q) => sum + q.statistics.executionCount, 0 ); const avgExecutionTime = executedQueries.length > 0 ? executedQueries.reduce((sum, q) => sum + q.statistics.averageExecutionTime, 0) / executedQueries.length : 0; // Find slow queries (> 1000ms) const slowQueries = executedQueries.filter(q => q.statistics.averageExecutionTime > 1000); return { totalQueries, executedQueries: executedQueries.length, totalExecutions, avgExecutionTime, slowQueries: slowQueries.length, slowQueriesList: slowQueries.map(q => ({ id: q.id.value, sql: q.sql, avgExecutionTime: q.statistics.averageExecutionTime, executionCount: q.statistics.executionCount, })), }; } /** * Deletes a query by its ID. * @param id The query ID * @returns True if deleted, false if not found */ async delete(id: QueryId): Promise<boolean> { return this.queries.delete(id.value); } /** * Clears all queries from the repository. */ async clear(): Promise<void> { this.queries.clear(); } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ryudg/mcp-sql'

If you have feedback or need assistance with the MCP directory API, please join our Discord server