summaryrefslogtreecommitdiff
path: root/vendor/github.com/ncruces/go-sqlite3/util
diff options
context:
space:
mode:
authorLibravatar kim <grufwub@gmail.com>2025-09-04 15:29:27 +0200
committerLibravatar kim <gruf@noreply.codeberg.org>2025-09-04 15:29:27 +0200
commit78defcd9166a202eb3140dc27afd288e1f9bfec4 (patch)
treedfe061abc810096f0141b7f585d38401c099c488 /vendor/github.com/ncruces/go-sqlite3/util
parent[performance] faster request id generation (#4405) (diff)
downloadgotosocial-78defcd9166a202eb3140dc27afd288e1f9bfec4.tar.xz
[chore] bump dependencies (#4406)
- codeberg.org/gruf/go-ffmpreg: v0.6.9 -> v0.6.10 - github.com/ncruces/go-sqlite3: v0.27.1 -> v0.28.0 - github.com/stretchr/testify: v1.10.0 -> v1.11.1 - github.com/tdewolff/minify/v2 v2.23.11 -> v2.24.2 - go.opentelemetry.io/otel{,/*}: v1.37.0 -> v1.38.0 - go.opentelemetry.io/contrib/*: v0.62.0 -> v0.63.0 Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4406 Co-authored-by: kim <grufwub@gmail.com> Co-committed-by: kim <grufwub@gmail.com>
Diffstat (limited to 'vendor/github.com/ncruces/go-sqlite3/util')
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/util/sql3util/wasm/sql3parse_table.wasmbin15960 -> 16007 bytes
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/util/vfsutil/slice.go102
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/util/vfsutil/wrap.go185
3 files changed, 287 insertions, 0 deletions
diff --git a/vendor/github.com/ncruces/go-sqlite3/util/sql3util/wasm/sql3parse_table.wasm b/vendor/github.com/ncruces/go-sqlite3/util/sql3util/wasm/sql3parse_table.wasm
index f7dc0cdf4..996541e76 100644
--- a/vendor/github.com/ncruces/go-sqlite3/util/sql3util/wasm/sql3parse_table.wasm
+++ b/vendor/github.com/ncruces/go-sqlite3/util/sql3util/wasm/sql3parse_table.wasm
Binary files differ
diff --git a/vendor/github.com/ncruces/go-sqlite3/util/vfsutil/slice.go b/vendor/github.com/ncruces/go-sqlite3/util/vfsutil/slice.go
new file mode 100644
index 000000000..b0fbe993c
--- /dev/null
+++ b/vendor/github.com/ncruces/go-sqlite3/util/vfsutil/slice.go
@@ -0,0 +1,102 @@
+package vfsutil
+
+import (
+ "io"
+
+ "github.com/ncruces/go-sqlite3"
+ "github.com/ncruces/go-sqlite3/vfs"
+)
+
+// SliceFile implements [vfs.File] with a byte slice.
+// It is suitable for temporary files (such as [vfs.OPEN_TEMP_JOURNAL]),
+// but not concurrency safe.
+type SliceFile []byte
+
+var (
+ // Ensure these interfaces are implemented:
+ _ vfs.FileSizeHint = &SliceFile{}
+)
+
+// ReadAt implements [io.ReaderAt].
+func (f *SliceFile) ReadAt(b []byte, off int64) (n int, err error) {
+ if d := *f; off < int64(len(d)) {
+ n = copy(b, d[off:])
+ }
+ if n < len(b) {
+ err = io.EOF
+ }
+ return
+}
+
+// WriteAt implements [io.WriterAt].
+func (f *SliceFile) WriteAt(b []byte, off int64) (n int, err error) {
+ d := *f
+ if off > int64(len(d)) {
+ d = append(d, make([]byte, off-int64(len(d)))...)
+ }
+ d = append(d[:off], b...)
+ if len(d) > len(*f) {
+ *f = d
+ }
+ return len(b), nil
+}
+
+// Size implements [vfs.File].
+func (f *SliceFile) Size() (int64, error) {
+ return int64(len(*f)), nil
+}
+
+// Truncate implements [vfs.File].
+func (f *SliceFile) Truncate(size int64) error {
+ if d := *f; size < int64(len(d)) {
+ *f = d[:size]
+ }
+ return nil
+}
+
+// SizeHint implements [vfs.FileSizeHint].
+func (f *SliceFile) SizeHint(size int64) error {
+ if d := *f; size > int64(len(d)) {
+ *f = append(d, make([]byte, size-int64(len(d)))...)
+ }
+ return nil
+}
+
+// Close implements [io.Closer].
+func (*SliceFile) Close() error { return nil }
+
+// Sync implements [vfs.File].
+func (*SliceFile) Sync(flags vfs.SyncFlag) error { return nil }
+
+// Lock implements [vfs.File].
+func (*SliceFile) Lock(lock vfs.LockLevel) error {
+ // notest // not concurrency safe
+ return sqlite3.IOERR_LOCK
+}
+
+// Unlock implements [vfs.File].
+func (*SliceFile) Unlock(lock vfs.LockLevel) error {
+ // notest // not concurrency safe
+ return sqlite3.IOERR_UNLOCK
+}
+
+// CheckReservedLock implements [vfs.File].
+func (*SliceFile) CheckReservedLock() (bool, error) {
+ // notest // not concurrency safe
+ return false, sqlite3.IOERR_CHECKRESERVEDLOCK
+}
+
+// SectorSize implements [vfs.File].
+func (*SliceFile) SectorSize() int {
+ // notest // safe default
+ return 0
+}
+
+// DeviceCharacteristics implements [vfs.File].
+func (*SliceFile) DeviceCharacteristics() vfs.DeviceCharacteristic {
+ return vfs.IOCAP_ATOMIC |
+ vfs.IOCAP_SEQUENTIAL |
+ vfs.IOCAP_SAFE_APPEND |
+ vfs.IOCAP_POWERSAFE_OVERWRITE |
+ vfs.IOCAP_SUBPAGE_READ
+}
diff --git a/vendor/github.com/ncruces/go-sqlite3/util/vfsutil/wrap.go b/vendor/github.com/ncruces/go-sqlite3/util/vfsutil/wrap.go
new file mode 100644
index 000000000..ad96547fa
--- /dev/null
+++ b/vendor/github.com/ncruces/go-sqlite3/util/vfsutil/wrap.go
@@ -0,0 +1,185 @@
+// Package vfsutil implements virtual filesystem utilities.
+package vfsutil
+
+import (
+ "github.com/ncruces/go-sqlite3"
+ "github.com/ncruces/go-sqlite3/vfs"
+)
+
+// UnwrapFile unwraps a [vfs.File],
+// possibly implementing [vfs.FileUnwrap],
+// to a concrete type.
+func UnwrapFile[T vfs.File](f vfs.File) (_ T, _ bool) {
+ for {
+ switch t := f.(type) {
+ default:
+ return
+ case T:
+ return t, true
+ case vfs.FileUnwrap:
+ f = t.Unwrap()
+ }
+ }
+}
+
+// WrapOpen helps wrap [vfs.VFS].
+func WrapOpen(f vfs.VFS, name string, flags vfs.OpenFlag) (file vfs.File, _ vfs.OpenFlag, err error) {
+ if f, ok := f.(vfs.VFSFilename); name == "" && ok {
+ return f.OpenFilename(nil, flags)
+ }
+ return f.Open(name, flags)
+}
+
+// WrapOpenFilename helps wrap [vfs.VFSFilename].
+func WrapOpenFilename(f vfs.VFS, name *vfs.Filename, flags vfs.OpenFlag) (file vfs.File, _ vfs.OpenFlag, err error) {
+ if f, ok := f.(vfs.VFSFilename); ok {
+ return f.OpenFilename(name, flags)
+ }
+ return f.Open(name.String(), flags)
+}
+
+// WrapLockState helps wrap [vfs.FileLockState].
+func WrapLockState(f vfs.File) vfs.LockLevel {
+ if f, ok := f.(vfs.FileLockState); ok {
+ return f.LockState()
+ }
+ return vfs.LOCK_EXCLUSIVE + 1 // UNKNOWN_LOCK
+}
+
+// WrapPersistWAL helps wrap [vfs.FilePersistWAL].
+func WrapPersistWAL(f vfs.File) bool {
+ if f, ok := f.(vfs.FilePersistWAL); ok {
+ return f.PersistWAL()
+ }
+ return false
+}
+
+// WrapSetPersistWAL helps wrap [vfs.FilePersistWAL].
+func WrapSetPersistWAL(f vfs.File, keepWAL bool) {
+ if f, ok := f.(vfs.FilePersistWAL); ok {
+ f.SetPersistWAL(keepWAL)
+ }
+}
+
+// WrapPowersafeOverwrite helps wrap [vfs.FilePowersafeOverwrite].
+func WrapPowersafeOverwrite(f vfs.File) bool {
+ if f, ok := f.(vfs.FilePowersafeOverwrite); ok {
+ return f.PowersafeOverwrite()
+ }
+ return false
+}
+
+// WrapSetPowersafeOverwrite helps wrap [vfs.FilePowersafeOverwrite].
+func WrapSetPowersafeOverwrite(f vfs.File, psow bool) {
+ if f, ok := f.(vfs.FilePowersafeOverwrite); ok {
+ f.SetPowersafeOverwrite(psow)
+ }
+}
+
+// WrapChunkSize helps wrap [vfs.FileChunkSize].
+func WrapChunkSize(f vfs.File, size int) {
+ if f, ok := f.(vfs.FileChunkSize); ok {
+ f.ChunkSize(size)
+ }
+}
+
+// WrapSizeHint helps wrap [vfs.FileSizeHint].
+func WrapSizeHint(f vfs.File, size int64) error {
+ if f, ok := f.(vfs.FileSizeHint); ok {
+ return f.SizeHint(size)
+ }
+ return sqlite3.NOTFOUND
+}
+
+// WrapHasMoved helps wrap [vfs.FileHasMoved].
+func WrapHasMoved(f vfs.File) (bool, error) {
+ if f, ok := f.(vfs.FileHasMoved); ok {
+ return f.HasMoved()
+ }
+ return false, sqlite3.NOTFOUND
+}
+
+// WrapOverwrite helps wrap [vfs.FileOverwrite].
+func WrapOverwrite(f vfs.File) error {
+ if f, ok := f.(vfs.FileOverwrite); ok {
+ return f.Overwrite()
+ }
+ return sqlite3.NOTFOUND
+}
+
+// WrapSyncSuper helps wrap [vfs.FileSync].
+func WrapSyncSuper(f vfs.File, super string) error {
+ if f, ok := f.(vfs.FileSync); ok {
+ return f.SyncSuper(super)
+ }
+ return sqlite3.NOTFOUND
+}
+
+// WrapCommitPhaseTwo helps wrap [vfs.FileCommitPhaseTwo].
+func WrapCommitPhaseTwo(f vfs.File) error {
+ if f, ok := f.(vfs.FileCommitPhaseTwo); ok {
+ return f.CommitPhaseTwo()
+ }
+ return sqlite3.NOTFOUND
+}
+
+// WrapBeginAtomicWrite helps wrap [vfs.FileBatchAtomicWrite].
+func WrapBeginAtomicWrite(f vfs.File) error {
+ if f, ok := f.(vfs.FileBatchAtomicWrite); ok {
+ return f.BeginAtomicWrite()
+ }
+ return sqlite3.NOTFOUND
+}
+
+// WrapCommitAtomicWrite helps wrap [vfs.FileBatchAtomicWrite].
+func WrapCommitAtomicWrite(f vfs.File) error {
+ if f, ok := f.(vfs.FileBatchAtomicWrite); ok {
+ return f.CommitAtomicWrite()
+ }
+ return sqlite3.NOTFOUND
+}
+
+// WrapRollbackAtomicWrite helps wrap [vfs.FileBatchAtomicWrite].
+func WrapRollbackAtomicWrite(f vfs.File) error {
+ if f, ok := f.(vfs.FileBatchAtomicWrite); ok {
+ return f.RollbackAtomicWrite()
+ }
+ return sqlite3.NOTFOUND
+}
+
+// WrapCheckpointStart helps wrap [vfs.FileCheckpoint].
+func WrapCheckpointStart(f vfs.File) {
+ if f, ok := f.(vfs.FileCheckpoint); ok {
+ f.CheckpointStart()
+ }
+}
+
+// WrapCheckpointDone helps wrap [vfs.FileCheckpoint].
+func WrapCheckpointDone(f vfs.File) {
+ if f, ok := f.(vfs.FileCheckpoint); ok {
+ f.CheckpointDone()
+ }
+}
+
+// WrapPragma helps wrap [vfs.FilePragma].
+func WrapPragma(f vfs.File, name, value string) (string, error) {
+ if f, ok := f.(vfs.FilePragma); ok {
+ return f.Pragma(name, value)
+ }
+ return "", sqlite3.NOTFOUND
+}
+
+// WrapBusyHandler helps wrap [vfs.FilePragma].
+func WrapBusyHandler(f vfs.File, handler func() bool) {
+ if f, ok := f.(vfs.FileBusyHandler); ok {
+ f.BusyHandler(handler)
+ }
+}
+
+// WrapSharedMemory helps wrap [vfs.FileSharedMemory].
+func WrapSharedMemory(f vfs.File) vfs.SharedMemory {
+ if f, ok := f.(vfs.FileSharedMemory); ok {
+ return f.SharedMemory()
+ }
+ return nil
+}