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 } }