1 Star 0 Fork 0

武汉乐吾乐科技有限责任公司/gokb

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
notice.go 2.60 KB
一键复制 编辑 原始数据 按行查看 历史
Alsmile 提交于 2024-09-05 10:36 . init
/******************************************************************************
* 版权信息:北京人大金仓信息技术股份有限公司
* 作者:KingbaseES
* 文件名:notice.go
* 功能描述:notice相关接口
* 其它说明:go1.10及以上版本可用
* 修改记录:
1.修改时间:
2.修改人:
3.修改内容:
******************************************************************************/
package gokb
import (
"context"
"database/sql/driver"
)
// NoticeHandler返回给定连接上的通知处理程序(如果有的话)
// 如果c不是kb的连接则会发生pannic
func NoticeHandler(dc driver.Conn) (f func(*Error)) {
return dc.(*conn).noticeHandler
}
// SetNoticeHandler设置指定连接上的指定的通知处理程序
// 如果c不是kb的连接则会发生pannic
// 一个空的handler可以用来进行取消设置
//
// 注意: 通知处理为同步执行,在处理程序返回之前不会继续处理命令
func SetNoticeHandler(dc driver.Conn, handler func(*Error)) () {
dc.(*conn).noticeHandler = handler
}
// NoticeHandlerConnector封装了一个常规的connector并在其上设置了一个通知处理程序
type NoticeHandlerConnector struct {
driver.Connector
noticeHandler func(*Error)
}
// Connect调用底层connector的connect方法然后设置通知处理程序
func (n *NoticeHandlerConnector) Connect(ctx context.Context) (dc driver.Conn, err error) {
dc, err = n.Connector.Connect(ctx)
if nil == err { SetNoticeHandler(dc, n.noticeHandler) }
return dc, err
}
// ConnectorNoticeHandler返回当前设置的通知处理程序(如果有的话)
// 如果给定的connector不是ConnectorWithNoticeHandler的结果,则返回空
func ConnectorNoticeHandler(c driver.Connector) (f func(*Error)) {
if c, ok := c.(*NoticeHandlerConnector)
ok {
return c.noticeHandler
}else {
return nil
}
}
// ConnectorWithNoticeHandler创建或设置指定connector的指定处理程序
// 如果指定的connector是先前调用该函数返回的结果,则只需在指定的connector上设置并返回它即可
// 否则将返回一个新的connector,封装指定的connector并设置通知处理程序
// 可以用一个空的通知处理程序取消设置
//
// 返回的connector将用于database/sql.OpenDB.
//
// 注意:通知处理程序为同步执行,在返回之前不会继续处理命令
func ConnectorWithNoticeHandler(c driver.Connector, handler func(*Error)) (nhc *NoticeHandlerConnector) {
if c, ok := c.(*NoticeHandlerConnector)
ok {
c.noticeHandler = handler
return c
}else {
return &NoticeHandlerConnector{Connector: c, noticeHandler: handler}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/le5le/gokb.git
git@gitee.com:le5le/gokb.git
le5le
gokb
gokb
main

搜索帮助