6c92f85d10
Bring the Nexus/Praxis/Hexis integration in line with MAVEN_ECOSYSTEM_ARCHITECTURE.md: - Praxis over HTTP: drop the in-process praxis.db open (praxisstore/ praxistools) and call praxisd's /api/v1/tools/* API via a new praxisClient. Honors the "no component reads another's DB" invariant (AC#12). PraxisConfig.DBPath -> URL. - Hexis confirmation gate: mutating capabilities (ReadOnly=false) now park a bound pendingHexis confirmation and require a spoken "да" before executing; read-only run immediately (AC#7, no auto attention->action). - Capability safety: >1 verb match is ambiguous -> ask instead of firing the first; ambiguous Nexus resolution asks for clarification (AC#2). - Correlation IDs on Hexis execute, recorded in the cross-service trace. - Bug: importance arrives as JSON float64 over HTTP, not int. - Tests: confirm-gate, decline, read-only, and ambiguity paths. Build: vendor/ bakes in the hexis client (replace-directed at a sibling repo outside the Docker context); Dockerfile builds from vendor and no longer `go mod download`s the unreachable replace paths. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
222 lines
9.4 KiB
Go
222 lines
9.4 KiB
Go
// 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
|