86 lines
1.8 KiB
Go
86 lines
1.8 KiB
Go
package sqkv
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// OpenMode for opening a DB
|
|
type OpenMode string
|
|
|
|
const (
|
|
OpenModeReadOnly OpenMode = "ro"
|
|
OpenModeReadWrite OpenMode = "rw"
|
|
OpenModeReadWriteCreate OpenMode = "rwc"
|
|
OpenModeMemory OpenMode = "memory"
|
|
)
|
|
|
|
// OpenCache for setting the cache mode
|
|
type OpenCache string
|
|
|
|
const (
|
|
OpenCacheShared OpenCache = "shared"
|
|
OpenCachePrivate OpenCache = "private"
|
|
)
|
|
|
|
// OpenJournalMode for setting the journal mode
|
|
type OpenJournalMode string
|
|
|
|
const (
|
|
OpenJournalModeDelete = "delete"
|
|
OpenJournalModeTruncate = "truncate"
|
|
OpenJournalModePersist = "persist"
|
|
OpenJournalModeMemory = "memory"
|
|
OpenJournalModeWAL = "wal"
|
|
OpenJournalModeOff = "off"
|
|
)
|
|
|
|
// OpenConfig is a configuration for opening a DB
|
|
type OpenConfig struct {
|
|
Mode OpenMode
|
|
Cache OpenCache
|
|
JournalMode OpenJournalMode
|
|
}
|
|
|
|
// String implements fmt.Stringer
|
|
func (oc OpenConfig) String() string {
|
|
var opts []string
|
|
if oc.Mode != "" {
|
|
opts = append(opts, "mode="+string(oc.Mode))
|
|
}
|
|
if oc.Cache != "" {
|
|
opts = append(opts, "cache="+string(oc.Cache))
|
|
}
|
|
if oc.JournalMode != "" {
|
|
opts = append(opts, fmt.Sprintf("_pragma=journal_mode(%s)", oc.JournalMode))
|
|
}
|
|
if len(opts) == 0 {
|
|
return ""
|
|
}
|
|
return "?" + strings.Join(opts, "&")
|
|
}
|
|
|
|
// OpenOption is a func for setting open config values
|
|
type OpenOption func(*OpenConfig)
|
|
|
|
// WithMode sets the mode for opening the DB
|
|
func WithMode(mode OpenMode) OpenOption {
|
|
return func(oc *OpenConfig) {
|
|
oc.Mode = mode
|
|
}
|
|
}
|
|
|
|
// WithCache sets the cache for opening the DB
|
|
func WithCache(cache OpenCache) OpenOption {
|
|
return func(oc *OpenConfig) {
|
|
oc.Cache = cache
|
|
}
|
|
}
|
|
|
|
// WithJournalMode sets the journal mode for the DB
|
|
func WithJournalMode(journalMode OpenJournalMode) OpenOption {
|
|
return func(oc *OpenConfig) {
|
|
oc.JournalMode = journalMode
|
|
}
|
|
}
|