p2: digest with in-sift FIFO, SQLite caches, Honcho context, recover
Dixie is capped (max_inflight 2, queue_depth 8, queue_wait 20s) and never queued on llama-server. Streaming chat, thinking off, 45s fallback to clean. Digest and chunk-embedding caches are content-addressed SQLite (Honcho context is not cached). Recover uses the guarded Fetcher. guardian-star is refused in code.
This commit is contained in:
+221
@@ -0,0 +1,221 @@
|
||||
// Code generated by modernc.org/undup from the per-target sqlite_*.go files; DO NOT EDIT.
|
||||
|
||||
//go:build (darwin && amd64) || (darwin && arm64) || (freebsd && 386) || (freebsd && amd64) || (freebsd && arm) || (freebsd && arm64) || (linux && 386) || (linux && amd64) || (linux && arm) || (linux && arm64) || (linux && loong64) || (linux && ppc64le) || (linux && riscv64) || (linux && s390x)
|
||||
|
||||
package sqlite3
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
|
||||
"modernc.org/libc"
|
||||
)
|
||||
|
||||
// C documentation
|
||||
//
|
||||
// /*
|
||||
// ** This function is a no-op if the pager is in exclusive mode and not
|
||||
// ** in the ERROR state. Otherwise, it switches the pager to PAGER_OPEN
|
||||
// ** state.
|
||||
// **
|
||||
// ** If the pager is not in exclusive-access mode, the database file is
|
||||
// ** completely unlocked. If the file is unlocked and the file-system does
|
||||
// ** not exhibit the UNDELETABLE_WHEN_OPEN property, the journal file is
|
||||
// ** closed (if it is open).
|
||||
// **
|
||||
// ** If the pager is in ERROR state when this function is called, the
|
||||
// ** contents of the pager cache are discarded before switching back to
|
||||
// ** the OPEN state. Regardless of whether the pager is in exclusive-mode
|
||||
// ** or not, any journal file left in the file-system will be treated
|
||||
// ** as a hot-journal and rolled back the next time a read-transaction
|
||||
// ** is opened (by this or by any other connection).
|
||||
// */
|
||||
func _pager_unlock(tls *libc.TLS, pPager uintptr) {
|
||||
var iDc, rc, v1 int32
|
||||
_, _, _ = iDc, rc, v1
|
||||
_sqlite3BitvecDestroy(tls, (*TPager)(unsafe.Pointer(pPager)).FpInJournal)
|
||||
(*TPager)(unsafe.Pointer(pPager)).FpInJournal = uintptr(0)
|
||||
_releaseAllSavepoints(tls, pPager)
|
||||
if (*TPager)(unsafe.Pointer(pPager)).FpWal != uintptr(0) {
|
||||
if libc.Int32FromUint8((*TPager)(unsafe.Pointer(pPager)).FeState) == int32(PAGER_ERROR) {
|
||||
/* If an IO error occurs in wal.c while attempting to wrap the wal file,
|
||||
** then the Wal object may be holding a write-lock but no read-lock.
|
||||
** This call ensures that the write-lock is dropped as well. We cannot
|
||||
** have sqlite3WalEndReadTransaction() drop the write-lock, as it once
|
||||
** did, because this would break "BEGIN EXCLUSIVE" handling for
|
||||
** SQLITE_ENABLE_SETLK_TIMEOUT builds. */
|
||||
_sqlite3WalEndWriteTransaction(tls, (*TPager)(unsafe.Pointer(pPager)).FpWal)
|
||||
}
|
||||
_sqlite3WalEndReadTransaction(tls, (*TPager)(unsafe.Pointer(pPager)).FpWal)
|
||||
(*TPager)(unsafe.Pointer(pPager)).FeState = uint8(PAGER_OPEN)
|
||||
} else {
|
||||
if !((*TPager)(unsafe.Pointer(pPager)).FexclusiveMode != 0) {
|
||||
if (*Tsqlite3_file)(unsafe.Pointer((*TPager)(unsafe.Pointer(pPager)).Ffd)).FpMethods != uintptr(0) {
|
||||
v1 = _sqlite3OsDeviceCharacteristics(tls, (*TPager)(unsafe.Pointer(pPager)).Ffd)
|
||||
} else {
|
||||
v1 = 0
|
||||
} /* Error code returned by pagerUnlockDb() */
|
||||
iDc = v1
|
||||
/* If the operating system support deletion of open files, then
|
||||
** close the journal file when dropping the database lock. Otherwise
|
||||
** another connection with journal_mode=delete might delete the file
|
||||
** out from under us.
|
||||
*/
|
||||
if 0 == iDc&int32(SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN) || int32(1) != libc.Int32FromUint8((*TPager)(unsafe.Pointer(pPager)).FjournalMode)&int32(5) {
|
||||
_sqlite3OsClose(tls, (*TPager)(unsafe.Pointer(pPager)).Fjfd)
|
||||
}
|
||||
/* If the pager is in the ERROR state and the call to unlock the database
|
||||
** file fails, set the current lock to UNKNOWN_LOCK. See the comment
|
||||
** above the #define for UNKNOWN_LOCK for an explanation of why this
|
||||
** is necessary.
|
||||
*/
|
||||
rc = _pagerUnlockDb(tls, pPager, NO_LOCK)
|
||||
if rc != SQLITE_OK && libc.Int32FromUint8((*TPager)(unsafe.Pointer(pPager)).FeState) == int32(PAGER_ERROR) {
|
||||
(*TPager)(unsafe.Pointer(pPager)).FeLock = libc.Uint8FromInt32(libc.Int32FromInt32(EXCLUSIVE_LOCK) + libc.Int32FromInt32(1))
|
||||
}
|
||||
/* The pager state may be changed from PAGER_ERROR to PAGER_OPEN here
|
||||
** without clearing the error code. This is intentional - the error
|
||||
** code is cleared and the cache reset in the block below.
|
||||
*/
|
||||
(*TPager)(unsafe.Pointer(pPager)).FeState = uint8(PAGER_OPEN)
|
||||
}
|
||||
}
|
||||
/* If Pager.errCode is set, the contents of the pager cache cannot be
|
||||
** trusted. Now that there are no outstanding references to the pager,
|
||||
** it can safely move back to PAGER_OPEN state. This happens in both
|
||||
** normal and exclusive-locking mode.
|
||||
*/
|
||||
if (*TPager)(unsafe.Pointer(pPager)).FerrCode != 0 {
|
||||
if libc.Int32FromUint8((*TPager)(unsafe.Pointer(pPager)).FtempFile) == 0 {
|
||||
_pager_reset(tls, pPager)
|
||||
(*TPager)(unsafe.Pointer(pPager)).FchangeCountDone = uint8(0)
|
||||
(*TPager)(unsafe.Pointer(pPager)).FeState = uint8(PAGER_OPEN)
|
||||
} else {
|
||||
if (*Tsqlite3_file)(unsafe.Pointer((*TPager)(unsafe.Pointer(pPager)).Fjfd)).FpMethods != uintptr(0) {
|
||||
v1 = PAGER_OPEN
|
||||
} else {
|
||||
v1 = int32(PAGER_READER)
|
||||
}
|
||||
(*TPager)(unsafe.Pointer(pPager)).FeState = libc.Uint8FromInt32(v1)
|
||||
}
|
||||
if (*TPager)(unsafe.Pointer(pPager)).FbUseFetch != 0 {
|
||||
_sqlite3OsUnfetch(tls, (*TPager)(unsafe.Pointer(pPager)).Ffd, 0, uintptr(0))
|
||||
}
|
||||
(*TPager)(unsafe.Pointer(pPager)).FerrCode = SQLITE_OK
|
||||
_setGetterMethod(tls, pPager)
|
||||
}
|
||||
(*TPager)(unsafe.Pointer(pPager)).FjournalOff = 0
|
||||
(*TPager)(unsafe.Pointer(pPager)).FjournalHdr = 0
|
||||
(*TPager)(unsafe.Pointer(pPager)).FsetSuper = uint8(0)
|
||||
}
|
||||
|
||||
// C documentation
|
||||
//
|
||||
// /*
|
||||
// ** If possible, return a pointer to a mapping of file fd starting at offset
|
||||
// ** iOff. The mapping must be valid for at least nAmt bytes.
|
||||
// **
|
||||
// ** If such a pointer can be obtained, store it in *pp and return SQLITE_OK.
|
||||
// ** Or, if one cannot but no error occurs, set *pp to 0 and return SQLITE_OK.
|
||||
// ** Finally, if an error does occur, return an SQLite error code. The final
|
||||
// ** value of *pp is undefined in this case.
|
||||
// **
|
||||
// ** If this function does return a pointer, the caller must eventually
|
||||
// ** release the reference by calling unixUnfetch().
|
||||
// */
|
||||
func _unixFetch(tls *libc.TLS, fd uintptr, iOff Ti64, nAmt int32, pp uintptr) (r int32) {
|
||||
var nEofBuffer, rc int32
|
||||
var pFd uintptr
|
||||
_, _, _ = nEofBuffer, pFd, rc
|
||||
pFd = fd /* The underlying database file */
|
||||
**(**uintptr)(__ccgo_up(pp)) = uintptr(0)
|
||||
if (*TunixFile)(unsafe.Pointer(pFd)).FmmapSizeMax > 0 {
|
||||
/* Ensure that there is always at least a 256 byte buffer of addressable
|
||||
** memory following the returned page. If the database is corrupt,
|
||||
** SQLite may overread the page slightly (in practice only a few bytes,
|
||||
** but 256 is safe, round, number). */
|
||||
nEofBuffer = int32(256)
|
||||
if (*TunixFile)(unsafe.Pointer(pFd)).FpMapRegion == uintptr(0) {
|
||||
rc = _unixMapfile(tls, pFd, int64(-int32(1)))
|
||||
if rc != SQLITE_OK {
|
||||
return rc
|
||||
}
|
||||
}
|
||||
if (*TunixFile)(unsafe.Pointer(pFd)).FmmapSize >= iOff+int64(nAmt)+int64(nEofBuffer) {
|
||||
**(**uintptr)(__ccgo_up(pp)) = (*TunixFile)(unsafe.Pointer(pFd)).FpMapRegion + uintptr(iOff)
|
||||
(*TunixFile)(unsafe.Pointer(pFd)).FnFetchOut = (*TunixFile)(unsafe.Pointer(pFd)).FnFetchOut + 1
|
||||
}
|
||||
}
|
||||
return SQLITE_OK
|
||||
}
|
||||
|
||||
// C documentation
|
||||
//
|
||||
// /*
|
||||
// ** If the third argument is non-NULL, then this function releases a
|
||||
// ** reference obtained by an earlier call to unixFetch(). The second
|
||||
// ** argument passed to this function must be the same as the corresponding
|
||||
// ** argument that was passed to the unixFetch() invocation.
|
||||
// **
|
||||
// ** Or, if the third argument is NULL, then this function is being called
|
||||
// ** to inform the VFS layer that, according to POSIX, any existing mapping
|
||||
// ** may now be invalid and should be unmapped.
|
||||
// */
|
||||
func _unixUnfetch(tls *libc.TLS, fd uintptr, iOff Ti64, p uintptr) (r int32) {
|
||||
var pFd uintptr
|
||||
_ = pFd
|
||||
pFd = fd /* The underlying database file */
|
||||
_ = iOff
|
||||
/* If p==0 (unmap the entire file) then there must be no outstanding
|
||||
** xFetch references. Or, if p!=0 (meaning it is an xFetch reference),
|
||||
** then there must be at least one outstanding. */
|
||||
/* If p!=0, it must match the iOff value. */
|
||||
if p != 0 {
|
||||
(*TunixFile)(unsafe.Pointer(pFd)).FnFetchOut = (*TunixFile)(unsafe.Pointer(pFd)).FnFetchOut - 1
|
||||
} else {
|
||||
_unixUnmapfile(tls, pFd)
|
||||
}
|
||||
return SQLITE_OK
|
||||
}
|
||||
|
||||
/*
|
||||
** Here ends the implementation of all sqlite3_file methods.
|
||||
**
|
||||
********************** End sqlite3_file Methods *******************************
|
||||
******************************************************************************/
|
||||
|
||||
/*
|
||||
** This division contains definitions of sqlite3_io_methods objects that
|
||||
** implement various file locking strategies. It also contains definitions
|
||||
** of "finder" functions. A finder-function is used to locate the appropriate
|
||||
** sqlite3_io_methods object for a particular database file. The pAppData
|
||||
** field of the sqlite3_vfs VFS objects are initialized to be pointers to
|
||||
** the correct finder-function for that VFS.
|
||||
**
|
||||
** Most finder functions return a pointer to a fixed sqlite3_io_methods
|
||||
** object. The only interesting finder-function is autolockIoFinder, which
|
||||
** looks at the filesystem type and tries to guess the best locking
|
||||
** strategy from that.
|
||||
**
|
||||
** For finder-function F, two objects are created:
|
||||
**
|
||||
** (1) The real finder-function named "FImpt()".
|
||||
**
|
||||
** (2) A constant pointer to this function named just "F".
|
||||
**
|
||||
**
|
||||
** A pointer to the F pointer is used as the pAppData value for VFS
|
||||
** objects. We have to do this instead of letting pAppData point
|
||||
** directly at the finder-function since C90 rules prevent a void*
|
||||
** from be cast into a function pointer.
|
||||
**
|
||||
**
|
||||
** Each instance of this macro generates two objects:
|
||||
**
|
||||
** * A constant sqlite3_io_methods object call METHOD that has locking
|
||||
** methods CLOSE, LOCK, UNLOCK, CKRESLOCK.
|
||||
**
|
||||
** * An I/O method finder function called FINDER that returns a pointer
|
||||
** to the METHOD object in the previous bullet.
|
||||
*/
|
||||
|
||||
type fd_mask = Tfd_mask
|
||||
Reference in New Issue
Block a user