112 lines
3.5 KiB
Go
112 lines
3.5 KiB
Go
// Copyright 2021 Ross Light
|
|
// SPDX-License-Identifier: ISC
|
|
|
|
package sqlite
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
lib "modernc.org/sqlite/lib"
|
|
)
|
|
|
|
// OpenFlags are [flags] used when opening a [Conn] via [OpenConn].
|
|
//
|
|
// [flags]: https://www.sqlite.org/c3ref/c_open_autoproxy.html
|
|
type OpenFlags uint
|
|
|
|
// One of the following flags must be passed to [OpenConn].
|
|
const (
|
|
// OpenReadOnly opens the database in read-only mode.
|
|
// If the database does not already exist, an error is returned.
|
|
OpenReadOnly OpenFlags = lib.SQLITE_OPEN_READONLY
|
|
// OpenReadWrite opens the database for reading and writing if possible,
|
|
// or reading only if the file is write protected by the operating system.
|
|
// If the database does not already exist,
|
|
// an error is returned unless OpenCreate is also passed.
|
|
OpenReadWrite OpenFlags = lib.SQLITE_OPEN_READWRITE
|
|
)
|
|
|
|
// Optional flags to pass to [OpenConn].
|
|
const (
|
|
// OpenCreate will create the file if it does not already exist.
|
|
// It is only valid with [OpenReadWrite].
|
|
OpenCreate OpenFlags = lib.SQLITE_OPEN_CREATE
|
|
// OpenURI allows the path to be interpreted as a URI.
|
|
OpenURI OpenFlags = lib.SQLITE_OPEN_URI
|
|
// OpenMemory will be opened as an in-memory database.
|
|
// The path is ignored unless [OpenSharedCache] is used.
|
|
OpenMemory OpenFlags = lib.SQLITE_OPEN_MEMORY
|
|
// OpenSharedCache opens the database with [shared-cache].
|
|
// This is mostly only useful for sharing in-memory databases:
|
|
// it's [not recommended] for other purposes.
|
|
//
|
|
// [shared-cache]: https://www.sqlite.org/sharedcache.html
|
|
// [not recommended]: https://www.sqlite.org/sharedcache.html#dontuse
|
|
OpenSharedCache OpenFlags = lib.SQLITE_OPEN_SHAREDCACHE
|
|
// OpenPrivateCache forces the database to not use shared-cache.
|
|
OpenPrivateCache OpenFlags = lib.SQLITE_OPEN_PRIVATECACHE
|
|
// OpenWAL enables the [write-ahead log] for the database.
|
|
//
|
|
// [write-ahead log]: https://www.sqlite.org/wal.html
|
|
OpenWAL OpenFlags = lib.SQLITE_OPEN_WAL
|
|
|
|
// OpenNoMutex has no effect.
|
|
//
|
|
// Deprecated: This flag is now implied.
|
|
OpenNoMutex OpenFlags = lib.SQLITE_OPEN_NOMUTEX
|
|
// OpenFullMutex has no effect.
|
|
//
|
|
// Deprecated: This flag has no equivalent and is ignored.
|
|
OpenFullMutex OpenFlags = lib.SQLITE_OPEN_FULLMUTEX
|
|
)
|
|
|
|
// String returns a pipe-separated list of the C constant names set in flags.
|
|
func (flags OpenFlags) String() string {
|
|
var parts []string
|
|
if flags&OpenReadOnly != 0 {
|
|
parts = append(parts, "SQLITE_OPEN_READONLY")
|
|
flags &^= OpenReadOnly
|
|
}
|
|
if flags&OpenReadWrite != 0 {
|
|
parts = append(parts, "SQLITE_OPEN_READWRITE")
|
|
flags &^= OpenReadWrite
|
|
}
|
|
if flags&OpenCreate != 0 {
|
|
parts = append(parts, "SQLITE_OPEN_CREATE")
|
|
flags &^= OpenCreate
|
|
}
|
|
if flags&OpenURI != 0 {
|
|
parts = append(parts, "SQLITE_OPEN_URI")
|
|
flags &^= OpenURI
|
|
}
|
|
if flags&OpenMemory != 0 {
|
|
parts = append(parts, "SQLITE_OPEN_MEMORY")
|
|
flags &^= OpenMemory
|
|
}
|
|
if flags&OpenNoMutex != 0 {
|
|
parts = append(parts, "SQLITE_OPEN_NOMUTEX")
|
|
flags &^= OpenNoMutex
|
|
}
|
|
if flags&OpenFullMutex != 0 {
|
|
parts = append(parts, "SQLITE_OPEN_FULLMUTEX")
|
|
flags &^= OpenFullMutex
|
|
}
|
|
if flags&OpenSharedCache != 0 {
|
|
parts = append(parts, "SQLITE_OPEN_SHAREDCACHE")
|
|
flags &^= OpenSharedCache
|
|
}
|
|
if flags&OpenPrivateCache != 0 {
|
|
parts = append(parts, "SQLITE_OPEN_PRIVATECACHE")
|
|
flags &^= OpenPrivateCache
|
|
}
|
|
if flags&OpenWAL != 0 {
|
|
parts = append(parts, "SQLITE_OPEN_WAL")
|
|
flags &^= OpenWAL
|
|
}
|
|
if flags != 0 || len(parts) == 0 {
|
|
parts = append(parts, fmt.Sprintf("%#x", uint(flags)))
|
|
}
|
|
return strings.Join(parts, "|")
|
|
}
|