| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- // 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, "|")
- }
|