registry.go

 1package sqlite3
 2
 3import "sync"
 4
 5var (
 6	// +checklocks:extRegistryMtx
 7	extRegistry    []func(*Conn) error
 8	extRegistryMtx sync.RWMutex
 9)
10
11// AutoExtension causes the entryPoint function to be invoked
12// for each new database connection that is created.
13//
14// https://sqlite.org/c3ref/auto_extension.html
15func AutoExtension(entryPoint func(*Conn) error) {
16	extRegistryMtx.Lock()
17	defer extRegistryMtx.Unlock()
18	extRegistry = append(extRegistry, entryPoint)
19}
20
21func initExtensions(c *Conn) error {
22	extRegistryMtx.RLock()
23	defer extRegistryMtx.RUnlock()
24	for _, f := range extRegistry {
25		if err := f(c); err != nil {
26			return err
27		}
28	}
29	return nil
30}