pub struct MysqlHandler { /* private fields */ }Expand description
MySQL/MariaDB database handler.
Composes one [MysqlConnection] (which owns the pool and
the pool initialization logic) with the per-backend MCP tool router.
Implementations§
Source§impl MysqlHandler
impl MysqlHandler
Sourcepub fn new(config: &DatabaseConfig) -> Self
pub fn new(config: &DatabaseConfig) -> Self
Creates a new MySQL handler.
Constructs the [MysqlConnection] (which builds the
lazy pool) and the MCP tool router. No network I/O happens here.
Source§impl MysqlHandler
impl MysqlHandler
Sourcepub async fn create_database(
&self,
__arg1: CreateDatabaseRequest,
) -> Result<MessageResponse, SqlError>
pub async fn create_database( &self, __arg1: CreateDatabaseRequest, ) -> Result<MessageResponse, SqlError>
Source§impl MysqlHandler
impl MysqlHandler
Sourcepub async fn drop_database(
&self,
__arg1: DropDatabaseRequest,
) -> Result<MessageResponse, SqlError>
pub async fn drop_database( &self, __arg1: DropDatabaseRequest, ) -> Result<MessageResponse, SqlError>
Drops an existing database.
Refuses to drop the currently connected database.
§Errors
Returns SqlError::ReadOnlyViolation in read-only mode,
SqlError::InvalidIdentifier for invalid names,
or SqlError::Query if the target is the active database
or the backend reports an error.
Source§impl MysqlHandler
impl MysqlHandler
Sourcepub async fn drop_table(
&self,
__arg1: DropTableRequest,
) -> Result<MessageResponse, SqlError>
pub async fn drop_table( &self, __arg1: DropTableRequest, ) -> Result<MessageResponse, SqlError>
Drops a table from a database.
Switches to the target database with USE, then executes
DROP TABLE.
§Errors
Returns SqlError::ReadOnlyViolation in read-only mode,
SqlError::InvalidIdentifier for invalid names,
or SqlError::Query if the backend reports an error.
Source§impl MysqlHandler
impl MysqlHandler
Sourcepub async fn explain_query(
&self,
__arg1: ExplainQueryRequest,
) -> Result<QueryResponse, SqlError>
pub async fn explain_query( &self, __arg1: ExplainQueryRequest, ) -> Result<QueryResponse, SqlError>
Returns the execution plan for a query.
When analyze is true and read-only mode is enabled, the inner
query is validated to be read-only before executing.
§Errors
Returns SqlError::ReadOnlyViolation if analyze is true,
read-only mode is enabled, and the query is a write statement.
Returns SqlError::Query if the backend reports an error.
Source§impl MysqlHandler
impl MysqlHandler
Sourcepub async fn get_table_schema(
&self,
__arg1: GetTableSchemaRequest,
) -> Result<TableSchemaResponse, SqlError>
pub async fn get_table_schema( &self, __arg1: GetTableSchemaRequest, ) -> Result<TableSchemaResponse, SqlError>
Source§impl MysqlHandler
impl MysqlHandler
Sourcepub async fn list_databases(
&self,
__arg1: ListDatabasesRequest,
) -> Result<ListDatabasesResponse, ErrorData>
pub async fn list_databases( &self, __arg1: ListDatabasesRequest, ) -> Result<ListDatabasesResponse, ErrorData>
Source§impl MysqlHandler
impl MysqlHandler
Sourcepub async fn list_tables(
&self,
__arg1: ListTablesRequest,
) -> Result<ListTablesResponse, ErrorData>
pub async fn list_tables( &self, __arg1: ListTablesRequest, ) -> Result<ListTablesResponse, ErrorData>
Source§impl MysqlHandler
impl MysqlHandler
Sourcepub async fn read_query(
&self,
__arg1: ReadQueryRequest,
) -> Result<ReadQueryResponse, SqlError>
pub async fn read_query( &self, __arg1: ReadQueryRequest, ) -> Result<ReadQueryResponse, SqlError>
Executes a read-only SQL query, paginating SELECT result rows.
Validates that the query is read-only, then dispatches on the
classified StatementKind: Select is wrapped in a subquery with
a server-controlled LIMIT/OFFSET; NonSelect (SHOW, DESCRIBE, USE,
EXPLAIN) is executed as-is and returned in a single page. A malformed
cursor is rejected by the serde deserializer before this method is
called, producing JSON-RPC -32602.
§Errors
Returns SqlError::ReadOnlyViolation if the query is not
read-only, or SqlError::Query if the backend reports an error.
Source§impl MysqlHandler
impl MysqlHandler
Sourcepub async fn write_query(
&self,
__arg1: QueryRequest,
) -> Result<QueryResponse, SqlError>
pub async fn write_query( &self, __arg1: QueryRequest, ) -> Result<QueryResponse, SqlError>
Trait Implementations§
Source§impl Clone for MysqlHandler
impl Clone for MysqlHandler
Source§fn clone(&self) -> MysqlHandler
fn clone(&self) -> MysqlHandler
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MysqlHandler
impl Debug for MysqlHandler
Source§impl From<MysqlHandler> for Server
impl From<MysqlHandler> for Server
Source§fn from(handler: MysqlHandler) -> Self
fn from(handler: MysqlHandler) -> Self
Wraps a MysqlHandler in the type-erased MCP server.
Source§impl ServerHandler for MysqlHandler
impl ServerHandler for MysqlHandler
fn get_info(&self) -> ServerInfo
async fn call_tool( &self, request: CallToolRequestParams, context: RequestContext<RoleServer>, ) -> Result<CallToolResult, ErrorData>
async fn list_tools( &self, _request: Option<PaginatedRequestParams>, _context: RequestContext<RoleServer>, ) -> Result<ListToolsResult, ErrorData>
fn enqueue_task( &self, _request: CallToolRequestParams, _context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CreateTaskResult, ErrorData>> + MaybeSendFuture
fn ping( &self, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn initialize( &self, request: InitializeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<InitializeResult, ErrorData>> + MaybeSendFuture
fn complete( &self, request: CompleteRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CompleteResult, ErrorData>> + MaybeSendFuture
fn set_level( &self, request: SetLevelRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn get_prompt( &self, request: GetPromptRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetPromptResult, ErrorData>> + MaybeSendFuture
fn list_prompts( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListPromptsResult, ErrorData>> + MaybeSendFuture
fn list_resources( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListResourcesResult, ErrorData>> + MaybeSendFuture
fn list_resource_templates( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListResourceTemplatesResult, ErrorData>> + MaybeSendFuture
fn read_resource( &self, request: ReadResourceRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ReadResourceResult, ErrorData>> + MaybeSendFuture
fn subscribe( &self, request: SubscribeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn unsubscribe( &self, request: UnsubscribeRequestParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<(), ErrorData>> + MaybeSendFuture
fn on_custom_request( &self, request: CustomRequest, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CustomResult, ErrorData>> + MaybeSendFuture
fn on_cancelled( &self, notification: CancelledNotificationParam, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_progress( &self, notification: ProgressNotificationParam, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_initialized( &self, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_roots_list_changed( &self, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn on_custom_notification( &self, notification: CustomNotification, context: NotificationContext<RoleServer>, ) -> impl Future<Output = ()> + MaybeSendFuture
fn list_tasks( &self, request: Option<PaginatedRequestParams>, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<ListTasksResult, ErrorData>> + MaybeSendFuture
fn get_task_info( &self, request: GetTaskInfoParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetTaskResult, ErrorData>> + MaybeSendFuture
fn get_task_result( &self, request: GetTaskResultParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<GetTaskPayloadResult, ErrorData>> + MaybeSendFuture
fn cancel_task( &self, request: CancelTaskParams, context: RequestContext<RoleServer>, ) -> impl Future<Output = Result<CancelTaskResult, ErrorData>> + MaybeSendFuture
Auto Trait Implementations§
impl Freeze for MysqlHandler
impl !RefUnwindSafe for MysqlHandler
impl Send for MysqlHandler
impl Sync for MysqlHandler
impl Unpin for MysqlHandler
impl UnsafeUnpin for MysqlHandler
impl !UnwindSafe for MysqlHandler
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<R, S> DynService<R> for Swhere
R: ServiceRole,
S: Service<R>,
impl<R, S> DynService<R> for Swhere
R: ServiceRole,
S: Service<R>,
fn handle_request( &self, request: <R as ServiceRole>::PeerReq, context: RequestContext<R>, ) -> Pin<Box<dyn Future<Output = Result<<R as ServiceRole>::Resp, ErrorData>> + Send + '_>>
fn handle_notification( &self, notification: <R as ServiceRole>::PeerNot, context: NotificationContext<R>, ) -> Pin<Box<dyn Future<Output = Result<(), ErrorData>> + Send + '_>>
fn get_info(&self) -> <R as ServiceRole>::Info
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more