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>
299 lines
13 KiB
Go
299 lines
13 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 && amd64) || (freebsd && arm64) || (linux && amd64) || (linux && arm64) || (linux && loong64) || (linux && ppc64le) || (linux && riscv64) || (linux && s390x)
|
|
|
|
package sqlite3
|
|
|
|
import (
|
|
"unsafe"
|
|
|
|
"modernc.org/libc"
|
|
)
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** This API allows applications to modify the global configuration of
|
|
// ** the SQLite library at run-time.
|
|
// **
|
|
// ** This routine should only be called when there are no outstanding
|
|
// ** database connections or memory allocations. This routine is not
|
|
// ** threadsafe. Failure to heed these warnings can lead to unpredictable
|
|
// ** behavior.
|
|
// */
|
|
func Xsqlite3_config(tls *libc.TLS, op int32, va uintptr) (r int32) {
|
|
var ap Tva_list
|
|
var bOpenUri, rc int32
|
|
var mxMmap, szMmap Tsqlite3_int64
|
|
var pLogArg, pVal, xLog uintptr
|
|
_, _, _, _, _, _, _, _ = ap, bOpenUri, mxMmap, pLogArg, pVal, rc, szMmap, xLog
|
|
rc = SQLITE_OK
|
|
/* sqlite3_config() normally returns SQLITE_MISUSE if it is invoked while
|
|
** the SQLite library is in use. Except, a few selected opcodes
|
|
** are allowed.
|
|
*/
|
|
if libc.AtomicLoadPInt32(uintptr(unsafe.Pointer(&_sqlite3Config))+340) != 0 {
|
|
if op < 0 || op > int32(63) || libc.Uint64FromInt32(1)<<op&_mAnytimeConfigOption == uint64(0) {
|
|
return _sqlite3MisuseError(tls, int32(187803))
|
|
}
|
|
}
|
|
ap = va
|
|
switch op {
|
|
/* Mutex configuration options are only available in a threadsafe
|
|
** compile.
|
|
*/
|
|
case int32(SQLITE_CONFIG_SINGLETHREAD):
|
|
/* EVIDENCE-OF: R-02748-19096 This option sets the threading mode to
|
|
** Single-thread. */
|
|
_sqlite3Config.FbCoreMutex = uint8(0) /* Disable mutex on core */
|
|
_sqlite3Config.FbFullMutex = uint8(0) /* Disable mutex on connections */
|
|
case int32(SQLITE_CONFIG_MULTITHREAD):
|
|
/* EVIDENCE-OF: R-14374-42468 This option sets the threading mode to
|
|
** Multi-thread. */
|
|
_sqlite3Config.FbCoreMutex = uint8(1) /* Enable mutex on core */
|
|
_sqlite3Config.FbFullMutex = uint8(0) /* Disable mutex on connections */
|
|
case int32(SQLITE_CONFIG_SERIALIZED):
|
|
/* EVIDENCE-OF: R-41220-51800 This option sets the threading mode to
|
|
** Serialized. */
|
|
_sqlite3Config.FbCoreMutex = uint8(1) /* Enable mutex on core */
|
|
_sqlite3Config.FbFullMutex = uint8(1) /* Enable mutex on connections */
|
|
case int32(SQLITE_CONFIG_MUTEX):
|
|
/* Specify an alternative mutex implementation */
|
|
_sqlite3Config.Fmutex = **(**Tsqlite3_mutex_methods)(__ccgo_up(libc.VaUintptr(&ap)))
|
|
case int32(SQLITE_CONFIG_GETMUTEX):
|
|
/* Retrieve the current mutex implementation */
|
|
**(**Tsqlite3_mutex_methods)(__ccgo_up(libc.VaUintptr(&ap))) = _sqlite3Config.Fmutex
|
|
case int32(SQLITE_CONFIG_MALLOC):
|
|
/* EVIDENCE-OF: R-55594-21030 The SQLITE_CONFIG_MALLOC option takes a
|
|
** single argument which is a pointer to an instance of the
|
|
** sqlite3_mem_methods structure. The argument specifies alternative
|
|
** low-level memory allocation routines to be used in place of the memory
|
|
** allocation routines built into SQLite. */
|
|
_sqlite3Config.Fm = **(**Tsqlite3_mem_methods)(__ccgo_up(libc.VaUintptr(&ap)))
|
|
case int32(SQLITE_CONFIG_GETMALLOC):
|
|
/* EVIDENCE-OF: R-51213-46414 The SQLITE_CONFIG_GETMALLOC option takes a
|
|
** single argument which is a pointer to an instance of the
|
|
** sqlite3_mem_methods structure. The sqlite3_mem_methods structure is
|
|
** filled with the currently defined memory allocation routines. */
|
|
if _sqlite3Config.Fm.FxMalloc == uintptr(0) {
|
|
_sqlite3MemSetDefault(tls)
|
|
}
|
|
**(**Tsqlite3_mem_methods)(__ccgo_up(libc.VaUintptr(&ap))) = _sqlite3Config.Fm
|
|
case int32(SQLITE_CONFIG_MEMSTATUS):
|
|
/* Cannot change at runtime */
|
|
/* EVIDENCE-OF: R-61275-35157 The SQLITE_CONFIG_MEMSTATUS option takes
|
|
** single argument of type int, interpreted as a boolean, which enables
|
|
** or disables the collection of memory allocation statistics. */
|
|
_sqlite3Config.FbMemstat = libc.VaInt32(&ap)
|
|
case int32(SQLITE_CONFIG_SMALL_MALLOC):
|
|
_sqlite3Config.FbSmallMalloc = libc.Uint8FromInt32(libc.VaInt32(&ap))
|
|
case int32(SQLITE_CONFIG_PAGECACHE):
|
|
/* EVIDENCE-OF: R-18761-36601 There are three arguments to
|
|
** SQLITE_CONFIG_PAGECACHE: A pointer to 8-byte aligned memory (pMem),
|
|
** the size of each page cache line (sz), and the number of cache lines
|
|
** (N). */
|
|
_sqlite3Config.FpPage = libc.VaUintptr(&ap)
|
|
_sqlite3Config.FszPage = libc.VaInt32(&ap)
|
|
_sqlite3Config.FnPage = libc.VaInt32(&ap)
|
|
case int32(SQLITE_CONFIG_PCACHE_HDRSZ):
|
|
/* EVIDENCE-OF: R-39100-27317 The SQLITE_CONFIG_PCACHE_HDRSZ option takes
|
|
** a single parameter which is a pointer to an integer and writes into
|
|
** that integer the number of extra bytes per page required for each page
|
|
** in SQLITE_CONFIG_PAGECACHE. */
|
|
**(**int32)(__ccgo_up(libc.VaUintptr(&ap))) = _sqlite3HeaderSizeBtree(tls) + _sqlite3HeaderSizePcache(tls) + _sqlite3HeaderSizePcache1(tls)
|
|
case int32(SQLITE_CONFIG_PCACHE):
|
|
/* no-op */
|
|
case int32(SQLITE_CONFIG_GETPCACHE):
|
|
/* now an error */
|
|
rc = int32(SQLITE_ERROR)
|
|
case int32(SQLITE_CONFIG_PCACHE2):
|
|
/* EVIDENCE-OF: R-63325-48378 The SQLITE_CONFIG_PCACHE2 option takes a
|
|
** single argument which is a pointer to an sqlite3_pcache_methods2
|
|
** object. This object specifies the interface to a custom page cache
|
|
** implementation. */
|
|
_sqlite3Config.Fpcache2 = **(**Tsqlite3_pcache_methods2)(__ccgo_up(libc.VaUintptr(&ap)))
|
|
case int32(SQLITE_CONFIG_GETPCACHE2):
|
|
/* EVIDENCE-OF: R-22035-46182 The SQLITE_CONFIG_GETPCACHE2 option takes a
|
|
** single argument which is a pointer to an sqlite3_pcache_methods2
|
|
** object. SQLite copies of the current page cache implementation into
|
|
** that object. */
|
|
if _sqlite3Config.Fpcache2.FxInit == uintptr(0) {
|
|
_sqlite3PCacheSetDefault(tls)
|
|
}
|
|
**(**Tsqlite3_pcache_methods2)(__ccgo_up(libc.VaUintptr(&ap))) = _sqlite3Config.Fpcache2
|
|
break
|
|
/* EVIDENCE-OF: R-06626-12911 The SQLITE_CONFIG_HEAP option is only
|
|
** available if SQLite is compiled with either SQLITE_ENABLE_MEMSYS3 or
|
|
** SQLITE_ENABLE_MEMSYS5 and returns SQLITE_ERROR if invoked otherwise. */
|
|
fallthrough
|
|
case int32(SQLITE_CONFIG_LOOKASIDE):
|
|
_sqlite3Config.FszLookaside = libc.VaInt32(&ap)
|
|
_sqlite3Config.FnLookaside = libc.VaInt32(&ap)
|
|
break
|
|
/* Record a pointer to the logger function and its first argument.
|
|
** The default is NULL. Logging is disabled if the function pointer is
|
|
** NULL.
|
|
*/
|
|
fallthrough
|
|
case int32(SQLITE_CONFIG_LOG):
|
|
xLog = libc.VaUintptr(&ap)
|
|
pLogArg = libc.VaUintptr(&ap)
|
|
libc.AtomicStoreNUintptr(uintptr(unsafe.Pointer(&_sqlite3Config))+376, xLog, libc.Int32FromInt32(__ATOMIC_RELAXED))
|
|
libc.AtomicStoreNUintptr(uintptr(unsafe.Pointer(&_sqlite3Config))+384, pLogArg, libc.Int32FromInt32(__ATOMIC_RELAXED))
|
|
break
|
|
/* EVIDENCE-OF: R-55548-33817 The compile-time setting for URI filenames
|
|
** can be changed at start-time using the
|
|
** sqlite3_config(SQLITE_CONFIG_URI,1) or
|
|
** sqlite3_config(SQLITE_CONFIG_URI,0) configuration calls.
|
|
*/
|
|
fallthrough
|
|
case int32(SQLITE_CONFIG_URI):
|
|
/* EVIDENCE-OF: R-25451-61125 The SQLITE_CONFIG_URI option takes a single
|
|
** argument of type int. If non-zero, then URI handling is globally
|
|
** enabled. If the parameter is zero, then URI handling is globally
|
|
** disabled. */
|
|
bOpenUri = libc.VaInt32(&ap)
|
|
libc.AtomicStoreNUint8(uintptr(unsafe.Pointer(&_sqlite3Config))+6, libc.Uint8FromInt32(bOpenUri), libc.Int32FromInt32(__ATOMIC_RELAXED))
|
|
case int32(SQLITE_CONFIG_COVERING_INDEX_SCAN):
|
|
/* EVIDENCE-OF: R-36592-02772 The SQLITE_CONFIG_COVERING_INDEX_SCAN
|
|
** option takes a single integer argument which is interpreted as a
|
|
** boolean in order to enable or disable the use of covering indices for
|
|
** full table scans in the query optimizer. */
|
|
_sqlite3Config.FbUseCis = libc.Uint8FromInt32(libc.VaInt32(&ap))
|
|
case int32(SQLITE_CONFIG_MMAP_SIZE):
|
|
/* EVIDENCE-OF: R-58063-38258 SQLITE_CONFIG_MMAP_SIZE takes two 64-bit
|
|
** integer (sqlite3_int64) values that are the default mmap size limit
|
|
** (the default setting for PRAGMA mmap_size) and the maximum allowed
|
|
** mmap size limit. */
|
|
szMmap = libc.VaInt64(&ap)
|
|
mxMmap = libc.VaInt64(&ap)
|
|
/* EVIDENCE-OF: R-53367-43190 If either argument to this option is
|
|
** negative, then that argument is changed to its compile-time default.
|
|
**
|
|
** EVIDENCE-OF: R-34993-45031 The maximum allowed mmap size will be
|
|
** silently truncated if necessary so that it does not exceed the
|
|
** compile-time maximum mmap size set by the SQLITE_MAX_MMAP_SIZE
|
|
** compile-time option.
|
|
*/
|
|
if mxMmap < 0 || mxMmap > int64(SQLITE_MAX_MMAP_SIZE) {
|
|
mxMmap = int64(SQLITE_MAX_MMAP_SIZE)
|
|
}
|
|
if szMmap < 0 {
|
|
szMmap = SQLITE_DEFAULT_MMAP_SIZE
|
|
}
|
|
if szMmap > mxMmap {
|
|
szMmap = mxMmap
|
|
}
|
|
_sqlite3Config.FmxMmap = mxMmap
|
|
_sqlite3Config.FszMmap = szMmap
|
|
case int32(SQLITE_CONFIG_PMASZ):
|
|
_sqlite3Config.FszPma = libc.VaUint32(&ap)
|
|
case int32(SQLITE_CONFIG_STMTJRNL_SPILL):
|
|
_sqlite3Config.FnStmtSpill = libc.VaInt32(&ap)
|
|
case int32(SQLITE_CONFIG_MEMDB_MAXSIZE):
|
|
_sqlite3Config.FmxMemdbSize = libc.VaInt64(&ap)
|
|
case int32(SQLITE_CONFIG_ROWID_IN_VIEW):
|
|
pVal = libc.VaUintptr(&ap)
|
|
**(**int32)(__ccgo_up(pVal)) = 0
|
|
default:
|
|
rc = int32(SQLITE_ERROR)
|
|
break
|
|
}
|
|
_ = ap
|
|
return rc
|
|
}
|
|
|
|
// C documentation
|
|
//
|
|
// /* The page getter for when memory-mapped I/O is enabled */
|
|
func _getPageMMap(tls *libc.TLS, pPager uintptr, pgno TPgno, ppPage uintptr, flags int32) (r int32) {
|
|
bp := tls.Alloc(32)
|
|
defer tls.Free(32)
|
|
var bMmapOk, rc int32
|
|
var _ /* iFrame at bp+8 */ Tu32
|
|
var _ /* pData at bp+16 */ uintptr
|
|
var _ /* pPg at bp+0 */ uintptr
|
|
_, _ = bMmapOk, rc
|
|
rc = SQLITE_OK
|
|
**(**uintptr)(__ccgo_up(bp)) = uintptr(0)
|
|
**(**Tu32)(__ccgo_up(bp + 8)) = uint32(0) /* Frame to read from WAL file */
|
|
/* It is acceptable to use a read-only (mmap) page for any page except
|
|
** page 1 if there is no write-transaction open or the ACQUIRE_READONLY
|
|
** flag was specified by the caller. And so long as the db is not a
|
|
** temporary or in-memory database. */
|
|
bMmapOk = libc.BoolInt32(pgno > uint32(1) && (libc.Int32FromUint8((*TPager)(unsafe.Pointer(pPager)).FeState) == int32(PAGER_READER) || flags&int32(PAGER_GET_READONLY) != 0))
|
|
/* Optimization note: Adding the "pgno<=1" term before "pgno==0" here
|
|
** allows the compiler optimizer to reuse the results of the "pgno>1"
|
|
** test in the previous statement, and avoid testing pgno==0 in the
|
|
** common case where pgno is large. */
|
|
if pgno <= uint32(1) && pgno == uint32(0) {
|
|
return _sqlite3CorruptError(tls, int32(65348))
|
|
}
|
|
if bMmapOk != 0 && (*TPager)(unsafe.Pointer(pPager)).FpWal != uintptr(0) {
|
|
rc = _sqlite3WalFindFrame(tls, (*TPager)(unsafe.Pointer(pPager)).FpWal, pgno, bp+8)
|
|
if rc != SQLITE_OK {
|
|
**(**uintptr)(__ccgo_up(ppPage)) = uintptr(0)
|
|
return rc
|
|
}
|
|
}
|
|
if bMmapOk != 0 && **(**Tu32)(__ccgo_up(bp + 8)) == uint32(0) {
|
|
**(**uintptr)(__ccgo_up(bp + 16)) = uintptr(0)
|
|
rc = _sqlite3OsFetch(tls, (*TPager)(unsafe.Pointer(pPager)).Ffd, libc.Int64FromUint32(pgno-libc.Uint32FromInt32(1))*(*TPager)(unsafe.Pointer(pPager)).FpageSize, int32((*TPager)(unsafe.Pointer(pPager)).FpageSize), bp+16)
|
|
if rc == SQLITE_OK && **(**uintptr)(__ccgo_up(bp + 16)) != 0 {
|
|
if libc.Int32FromUint8((*TPager)(unsafe.Pointer(pPager)).FeState) > int32(PAGER_READER) || (*TPager)(unsafe.Pointer(pPager)).FtempFile != 0 {
|
|
**(**uintptr)(__ccgo_up(bp)) = _sqlite3PagerLookup(tls, pPager, pgno)
|
|
}
|
|
if **(**uintptr)(__ccgo_up(bp)) == uintptr(0) {
|
|
rc = _pagerAcquireMapPage(tls, pPager, pgno, **(**uintptr)(__ccgo_up(bp + 16)), bp)
|
|
} else {
|
|
_sqlite3OsUnfetch(tls, (*TPager)(unsafe.Pointer(pPager)).Ffd, libc.Int64FromUint32(pgno-libc.Uint32FromInt32(1))*(*TPager)(unsafe.Pointer(pPager)).FpageSize, **(**uintptr)(__ccgo_up(bp + 16)))
|
|
}
|
|
if **(**uintptr)(__ccgo_up(bp)) != 0 {
|
|
**(**uintptr)(__ccgo_up(ppPage)) = **(**uintptr)(__ccgo_up(bp))
|
|
return SQLITE_OK
|
|
}
|
|
}
|
|
if rc != SQLITE_OK {
|
|
**(**uintptr)(__ccgo_up(ppPage)) = uintptr(0)
|
|
return rc
|
|
}
|
|
}
|
|
return _getPageNormal(tls, pPager, pgno, ppPage, flags)
|
|
}
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** If pFd->sectorSize is non-zero when this function is called, it is a
|
|
// ** no-op. Otherwise, the values of pFd->sectorSize and
|
|
// ** pFd->deviceCharacteristics are set according to the file-system
|
|
// ** characteristics.
|
|
// **
|
|
// ** There are two versions of this function. One for QNX and one for all
|
|
// ** other systems.
|
|
// */
|
|
func _setDeviceCharacteristics(tls *libc.TLS, pFd uintptr) {
|
|
if (*TunixFile)(unsafe.Pointer(pFd)).FsectorSize == 0 {
|
|
/* Set the POWERSAFE_OVERWRITE flag if requested. */
|
|
if libc.Int32FromUint16((*TunixFile)(unsafe.Pointer(pFd)).FctrlFlags)&int32(UNIXFILE_PSOW) != 0 {
|
|
**(**int32)(__ccgo_up(pFd + 116)) |= int32(SQLITE_IOCAP_POWERSAFE_OVERWRITE)
|
|
}
|
|
**(**int32)(__ccgo_up(pFd + 116)) |= int32(SQLITE_IOCAP_SUBPAGE_READ)
|
|
(*TunixFile)(unsafe.Pointer(pFd)).FsectorSize = int32(SQLITE_DEFAULT_SECTOR_SIZE)
|
|
}
|
|
}
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** If it is currently memory mapped, unmap file pFd.
|
|
// */
|
|
func _unixUnmapfile(tls *libc.TLS, pFd uintptr) {
|
|
if (*TunixFile)(unsafe.Pointer(pFd)).FpMapRegion != 0 {
|
|
(*(*func(*libc.TLS, uintptr, Tsize_t) int32)(unsafe.Pointer(&struct{ uintptr }{_aSyscall[int32(23)].FpCurrent})))(tls, (*TunixFile)(unsafe.Pointer(pFd)).FpMapRegion, libc.Uint64FromInt64((*TunixFile)(unsafe.Pointer(pFd)).FmmapSizeActual))
|
|
(*TunixFile)(unsafe.Pointer(pFd)).FpMapRegion = uintptr(0)
|
|
(*TunixFile)(unsafe.Pointer(pFd)).FmmapSize = 0
|
|
(*TunixFile)(unsafe.Pointer(pFd)).FmmapSizeActual = 0
|
|
}
|
|
}
|