source: code/trunk/vendor/github.com/lib/pq/notice.go@ 822

Last change on this file since 822 was 822, checked in by yakumo.izuru, 22 months ago

Prefer immortal.run over runit and rc.d, use vendored modules
for convenience.

Signed-off-by: Izuru Yakumo <yakumo.izuru@…>

File size: 2.5 KB
Line 
1//go:build go1.10
2// +build go1.10
3
4package pq
5
6import (
7 "context"
8 "database/sql/driver"
9)
10
11// NoticeHandler returns the notice handler on the given connection, if any. A
12// runtime panic occurs if c is not a pq connection. This is rarely used
13// directly, use ConnectorNoticeHandler and ConnectorWithNoticeHandler instead.
14func NoticeHandler(c driver.Conn) func(*Error) {
15 return c.(*conn).noticeHandler
16}
17
18// SetNoticeHandler sets the given notice handler on the given connection. A
19// runtime panic occurs if c is not a pq connection. A nil handler may be used
20// to unset it. This is rarely used directly, use ConnectorNoticeHandler and
21// ConnectorWithNoticeHandler instead.
22//
23// Note: Notice handlers are executed synchronously by pq meaning commands
24// won't continue to be processed until the handler returns.
25func SetNoticeHandler(c driver.Conn, handler func(*Error)) {
26 c.(*conn).noticeHandler = handler
27}
28
29// NoticeHandlerConnector wraps a regular connector and sets a notice handler
30// on it.
31type NoticeHandlerConnector struct {
32 driver.Connector
33 noticeHandler func(*Error)
34}
35
36// Connect calls the underlying connector's connect method and then sets the
37// notice handler.
38func (n *NoticeHandlerConnector) Connect(ctx context.Context) (driver.Conn, error) {
39 c, err := n.Connector.Connect(ctx)
40 if err == nil {
41 SetNoticeHandler(c, n.noticeHandler)
42 }
43 return c, err
44}
45
46// ConnectorNoticeHandler returns the currently set notice handler, if any. If
47// the given connector is not a result of ConnectorWithNoticeHandler, nil is
48// returned.
49func ConnectorNoticeHandler(c driver.Connector) func(*Error) {
50 if c, ok := c.(*NoticeHandlerConnector); ok {
51 return c.noticeHandler
52 }
53 return nil
54}
55
56// ConnectorWithNoticeHandler creates or sets the given handler for the given
57// connector. If the given connector is a result of calling this function
58// previously, it is simply set on the given connector and returned. Otherwise,
59// this returns a new connector wrapping the given one and setting the notice
60// handler. A nil notice handler may be used to unset it.
61//
62// The returned connector is intended to be used with database/sql.OpenDB.
63//
64// Note: Notice handlers are executed synchronously by pq meaning commands
65// won't continue to be processed until the handler returns.
66func ConnectorWithNoticeHandler(c driver.Connector, handler func(*Error)) *NoticeHandlerConnector {
67 if c, ok := c.(*NoticeHandlerConnector); ok {
68 c.noticeHandler = handler
69 return c
70 }
71 return &NoticeHandlerConnector{Connector: c, noticeHandler: handler}
72}
Note: See TracBrowser for help on using the repository browser.