Files
sqlite3/vfs/shm.go

27 lines
1.1 KiB
Go
Raw Normal View History

2025-11-10 11:26:28 +00:00
//go:build ((linux || darwin || windows || freebsd || openbsd || netbsd || dragonfly || illumos) && (386 || arm || amd64 || arm64 || riscv64 || ppc64le || loong64)) || sqlite3_flock || sqlite3_dotlk
package vfs
2024-04-28 10:33:39 +01:00
// SupportsSharedMemory is false on platforms that do not support shared memory.
// To use [WAL without shared-memory], you need to set [EXCLUSIVE locking mode].
//
// [WAL without shared-memory]: https://sqlite.org/wal.html#noshm
// [EXCLUSIVE locking mode]: https://sqlite.org/pragma.html#pragma_locking_mode
const SupportsSharedMemory = true
2024-04-27 20:53:54 +01:00
func (f *vfsFile) SharedMemory() SharedMemory { return f.shm }
// NewSharedMemory returns a shared-memory WAL-index
2024-04-28 10:33:39 +01:00
// backed by a file with the given path.
// It will return nil if shared-memory is not supported,
2024-04-27 20:53:54 +01:00
// or not appropriate for the given flags.
2024-04-28 10:33:39 +01:00
// Only [OPEN_MAIN_DB] databases may need a WAL-index.
// You must ensure all concurrent accesses to a database
// use shared-memory instances created with the same path.
2024-04-27 20:53:54 +01:00
func NewSharedMemory(path string, flags OpenFlag) SharedMemory {
2024-04-28 10:33:39 +01:00
if flags&OPEN_MAIN_DB == 0 || flags&(OPEN_DELETEONCLOSE|OPEN_MEMORY) != 0 {
2024-04-27 20:53:54 +01:00
return nil
}
2024-11-05 17:30:10 +00:00
return &vfsShm{path: path}
2024-04-27 20:53:54 +01:00
}