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>
161 lines
6.3 KiB
Go
161 lines
6.3 KiB
Go
// Code generated by modernc.org/undup from the per-target sqlite_*.go files; DO NOT EDIT.
|
|
|
|
//go:build (freebsd && amd64) || (freebsd && arm64) || (netbsd && amd64) || (openbsd && amd64) || (openbsd && arm64) || (windows && (amd64 || arm64))
|
|
|
|
package sqlite3
|
|
|
|
import (
|
|
"unsafe"
|
|
|
|
"modernc.org/libc"
|
|
)
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** Initialize SQLite.
|
|
// **
|
|
// ** This routine must be called to initialize the memory allocation,
|
|
// ** VFS, and mutex subsystems prior to doing any serious work with
|
|
// ** SQLite. But as long as you do not compile with SQLITE_OMIT_AUTOINIT
|
|
// ** this routine will be called automatically by key routines such as
|
|
// ** sqlite3_open().
|
|
// **
|
|
// ** This routine is a no-op except on its very first call for the process,
|
|
// ** or for the first call after a call to sqlite3_shutdown.
|
|
// **
|
|
// ** The first thread to call this routine runs the initialization to
|
|
// ** completion. If subsequent threads call this routine before the first
|
|
// ** thread has finished the initialization process, then the subsequent
|
|
// ** threads must block until the first thread finishes with the initialization.
|
|
// **
|
|
// ** The first thread might call this routine recursively. Recursive
|
|
// ** calls to this routine should not block, of course. Otherwise the
|
|
// ** initialization process would never complete.
|
|
// **
|
|
// ** Let X be the first thread to enter this routine. Let Y be some other
|
|
// ** thread. Then while the initial invocation of this routine by X is
|
|
// ** incomplete, it is required that:
|
|
// **
|
|
// ** * Calls to this routine from Y must block until the outer-most
|
|
// ** call by X completes.
|
|
// **
|
|
// ** * Recursive calls to this routine from thread X return immediately
|
|
// ** without blocking.
|
|
// */
|
|
func Xsqlite3_initialize(tls *libc.TLS) (r int32) {
|
|
var pMainMtx uintptr
|
|
var rc int32
|
|
_, _ = pMainMtx, rc /* Result code */
|
|
/* If the following assert() fails on some obscure processor/compiler
|
|
** combination, the work-around is to set the correct pointer
|
|
** size at compile-time using -DSQLITE_PTRSIZE=n compile-time option */
|
|
/* If SQLite is already completely initialized, then this call
|
|
** to sqlite3_initialize() should be a no-op. But the initialization
|
|
** must be complete. So isInit must not be set until the very end
|
|
** of this routine.
|
|
*/
|
|
if libc.AtomicLoadPInt32(uintptr(unsafe.Pointer(&_sqlite3Config))+340) != 0 {
|
|
return SQLITE_OK
|
|
}
|
|
/* Make sure the mutex subsystem is initialized. If unable to
|
|
** initialize the mutex subsystem, return early with the error.
|
|
** If the system is so sick that we are unable to allocate a mutex,
|
|
** there is not much SQLite is going to be able to do.
|
|
**
|
|
** The mutex subsystem must take care of serializing its own
|
|
** initialization.
|
|
*/
|
|
rc = _sqlite3MutexInit(tls)
|
|
if rc != 0 {
|
|
return rc
|
|
}
|
|
/* Initialize the malloc() system and the recursive pInitMutex mutex.
|
|
** This operation is protected by the STATIC_MAIN mutex. Note that
|
|
** MutexAlloc() is called for a static mutex prior to initializing the
|
|
** malloc subsystem - this implies that the allocation of a static
|
|
** mutex must not require support from the malloc subsystem.
|
|
*/
|
|
pMainMtx = _sqlite3MutexAlloc(tls, int32(SQLITE_MUTEX_STATIC_MAIN))
|
|
Xsqlite3_mutex_enter(tls, pMainMtx)
|
|
_sqlite3Config.FisMutexInit = int32(1)
|
|
if !(_sqlite3Config.FisMallocInit != 0) {
|
|
rc = _sqlite3MallocInit(tls)
|
|
}
|
|
if rc == SQLITE_OK {
|
|
_sqlite3Config.FisMallocInit = int32(1)
|
|
if !(_sqlite3Config.FpInitMutex != 0) {
|
|
_sqlite3Config.FpInitMutex = _sqlite3MutexAlloc(tls, int32(SQLITE_MUTEX_RECURSIVE))
|
|
if _sqlite3Config.FbCoreMutex != 0 && !(_sqlite3Config.FpInitMutex != 0) {
|
|
rc = int32(SQLITE_NOMEM)
|
|
}
|
|
}
|
|
}
|
|
if rc == SQLITE_OK {
|
|
_sqlite3Config.FnRefInitMutex = _sqlite3Config.FnRefInitMutex + 1
|
|
}
|
|
Xsqlite3_mutex_leave(tls, pMainMtx)
|
|
/* If rc is not SQLITE_OK at this point, then either the malloc
|
|
** subsystem could not be initialized or the system failed to allocate
|
|
** the pInitMutex mutex. Return an error in either case. */
|
|
if rc != SQLITE_OK {
|
|
return rc
|
|
}
|
|
/* Do the rest of the initialization under the recursive mutex so
|
|
** that we will be able to handle recursive calls into
|
|
** sqlite3_initialize(). The recursive calls normally come through
|
|
** sqlite3_os_init() when it invokes sqlite3_vfs_register(), but other
|
|
** recursive calls might also be possible.
|
|
**
|
|
** IMPLEMENTATION-OF: R-00140-37445 SQLite automatically serializes calls
|
|
** to the xInit method, so the xInit method need not be threadsafe.
|
|
**
|
|
** The following mutex is what serializes access to the appdef pcache xInit
|
|
** methods. The sqlite3_pcache_methods.xInit() all is embedded in the
|
|
** call to sqlite3PcacheInitialize().
|
|
*/
|
|
Xsqlite3_mutex_enter(tls, _sqlite3Config.FpInitMutex)
|
|
if libc.AtomicLoadPInt32(uintptr(unsafe.Pointer(&_sqlite3Config))+340) == 0 && _sqlite3Config.FinProgress == 0 {
|
|
_sqlite3Config.FinProgress = int32(1)
|
|
libc.Xmemset(tls, uintptr(unsafe.Pointer(&_sqlite3BuiltinFunctions)), 0, uint64(184))
|
|
_sqlite3RegisterBuiltinFunctions(tls)
|
|
if _sqlite3Config.FisPCacheInit == 0 {
|
|
rc = _sqlite3PcacheInitialize(tls)
|
|
}
|
|
if rc == SQLITE_OK {
|
|
_sqlite3Config.FisPCacheInit = int32(1)
|
|
rc = _sqlite3OsInit(tls)
|
|
}
|
|
if rc == SQLITE_OK {
|
|
rc = _sqlite3MemdbInit(tls)
|
|
}
|
|
if rc == SQLITE_OK {
|
|
_sqlite3PCacheBufferSetup(tls, _sqlite3Config.FpPage, _sqlite3Config.FszPage, _sqlite3Config.FnPage)
|
|
}
|
|
if rc == SQLITE_OK {
|
|
libc.AtomicStorePInt32(uintptr(unsafe.Pointer(&_sqlite3Config))+340, int32(1))
|
|
}
|
|
_sqlite3Config.FinProgress = 0
|
|
}
|
|
Xsqlite3_mutex_leave(tls, _sqlite3Config.FpInitMutex)
|
|
/* Go back under the static mutex and clean up the recursive
|
|
** mutex to prevent a resource leak.
|
|
*/
|
|
Xsqlite3_mutex_enter(tls, pMainMtx)
|
|
_sqlite3Config.FnRefInitMutex = _sqlite3Config.FnRefInitMutex - 1
|
|
if _sqlite3Config.FnRefInitMutex <= 0 {
|
|
Xsqlite3_mutex_free(tls, _sqlite3Config.FpInitMutex)
|
|
_sqlite3Config.FpInitMutex = uintptr(0)
|
|
}
|
|
Xsqlite3_mutex_leave(tls, pMainMtx)
|
|
/* The following is just a sanity check to make sure SQLite has
|
|
** been compiled correctly. It is important to run this code, but
|
|
** we don't want to run it too often and soak up CPU cycles for no
|
|
** reason. So we run it once during initialization.
|
|
*/
|
|
/* Do extra initialization steps requested by the SQLITE_EXTRA_INIT
|
|
** compile-time option.
|
|
*/
|
|
return rc
|
|
}
|