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>
308 lines
11 KiB
Go
308 lines
11 KiB
Go
// Code generated by modernc.org/undup from the per-target sqlite_*.go files; DO NOT EDIT.
|
|
|
|
//go:build (freebsd && amd64) || (linux && amd64) || (linux && loong64) || (netbsd && amd64) || (openbsd && amd64) || (windows && (amd64 || arm64))
|
|
|
|
package sqlite3
|
|
|
|
import (
|
|
"unsafe"
|
|
|
|
"modernc.org/libc"
|
|
)
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** Generate code for the RETURNING trigger. Unlike other triggers
|
|
// ** that invoke a subprogram in the bytecode, the code for RETURNING
|
|
// ** is generated in-line.
|
|
// */
|
|
func _codeReturningTrigger(tls *libc.TLS, pParse uintptr, pTrigger uintptr, pTab uintptr, regIn int32) {
|
|
bp := tls.Alloc(272)
|
|
defer tls.Free(272)
|
|
var db, pCol, pFrom, pNew, pReturning, v, v2 uintptr
|
|
var i, nCol, reg, v1 int32
|
|
var _ /* sNC at bp+208 */ TNameContext
|
|
var _ /* sSelect at bp+0 */ TSelect
|
|
var _ /* uSrc at bp+120 */ struct {
|
|
FfromSpace [0][88]Tu8
|
|
FsSrc TSrcList
|
|
F__ccgo_pad2 [80]byte
|
|
}
|
|
_, _, _, _, _, _, _, _, _, _, _ = db, i, nCol, pCol, pFrom, pNew, pReturning, reg, v, v1, v2
|
|
v = (*TParse)(unsafe.Pointer(pParse)).FpVdbe
|
|
db = (*TParse)(unsafe.Pointer(pParse)).Fdb
|
|
if !(int32(Tbft(*(*uint16)(unsafe.Pointer(pParse + 40))&0x8>>3)) != 0) {
|
|
/* This RETURNING trigger must be for a different statement as
|
|
** this statement lacks a RETURNING clause. */
|
|
return
|
|
}
|
|
pReturning = (*(*struct {
|
|
FpReturning uintptr
|
|
})(unsafe.Pointer(&(*TParse)(unsafe.Pointer(pParse)).Fu1))).FpReturning
|
|
if pTrigger != pReturning+16 {
|
|
/* This RETURNING trigger is for a different statement */
|
|
return
|
|
}
|
|
libc.Xmemset(tls, bp, 0, uint64(120))
|
|
libc.Xmemset(tls, bp+120, 0, uint64(88))
|
|
pFrom = bp + 120
|
|
(**(**TSelect)(__ccgo_up(bp))).FpEList = _sqlite3ExprListDup(tls, db, (*TReturning)(unsafe.Pointer(pReturning)).FpReturnEL, 0)
|
|
(**(**TSelect)(__ccgo_up(bp))).FpSrc = pFrom
|
|
(*TSrcList)(unsafe.Pointer(pFrom)).FnSrc = int32(1)
|
|
(*(*TSrcItem)(unsafe.Pointer(pFrom + 8))).FpSTab = pTab
|
|
(*(*TSrcItem)(unsafe.Pointer(pFrom + 8))).FzName = (*TTable)(unsafe.Pointer(pTab)).FzName /* tag-20240424-1 */
|
|
(*(*TSrcItem)(unsafe.Pointer(pFrom + 8))).FiCursor = -int32(1)
|
|
_sqlite3SelectPrep(tls, pParse, bp, uintptr(0))
|
|
if (*TParse)(unsafe.Pointer(pParse)).FnErr == 0 {
|
|
_sqlite3GenerateColumnNames(tls, pParse, bp)
|
|
}
|
|
_sqlite3ExprListDelete(tls, db, (**(**TSelect)(__ccgo_up(bp))).FpEList)
|
|
pNew = _sqlite3ExpandReturning(tls, pParse, (*TReturning)(unsafe.Pointer(pReturning)).FpReturnEL, pTab)
|
|
if (*TParse)(unsafe.Pointer(pParse)).FnErr == 0 {
|
|
libc.Xmemset(tls, bp+208, 0, uint64(56))
|
|
if (*TReturning)(unsafe.Pointer(pReturning)).FnRetCol == 0 {
|
|
(*TReturning)(unsafe.Pointer(pReturning)).FnRetCol = (*TExprList)(unsafe.Pointer(pNew)).FnExpr
|
|
v2 = pParse + 56
|
|
v1 = *(*int32)(unsafe.Pointer(v2))
|
|
*(*int32)(unsafe.Pointer(v2)) = *(*int32)(unsafe.Pointer(v2)) + 1
|
|
(*TReturning)(unsafe.Pointer(pReturning)).FiRetCur = v1
|
|
}
|
|
(**(**TNameContext)(__ccgo_up(bp + 208))).FpParse = pParse
|
|
*(*int32)(unsafe.Pointer(bp + 208 + 16)) = regIn
|
|
(**(**TNameContext)(__ccgo_up(bp + 208))).FncFlags = int32(NC_UBaseReg)
|
|
(*TParse)(unsafe.Pointer(pParse)).FeTriggerOp = (*TTrigger)(unsafe.Pointer(pTrigger)).Fop
|
|
(*TParse)(unsafe.Pointer(pParse)).FpTriggerTab = pTab
|
|
if _sqlite3ResolveExprListNames(tls, bp+208, pNew) == SQLITE_OK && !((*Tsqlite3)(unsafe.Pointer(db)).FmallocFailed != 0) {
|
|
nCol = (*TExprList)(unsafe.Pointer(pNew)).FnExpr
|
|
reg = (*TParse)(unsafe.Pointer(pParse)).FnMem + int32(1)
|
|
_sqlite3ProcessReturningSubqueries(tls, pNew, pTab)
|
|
**(**int32)(__ccgo_up(pParse + 60)) += nCol + int32(2)
|
|
(*TReturning)(unsafe.Pointer(pReturning)).FiRetReg = reg
|
|
i = 0
|
|
for {
|
|
if !(i < nCol) {
|
|
break
|
|
}
|
|
pCol = (*(*TExprList_item)(unsafe.Pointer(pNew + 8 + uintptr(i)*32))).FpExpr
|
|
/* Due to !db->mallocFailed ~9 lines above */
|
|
_sqlite3ExprCodeFactorable(tls, pParse, pCol, reg+i)
|
|
if int32(_sqlite3ExprAffinity(tls, pCol)) == int32(SQLITE_AFF_REAL) {
|
|
_sqlite3VdbeAddOp1(tls, v, int32(OP_RealAffinity), reg+i)
|
|
}
|
|
goto _3
|
|
_3:
|
|
;
|
|
i = i + 1
|
|
}
|
|
_sqlite3VdbeAddOp3(tls, v, int32(OP_MakeRecord), reg, i, reg+i)
|
|
_sqlite3VdbeAddOp2(tls, v, int32(OP_NewRowid), (*TReturning)(unsafe.Pointer(pReturning)).FiRetCur, reg+i+int32(1))
|
|
_sqlite3VdbeAddOp3(tls, v, int32(OP_Insert), (*TReturning)(unsafe.Pointer(pReturning)).FiRetCur, reg+i, reg+i+int32(1))
|
|
}
|
|
}
|
|
_sqlite3ExprListDelete(tls, db, pNew)
|
|
(*TParse)(unsafe.Pointer(pParse)).FeTriggerOp = uint8(0)
|
|
(*TParse)(unsafe.Pointer(pParse)).FpTriggerTab = uintptr(0)
|
|
}
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** Process time function arguments. argv[0] is a date-time stamp.
|
|
// ** argv[1] and following are modifiers. Parse them all and write
|
|
// ** the resulting time into the DateTime structure p. Return 0
|
|
// ** on success and 1 if there are any errors.
|
|
// **
|
|
// ** If there are zero parameters (if even argv[0] is undefined)
|
|
// ** then assume a default value of "now" for argv[0].
|
|
// */
|
|
func _isDate(tls *libc.TLS, context uintptr, argc int32, argv uintptr, p uintptr) (r int32) {
|
|
var eType, i, n, v1 int32
|
|
var z uintptr
|
|
_, _, _, _, _ = eType, i, n, z, v1
|
|
libc.Xmemset(tls, p, 0, uint64(48))
|
|
if argc == 0 {
|
|
if !(_sqlite3NotPureFunc(tls, context) != 0) {
|
|
return int32(1)
|
|
}
|
|
return _setDateTimeToCurrent(tls, context, p)
|
|
}
|
|
v1 = Xsqlite3_value_type(tls, **(**uintptr)(__ccgo_up(argv)))
|
|
eType = v1
|
|
if v1 == int32(SQLITE_FLOAT) || eType == int32(SQLITE_INTEGER) {
|
|
_setRawDateNumber(tls, p, Xsqlite3_value_double(tls, **(**uintptr)(__ccgo_up(argv))))
|
|
} else {
|
|
z = Xsqlite3_value_text(tls, **(**uintptr)(__ccgo_up(argv)))
|
|
if !(z != 0) || _parseDateOrTime(tls, context, z, p) != 0 {
|
|
return int32(1)
|
|
}
|
|
}
|
|
i = int32(1)
|
|
for {
|
|
if !(i < argc) {
|
|
break
|
|
}
|
|
z = Xsqlite3_value_text(tls, **(**uintptr)(__ccgo_up(argv + uintptr(i)*8)))
|
|
n = Xsqlite3_value_bytes(tls, **(**uintptr)(__ccgo_up(argv + uintptr(i)*8)))
|
|
if z == uintptr(0) || _parseModifier(tls, context, z, n, p, i) != 0 {
|
|
return int32(1)
|
|
}
|
|
goto _2
|
|
_2:
|
|
;
|
|
i = i + 1
|
|
}
|
|
_computeJD(tls, p)
|
|
if int32(uint32(*(*uint8)(unsafe.Pointer(p + 44))&0x2>>1)) != 0 || !(_validJulianDay(tls, (*TDateTime)(unsafe.Pointer(p)).FiJD) != 0) {
|
|
return int32(1)
|
|
}
|
|
if argc == int32(1) && (*TDateTime)(unsafe.Pointer(p)).FvalidYMD != 0 && (*TDateTime)(unsafe.Pointer(p)).FD > int32(28) {
|
|
/* Make sure a YYYY-MM-DD is normalized.
|
|
** Example: 2023-02-31 -> 2023-03-03 */
|
|
(*TDateTime)(unsafe.Pointer(p)).FvalidYMD = 0
|
|
}
|
|
return 0
|
|
}
|
|
|
|
/*
|
|
** The following routines implement the various date and time functions
|
|
** of SQLite.
|
|
*/
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** This method works for both json_group_array() and json_group_object().
|
|
// ** It works by removing the first element of the group by searching forward
|
|
// ** to the first comma (",") that is not within a string and deleting all
|
|
// ** text through that comma.
|
|
// */
|
|
func _jsonGroupInverse(tls *libc.TLS, ctx uintptr, argc int32, argv uintptr) {
|
|
var c, v2 int8
|
|
var i uint32
|
|
var inStr, nNest int32
|
|
var pStr, z uintptr
|
|
var v3 bool
|
|
_, _, _, _, _, _, _, _ = c, i, inStr, nNest, pStr, z, v2, v3
|
|
inStr = 0
|
|
nNest = 0
|
|
_ = argc
|
|
_ = argv
|
|
pStr = Xsqlite3_aggregate_context(tls, ctx, 0)
|
|
/* pStr is always non-NULL since jsonArrayStep() or jsonObjectStep() will
|
|
** always have been called to initialize it */
|
|
if !(pStr != 0) {
|
|
return
|
|
}
|
|
z = (*TJsonString)(unsafe.Pointer(pStr)).FzBuf
|
|
i = uint32(1)
|
|
for {
|
|
if v3 = uint64(i) < (*TJsonString)(unsafe.Pointer(pStr)).FnUsed; v3 {
|
|
v2 = **(**int8)(__ccgo_up(z + uintptr(i)))
|
|
c = v2
|
|
}
|
|
if !(v3 && (int32(v2) != int32(',') || inStr != 0 || nNest != 0)) {
|
|
break
|
|
}
|
|
if int32(c) == int32('"') {
|
|
inStr = libc.BoolInt32(!(inStr != 0))
|
|
} else {
|
|
if int32(c) == int32('\\') {
|
|
i = i + 1
|
|
} else {
|
|
if !(inStr != 0) {
|
|
if int32(c) == int32('{') || int32(c) == int32('[') {
|
|
nNest = nNest + 1
|
|
}
|
|
if int32(c) == int32('}') || int32(c) == int32(']') {
|
|
nNest = nNest - 1
|
|
}
|
|
}
|
|
}
|
|
}
|
|
goto _1
|
|
_1:
|
|
;
|
|
i = i + 1
|
|
}
|
|
if uint64(i) < (*TJsonString)(unsafe.Pointer(pStr)).FnUsed {
|
|
**(**Tu64)(__ccgo_up(pStr + 24)) -= uint64(i)
|
|
libc.Xmemmove(tls, z+1, z+uintptr(i+uint32(1)), (*TJsonString)(unsafe.Pointer(pStr)).FnUsed-uint64(1))
|
|
**(**int8)(__ccgo_up(z + uintptr((*TJsonString)(unsafe.Pointer(pStr)).FnUsed))) = 0
|
|
} else {
|
|
(*TJsonString)(unsafe.Pointer(pStr)).FnUsed = uint64(1)
|
|
}
|
|
}
|
|
|
|
func _sqlite3DbStrNDup(tls *libc.TLS, db uintptr, z uintptr, n Tu64) (r uintptr) {
|
|
var zNew, v1 uintptr
|
|
_, _ = zNew, v1
|
|
if z != 0 {
|
|
v1 = _sqlite3DbMallocRawNN(tls, db, n+uint64(1))
|
|
} else {
|
|
v1 = uintptr(0)
|
|
}
|
|
zNew = v1
|
|
if zNew != 0 {
|
|
libc.Xmemcpy(tls, zNew, z, n)
|
|
**(**int8)(__ccgo_up(zNew + uintptr(n))) = 0
|
|
}
|
|
return zNew
|
|
}
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** Run the parser and code generator recursively in order to generate
|
|
// ** code for the SQL statement given onto the end of the pParse context
|
|
// ** currently under construction. Notes:
|
|
// **
|
|
// ** * The final OP_Halt is not appended and other initialization
|
|
// ** and finalization steps are omitted because those are handling by the
|
|
// ** outermost parser.
|
|
// **
|
|
// ** * Built-in SQL functions always take precedence over application-defined
|
|
// ** SQL functions. In other words, it is not possible to override a
|
|
// ** built-in function.
|
|
// */
|
|
func _sqlite3NestedParse(tls *libc.TLS, pParse uintptr, zFormat uintptr, va uintptr) {
|
|
bp := tls.Alloc(144)
|
|
defer tls.Free(144)
|
|
var ap Tva_list
|
|
var db, zSql uintptr
|
|
var savedDbFlags Tu32
|
|
var _ /* saveBuf at bp+0 */ [136]int8
|
|
_, _, _, _ = ap, db, savedDbFlags, zSql
|
|
db = (*TParse)(unsafe.Pointer(pParse)).Fdb
|
|
savedDbFlags = (*Tsqlite3)(unsafe.Pointer(db)).FmDbFlags
|
|
if (*TParse)(unsafe.Pointer(pParse)).FnErr != 0 {
|
|
return
|
|
}
|
|
if (*TParse)(unsafe.Pointer(pParse)).FeParseMode != 0 {
|
|
return
|
|
}
|
|
/* Nesting should only be of limited depth */
|
|
ap = va
|
|
zSql = _sqlite3VMPrintf(tls, db, zFormat, ap)
|
|
_ = ap
|
|
if zSql == uintptr(0) {
|
|
/* This can result either from an OOM or because the formatted string
|
|
** exceeds SQLITE_LIMIT_LENGTH. In the latter case, we need to set
|
|
** an error */
|
|
if !((*Tsqlite3)(unsafe.Pointer(db)).FmallocFailed != 0) {
|
|
(*TParse)(unsafe.Pointer(pParse)).Frc = int32(SQLITE_TOOBIG)
|
|
}
|
|
(*TParse)(unsafe.Pointer(pParse)).FnErr = (*TParse)(unsafe.Pointer(pParse)).FnErr + 1
|
|
return
|
|
}
|
|
(*TParse)(unsafe.Pointer(pParse)).Fnested = (*TParse)(unsafe.Pointer(pParse)).Fnested + 1
|
|
libc.Xmemcpy(tls, bp, pParse+uintptr(uint64(libc.UintptrFromInt32(0)+288)), libc.Uint64FromInt64(424)-uint64(libc.UintptrFromInt32(0)+288))
|
|
libc.Xmemset(tls, pParse+uintptr(uint64(libc.UintptrFromInt32(0)+288)), 0, libc.Uint64FromInt64(424)-uint64(libc.UintptrFromInt32(0)+288))
|
|
**(**Tu32)(__ccgo_up(db + 44)) |= uint32(DBFLAG_PreferBuiltin)
|
|
_sqlite3RunParser(tls, pParse, zSql)
|
|
(*Tsqlite3)(unsafe.Pointer(db)).FmDbFlags = savedDbFlags
|
|
_sqlite3DbFree(tls, db, zSql)
|
|
libc.Xmemcpy(tls, pParse+uintptr(uint64(libc.UintptrFromInt32(0)+288)), bp, libc.Uint64FromInt64(424)-uint64(libc.UintptrFromInt32(0)+288))
|
|
(*TParse)(unsafe.Pointer(pParse)).Fnested = (*TParse)(unsafe.Pointer(pParse)).Fnested - 1
|
|
}
|