Files
Maven/vendor/modernc.org/sqlite/lib/sqlite_g_0000000000013b30.go
T
kami 6c92f85d10 feat(ecosystem): compliant Praxis/Hexis integration + vendored build
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>
2026-07-19 20:24:33 +04:00

5144 lines
147 KiB
Go

// Code generated by modernc.org/undup from the per-target sqlite_*.go files; DO NOT EDIT.
//go:build (freebsd && arm) || (freebsd && arm64) || (linux && arm) || (linux && arm64) || (linux && ppc64le) || (linux && riscv64) || (linux && s390x) || (openbsd && arm64)
package sqlite3
import (
"unsafe"
"modernc.org/libc"
)
// C documentation
//
// /* The DblquoteStr object holds the text of a double-quoted
// ** string for a prepared statement. A linked list of these objects
// ** is constructed during statement parsing and is held on Vdbe.pDblStr.
// ** When computing a normalized SQL statement for an SQL statement, that
// ** list is consulted for each double-quoted identifier to see if the
// ** identifier should really be a string literal.
// */
type TDblquoteStr = struct {
FpNextStr uintptr
Fz [8]uint8
}
type TFpDecode = struct {
Fn int32
FiDP int32
Fz uintptr
FzBuf [21]uint8
Fsign uint8
FisSpecial uint8
}
// C documentation
//
// /*
// ** Extra floating-point literals to allow in JSON.
// */
type TNanInfName = struct {
Fc1 uint8
Fc2 uint8
Fn uint8
FeType uint8
FnRepl uint8
FzMatch uintptr
FzRepl uintptr
}
type TPorterTokenizer = struct {
Ftokenizer_v2 Tfts5_tokenizer_v2
FpTokenizer uintptr
FaBuf [128]uint8
}
type TReturning = struct {
FpParse uintptr
FpReturnEL uintptr
FretTrig TTrigger
FretTStep TTriggerStep
FiRetCur int32
FnRetCol int32
FiRetReg int32
FzName [40]uint8
}
type TWhereScan = struct {
FpOrigWC uintptr
FpWC uintptr
FzCollName uintptr
FpIdxExpr uintptr
Fk int32
FopMask Tu32
Fidxaff uint8
FiEquiv uint8
FnEquiv uint8
FaiCur [11]int32
FaiColumn [11]Ti16
}
// C documentation
//
// /*
// ** Each builtin conversion character (ex: the 'd' in "%d") is described
// ** by an instance of the following structure
// */
type Tet_info = struct {
Ffmttype uint8
Fbase TetByte
Fflags TetByte
Ftype1 TetByte
Fcharset TetByte
Fprefix TetByte
FiNxt uint8
}
func Xsqlite3_filename_journal(tls *libc.TLS, zFilename uintptr) (r uintptr) {
if zFilename == uintptr(0) {
return uintptr(0)
}
zFilename = _databaseName(tls, zFilename)
zFilename = zFilename + uintptr(_sqlite3Strlen30(tls, zFilename)+int32(1))
for zFilename != 0 && **(**uint8)(__ccgo_up(zFilename)) != 0 {
zFilename = zFilename + uintptr(_sqlite3Strlen30(tls, zFilename)+int32(1))
zFilename = zFilename + uintptr(_sqlite3Strlen30(tls, zFilename)+int32(1))
}
return zFilename + uintptr(1)
}
func Xsqlite3_snprintf(tls *libc.TLS, n int32, zBuf uintptr, zFormat uintptr, va uintptr) (r uintptr) {
bp := tls.Alloc(32)
defer tls.Free(32)
var ap Tva_list
var _ /* acc at bp+0 */ TStrAccum
_ = ap
if n <= 0 {
return zBuf
}
_sqlite3StrAccumInit(tls, bp, uintptr(0), zBuf, n, 0)
ap = va
Xsqlite3_str_vappendf(tls, bp, zFormat, ap)
_ = ap
**(**uint8)(__ccgo_up(zBuf + uintptr((**(**TStrAccum)(__ccgo_up(bp))).FnChar))) = uint8(0)
return zBuf
}
/* Maximum size of an sqlite3_log() message. */
// C documentation
//
// /* Truncate the text of the string to be no more than N bytes. */
func Xsqlite3_str_truncate(tls *libc.TLS, p uintptr, N int32) {
if p != uintptr(0) && N >= 0 && libc.Uint32FromInt32(N) < (*Tsqlite3_str)(unsafe.Pointer(p)).FnChar {
(*Tsqlite3_str)(unsafe.Pointer(p)).FnChar = libc.Uint32FromInt32(N)
**(**uint8)(__ccgo_up((*Tsqlite3_str)(unsafe.Pointer(p)).FzText + uintptr((*Tsqlite3_str)(unsafe.Pointer(p)).FnChar))) = uint8(0)
}
}
// C documentation
//
// /* Return the current value for p */
func Xsqlite3_str_value(tls *libc.TLS, p uintptr) (r uintptr) {
if p == uintptr(0) || (*Tsqlite3_str)(unsafe.Pointer(p)).FnChar == uint32(0) {
return uintptr(0)
}
**(**uint8)(__ccgo_up((*Tsqlite3_str)(unsafe.Pointer(p)).FzText + uintptr((*Tsqlite3_str)(unsafe.Pointer(p)).FnChar))) = uint8(0)
return (*Tsqlite3_str)(unsafe.Pointer(p)).FzText
}
// C documentation
//
// /*
// ** Return a pointer to the name of Nth query parameter of the filename.
// */
func Xsqlite3_uri_key(tls *libc.TLS, zFilename uintptr, N int32) (r uintptr) {
var v1 int32
var v2 bool
var v3 uintptr
_, _, _ = v1, v2, v3
if zFilename == uintptr(0) || N < 0 {
return uintptr(0)
}
zFilename = _databaseName(tls, zFilename)
zFilename = zFilename + uintptr(_sqlite3Strlen30(tls, zFilename)+int32(1))
for {
if v2 = zFilename != 0 && **(**uint8)(__ccgo_up(zFilename)) != 0; v2 {
v1 = N
N = N - 1
}
if !(v2 && v1 > 0) {
break
}
zFilename = zFilename + uintptr(_sqlite3Strlen30(tls, zFilename)+int32(1))
zFilename = zFilename + uintptr(_sqlite3Strlen30(tls, zFilename)+int32(1))
}
if **(**uint8)(__ccgo_up(zFilename)) != 0 {
v3 = zFilename
} else {
v3 = uintptr(0)
}
return v3
}
// C documentation
//
// /*
// ** CAPI3REF: Run-Time Library Version Numbers
// ** KEYWORDS: sqlite3_version sqlite3_sourceid
// **
// ** These interfaces provide the same information as the [SQLITE_VERSION],
// ** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros
// ** but are associated with the library instead of the header file. ^(Cautious
// ** programmers might include assert() statements in their application to
// ** verify that values returned by these interfaces match the macros in
// ** the header, and thus ensure that the application is
// ** compiled with matching library and header files.
// **
// ** <blockquote><pre>
// ** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
// ** assert( strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,80)==0 );
// ** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
// ** </pre></blockquote>)^
// **
// ** ^The sqlite3_version[] string constant contains the text of the
// ** [SQLITE_VERSION] macro. ^The sqlite3_libversion() function returns a
// ** pointer to the sqlite3_version[] string constant. The sqlite3_libversion()
// ** function is provided for use in DLLs since DLL users usually do not have
// ** direct access to string constants within the DLL. ^The
// ** sqlite3_libversion_number() function returns an integer equal to
// ** [SQLITE_VERSION_NUMBER]. ^(The sqlite3_sourceid() function returns
// ** a pointer to a string constant whose value is the same as the
// ** [SQLITE_SOURCE_ID] C preprocessor macro. Except if SQLite is built
// ** using an edited copy of [the amalgamation], then the last four characters
// ** of the hash might be different from [SQLITE_SOURCE_ID].)^
// **
// ** See also: [sqlite_version()] and [sqlite_source_id()].
// */
var Xsqlite3_version = [7]uint8{'3', '.', '5', '3', '.', '3'}
// C documentation
//
// /*
// ** sqlite3_snprintf() works like snprintf() except that it ignores the
// ** current locale settings. This is important for SQLite because we
// ** are not able to use a "," as the decimal point in place of "." as
// ** specified by some locales.
// **
// ** Oops: The first two arguments of sqlite3_snprintf() are backwards
// ** from the snprintf() standard. Unfortunately, it is too late to change
// ** this without breaking compatibility, so we just have to live with the
// ** mistake.
// **
// ** sqlite3_vsnprintf() is the varargs version.
// */
func Xsqlite3_vsnprintf(tls *libc.TLS, n int32, zBuf uintptr, zFormat uintptr, ap Tva_list) (r uintptr) {
bp := tls.Alloc(32)
defer tls.Free(32)
var _ /* acc at bp+0 */ TStrAccum
if n <= 0 {
return zBuf
}
_sqlite3StrAccumInit(tls, bp, uintptr(0), zBuf, n, 0)
Xsqlite3_str_vappendf(tls, bp, zFormat, ap)
**(**uint8)(__ccgo_up(zBuf + uintptr((**(**TStrAccum)(__ccgo_up(bp))).FnChar))) = uint8(0)
return zBuf
}
const __CHAR_UNSIGNED__ = 1
var _aDigits = [33]uint8{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}
var _aPrefix = [7]uint8{'-', 'x', '0', 0, 'X', '0'}
var _aSpecial = [32]uint8{
8: uint8('b'),
9: uint8('t'),
10: uint8('n'),
12: uint8('f'),
13: uint8('r'),
}
// C documentation
//
// /*
// ** The following table defines various date transformations of the form
// **
// ** 'NNN days'
// **
// ** Where NNN is an arbitrary floating-point number and "days" can be one
// ** of several units of time.
// */
var _aXformType = [6]struct {
FnName Tu8
FzName [7]uint8
FrLimit float32
FrXform float32
}{
0: {
FnName: uint8(6),
FzName: [7]uint8{'s', 'e', 'c', 'o', 'n', 'd'},
FrLimit: float32(4.6427e+14),
FrXform: float32(1),
},
1: {
FnName: uint8(6),
FzName: [7]uint8{'m', 'i', 'n', 'u', 't', 'e'},
FrLimit: float32(7.7379e+12),
FrXform: float32(60),
},
2: {
FnName: uint8(4),
FzName: [7]uint8{'h', 'o', 'u', 'r'},
FrLimit: float32(1.2897e+11),
FrXform: float32(3600),
},
3: {
FnName: uint8(3),
FzName: [7]uint8{'d', 'a', 'y'},
FrLimit: float32(5.373485e+06),
FrXform: float32(86400),
},
4: {
FnName: uint8(5),
FzName: [7]uint8{'m', 'o', 'n', 't', 'h'},
FrLimit: float32(176546),
FrXform: float32(2.592e+06),
},
5: {
FnName: uint8(4),
FzName: [7]uint8{'y', 'e', 'a', 'r'},
FrLimit: float32(14713),
FrXform: float32(3.1536e+07),
},
}
// C documentation
//
// /*
// ** Append all path elements in zPath to the DbPath under construction.
// */
func _appendAllPathElements(tls *libc.TLS, pPath uintptr, zPath uintptr) {
var i, j, v1 int32
_, _, _ = i, j, v1
i = 0
j = 0
for {
for **(**uint8)(__ccgo_up(zPath + uintptr(i))) != 0 && libc.Int32FromUint8(**(**uint8)(__ccgo_up(zPath + uintptr(i)))) != int32('/') {
i = i + 1
}
if i > j {
_appendOnePathElement(tls, pPath, zPath+uintptr(j), i-j)
}
j = i + int32(1)
goto _2
_2:
;
v1 = i
i = i + 1
if !(**(**uint8)(__ccgo_up(zPath + uintptr(v1))) != 0) {
break
}
}
}
func _asciiFold(tls *libc.TLS, aOut uintptr, aIn uintptr, nByte int32) {
var c uint8
var i int32
_, _ = c, i
i = 0
for {
if !(i < nByte) {
break
}
c = **(**uint8)(__ccgo_up(aIn + uintptr(i)))
if libc.Int32FromUint8(c) >= int32('A') && libc.Int32FromUint8(c) <= int32('Z') {
c = libc.Uint8FromInt32(int32(c) + libc.Int32FromInt32(32))
}
**(**uint8)(__ccgo_up(aOut + uintptr(i))) = c
goto _1
_1:
;
i = i + 1
}
}
// C documentation
//
// /*
// ** Return the P5 value that should be used for a binary comparison
// ** opcode (OP_Eq, OP_Ge etc.) used to compare pExpr1 and pExpr2.
// */
func _binaryCompareP5(tls *libc.TLS, pExpr1 uintptr, pExpr2 uintptr, jumpIfNull int32) (r Tu8) {
var aff Tu8
_ = aff
aff = _sqlite3ExprAffinity(tls, pExpr2)
aff = libc.Uint8FromInt32(libc.Int32FromUint8(_sqlite3CompareAffinity(tls, pExpr1, aff)) | libc.Int32FromUint8(libc.Uint8FromInt32(jumpIfNull)))
return aff
}
// C documentation
//
// /*
// ** Clear the YMD and HMS and the TZ
// */
func _clearYMD_HMS_TZ(tls *libc.TLS, p uintptr) {
(*TDateTime)(unsafe.Pointer(p)).FvalidYMD = uint8(0)
(*TDateTime)(unsafe.Pointer(p)).FvalidHMS = uint8(0)
(*TDateTime)(unsafe.Pointer(p)).Ftz = 0
}
/*
** On recent Windows platforms, the localtime_s() function is available
** as part of the "Secure CRT". It is essentially equivalent to
** localtime_r() available under most POSIX platforms, except that the
** order of the parameters is reversed.
**
** See http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx.
**
** If the user has not indicated to use localtime_r() or localtime_s()
** already, check for an MSVC build environment that provides
** localtime_s().
*/
// C documentation
//
// /*
// ** Code an OP_Affinity opcode to apply the column affinity string zAff
// ** to the n registers starting at base.
// **
// ** As an optimization, SQLITE_AFF_BLOB and SQLITE_AFF_NONE entries (which
// ** are no-ops) at the beginning and end of zAff are ignored. If all entries
// ** in zAff are SQLITE_AFF_BLOB or SQLITE_AFF_NONE, then no code gets generated.
// **
// ** This routine makes its own copy of zAff so that the caller is free
// ** to modify zAff after this routine returns.
// */
func _codeApplyAffinity(tls *libc.TLS, pParse uintptr, base int32, n int32, zAff uintptr) {
var v uintptr
_ = v
v = (*TParse)(unsafe.Pointer(pParse)).FpVdbe
if zAff == uintptr(0) {
return
}
/* Adjust base and n to skip over SQLITE_AFF_BLOB and SQLITE_AFF_NONE
** entries at the beginning and end of the affinity string.
*/
for n > 0 && libc.Int32FromUint8(**(**uint8)(__ccgo_up(zAff))) <= int32(SQLITE_AFF_BLOB) {
n = n - 1
base = base + 1
zAff = zAff + 1
}
for n > int32(1) && libc.Int32FromUint8(**(**uint8)(__ccgo_up(zAff + uintptr(n-int32(1))))) <= int32(SQLITE_AFF_BLOB) {
n = n - 1
}
/* Code the OP_Affinity opcode if there is anything left to do. */
if n > 0 {
_sqlite3VdbeAddOp4(tls, v, int32(OP_Affinity), base, n, 0, zAff, n)
}
}
// C documentation
//
// /*
// ** Given the YYYY-MM-DD information current in p, determine if there
// ** is day-of-month overflow and set nFloor to the number of days that
// ** would need to be subtracted from the date in order to bring the
// ** date back to the end of the month.
// */
func _computeFloor(tls *libc.TLS, p uintptr) {
if (*TDateTime)(unsafe.Pointer(p)).FD <= int32(28) {
(*TDateTime)(unsafe.Pointer(p)).FnFloor = uint8(0)
} else {
if int32(1)<<(*TDateTime)(unsafe.Pointer(p)).FM&int32(0x15aa) != 0 {
(*TDateTime)(unsafe.Pointer(p)).FnFloor = uint8(0)
} else {
if (*TDateTime)(unsafe.Pointer(p)).FM != int32(2) {
(*TDateTime)(unsafe.Pointer(p)).FnFloor = libc.BoolUint8((*TDateTime)(unsafe.Pointer(p)).FD == libc.Int32FromInt32(31))
} else {
if (*TDateTime)(unsafe.Pointer(p)).FY%int32(4) != 0 || (*TDateTime)(unsafe.Pointer(p)).FY%int32(100) == 0 && (*TDateTime)(unsafe.Pointer(p)).FY%int32(400) != 0 {
(*TDateTime)(unsafe.Pointer(p)).FnFloor = libc.Uint8FromInt32((*TDateTime)(unsafe.Pointer(p)).FD - int32(28))
} else {
(*TDateTime)(unsafe.Pointer(p)).FnFloor = libc.Uint8FromInt32((*TDateTime)(unsafe.Pointer(p)).FD - int32(29))
}
}
}
}
}
// C documentation
//
// /*
// ** Compute the Hour, Minute, and Seconds from the julian day number.
// */
func _computeHMS(tls *libc.TLS, p uintptr) {
var day_min, day_ms int32
_, _ = day_min, day_ms /* milliseconds, minutes into the day */
if (*TDateTime)(unsafe.Pointer(p)).FvalidHMS != 0 {
return
}
_computeJD(tls, p)
day_ms = int32(((*TDateTime)(unsafe.Pointer(p)).FiJD + libc.Int64FromInt32(43200000)) % libc.Int64FromInt32(86400000))
(*TDateTime)(unsafe.Pointer(p)).Fs = float64(day_ms%libc.Int32FromInt32(60000)) / float64(1000)
day_min = day_ms / int32(60000)
(*TDateTime)(unsafe.Pointer(p)).Fm = day_min % int32(60)
(*TDateTime)(unsafe.Pointer(p)).Fh = day_min / int32(60)
libc.SetBitFieldPtr8Uint32(p+44, libc.Uint32FromInt32(0), 0, 0x1)
(*TDateTime)(unsafe.Pointer(p)).FvalidHMS = uint8(1)
}
var _cume_distName = [10]uint8{'c', 'u', 'm', 'e', '_', 'd', 'i', 's', 't'}
// C documentation
//
// /*
// ** The Pager stores the Database filename, Journal filename, and WAL filename
// ** consecutively in memory, in that order. The database filename is prefixed
// ** by four zero bytes. Locate the start of the database filename by searching
// ** backwards for the first byte following four consecutive zero bytes.
// **
// ** This only works if the filename passed in was obtained from the Pager.
// */
func _databaseName(tls *libc.TLS, zName uintptr) (r uintptr) {
for libc.Int32FromUint8(**(**uint8)(__ccgo_up(zName + uintptr(-libc.Int32FromInt32(1))))) != 0 || libc.Int32FromUint8(**(**uint8)(__ccgo_up(zName + uintptr(-libc.Int32FromInt32(2))))) != 0 || libc.Int32FromUint8(**(**uint8)(__ccgo_up(zName + uintptr(-libc.Int32FromInt32(3))))) != 0 || libc.Int32FromUint8(**(**uint8)(__ccgo_up(zName + uintptr(-libc.Int32FromInt32(4))))) != 0 {
zName = zName - 1
}
return zName
}
// C documentation
//
// /*
// ** date( TIMESTRING, MOD, MOD, ...)
// **
// ** Return YYYY-MM-DD
// */
func _dateFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) {
bp := tls.Alloc(64)
defer tls.Free(64)
var Y int32
var _ /* x at bp+0 */ TDateTime
var _ /* zBuf at bp+48 */ [16]uint8
_ = Y
if _isDate(tls, context, argc, argv, bp) == 0 {
_computeYMD(tls, bp)
Y = (**(**TDateTime)(__ccgo_up(bp))).FY
if Y < 0 {
Y = -Y
}
(**(**[16]uint8)(__ccgo_up(bp + 48)))[int32(1)] = libc.Uint8FromInt32(int32('0') + Y/int32(1000)%int32(10))
(**(**[16]uint8)(__ccgo_up(bp + 48)))[int32(2)] = libc.Uint8FromInt32(int32('0') + Y/int32(100)%int32(10))
(**(**[16]uint8)(__ccgo_up(bp + 48)))[int32(3)] = libc.Uint8FromInt32(int32('0') + Y/int32(10)%int32(10))
(**(**[16]uint8)(__ccgo_up(bp + 48)))[int32(4)] = libc.Uint8FromInt32(int32('0') + Y%int32(10))
(**(**[16]uint8)(__ccgo_up(bp + 48)))[int32(5)] = uint8('-')
(**(**[16]uint8)(__ccgo_up(bp + 48)))[int32(6)] = libc.Uint8FromInt32(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).FM/int32(10)%int32(10))
(**(**[16]uint8)(__ccgo_up(bp + 48)))[int32(7)] = libc.Uint8FromInt32(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).FM%int32(10))
(**(**[16]uint8)(__ccgo_up(bp + 48)))[int32(8)] = uint8('-')
(**(**[16]uint8)(__ccgo_up(bp + 48)))[int32(9)] = libc.Uint8FromInt32(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).FD/int32(10)%int32(10))
(**(**[16]uint8)(__ccgo_up(bp + 48)))[int32(10)] = libc.Uint8FromInt32(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).FD%int32(10))
(**(**[16]uint8)(__ccgo_up(bp + 48)))[int32(11)] = uint8(0)
if (**(**TDateTime)(__ccgo_up(bp))).FY < 0 {
(**(**[16]uint8)(__ccgo_up(bp + 48)))[0] = uint8('-')
Xsqlite3_result_text(tls, context, bp+48, int32(11), uintptr(-libc.Int32FromInt32(1)))
} else {
Xsqlite3_result_text(tls, context, bp+48+1, int32(10), uintptr(-libc.Int32FromInt32(1)))
}
}
}
// C documentation
//
// /*
// ** Compute the number of days after the most recent January 1.
// **
// ** In other words, compute the zero-based day number for the
// ** current year:
// **
// ** Jan01 = 0, Jan02 = 1, ..., Jan31 = 30, Feb01 = 31, ...
// ** Dec31 = 364 or 365.
// */
func _daysAfterJan01(tls *libc.TLS, pDate uintptr) (r int32) {
bp := tls.Alloc(48)
defer tls.Free(48)
var _ /* jan01 at bp+0 */ TDateTime
**(**TDateTime)(__ccgo_up(bp)) = **(**TDateTime)(__ccgo_up(pDate))
(**(**TDateTime)(__ccgo_up(bp))).FvalidJD = uint8(0)
(**(**TDateTime)(__ccgo_up(bp))).FM = int32(1)
(**(**TDateTime)(__ccgo_up(bp))).FD = int32(1)
_computeJD(tls, bp)
return int32(((*TDateTime)(unsafe.Pointer(pDate)).FiJD - (**(**TDateTime)(__ccgo_up(bp))).FiJD + libc.Int64FromInt32(43200000)) / libc.Int64FromInt32(86400000))
}
var _dense_rankName = [11]uint8{'d', 'e', 'n', 's', 'e', '_', 'r', 'a', 'n', 'k'}
// C documentation
//
// /*
// ** zSql is a zero-terminated string of UTF-8 SQL text. Return the number of
// ** bytes in this text up to but excluding the first character in
// ** a host parameter. If the text contains no host parameters, return
// ** the total number of bytes in the text.
// */
func _findNextHostParameter(tls *libc.TLS, zSql uintptr, pnToken uintptr) (r Ti64) {
bp := tls.Alloc(16)
defer tls.Free(16)
var n, nTotal Ti64
var _ /* tokenType at bp+0 */ int32
_, _ = n, nTotal
nTotal = 0
**(**Ti64)(__ccgo_up(pnToken)) = 0
for **(**uint8)(__ccgo_up(zSql)) != 0 {
n = _sqlite3GetToken(tls, zSql, bp)
if **(**int32)(__ccgo_up(bp)) == int32(TK_VARIABLE) {
**(**Ti64)(__ccgo_up(pnToken)) = n
break
}
nTotal = nTotal + n
zSql = zSql + uintptr(n)
}
return nTotal
}
var _first_valueName = [12]uint8{'f', 'i', 'r', 's', 't', '_', 'v', 'a', 'l', 'u', 'e'}
var _fmtinfo = [23]Tet_info{
0: {
Ffmttype: uint8('s'),
Fflags: uint8(4),
Ftype1: uint8(etSTRING),
FiNxt: uint8(1),
},
1: {
Ffmttype: uint8('E'),
Fflags: uint8(1),
Ftype1: uint8(etEXP),
Fcharset: uint8(14),
},
2: {
Ffmttype: uint8('u'),
Fbase: uint8(10),
Ftype1: uint8(etDECIMAL),
FiNxt: uint8(3),
},
3: {
Ffmttype: uint8('G'),
Fflags: uint8(1),
Ftype1: uint8(etGENERIC),
Fcharset: uint8(14),
},
4: {
Ffmttype: uint8('w'),
Fflags: uint8(4),
Ftype1: uint8(etESCAPE_w),
},
5: {
Ffmttype: uint8('x'),
Fbase: uint8(16),
Fcharset: uint8(16),
Fprefix: uint8(1),
},
6: {
Ffmttype: uint8('c'),
Ftype1: uint8(etCHARX),
},
7: {
Ffmttype: uint8('z'),
Fflags: uint8(4),
Ftype1: uint8(etDYNSTRING),
FiNxt: uint8(6),
},
8: {
Ffmttype: uint8('d'),
Fbase: uint8(10),
Fflags: uint8(1),
Ftype1: uint8(etDECIMAL),
},
9: {
Ffmttype: uint8('e'),
Fflags: uint8(1),
Ftype1: uint8(etEXP),
Fcharset: uint8(30),
},
10: {
Ffmttype: uint8('f'),
Fflags: uint8(1),
Ftype1: uint8(etFLOAT),
},
11: {
Ffmttype: uint8('g'),
Fflags: uint8(1),
Ftype1: uint8(etGENERIC),
Fcharset: uint8(30),
},
12: {
Ffmttype: uint8('Q'),
Fflags: uint8(4),
Ftype1: uint8(etESCAPE_Q),
},
13: {
Ffmttype: uint8('i'),
Fbase: uint8(10),
Fflags: uint8(1),
Ftype1: uint8(etDECIMAL),
},
14: {
Ffmttype: uint8('%'),
Ftype1: uint8(etPERCENT),
FiNxt: uint8(16),
},
15: {
Ffmttype: uint8('T'),
Ftype1: uint8(etTOKEN),
},
16: {
Ffmttype: uint8('S'),
Ftype1: uint8(etSRCITEM),
},
17: {
Ffmttype: uint8('X'),
Fbase: uint8(16),
Fprefix: uint8(4),
},
18: {
Ffmttype: uint8('n'),
Ftype1: uint8(etSIZE),
},
19: {
Ffmttype: uint8('o'),
Fbase: uint8(8),
Fprefix: uint8(2),
FiNxt: uint8(17),
},
20: {
Ffmttype: uint8('p'),
Fbase: uint8(16),
Ftype1: uint8(etPOINTER),
Fprefix: uint8(1),
},
21: {
Ffmttype: uint8('q'),
Fflags: uint8(4),
Ftype1: uint8(etESCAPE_q),
},
22: {
Ffmttype: uint8('r'),
Fbase: uint8(10),
Fflags: uint8(1),
Ftype1: uint8(etORDINAL),
},
}
/* Additional Notes:
**
** %S Takes a pointer to SrcItem. Shows name or database.name
** %!S Like %S but prefer the zName over the zAlias
*/
func _fts5AsciiAddExceptions(tls *libc.TLS, p uintptr, zArg uintptr, bTokenChars int32) {
var i int32
_ = i
i = 0
for {
if !(**(**uint8)(__ccgo_up(zArg + uintptr(i))) != 0) {
break
}
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(zArg + uintptr(i))))&int32(0x80) == 0 {
**(**uint8)(__ccgo_up(p + uintptr(libc.Int32FromUint8(**(**uint8)(__ccgo_up(zArg + uintptr(i))))))) = libc.Uint8FromInt32(bTokenChars)
}
goto _1
_1:
;
i = i + 1
}
}
// C documentation
//
// /*
// ** Tokenize some text using the ascii tokenizer.
// */
func _fts5AsciiTokenize(tls *libc.TLS, pTokenizer uintptr, pCtx uintptr, iUnused int32, pText uintptr, nText int32, __ccgo_fp_xToken uintptr) (r int32) {
bp := tls.Alloc(64)
defer tls.Free(64)
var a, p, pFold uintptr
var ie, is, nByte, nFold, rc int32
var _ /* aFold at bp+0 */ [64]uint8
_, _, _, _, _, _, _, _ = a, ie, is, nByte, nFold, p, pFold, rc
p = pTokenizer
rc = SQLITE_OK
is = 0
nFold = int32(64)
pFold = bp
a = p
_ = iUnused
for is < nText && rc == SQLITE_OK {
/* Skip any leading divider characters. */
for is < nText && (libc.Int32FromUint8(**(**uint8)(__ccgo_up(pText + uintptr(is))))&int32(0x80) == 0 && libc.Int32FromUint8(**(**uint8)(__ccgo_up(a + uintptr(libc.Int32FromUint8(**(**uint8)(__ccgo_up(pText + uintptr(is)))))))) == 0) {
is = is + 1
}
if is == nText {
break
}
/* Count the token characters */
ie = is + int32(1)
for ie < nText && (libc.Int32FromUint8(**(**uint8)(__ccgo_up(pText + uintptr(ie))))&int32(0x80) != 0 || **(**uint8)(__ccgo_up(a + uintptr(libc.Int32FromUint8(**(**uint8)(__ccgo_up(pText + uintptr(ie))))))) != 0) {
ie = ie + 1
}
/* Fold to lower case */
nByte = ie - is
if nByte > nFold {
if pFold != bp {
Xsqlite3_free(tls, pFold)
}
pFold = Xsqlite3_malloc64(tls, libc.Uint64FromInt64(int64(nByte)*int64(2)))
if pFold == uintptr(0) {
rc = int32(SQLITE_NOMEM)
break
}
nFold = nByte * int32(2)
}
_asciiFold(tls, pFold, pText+uintptr(is), nByte)
/* Invoke the token callback */
rc = (*(*func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32)(unsafe.Pointer(&struct{ uintptr }{__ccgo_fp_xToken})))(tls, pCtx, 0, pFold, nByte, is, ie)
is = ie + int32(1)
}
if pFold != bp {
Xsqlite3_free(tls, pFold)
}
if rc == int32(SQLITE_DONE) {
rc = SQLITE_OK
}
return rc
}
/**************************************************************************
** Start of unicode61 tokenizer implementation.
*/
/*
** The following two macros - READ_UTF8 and WRITE_UTF8 - have been copied
** from the sqlite3 source file utf.c. If this file is compiled as part
** of the amalgamation, they are not required.
*/
// C documentation
//
// /*
// ** Argument pIn points to the first character in what is expected to be
// ** a comma-separated list of SQL literals followed by a ')' character.
// ** If it actually is this, return a pointer to the ')'. Otherwise, return
// ** NULL to indicate a parse error.
// */
func _fts5ConfigSkipArgs(tls *libc.TLS, pIn uintptr) (r uintptr) {
var p uintptr
_ = p
p = pIn
for int32(1) != 0 {
p = _fts5ConfigSkipWhitespace(tls, p)
p = _fts5ConfigSkipLiteral(tls, p)
p = _fts5ConfigSkipWhitespace(tls, p)
if p == uintptr(0) || libc.Int32FromUint8(**(**uint8)(__ccgo_up(p))) == int32(')') {
break
}
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(p))) != int32(',') {
p = uintptr(0)
break
}
p = p + 1
}
return p
}
// C documentation
//
// /*
// ** Argument pIn points to a character that is part of a nul-terminated
// ** string. Return a pointer to the first character following *pIn in
// ** the string that is not a "bareword" character.
// */
func _fts5ConfigSkipBareword(tls *libc.TLS, pIn uintptr) (r uintptr) {
var p uintptr
_ = p
p = pIn
for _sqlite3Fts5IsBareword(tls, **(**uint8)(__ccgo_up(p))) != 0 {
p = p + 1
}
if p == pIn {
p = uintptr(0)
}
return p
}
// C documentation
//
// /*
// ** Argument pIn points to a character that is part of a nul-terminated
// ** string. Return a pointer to the first character following *pIn in
// ** the string that is not a white-space character.
// */
func _fts5ConfigSkipWhitespace(tls *libc.TLS, pIn uintptr) (r uintptr) {
var p uintptr
_ = p
p = pIn
if p != 0 {
for _fts5_iswhitespace(tls, **(**uint8)(__ccgo_up(p))) != 0 {
p = p + 1
}
}
return p
}
// C documentation
//
// /*
// ** The first character of the string pointed to by argument z is guaranteed
// ** to be an open-quote character (see function fts5_isopenquote()).
// **
// ** This function searches for the corresponding close-quote character within
// ** the string and, if found, dequotes the string in place and adds a new
// ** nul-terminator byte.
// **
// ** If the close-quote is found, the value returned is the byte offset of
// ** the character immediately following it. Or, if the close-quote is not
// ** found, -1 is returned. If -1 is returned, the buffer is left in an
// ** undefined state.
// */
func _fts5Dequote(tls *libc.TLS, z uintptr) (r int32) {
var iIn, iOut, v1, v2 int32
var q uint8
_, _, _, _, _ = iIn, iOut, q, v1, v2
iIn = int32(1)
iOut = 0
q = **(**uint8)(__ccgo_up(z))
/* Set stack variable q to the close-quote character */
if libc.Int32FromUint8(q) == int32('[') {
q = uint8(']')
}
for **(**uint8)(__ccgo_up(z + uintptr(iIn))) != 0 {
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(iIn)))) == libc.Int32FromUint8(q) {
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(iIn+int32(1))))) != libc.Int32FromUint8(q) {
/* Character iIn was the close quote. */
iIn = iIn + 1
break
} else {
/* Character iIn and iIn+1 form an escaped quote character. Skip
** the input cursor past both and copy a single quote character
** to the output buffer. */
iIn = iIn + int32(2)
v1 = iOut
iOut = iOut + 1
**(**uint8)(__ccgo_up(z + uintptr(v1))) = q
}
} else {
v1 = iOut
iOut = iOut + 1
v2 = iIn
iIn = iIn + 1
**(**uint8)(__ccgo_up(z + uintptr(v1))) = **(**uint8)(__ccgo_up(z + uintptr(v2)))
}
}
**(**uint8)(__ccgo_up(z + uintptr(iOut))) = uint8('\000')
return iIn
}
// C documentation
//
// /*
// ** Assuming that buffer z is at least nByte bytes in size and contains a
// ** valid utf-8 string, return the number of characters in the string.
// */
func _fts5ExprCountChar(tls *libc.TLS, z uintptr, nByte int32) (r int32) {
var ii, nRet int32
_, _ = ii, nRet
nRet = 0
ii = 0
for {
if !(ii < nByte) {
break
}
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(ii))))&int32(0xC0) != int32(0x80) {
nRet = nRet + 1
}
goto _1
_1:
;
ii = ii + 1
}
return nRet
}
func _fts5ExprIsspace(tls *libc.TLS, t uint8) (r int32) {
return libc.BoolInt32(libc.Int32FromUint8(t) == int32(' ') || libc.Int32FromUint8(t) == int32('\t') || libc.Int32FromUint8(t) == int32('\n') || libc.Int32FromUint8(t) == int32('\r'))
}
// C documentation
//
// /*
// ** pIn is a UTF-8 encoded string, nIn bytes in size. Return the number of
// ** unicode characters in the string.
// */
func _fts5IndexCharlen(tls *libc.TLS, pIn uintptr, nIn int32) (r int32) {
var i, nChar, v1 int32
_, _, _ = i, nChar, v1
nChar = 0
i = 0
for i < nIn {
v1 = i
i = i + 1
if libc.Int32FromUint8(uint8(**(**uint8)(__ccgo_up(pIn + uintptr(v1))))) >= int32(0xc0) {
for i < nIn && libc.Int32FromUint8(**(**uint8)(__ccgo_up(pIn + uintptr(i))))&int32(0xc0) == int32(0x80) {
i = i + 1
}
}
nChar = nChar + 1
}
return nChar
}
func _fts5PorterGobbleVC(tls *libc.TLS, zStem uintptr, nStem int32, bPrevCons int32) (r int32) {
var bCons, i, v2 int32
_, _, _ = bCons, i, v2
bCons = bPrevCons
/* Scan for a vowel */
i = 0
for {
if !(i < nStem) {
break
}
v2 = libc.BoolInt32(!(_fts5PorterIsVowel(tls, **(**uint8)(__ccgo_up(zStem + uintptr(i))), bCons) != 0))
bCons = v2
if 0 == v2 {
break
}
goto _1
_1:
;
i = i + 1
}
/* Scan for a consonent */
i = i + 1
for {
if !(i < nStem) {
break
}
v2 = libc.BoolInt32(!(_fts5PorterIsVowel(tls, **(**uint8)(__ccgo_up(zStem + uintptr(i))), bCons) != 0))
bCons = v2
if v2 != 0 {
return i + int32(1)
}
goto _3
_3:
;
i = i + 1
}
return 0
}
func _fts5PorterIsVowel(tls *libc.TLS, c uint8, bYIsVowel int32) (r int32) {
return libc.BoolInt32(libc.Int32FromUint8(c) == int32('a') || libc.Int32FromUint8(c) == int32('e') || libc.Int32FromUint8(c) == int32('i') || libc.Int32FromUint8(c) == int32('o') || libc.Int32FromUint8(c) == int32('u') || bYIsVowel != 0 && libc.Int32FromUint8(c) == int32('y'))
}
func _fts5PorterStep1A(tls *libc.TLS, aBuf uintptr, pnBuf uintptr) {
var nBuf int32
_ = nBuf
nBuf = **(**int32)(__ccgo_up(pnBuf))
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(aBuf + uintptr(nBuf-int32(1))))) == int32('s') {
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(aBuf + uintptr(nBuf-int32(2))))) == int32('e') {
if nBuf > int32(4) && libc.Int32FromUint8(**(**uint8)(__ccgo_up(aBuf + uintptr(nBuf-int32(4))))) == int32('s') && libc.Int32FromUint8(**(**uint8)(__ccgo_up(aBuf + uintptr(nBuf-int32(3))))) == int32('s') || nBuf > int32(3) && libc.Int32FromUint8(**(**uint8)(__ccgo_up(aBuf + uintptr(nBuf-int32(3))))) == int32('i') {
**(**int32)(__ccgo_up(pnBuf)) = nBuf - int32(2)
} else {
**(**int32)(__ccgo_up(pnBuf)) = nBuf - int32(1)
}
} else {
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(aBuf + uintptr(nBuf-int32(2))))) != int32('s') {
**(**int32)(__ccgo_up(pnBuf)) = nBuf - int32(1)
}
}
}
}
// C documentation
//
// /* porter rule condition: (m > 1 and (*S or *T)) */
func _fts5Porter_MGt1_and_S_or_T(tls *libc.TLS, zStem uintptr, nStem int32) (r int32) {
return libc.BoolInt32((libc.Int32FromUint8(**(**uint8)(__ccgo_up(zStem + uintptr(nStem-int32(1))))) == int32('s') || libc.Int32FromUint8(**(**uint8)(__ccgo_up(zStem + uintptr(nStem-int32(1))))) == int32('t')) && _fts5Porter_MGt1(tls, zStem, nStem) != 0)
}
// C documentation
//
// /* porter rule condition: (*o) */
func _fts5Porter_Ostar(tls *libc.TLS, zStem uintptr, nStem int32) (r int32) {
var bCons, i, mask int32
_, _, _ = bCons, i, mask
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(zStem + uintptr(nStem-int32(1))))) == int32('w') || libc.Int32FromUint8(**(**uint8)(__ccgo_up(zStem + uintptr(nStem-int32(1))))) == int32('x') || libc.Int32FromUint8(**(**uint8)(__ccgo_up(zStem + uintptr(nStem-int32(1))))) == int32('y') {
return 0
} else {
mask = 0
bCons = 0
i = 0
for {
if !(i < nStem) {
break
}
bCons = libc.BoolInt32(!(_fts5PorterIsVowel(tls, **(**uint8)(__ccgo_up(zStem + uintptr(i))), bCons) != 0))
mask = mask<<int32(1) + bCons
goto _1
_1:
;
i = i + 1
}
return libc.BoolInt32(mask&int32(0x0007) == int32(0x0005))
}
return r
}
// C documentation
//
// /* porter rule condition: (*v*) */
func _fts5Porter_Vowel(tls *libc.TLS, zStem uintptr, nStem int32) (r int32) {
var i int32
_ = i
i = 0
for {
if !(i < nStem) {
break
}
if _fts5PorterIsVowel(tls, **(**uint8)(__ccgo_up(zStem + uintptr(i))), libc.BoolInt32(i > 0)) != 0 {
return int32(1)
}
goto _1
_1:
;
i = i + 1
}
return 0
}
/**************************************************************************
***************************************************************************
** GENERATED CODE STARTS HERE (mkportersteps.tcl)
*/
// C documentation
//
// /*
// ** pToken is a buffer nToken bytes in size that may or may not contain
// ** an embedded 0x00 byte. If it does, return the number of bytes in
// ** the buffer before the 0x00. If it does not, return nToken.
// */
func _fts5QueryTerm(tls *libc.TLS, pToken uintptr, nToken int32) (r int32) {
var ii int32
_ = ii
ii = 0
for {
if !(ii < nToken && **(**uint8)(__ccgo_up(pToken + uintptr(ii))) != 0) {
break
}
goto _1
_1:
;
ii = ii + 1
}
return ii
}
// C documentation
//
// /*
// ** This function is an xTokenize() callback used by the auxiliary snippet()
// ** function. Its job is to identify tokens that are the first in a sentence.
// ** For each such token, an entry is added to the SFinder.aFirst[] array.
// */
func _fts5SentenceFinderCb(tls *libc.TLS, pContext uintptr, tflags int32, pToken uintptr, nToken int32, iStartOff int32, iEndOff int32) (r int32) {
var c uint8
var i, rc int32
var p uintptr
_, _, _, _ = c, i, p, rc
rc = SQLITE_OK
_ = pToken
_ = nToken
_ = iEndOff
if tflags&int32(FTS5_TOKEN_COLOCATED) == 0 {
p = pContext
if (*TFts5SFinder)(unsafe.Pointer(p)).FiPos > 0 {
c = uint8(0)
i = iStartOff - int32(1)
for {
if !(i >= 0) {
break
}
c = **(**uint8)(__ccgo_up((*TFts5SFinder)(unsafe.Pointer(p)).FzDoc + uintptr(i)))
if libc.Int32FromUint8(c) != int32(' ') && libc.Int32FromUint8(c) != int32('\t') && libc.Int32FromUint8(c) != int32('\n') && libc.Int32FromUint8(c) != int32('\r') {
break
}
goto _1
_1:
;
i = i - 1
}
if i != iStartOff-int32(1) && (libc.Int32FromUint8(c) == int32('.') || libc.Int32FromUint8(c) == int32(':')) {
rc = _fts5SentenceFinderAdd(tls, p, (*TFts5SFinder)(unsafe.Pointer(p)).FiPos)
}
} else {
rc = _fts5SentenceFinderAdd(tls, p, 0)
}
(*TFts5SFinder)(unsafe.Pointer(p)).FiPos = (*TFts5SFinder)(unsafe.Pointer(p)).FiPos + 1
}
return rc
}
func _fts5_isdigit(tls *libc.TLS, a uint8) (r int32) {
return libc.BoolInt32(libc.Int32FromUint8(a) >= int32('0') && libc.Int32FromUint8(a) <= int32('9'))
}
func _fts5_isopenquote(tls *libc.TLS, x uint8) (r int32) {
return libc.BoolInt32(libc.Int32FromUint8(x) == int32('"') || libc.Int32FromUint8(x) == int32('\'') || libc.Int32FromUint8(x) == int32('[') || libc.Int32FromUint8(x) == int32('`'))
}
func _fts5_iswhitespace(tls *libc.TLS, x uint8) (r int32) {
return libc.BoolInt32(libc.Int32FromUint8(x) == int32(' '))
}
// C documentation
//
// /*
// ** Growing our own isspace() routine this way is twice as fast as
// ** the library isspace() function.
// */
var _geopolyIsSpace = [256]uint8{
9: uint8(1),
10: uint8(1),
13: uint8(1),
32: uint8(1),
}
/* Compiler and version */
// C documentation
//
// /* Parse out a number. Write the value into *pVal if pVal!=0.
// ** return non-zero on success and zero if the next token is not a number.
// */
func _geopolyParseNumber(tls *libc.TLS, p uintptr, pVal uintptr) (r int32) {
bp := tls.Alloc(16)
defer tls.Free(16)
var c uint8
var j, seenDP, seenE, v2 int32
var z uintptr
var _ /* r at bp+0 */ float64
_, _, _, _, _, _ = c, j, seenDP, seenE, z, v2
c = _geopolySkipSpace(tls, p)
z = (*TGeoParse)(unsafe.Pointer(p)).Fz
j = 0
seenDP = 0
seenE = 0
if libc.Int32FromUint8(c) == int32('-') {
j = int32(1)
c = uint8(**(**uint8)(__ccgo_up(z + uintptr(j))))
}
if libc.Int32FromUint8(c) == int32('0') && libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(j+int32(1))))) >= int32('0') && libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(j+int32(1))))) <= int32('9') {
return 0
}
for {
c = uint8(**(**uint8)(__ccgo_up(z + uintptr(j))))
if libc.Int32FromUint8(_sqlite3CtypeMap[c])&int32(0x04) != 0 {
goto _1
}
if libc.Int32FromUint8(c) == int32('.') {
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(j-int32(1))))) == int32('-') {
return 0
}
if seenDP != 0 {
return 0
}
seenDP = int32(1)
goto _1
}
if libc.Int32FromUint8(c) == int32('e') || libc.Int32FromUint8(c) == int32('E') {
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(j-int32(1))))) < int32('0') {
return 0
}
if seenE != 0 {
return -int32(1)
}
v2 = libc.Int32FromInt32(1)
seenE = v2
seenDP = v2
c = uint8(**(**uint8)(__ccgo_up(z + uintptr(j+int32(1)))))
if libc.Int32FromUint8(c) == int32('+') || libc.Int32FromUint8(c) == int32('-') {
j = j + 1
c = uint8(**(**uint8)(__ccgo_up(z + uintptr(j+int32(1)))))
}
if libc.Int32FromUint8(c) < int32('0') || libc.Int32FromUint8(c) > int32('9') {
return 0
}
goto _1
}
break
goto _1
_1:
;
j = j + 1
}
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(j-int32(1))))) < int32('0') {
return 0
}
if pVal != 0 {
_sqlite3AtoF(tls, (*TGeoParse)(unsafe.Pointer(p)).Fz, bp)
**(**TGeoCoord)(__ccgo_up(pVal)) = float32(**(**float64)(__ccgo_up(bp)))
}
**(**uintptr)(__ccgo_up(p)) += uintptr(j)
return int32(1)
}
// C documentation
//
// /* Skip whitespace. Return the next non-whitespace character. */
func _geopolySkipSpace(tls *libc.TLS, p uintptr) (r uint8) {
for _geopolyIsSpace[**(**uint8)(__ccgo_up((*TGeoParse)(unsafe.Pointer(p)).Fz))] != 0 {
(*TGeoParse)(unsafe.Pointer(p)).Fz = (*TGeoParse)(unsafe.Pointer(p)).Fz + 1
}
return uint8(**(**uint8)(__ccgo_up((*TGeoParse)(unsafe.Pointer(p)).Fz)))
}
// C documentation
//
// /*
// ** Convert zDate into one or more integers according to the conversion
// ** specifier zFormat.
// **
// ** zFormat[] contains 4 characters for each integer converted, except for
// ** the last integer which is specified by three characters. The meaning
// ** of a four-character format specifiers ABCD is:
// **
// ** A: number of digits to convert. Always "2" or "4".
// ** B: minimum value. Always "0" or "1".
// ** C: maximum value, decoded as:
// ** a: 12
// ** b: 14
// ** c: 24
// ** d: 31
// ** e: 59
// ** f: 9999
// ** D: the separator character, or \000 to indicate this is the
// ** last number to convert.
// **
// ** Example: To translate an ISO-8601 date YYYY-MM-DD, the format would
// ** be "40f-21a-20c". The "40f-" indicates the 4-digit year followed by "-".
// ** The "21a-" indicates the 2-digit month followed by "-". The "20c" indicates
// ** the 2-digit day which is the last integer in the set.
// **
// ** The function returns the number of successful conversions.
// */
func _getDigits(tls *libc.TLS, zDate uintptr, zFormat uintptr, va uintptr) (r int32) {
var N, min, nextC, v1 uint8
var ap Tva_list
var cnt, val int32
var max Tu16
_, _, _, _, _, _, _, _ = N, ap, cnt, max, min, nextC, val, v1
cnt = 0
ap = va
for cond := true; cond; cond = nextC != 0 {
N = libc.Uint8FromInt32(libc.Int32FromUint8(**(**uint8)(__ccgo_up(zFormat))) - int32('0'))
min = libc.Uint8FromInt32(libc.Int32FromUint8(**(**uint8)(__ccgo_up(zFormat + 1))) - int32('0'))
val = 0
max = _aMx[libc.Int32FromUint8(**(**uint8)(__ccgo_up(zFormat + 2)))-int32('a')]
nextC = **(**uint8)(__ccgo_up(zFormat + 3))
val = 0
for {
v1 = N
N = N - 1
if !(v1 != 0) {
break
}
if !(libc.Int32FromUint8(_sqlite3CtypeMap[uint8(**(**uint8)(__ccgo_up(zDate)))])&libc.Int32FromInt32(0x04) != 0) {
goto end_getDigits
}
val = val*int32(10) + libc.Int32FromUint8(**(**uint8)(__ccgo_up(zDate))) - int32('0')
zDate = zDate + 1
}
if val < libc.Int32FromUint8(min) || val > libc.Int32FromUint16(max) || libc.Int32FromUint8(nextC) != 0 && libc.Int32FromUint8(nextC) != libc.Int32FromUint8(**(**uint8)(__ccgo_up(zDate))) {
goto end_getDigits
}
**(**int32)(__ccgo_up(libc.VaUintptr(&ap))) = val
zDate = zDate + 1
cnt = cnt + 1
zFormat = zFormat + uintptr(4)
}
goto end_getDigits
end_getDigits:
;
_ = ap
return cnt
}
// C documentation
//
// /* Array for converting from half-bytes (nybbles) into ASCII hex
// ** digits. */
var _hexdigits = [16]uint8{
0: uint8('0'),
1: uint8('1'),
2: uint8('2'),
3: uint8('3'),
4: uint8('4'),
5: uint8('5'),
6: uint8('6'),
7: uint8('7'),
8: uint8('8'),
9: uint8('9'),
10: uint8('A'),
11: uint8('B'),
12: uint8('C'),
13: uint8('D'),
14: uint8('E'),
15: uint8('F'),
}
// C documentation
//
// /*
// ** Measure the number of characters needed to output the given
// ** identifier. The number returned includes any quotes used
// ** but does not include the null terminator.
// **
// ** The estimate is conservative. It might be larger that what is
// ** really needed.
// */
func _identLength(tls *libc.TLS, z uintptr) (r Ti64) {
var n Ti64
_ = n
n = 0
for {
if !(**(**uint8)(__ccgo_up(z)) != 0) {
break
}
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z))) == int32('"') {
n = n + 1
}
goto _1
_1:
;
n = n + 1
z = z + 1
}
return n + int64(2)
}
// C documentation
//
// /*
// ** The first parameter is a pointer to an output buffer. The second
// ** parameter is a pointer to an integer that contains the offset at
// ** which to write into the output buffer. This function copies the
// ** nul-terminated string pointed to by the third parameter, zSignedIdent,
// ** to the specified offset in the buffer and updates *pIdx to refer
// ** to the first byte after the last byte written before returning.
// **
// ** If the string zSignedIdent consists entirely of alphanumeric
// ** characters, does not begin with a digit and is not an SQL keyword,
// ** then it is copied to the output buffer exactly as it is. Otherwise,
// ** it is quoted using double-quotes.
// */
func _identPut(tls *libc.TLS, z uintptr, pIdx uintptr, zSignedIdent uintptr) {
var i, j, needQuote, v2 int32
var zIdent uintptr
_, _, _, _, _ = i, j, needQuote, zIdent, v2
zIdent = zSignedIdent
i = **(**int32)(__ccgo_up(pIdx))
j = 0
for {
if !(**(**uint8)(__ccgo_up(zIdent + uintptr(j))) != 0) {
break
}
if !(libc.Int32FromUint8(_sqlite3CtypeMap[**(**uint8)(__ccgo_up(zIdent + uintptr(j)))])&libc.Int32FromInt32(0x06) != 0) && libc.Int32FromUint8(**(**uint8)(__ccgo_up(zIdent + uintptr(j)))) != int32('_') {
break
}
goto _1
_1:
;
j = j + 1
}
needQuote = libc.BoolInt32(libc.Int32FromUint8(_sqlite3CtypeMap[**(**uint8)(__ccgo_up(zIdent))])&int32(0x04) != 0 || _sqlite3KeywordCode(tls, zIdent, j) != int32(TK_ID) || libc.Int32FromUint8(**(**uint8)(__ccgo_up(zIdent + uintptr(j)))) != 0 || j == 0)
if needQuote != 0 {
v2 = i
i = i + 1
**(**uint8)(__ccgo_up(z + uintptr(v2))) = uint8('"')
}
j = 0
for {
if !(**(**uint8)(__ccgo_up(zIdent + uintptr(j))) != 0) {
break
}
v2 = i
i = i + 1
**(**uint8)(__ccgo_up(z + uintptr(v2))) = uint8(**(**uint8)(__ccgo_up(zIdent + uintptr(j))))
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(zIdent + uintptr(j)))) == int32('"') {
v2 = i
i = i + 1
**(**uint8)(__ccgo_up(z + uintptr(v2))) = uint8('"')
}
goto _3
_3:
;
j = j + 1
}
if needQuote != 0 {
v2 = i
i = i + 1
**(**uint8)(__ccgo_up(z + uintptr(v2))) = uint8('"')
}
**(**uint8)(__ccgo_up(z + uintptr(i))) = uint8(0)
**(**int32)(__ccgo_up(pIdx)) = i
}
// C documentation
//
// /*
// ** The input pBlob is guaranteed to be a Blob that is not marked
// ** with MEM_Zero. Return true if it could be a zero-blob.
// */
func _isAllZero(tls *libc.TLS, z uintptr, n int32) (r int32) {
var i int32
_ = i
i = 0
for {
if !(i < n) {
break
}
if **(**uint8)(__ccgo_up(z + uintptr(i))) != 0 {
return 0
}
goto _1
_1:
;
i = i + 1
}
return int32(1)
}
// C documentation
//
// /*
// ** Return true if z[] begins with N hexadecimal digits, and write
// ** a decoding of those digits into *pVal. Or return false if any
// ** one of the first N characters in z[] is not a hexadecimal digit.
// */
func _isNHex(tls *libc.TLS, z uintptr, N int32, pVal uintptr) (r int32) {
var i int32
var v Tu32
_, _ = i, v
v = uint32(0)
i = 0
for {
if !(i < N) {
break
}
if !(libc.Int32FromUint8(_sqlite3CtypeMap[uint8(**(**uint8)(__ccgo_up(z + uintptr(i))))])&libc.Int32FromInt32(0x08) != 0) {
return 0
}
v = v<<libc.Int32FromInt32(4) + uint32(_sqlite3HexToInt(tls, libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(i))))))
goto _1
_1:
;
i = i + 1
}
**(**Tu32)(__ccgo_up(pVal)) = v
return int32(1)
}
// C documentation
//
// /*
// ** Return the number of bytes of JSON5 whitespace at the beginning of
// ** the input string z[].
// **
// ** JSON5 whitespace consists of any of the following characters:
// **
// ** Unicode UTF-8 Name
// ** U+0009 09 horizontal tab
// ** U+000a 0a line feed
// ** U+000b 0b vertical tab
// ** U+000c 0c form feed
// ** U+000d 0d carriage return
// ** U+0020 20 space
// ** U+00a0 c2 a0 non-breaking space
// ** U+1680 e1 9a 80 ogham space mark
// ** U+2000 e2 80 80 en quad
// ** U+2001 e2 80 81 em quad
// ** U+2002 e2 80 82 en space
// ** U+2003 e2 80 83 em space
// ** U+2004 e2 80 84 three-per-em space
// ** U+2005 e2 80 85 four-per-em space
// ** U+2006 e2 80 86 six-per-em space
// ** U+2007 e2 80 87 figure space
// ** U+2008 e2 80 88 punctuation space
// ** U+2009 e2 80 89 thin space
// ** U+200a e2 80 8a hair space
// ** U+2028 e2 80 a8 line separator
// ** U+2029 e2 80 a9 paragraph separator
// ** U+202f e2 80 af narrow no-break space (NNBSP)
// ** U+205f e2 81 9f medium mathematical space (MMSP)
// ** U+3000 e3 80 80 ideographical space
// ** U+FEFF ef bb bf byte order mark
// **
// ** In addition, comments between '/', '*' and '*', '/' and
// ** from '/', '/' to end-of-line are also considered to be whitespace.
// */
func _json5Whitespace(tls *libc.TLS, zIn uintptr) (r int32) {
var c, v3 uint8
var c1 Tu8
var j, j1, n int32
var z uintptr
_, _, _, _, _, _, _ = c, c1, j, j1, n, z, v3
n = 0
z = zIn
for int32(1) != 0 {
switch libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(n)))) {
case int32(0x09):
fallthrough
case int32(0x0a):
fallthrough
case int32(0x0b):
fallthrough
case int32(0x0c):
fallthrough
case int32(0x0d):
fallthrough
case int32(0x20):
n = n + 1
case int32('/'):
if libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(n+int32(1))))) == int32('*') && libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(n+int32(2))))) != 0 {
j = n + int32(3)
for {
if !(libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(j)))) != int32('/') || libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(j-int32(1))))) != int32('*')) {
break
}
if libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(j)))) == 0 {
goto whitespace_done
}
goto _1
_1:
;
j = j + 1
}
n = j + int32(1)
break
} else {
if libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(n+int32(1))))) == int32('/') {
j1 = n + int32(2)
for {
v3 = uint8(**(**Tu8)(__ccgo_up(z + uintptr(j1))))
c = v3
if !(libc.Int32FromUint8(v3) != 0) {
break
}
if libc.Int32FromUint8(c) == int32('\n') || libc.Int32FromUint8(c) == int32('\r') {
break
}
if int32(0xe2) == libc.Int32FromUint8(c) && int32(0x80) == libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(j1+int32(1))))) && (int32(0xa8) == libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(j1+int32(2))))) || int32(0xa9) == libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(j1+int32(2)))))) {
j1 = j1 + int32(2)
break
}
goto _2
_2:
;
j1 = j1 + 1
}
n = j1
if **(**Tu8)(__ccgo_up(z + uintptr(n))) != 0 {
n = n + 1
}
break
}
}
goto whitespace_done
case int32(0xc2):
if libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(n+int32(1))))) == int32(0xa0) {
n = n + int32(2)
break
}
goto whitespace_done
case int32(0xe1):
if libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(n+int32(1))))) == int32(0x9a) && libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(n+int32(2))))) == int32(0x80) {
n = n + int32(3)
break
}
goto whitespace_done
case int32(0xe2):
if libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(n+int32(1))))) == int32(0x80) {
c1 = **(**Tu8)(__ccgo_up(z + uintptr(n+int32(2))))
if libc.Int32FromUint8(c1) < int32(0x80) {
goto whitespace_done
}
if libc.Int32FromUint8(c1) <= int32(0x8a) || libc.Int32FromUint8(c1) == int32(0xa8) || libc.Int32FromUint8(c1) == int32(0xa9) || libc.Int32FromUint8(c1) == int32(0xaf) {
n = n + int32(3)
break
}
} else {
if libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(n+int32(1))))) == int32(0x81) && libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(n+int32(2))))) == int32(0x9f) {
n = n + int32(3)
break
}
}
goto whitespace_done
case int32(0xe3):
if libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(n+int32(1))))) == int32(0x80) && libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(n+int32(2))))) == int32(0x80) {
n = n + int32(3)
break
}
goto whitespace_done
case int32(0xef):
if libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(n+int32(1))))) == int32(0xbb) && libc.Int32FromUint8(**(**Tu8)(__ccgo_up(z + uintptr(n+int32(2))))) == int32(0xbf) {
n = n + int32(3)
break
}
goto whitespace_done
default:
goto whitespace_done
}
}
goto whitespace_done
whitespace_done:
;
return n
return r
}
// C documentation
//
// /* True if the string is all alphanumerics and underscores */
func _jsonAllAlphanum(tls *libc.TLS, z uintptr, n int32) (r int32) {
var i int32
_ = i
i = 0
for {
if !(i < n && (libc.Int32FromUint8(_sqlite3CtypeMap[uint8(**(**uint8)(__ccgo_up(z + uintptr(i))))])&int32(0x06) != 0 || libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(i)))) == int32('_'))) {
break
}
goto _1
_1:
;
i = i + 1
}
return libc.BoolInt32(i == n)
}
// C documentation
//
// /* Append a comma separator to the output buffer, if the previous
// ** character is not '[' or '{'.
// */
func _jsonAppendSeparator(tls *libc.TLS, p uintptr) {
var c uint8
_ = c
if (*TJsonString)(unsafe.Pointer(p)).FnUsed == uint64(0) {
return
}
c = **(**uint8)(__ccgo_up((*TJsonString)(unsafe.Pointer(p)).FzBuf + uintptr((*TJsonString)(unsafe.Pointer(p)).FnUsed-uint64(1))))
if libc.Int32FromUint8(c) == int32('[') || libc.Int32FromUint8(c) == int32('{') {
return
}
_jsonAppendChar(tls, p, uint8(','))
}
// C documentation
//
// /*
// ** Return the number of escaped newlines to be ignored.
// ** An escaped newline is a one of the following byte sequences:
// **
// ** 0x5c 0x0a
// ** 0x5c 0x0d
// ** 0x5c 0x0d 0x0a
// ** 0x5c 0xe2 0x80 0xa8
// ** 0x5c 0xe2 0x80 0xa9
// */
func _jsonBytesToBypass(tls *libc.TLS, z uintptr, n Tu32) (r Tu32) {
var i Tu32
_ = i
i = uint32(0)
for i+uint32(1) < n {
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(i)))) != int32('\\') {
return i
}
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(i+uint32(1))))) == int32('\n') {
i = i + uint32(2)
continue
}
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(i+uint32(1))))) == int32('\r') {
if i+uint32(2) < n && libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(i+uint32(2))))) == int32('\n') {
i = i + uint32(3)
} else {
i = i + uint32(2)
}
continue
}
if int32(0xe2) == libc.Int32FromUint8(uint8(**(**uint8)(__ccgo_up(z + uintptr(i+uint32(1)))))) && i+uint32(3) < n && int32(0x80) == libc.Int32FromUint8(uint8(**(**uint8)(__ccgo_up(z + uintptr(i+uint32(2)))))) && (int32(0xa8) == libc.Int32FromUint8(uint8(**(**uint8)(__ccgo_up(z + uintptr(i+uint32(3)))))) || int32(0xa9) == libc.Int32FromUint8(uint8(**(**uint8)(__ccgo_up(z + uintptr(i+uint32(3))))))) {
i = i + uint32(4)
continue
}
break
}
return i
}
// C documentation
//
// /*
// ** Convert a 4-byte hex string into an integer
// */
func _jsonHexToInt4(tls *libc.TLS, z uintptr) (r Tu32) {
var v Tu32
_ = v
v = libc.Uint32FromInt32(libc.Int32FromUint8(_jsonHexToInt(tls, libc.Int32FromUint8(**(**uint8)(__ccgo_up(z)))))<<int32(12) + libc.Int32FromUint8(_jsonHexToInt(tls, libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + 1)))))<<int32(8) + libc.Int32FromUint8(_jsonHexToInt(tls, libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + 2)))))<<int32(4) + libc.Int32FromUint8(_jsonHexToInt(tls, libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + 3))))))
return v
}
// C documentation
//
// /*
// ** Return true if z[] begins with 2 (or more) hexadecimal digits
// */
func _jsonIs2Hex(tls *libc.TLS, z uintptr) (r int32) {
return libc.BoolInt32(libc.Int32FromUint8(_sqlite3CtypeMap[uint8(**(**uint8)(__ccgo_up(z)))])&int32(0x08) != 0 && libc.Int32FromUint8(_sqlite3CtypeMap[uint8(**(**uint8)(__ccgo_up(z + 1)))])&int32(0x08) != 0)
}
// C documentation
//
// /*
// ** If z[0] is 'u' and is followed by exactly 4 hexadecimal character,
// ** then set *pOp to JSONB_TEXTJ and return true. If not, do not make
// ** any changes to *pOp and return false.
// */
func _jsonIs4HexB(tls *libc.TLS, z uintptr, pOp uintptr) (r int32) {
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z))) != int32('u') {
return 0
}
if !(_jsonIs4Hex(tls, z+1) != 0) {
return 0
}
**(**int32)(__ccgo_up(pOp)) = int32(JSONB_TEXTJ)
return int32(1)
}
// C documentation
//
// /*
// ** Characters that are special to JSON. Control characters,
// ** '"' and '\\' and '\''. Actually, '\'' is not special to
// ** canonical JSON, but it is special in JSON-5, so we include
// ** it in the set of special characters.
// */
var _jsonIsOk = [256]uint8{
32: uint8(1),
33: uint8(1),
35: uint8(1),
36: uint8(1),
37: uint8(1),
38: uint8(1),
40: uint8(1),
41: uint8(1),
42: uint8(1),
43: uint8(1),
44: uint8(1),
45: uint8(1),
46: uint8(1),
47: uint8(1),
48: uint8(1),
49: uint8(1),
50: uint8(1),
51: uint8(1),
52: uint8(1),
53: uint8(1),
54: uint8(1),
55: uint8(1),
56: uint8(1),
57: uint8(1),
58: uint8(1),
59: uint8(1),
60: uint8(1),
61: uint8(1),
62: uint8(1),
63: uint8(1),
64: uint8(1),
65: uint8(1),
66: uint8(1),
67: uint8(1),
68: uint8(1),
69: uint8(1),
70: uint8(1),
71: uint8(1),
72: uint8(1),
73: uint8(1),
74: uint8(1),
75: uint8(1),
76: uint8(1),
77: uint8(1),
78: uint8(1),
79: uint8(1),
80: uint8(1),
81: uint8(1),
82: uint8(1),
83: uint8(1),
84: uint8(1),
85: uint8(1),
86: uint8(1),
87: uint8(1),
88: uint8(1),
89: uint8(1),
90: uint8(1),
91: uint8(1),
93: uint8(1),
94: uint8(1),
95: uint8(1),
96: uint8(1),
97: uint8(1),
98: uint8(1),
99: uint8(1),
100: uint8(1),
101: uint8(1),
102: uint8(1),
103: uint8(1),
104: uint8(1),
105: uint8(1),
106: uint8(1),
107: uint8(1),
108: uint8(1),
109: uint8(1),
110: uint8(1),
111: uint8(1),
112: uint8(1),
113: uint8(1),
114: uint8(1),
115: uint8(1),
116: uint8(1),
117: uint8(1),
118: uint8(1),
119: uint8(1),
120: uint8(1),
121: uint8(1),
122: uint8(1),
123: uint8(1),
124: uint8(1),
125: uint8(1),
126: uint8(1),
127: uint8(1),
128: uint8(1),
129: uint8(1),
130: uint8(1),
131: uint8(1),
132: uint8(1),
133: uint8(1),
134: uint8(1),
135: uint8(1),
136: uint8(1),
137: uint8(1),
138: uint8(1),
139: uint8(1),
140: uint8(1),
141: uint8(1),
142: uint8(1),
143: uint8(1),
144: uint8(1),
145: uint8(1),
146: uint8(1),
147: uint8(1),
148: uint8(1),
149: uint8(1),
150: uint8(1),
151: uint8(1),
152: uint8(1),
153: uint8(1),
154: uint8(1),
155: uint8(1),
156: uint8(1),
157: uint8(1),
158: uint8(1),
159: uint8(1),
160: uint8(1),
161: uint8(1),
162: uint8(1),
163: uint8(1),
164: uint8(1),
165: uint8(1),
166: uint8(1),
167: uint8(1),
168: uint8(1),
169: uint8(1),
170: uint8(1),
171: uint8(1),
172: uint8(1),
173: uint8(1),
174: uint8(1),
175: uint8(1),
176: uint8(1),
177: uint8(1),
178: uint8(1),
179: uint8(1),
180: uint8(1),
181: uint8(1),
182: uint8(1),
183: uint8(1),
184: uint8(1),
185: uint8(1),
186: uint8(1),
187: uint8(1),
188: uint8(1),
189: uint8(1),
190: uint8(1),
191: uint8(1),
192: uint8(1),
193: uint8(1),
194: uint8(1),
195: uint8(1),
196: uint8(1),
197: uint8(1),
198: uint8(1),
199: uint8(1),
200: uint8(1),
201: uint8(1),
202: uint8(1),
203: uint8(1),
204: uint8(1),
205: uint8(1),
206: uint8(1),
207: uint8(1),
208: uint8(1),
209: uint8(1),
210: uint8(1),
211: uint8(1),
212: uint8(1),
213: uint8(1),
214: uint8(1),
215: uint8(1),
216: uint8(1),
217: uint8(1),
218: uint8(1),
219: uint8(1),
220: uint8(1),
221: uint8(1),
222: uint8(1),
223: uint8(1),
224: uint8(1),
225: uint8(1),
226: uint8(1),
227: uint8(1),
228: uint8(1),
229: uint8(1),
230: uint8(1),
231: uint8(1),
232: uint8(1),
233: uint8(1),
234: uint8(1),
235: uint8(1),
236: uint8(1),
237: uint8(1),
238: uint8(1),
239: uint8(1),
240: uint8(1),
241: uint8(1),
242: uint8(1),
243: uint8(1),
244: uint8(1),
245: uint8(1),
246: uint8(1),
247: uint8(1),
248: uint8(1),
249: uint8(1),
250: uint8(1),
251: uint8(1),
252: uint8(1),
253: uint8(1),
254: uint8(1),
255: uint8(1),
}
// C documentation
//
// /*
// ** Growing our own isspace() routine this way is twice as fast as
// ** the library isspace() function, resulting in a 7% overall performance
// ** increase for the text-JSON parser. (Ubuntu14.10 gcc 4.8.4 x64 with -Os).
// */
var _jsonIsSpace = [256]uint8{
9: uint8(1),
10: uint8(1),
13: uint8(1),
32: uint8(1),
}
// C documentation
//
// /*
// ** Compare two object labels. Return 1 if they are equal and
// ** 0 if they differ.
// **
// ** In this version, we know that one or the other or both of the
// ** two comparands contains an escape sequence.
// */
func _jsonLabelCompareEscaped(tls *libc.TLS, zLeft uintptr, nLeft Tu32, rawLeft int32, zRight uintptr, nRight Tu32, rawRight int32) (r int32) {
bp := tls.Alloc(16)
defer tls.Free(16)
var n, n1 Tu32
var sz, sz1 int32
var _ /* cLeft at bp+0 */ Tu32
var _ /* cRight at bp+4 */ Tu32
_, _, _, _ = n, n1, sz, sz1
for int32(1) != 0 {
if nLeft == uint32(0) {
**(**Tu32)(__ccgo_up(bp)) = uint32(0)
} else {
if rawLeft != 0 || libc.Int32FromUint8(**(**uint8)(__ccgo_up(zLeft))) != int32('\\') {
**(**Tu32)(__ccgo_up(bp)) = uint32(**(**Tu8)(__ccgo_up(zLeft)))
if **(**Tu32)(__ccgo_up(bp)) >= uint32(0xc0) {
sz = _sqlite3Utf8ReadLimited(tls, zLeft, libc.Int32FromUint32(nLeft), bp)
zLeft = zLeft + uintptr(sz)
nLeft = nLeft - libc.Uint32FromInt32(sz)
} else {
zLeft = zLeft + 1
nLeft = nLeft - 1
}
} else {
n = _jsonUnescapeOneChar(tls, zLeft, nLeft, bp)
zLeft = zLeft + uintptr(n)
nLeft = nLeft - n
}
}
if nRight == uint32(0) {
**(**Tu32)(__ccgo_up(bp + 4)) = uint32(0)
} else {
if rawRight != 0 || libc.Int32FromUint8(**(**uint8)(__ccgo_up(zRight))) != int32('\\') {
**(**Tu32)(__ccgo_up(bp + 4)) = uint32(**(**Tu8)(__ccgo_up(zRight)))
if **(**Tu32)(__ccgo_up(bp + 4)) >= uint32(0xc0) {
sz1 = _sqlite3Utf8ReadLimited(tls, zRight, libc.Int32FromUint32(nRight), bp+4)
zRight = zRight + uintptr(sz1)
nRight = nRight - libc.Uint32FromInt32(sz1)
} else {
zRight = zRight + 1
nRight = nRight - 1
}
} else {
n1 = _jsonUnescapeOneChar(tls, zRight, nRight, bp+4)
zRight = zRight + uintptr(n1)
nRight = nRight - n1
}
}
if **(**Tu32)(__ccgo_up(bp)) != **(**Tu32)(__ccgo_up(bp + 4)) {
return 0
}
if **(**Tu32)(__ccgo_up(bp)) == uint32(0) {
return int32(1)
}
}
return r
}
// C documentation
//
// /*
// ** The set of all space characters recognized by jsonIsspace().
// ** Useful as the second argument to strspn().
// */
var _jsonSpaces = [5]uint8{9, 10, 13, ' '}
// C documentation
//
// /* Make sure there is a zero terminator on p->zBuf[]
// **
// ** Return true on success. Return false if an OOM prevents this
// ** from happening.
// */
func _jsonStringTerminate(tls *libc.TLS, p uintptr) (r int32) {
_jsonAppendChar(tls, p, uint8(0))
_jsonStringTrimOneChar(tls, p)
return libc.BoolInt32(libc.Int32FromUint8((*TJsonString)(unsafe.Pointer(p)).FeErr) == 0)
}
// C documentation
//
// /*
// ** Input z[0..n] defines JSON escape sequence including the leading '\\'.
// ** Decode that escape sequence into a single character. Write that
// ** character into *piOut. Return the number of bytes in the escape sequence.
// **
// ** If there is a syntax error of some kind (for example too few characters
// ** after the '\\' to complete the encoding) then *piOut is set to
// ** JSON_INVALID_CHAR.
// */
func _jsonUnescapeOneChar(tls *libc.TLS, z uintptr, n Tu32, piOut uintptr) (r Tu32) {
var nSkip, v, vlo, v1 Tu32
var sz, v3 int32
var v2 bool
_, _, _, _, _, _, _ = nSkip, sz, v, vlo, v1, v2, v3
if n < uint32(2) {
**(**Tu32)(__ccgo_up(piOut)) = uint32(JSON_INVALID_CHAR)
return n
}
switch libc.Int32FromUint8(uint8(**(**uint8)(__ccgo_up(z + 1)))) {
case int32('u'):
if n < uint32(6) {
**(**Tu32)(__ccgo_up(piOut)) = uint32(JSON_INVALID_CHAR)
return n
}
v = _jsonHexToInt4(tls, z+2)
if v2 = v&uint32(0xfc00) == uint32(0xd800) && n >= uint32(12) && libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + 6))) == int32('\\') && libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + 7))) == int32('u'); v2 {
v1 = _jsonHexToInt4(tls, z+8)
vlo = v1
}
if v2 && v1&uint32(0xfc00) == uint32(0xdc00) {
**(**Tu32)(__ccgo_up(piOut)) = v&uint32(0x3ff)<<int32(10) + vlo&uint32(0x3ff) + uint32(0x10000)
return uint32(12)
} else {
**(**Tu32)(__ccgo_up(piOut)) = v
return uint32(6)
}
fallthrough
case int32('b'):
**(**Tu32)(__ccgo_up(piOut)) = uint32('\b')
return uint32(2)
case int32('f'):
**(**Tu32)(__ccgo_up(piOut)) = uint32('\f')
return uint32(2)
case int32('n'):
**(**Tu32)(__ccgo_up(piOut)) = uint32('\n')
return uint32(2)
case int32('r'):
**(**Tu32)(__ccgo_up(piOut)) = uint32('\r')
return uint32(2)
case int32('t'):
**(**Tu32)(__ccgo_up(piOut)) = uint32('\t')
return uint32(2)
case int32('v'):
**(**Tu32)(__ccgo_up(piOut)) = uint32('\v')
return uint32(2)
case int32('0'):
/* JSON5 requires that the \0 escape not be followed by a digit.
** But SQLite did not enforce this restriction in versions 3.42.0
** through 3.49.2. That was a bug. But some applications might have
** come to depend on that bug. Use the SQLITE_BUG_COMPATIBLE_20250510
** option to restore the old buggy behavior. */
/* Correct behavior */
if n > uint32(2) && libc.Int32FromUint8(_sqlite3CtypeMap[uint8(**(**uint8)(__ccgo_up(z + 2)))])&int32(0x04) != 0 {
v3 = int32(JSON_INVALID_CHAR)
} else {
v3 = 0
}
**(**Tu32)(__ccgo_up(piOut)) = libc.Uint32FromInt32(v3)
return uint32(2)
case int32('\''):
fallthrough
case int32('"'):
fallthrough
case int32('/'):
fallthrough
case int32('\\'):
**(**Tu32)(__ccgo_up(piOut)) = uint32(**(**uint8)(__ccgo_up(z + 1)))
return uint32(2)
case int32('x'):
if n < uint32(4) {
**(**Tu32)(__ccgo_up(piOut)) = uint32(JSON_INVALID_CHAR)
return n
}
**(**Tu32)(__ccgo_up(piOut)) = libc.Uint32FromInt32(libc.Int32FromUint8(_jsonHexToInt(tls, libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + 2)))))<<int32(4) | libc.Int32FromUint8(_jsonHexToInt(tls, libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + 3))))))
return uint32(4)
case int32(0xe2):
fallthrough
case int32('\r'):
fallthrough
case int32('\n'):
nSkip = _jsonBytesToBypass(tls, z, n)
if nSkip == uint32(0) {
**(**Tu32)(__ccgo_up(piOut)) = uint32(JSON_INVALID_CHAR)
return n
} else {
if nSkip == n {
**(**Tu32)(__ccgo_up(piOut)) = uint32(0)
return n
} else {
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(nSkip)))) == int32('\\') {
return nSkip + _jsonUnescapeOneChar(tls, z+uintptr(nSkip), n-nSkip, piOut)
} else {
sz = _sqlite3Utf8ReadLimited(tls, z+uintptr(nSkip), libc.Int32FromUint32(n-nSkip), piOut)
return nSkip + libc.Uint32FromInt32(sz)
}
}
}
fallthrough
default:
**(**Tu32)(__ccgo_up(piOut)) = uint32(JSON_INVALID_CHAR)
return uint32(2)
}
return r
}
// C documentation
//
// /* Hash table decoded:
// ** 0: INSERT
// ** 1: IS
// ** 2: ROLLBACK TRIGGER
// ** 3: IMMEDIATE
// ** 4: PARTITION
// ** 5: TEMP
// ** 6:
// ** 7:
// ** 8: VALUES WITHOUT
// ** 9:
// ** 10: MATCH
// ** 11: NOTHING
// ** 12:
// ** 13: OF
// ** 14: TIES IGNORE
// ** 15: PLAN
// ** 16: INSTEAD INDEXED
// ** 17:
// ** 18: TRANSACTION RIGHT
// ** 19: WHEN
// ** 20: SET HAVING
// ** 21: MATERIALIZED IF
// ** 22: ROWS
// ** 23: SELECT
// ** 24:
// ** 25:
// ** 26: VACUUM SAVEPOINT
// ** 27:
// ** 28: LIKE UNION VIRTUAL REFERENCES
// ** 29: RESTRICT
// ** 30:
// ** 31: THEN REGEXP
// ** 32: TO
// ** 33:
// ** 34: BEFORE
// ** 35:
// ** 36:
// ** 37: FOLLOWING COLLATE CASCADE
// ** 38: CREATE
// ** 39:
// ** 40: CASE REINDEX
// ** 41: EACH
// ** 42:
// ** 43: QUERY
// ** 44: AND ADD
// ** 45: PRIMARY ANALYZE
// ** 46:
// ** 47: ROW ASC DETACH
// ** 48: CURRENT_TIME CURRENT_DATE
// ** 49:
// ** 50:
// ** 51: EXCLUSIVE TEMPORARY
// ** 52:
// ** 53: DEFERRED
// ** 54: DEFERRABLE
// ** 55:
// ** 56: DATABASE
// ** 57:
// ** 58: DELETE VIEW GENERATED
// ** 59: ATTACH
// ** 60: END
// ** 61: EXCLUDE
// ** 62: ESCAPE DESC
// ** 63: GLOB
// ** 64: WINDOW ELSE
// ** 65: COLUMN
// ** 66: FIRST
// ** 67:
// ** 68: GROUPS ALL
// ** 69: DISTINCT DROP KEY
// ** 70: BETWEEN
// ** 71: INITIALLY
// ** 72: BEGIN
// ** 73: FILTER CHECK ACTION
// ** 74: GROUP INDEX
// ** 75:
// ** 76: EXISTS DEFAULT
// ** 77:
// ** 78: FOR CURRENT_TIMESTAMP
// ** 79: EXCEPT
// ** 80:
// ** 81: CROSS
// ** 82:
// ** 83:
// ** 84:
// ** 85: CAST
// ** 86: FOREIGN AUTOINCREMENT
// ** 87: COMMIT
// ** 88: CURRENT AFTER ALTER
// ** 89: FULL FAIL CONFLICT
// ** 90: EXPLAIN
// ** 91: CONSTRAINT
// ** 92: FROM ALWAYS
// ** 93:
// ** 94: ABORT
// ** 95:
// ** 96: AS DO
// ** 97: REPLACE WITH RELEASE
// ** 98: BY RENAME
// ** 99: RANGE RAISE
// ** 100: OTHERS
// ** 101: USING NULLS
// ** 102: PRAGMA
// ** 103: JOIN ISNULL OFFSET
// ** 104: NOT
// ** 105: OR LAST LEFT
// ** 106: LIMIT
// ** 107:
// ** 108:
// ** 109: IN
// ** 110: INTO
// ** 111: OVER RECURSIVE
// ** 112: ORDER OUTER
// ** 113:
// ** 114: INTERSECT UNBOUNDED
// ** 115:
// ** 116:
// ** 117: RETURNING ON
// ** 118:
// ** 119: WHERE
// ** 120: NO INNER
// ** 121: NULL
// ** 122:
// ** 123: TABLE
// ** 124: NATURAL NOTNULL
// ** 125: PRECEDING
// ** 126: UPDATE UNIQUE
// */
// /* Check to see if z[0..n-1] is a keyword. If it is, write the
// ** parser symbol code for that keyword into *pType. Always
// ** return the integer n (the length of the token). */
func _keywordCode(tls *libc.TLS, z uintptr, n Ti64, pType uintptr) (r Ti64) {
var i, j Ti64
var zKW uintptr
_, _, _ = i, j, zKW
i = (int64(libc.Int32FromUint8(_sqlite3UpperToLower[uint8(**(**uint8)(__ccgo_up(z)))])*int32(4)^libc.Int32FromUint8(_sqlite3UpperToLower[uint8(**(**uint8)(__ccgo_up(z + uintptr(n-int64(1)))))])*int32(3)) ^ n*int64(1)) % int64(127)
i = int64(libc.Int32FromUint8(_aKWHash[i]))
for {
if !(i > 0) {
break
}
if libc.Int64FromUint8(_aKWLen[i]) != n {
goto _1
}
zKW = uintptr(unsafe.Pointer(&_zKWText)) + uintptr(_aKWOffset[i])
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z))) & ^libc.Int32FromInt32(0x20) != libc.Int32FromUint8(**(**uint8)(__ccgo_up(zKW))) {
goto _1
}
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + 1))) & ^libc.Int32FromInt32(0x20) != libc.Int32FromUint8(**(**uint8)(__ccgo_up(zKW + 1))) {
goto _1
}
j = int64(2)
for j < n && libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(j)))) & ^libc.Int32FromInt32(0x20) == libc.Int32FromUint8(**(**uint8)(__ccgo_up(zKW + uintptr(j)))) {
j = j + 1
}
if j < n {
goto _1
}
/* REINDEX */
/* INDEXED */
/* INDEX */
/* DESC */
/* ESCAPE */
/* EACH */
/* CHECK */
/* KEY */
/* BEFORE */
/* FOREIGN */
/* FOR */
/* IGNORE */
/* REGEXP */
/* EXPLAIN */
/* INSTEAD */
/* ADD */
/* DATABASE */
/* AS */
/* SELECT */
/* TABLE */
/* LEFT */
/* THEN */
/* END */
/* DEFERRABLE */
/* ELSE */
/* EXCLUDE */
/* DELETE */
/* TEMPORARY */
/* TEMP */
/* OR */
/* ISNULL */
/* NULLS */
/* SAVEPOINT */
/* INTERSECT */
/* TIES */
/* NOTNULL */
/* NOT */
/* NO */
/* NULL */
/* LIKE */
/* EXCEPT */
/* TRANSACTION */
/* ACTION */
/* ON */
/* NATURAL */
/* ALTER */
/* RAISE */
/* EXCLUSIVE */
/* EXISTS */
/* CONSTRAINT */
/* INTO */
/* OFFSET */
/* OF */
/* SET */
/* TRIGGER */
/* RANGE */
/* GENERATED */
/* DETACH */
/* HAVING */
/* GLOB */
/* BEGIN */
/* INNER */
/* REFERENCES */
/* UNIQUE */
/* QUERY */
/* WITHOUT */
/* WITH */
/* OUTER */
/* RELEASE */
/* ATTACH */
/* BETWEEN */
/* NOTHING */
/* GROUPS */
/* GROUP */
/* CASCADE */
/* ASC */
/* DEFAULT */
/* CASE */
/* COLLATE */
/* CREATE */
/* CURRENT_DATE */
/* IMMEDIATE */
/* JOIN */
/* INSERT */
/* MATCH */
/* PLAN */
/* ANALYZE */
/* PRAGMA */
/* MATERIALIZED */
/* DEFERRED */
/* DISTINCT */
/* IS */
/* UPDATE */
/* VALUES */
/* VIRTUAL */
/* ALWAYS */
/* WHEN */
/* WHERE */
/* RECURSIVE */
/* ABORT */
/* AFTER */
/* RENAME */
/* AND */
/* DROP */
/* PARTITION */
/* AUTOINCREMENT */
/* TO */
/* IN */
/* CAST */
/* COLUMN */
/* COMMIT */
/* CONFLICT */
/* CROSS */
/* CURRENT_TIMESTAMP */
/* CURRENT_TIME */
/* CURRENT */
/* PRECEDING */
/* FAIL */
/* LAST */
/* FILTER */
/* REPLACE */
/* FIRST */
/* FOLLOWING */
/* FROM */
/* FULL */
/* LIMIT */
/* IF */
/* ORDER */
/* RESTRICT */
/* OTHERS */
/* OVER */
/* RETURNING */
/* RIGHT */
/* ROLLBACK */
/* ROWS */
/* ROW */
/* UNBOUNDED */
/* UNION */
/* USING */
/* VACUUM */
/* VIEW */
/* WINDOW */
/* DO */
/* BY */
/* INITIALLY */
/* ALL */
/* PRIMARY */
**(**int32)(__ccgo_up(pType)) = libc.Int32FromUint8(_aKWCode[i])
break
goto _1
_1:
;
i = libc.Int64FromUint8(_aKWNext[i])
}
return n
}
var _lagName = [4]uint8{'l', 'a', 'g'}
var _last_valueName = [11]uint8{'l', 'a', 's', 't', '_', 'v', 'a', 'l', 'u', 'e'}
var _leadName = [5]uint8{'l', 'e', 'a', 'd'}
func _lowerFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) {
var i, n int32
var z1, z2 uintptr
_, _, _, _ = i, n, z1, z2
_ = argc
z2 = Xsqlite3_value_text(tls, **(**uintptr)(__ccgo_up(argv)))
n = Xsqlite3_value_bytes(tls, **(**uintptr)(__ccgo_up(argv)))
/* Verify that the call to _bytes() does not invalidate the _text() pointer */
if z2 != 0 {
z1 = _contextMalloc(tls, context, int64(n)+int64(1))
if z1 != 0 {
i = 0
for {
if !(i < n) {
break
}
**(**uint8)(__ccgo_up(z1 + uintptr(i))) = _sqlite3UpperToLower[uint8(**(**uint8)(__ccgo_up(z2 + uintptr(i))))]
goto _1
_1:
;
i = i + 1
}
Xsqlite3_result_text(tls, context, z1, n, __ccgo_fp(Xsqlite3_free))
}
}
}
/*
** Some functions like COALESCE() and IFNULL() and UNLIKELY() are implemented
** as VDBE code so that unused argument values do not have to be computed.
** However, we still need some kind of function implementation for this
** routines in the function table. The noopFunc macro provides this.
** noopFunc will never be called so it doesn't matter what the implementation
** is. We might as well use the "version()" function as a substitute.
*/
var _nth_valueName = [10]uint8{'n', 't', 'h', '_', 'v', 'a', 'l', 'u', 'e'}
var _ntileName = [6]uint8{'n', 't', 'i', 'l', 'e'}
/* nullRow[] is an OP_Record encoding of a row containing 5 NULLs */
var _nullRow = [6]uint8{
0: uint8(6),
}
/* Set properties of a table column based on the (magical)
** name of the column.
*/
var _percent_rankName = [13]uint8{'p', 'e', 'r', 'c', 'e', 'n', 't', '_', 'r', 'a', 'n', 'k'}
// C documentation
//
// /*
// ** Write an entry into the pointer map.
// **
// ** This routine updates the pointer map entry for page number 'key'
// ** so that it maps to type 'eType' and parent page number 'pgno'.
// **
// ** If *pRC is initially non-zero (non-SQLITE_OK) then this routine is
// ** a no-op. If an error occurs, the appropriate error code is written
// ** into *pRC.
// */
func _ptrmapPut(tls *libc.TLS, pBt uintptr, key TPgno, eType Tu8, parent TPgno, pRC uintptr) {
bp := tls.Alloc(16)
defer tls.Free(16)
var iPtrmap TPgno
var offset, rc, v1 int32
var pPtrmap uintptr
var _ /* pDbPage at bp+0 */ uintptr
_, _, _, _, _ = iPtrmap, offset, pPtrmap, rc, v1 /* Return code from subfunctions */
if **(**int32)(__ccgo_up(pRC)) != 0 {
return
}
/* The super-journal page number must never be used as a pointer map page */
if key == uint32(0) {
**(**int32)(__ccgo_up(pRC)) = _sqlite3CorruptError(tls, int32(74301))
return
}
iPtrmap = _ptrmapPageno(tls, pBt, key)
rc = _sqlite3PagerGet(tls, (*TBtShared)(unsafe.Pointer(pBt)).FpPager, iPtrmap, bp, 0)
if rc != SQLITE_OK {
**(**int32)(__ccgo_up(pRC)) = rc
return
}
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(_sqlite3PagerGetExtra(tls, **(**uintptr)(__ccgo_up(bp)))))) != 0 {
/* The first byte of the extra data is the MemPage.isInit byte.
** If that byte is set, it means this page is also being used
** as a btree page. */
**(**int32)(__ccgo_up(pRC)) = _sqlite3CorruptError(tls, int32(74314))
goto ptrmap_exit
}
offset = libc.Int32FromUint32(libc.Uint32FromInt32(5) * (key - iPtrmap - libc.Uint32FromInt32(1)))
if offset < 0 {
**(**int32)(__ccgo_up(pRC)) = _sqlite3CorruptError(tls, int32(74319))
goto ptrmap_exit
}
pPtrmap = _sqlite3PagerGetData(tls, **(**uintptr)(__ccgo_up(bp)))
if libc.Int32FromUint8(eType) != libc.Int32FromUint8(**(**Tu8)(__ccgo_up(pPtrmap + uintptr(offset)))) || _sqlite3Get4byte(tls, pPtrmap+uintptr(offset+int32(1))) != parent {
v1 = _sqlite3PagerWrite(tls, **(**uintptr)(__ccgo_up(bp)))
rc = v1
**(**int32)(__ccgo_up(pRC)) = v1
if rc == SQLITE_OK {
**(**Tu8)(__ccgo_up(pPtrmap + uintptr(offset))) = eType
_sqlite3Put4byte(tls, pPtrmap+uintptr(offset+int32(1)), parent)
}
}
goto ptrmap_exit
ptrmap_exit:
;
_sqlite3PagerUnref(tls, **(**uintptr)(__ccgo_up(bp)))
}
var _rankName = [5]uint8{'r', 'a', 'n', 'k'}
// C documentation
//
// /*
// ** Return a nul-terminated string consisting of nByte comma separated
// ** "?" expressions. For example, if nByte is 3, return a pointer to
// ** a buffer containing the string "?,?,?".
// **
// ** The memory for the returned string is obtained from sqlite3_malloc().
// ** It is the responsibility of the caller to eventually free it using
// ** sqlite3_free().
// **
// ** If an OOM error is encountered when allocating space for the new
// ** string, an error code is left in the rbu handle passed as the first
// ** argument and NULL is returned. Or, if an error has already occurred
// ** when this function is called, NULL is returned immediately, without
// ** attempting the allocation or modifying the stored error code.
// */
func _rbuObjIterGetBindlist(tls *libc.TLS, p uintptr, nBind int32) (r uintptr) {
var i, v2 int32
var nByte Tsqlite3_int64
var zRet uintptr
_, _, _, _ = i, nByte, zRet, v2
zRet = uintptr(0)
nByte = int64(2)*int64(nBind) + int64(1)
zRet = _rbuMalloc(tls, p, nByte)
if zRet != 0 {
i = 0
for {
if !(i < nBind) {
break
}
**(**uint8)(__ccgo_up(zRet + uintptr(i*int32(2)))) = uint8('?')
if i+int32(1) == nBind {
v2 = int32('\000')
} else {
v2 = int32(',')
}
**(**uint8)(__ccgo_up(zRet + uintptr(i*int32(2)+int32(1)))) = libc.Uint8FromInt32(v2)
goto _1
_1:
;
i = i + 1
}
}
return zRet
}
// C documentation
//
// /*
// ** Static names for the built-in window function names. These static
// ** names are used, rather than string literals, so that FuncDef objects
// ** can be associated with a particular window function by direct
// ** comparison of the zName pointer. Example:
// **
// ** if( pFuncDef->zName==row_valueName ){ ... }
// */
var _row_numberName = [11]uint8{'r', 'o', 'w', '_', 'n', 'u', 'm', 'b', 'e', 'r'}
// C documentation
//
// /*
// ** Set the time to the current time reported by the VFS.
// **
// ** Return the number of errors.
// */
func _setDateTimeToCurrent(tls *libc.TLS, context uintptr, p uintptr) (r int32) {
(*TDateTime)(unsafe.Pointer(p)).FiJD = _sqlite3StmtCurrentTime(tls, context)
if (*TDateTime)(unsafe.Pointer(p)).FiJD > 0 {
(*TDateTime)(unsafe.Pointer(p)).FvalidJD = uint8(1)
libc.SetBitFieldPtr8Uint32(p+44, libc.Uint32FromInt32(1), 3, 0x8)
libc.SetBitFieldPtr8Uint32(p+44, libc.Uint32FromInt32(0), 4, 0x10)
_clearYMD_HMS_TZ(tls, p)
return 0
} else {
return int32(1)
}
return r
}
// C documentation
//
// /*
// ** Scan the column type name zType (length nType) and return the
// ** associated affinity type.
// **
// ** This routine does a case-independent search of zType for the
// ** substrings in the following table. If one of the substrings is
// ** found, the corresponding affinity is returned. If zType contains
// ** more than one of the substrings, entries toward the top of
// ** the table take priority. For example, if zType is 'BLOBINT',
// ** SQLITE_AFF_INTEGER is returned.
// **
// ** Substring | Affinity
// ** --------------------------------
// ** 'INT' | SQLITE_AFF_INTEGER
// ** 'CHAR' | SQLITE_AFF_TEXT
// ** 'CLOB' | SQLITE_AFF_TEXT
// ** 'TEXT' | SQLITE_AFF_TEXT
// ** 'BLOB' | SQLITE_AFF_BLOB
// ** 'REAL' | SQLITE_AFF_REAL
// ** 'FLOA' | SQLITE_AFF_REAL
// ** 'DOUB' | SQLITE_AFF_REAL
// **
// ** If none of the substrings in the above table are found,
// ** SQLITE_AFF_NUMERIC is returned.
// */
func _sqlite3AffinityType(tls *libc.TLS, zIn uintptr, pCol uintptr) (r uint8) {
bp := tls.Alloc(16)
defer tls.Free(16)
var aff uint8
var h Tu32
var x Tu8
var zChar uintptr
var _ /* v at bp+0 */ int32
_, _, _, _ = aff, h, x, zChar
h = uint32(0)
aff = uint8(SQLITE_AFF_NUMERIC)
zChar = uintptr(0)
for **(**uint8)(__ccgo_up(zIn)) != 0 {
x = **(**Tu8)(__ccgo_up(zIn))
h = h<<libc.Int32FromInt32(8) + uint32(_sqlite3UpperToLower[x])
zIn = zIn + 1
if h == libc.Uint32FromInt32(libc.Int32FromUint8('c')<<libc.Int32FromInt32(24)+libc.Int32FromUint8('h')<<libc.Int32FromInt32(16)+libc.Int32FromUint8('a')<<libc.Int32FromInt32(8)+libc.Int32FromUint8('r')) { /* CHAR */
aff = uint8(SQLITE_AFF_TEXT)
zChar = zIn
} else {
if h == libc.Uint32FromInt32(libc.Int32FromUint8('c')<<libc.Int32FromInt32(24)+libc.Int32FromUint8('l')<<libc.Int32FromInt32(16)+libc.Int32FromUint8('o')<<libc.Int32FromInt32(8)+libc.Int32FromUint8('b')) { /* CLOB */
aff = uint8(SQLITE_AFF_TEXT)
} else {
if h == libc.Uint32FromInt32(libc.Int32FromUint8('t')<<libc.Int32FromInt32(24)+libc.Int32FromUint8('e')<<libc.Int32FromInt32(16)+libc.Int32FromUint8('x')<<libc.Int32FromInt32(8)+libc.Int32FromUint8('t')) { /* TEXT */
aff = uint8(SQLITE_AFF_TEXT)
} else {
if h == libc.Uint32FromInt32(libc.Int32FromUint8('b')<<libc.Int32FromInt32(24)+libc.Int32FromUint8('l')<<libc.Int32FromInt32(16)+libc.Int32FromUint8('o')<<libc.Int32FromInt32(8)+libc.Int32FromUint8('b')) && (libc.Int32FromUint8(aff) == int32(SQLITE_AFF_NUMERIC) || libc.Int32FromUint8(aff) == int32(SQLITE_AFF_REAL)) {
aff = uint8(SQLITE_AFF_BLOB)
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(zIn))) == int32('(') {
zChar = zIn
}
} else {
if h == libc.Uint32FromInt32(libc.Int32FromUint8('r')<<libc.Int32FromInt32(24)+libc.Int32FromUint8('e')<<libc.Int32FromInt32(16)+libc.Int32FromUint8('a')<<libc.Int32FromInt32(8)+libc.Int32FromUint8('l')) && libc.Int32FromUint8(aff) == int32(SQLITE_AFF_NUMERIC) {
aff = uint8(SQLITE_AFF_REAL)
} else {
if h == libc.Uint32FromInt32(libc.Int32FromUint8('f')<<libc.Int32FromInt32(24)+libc.Int32FromUint8('l')<<libc.Int32FromInt32(16)+libc.Int32FromUint8('o')<<libc.Int32FromInt32(8)+libc.Int32FromUint8('a')) && libc.Int32FromUint8(aff) == int32(SQLITE_AFF_NUMERIC) {
aff = uint8(SQLITE_AFF_REAL)
} else {
if h == libc.Uint32FromInt32(libc.Int32FromUint8('d')<<libc.Int32FromInt32(24)+libc.Int32FromUint8('o')<<libc.Int32FromInt32(16)+libc.Int32FromUint8('u')<<libc.Int32FromInt32(8)+libc.Int32FromUint8('b')) && libc.Int32FromUint8(aff) == int32(SQLITE_AFF_NUMERIC) {
aff = uint8(SQLITE_AFF_REAL)
} else {
if h&uint32(0x00FFFFFF) == libc.Uint32FromInt32(libc.Int32FromUint8('i')<<libc.Int32FromInt32(16)+libc.Int32FromUint8('n')<<libc.Int32FromInt32(8)+libc.Int32FromUint8('t')) { /* INT */
aff = uint8(SQLITE_AFF_INTEGER)
break
}
}
}
}
}
}
}
}
}
/* If pCol is not NULL, store an estimate of the field size. The
** estimate is scaled so that the size of an integer is 1. */
if pCol != 0 {
**(**int32)(__ccgo_up(bp)) = 0 /* default size is approx 4 bytes */
if libc.Int32FromUint8(aff) < int32(SQLITE_AFF_NUMERIC) {
if zChar != 0 {
for **(**uint8)(__ccgo_up(zChar)) != 0 {
if libc.Int32FromUint8(_sqlite3CtypeMap[uint8(**(**uint8)(__ccgo_up(zChar)))])&int32(0x04) != 0 {
/* BLOB(k), VARCHAR(k), CHAR(k) -> r=(k/4+1) */
_sqlite3GetInt32(tls, zChar, bp)
break
}
zChar = zChar + 1
}
} else {
**(**int32)(__ccgo_up(bp)) = int32(16) /* BLOB, TEXT, CLOB -> r=5 (approx 20 bytes)*/
}
}
**(**int32)(__ccgo_up(bp)) = **(**int32)(__ccgo_up(bp))/int32(4) + int32(1)
if **(**int32)(__ccgo_up(bp)) > int32(255) {
**(**int32)(__ccgo_up(bp)) = int32(255)
}
(*TColumn)(unsafe.Pointer(pCol)).FszEst = libc.Uint8FromInt32(**(**int32)(__ccgo_up(bp)))
}
return aff
}
// C documentation
//
// /*
// ** Write a single UTF8 character whose value is v into the
// ** buffer starting at zOut. zOut must be sized to hold at
// ** least four bytes. Return the number of bytes needed
// ** to encode the new character.
// */
func _sqlite3AppendOneUtf8Character(tls *libc.TLS, zOut uintptr, v Tu32) (r int32) {
if v < uint32(0x00080) {
**(**uint8)(__ccgo_up(zOut)) = uint8(v & libc.Uint32FromInt32(0xff))
return int32(1)
}
if v < uint32(0x00800) {
**(**uint8)(__ccgo_up(zOut)) = libc.Uint8FromInt32(int32(0xc0) + libc.Int32FromUint8(uint8(v>>libc.Int32FromInt32(6)&libc.Uint32FromInt32(0x1f))))
**(**uint8)(__ccgo_up(zOut + 1)) = libc.Uint8FromInt32(int32(0x80) + libc.Int32FromUint8(uint8(v&libc.Uint32FromInt32(0x3f))))
return int32(2)
}
if v < uint32(0x10000) {
**(**uint8)(__ccgo_up(zOut)) = libc.Uint8FromInt32(int32(0xe0) + libc.Int32FromUint8(uint8(v>>libc.Int32FromInt32(12)&libc.Uint32FromInt32(0x0f))))
**(**uint8)(__ccgo_up(zOut + 1)) = libc.Uint8FromInt32(int32(0x80) + libc.Int32FromUint8(uint8(v>>libc.Int32FromInt32(6)&libc.Uint32FromInt32(0x3f))))
**(**uint8)(__ccgo_up(zOut + 2)) = libc.Uint8FromInt32(int32(0x80) + libc.Int32FromUint8(uint8(v&libc.Uint32FromInt32(0x3f))))
return int32(3)
}
**(**uint8)(__ccgo_up(zOut)) = libc.Uint8FromInt32(int32(0xf0) + libc.Int32FromUint8(uint8(v>>libc.Int32FromInt32(18)&libc.Uint32FromInt32(0x07))))
**(**uint8)(__ccgo_up(zOut + 1)) = libc.Uint8FromInt32(int32(0x80) + libc.Int32FromUint8(uint8(v>>libc.Int32FromInt32(12)&libc.Uint32FromInt32(0x3f))))
**(**uint8)(__ccgo_up(zOut + 2)) = libc.Uint8FromInt32(int32(0x80) + libc.Int32FromUint8(uint8(v>>libc.Int32FromInt32(6)&libc.Uint32FromInt32(0x3f))))
**(**uint8)(__ccgo_up(zOut + 3)) = libc.Uint8FromInt32(int32(0x80) + libc.Int32FromUint8(uint8(v&libc.Uint32FromInt32(0x3f))))
return int32(4)
}
// C documentation
//
// /*
// ** Convert zNum to a 64-bit signed integer. zNum must be decimal. This
// ** routine does *not* accept hexadecimal notation.
// **
// ** Returns:
// **
// ** -1 Not even a prefix of the input text looks like an integer
// ** 0 Successful transformation. Fits in a 64-bit signed integer.
// ** 1 Excess non-space text after the integer value
// ** 2 Integer too large for a 64-bit signed integer or is malformed
// ** 3 Special case of 9223372036854775808
// **
// ** length is the number of bytes in the string (bytes, not characters).
// ** The string is not necessarily zero-terminated. The encoding is
// ** given by enc.
// */
func _sqlite3Atoi64(tls *libc.TLS, zNum uintptr, pNum uintptr, length int32, enc Tu8) (r int32) {
var c, v3 uint32
var i, incr, j, jj, neg, nonNum, rc, v6 int32
var u Tu64
var zEnd, zStart uintptr
var v4 bool
var v5 int64
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = c, i, incr, j, jj, neg, nonNum, rc, u, zEnd, zStart, v3, v4, v5, v6
u = uint64(0)
neg = 0
c = uint32(0)
nonNum = 0
zEnd = zNum + uintptr(length)
if libc.Int32FromUint8(enc) == int32(SQLITE_UTF8) {
incr = int32(1)
} else {
incr = int32(2)
length = length & ^libc.Int32FromInt32(1)
i = int32(3) - libc.Int32FromUint8(enc)
for {
if !(i < length && libc.Int32FromUint8(**(**uint8)(__ccgo_up(zNum + uintptr(i)))) == 0) {
break
}
goto _1
_1:
;
i = i + int32(2)
}
nonNum = libc.BoolInt32(i < length)
zEnd = zNum + uintptr(i^int32(1))
zNum = zNum + uintptr(libc.Int32FromUint8(enc)&libc.Int32FromInt32(1))
}
for zNum < zEnd && libc.Int32FromUint8(_sqlite3CtypeMap[uint8(**(**uint8)(__ccgo_up(zNum)))])&int32(0x01) != 0 {
zNum = zNum + uintptr(incr)
}
if zNum < zEnd {
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(zNum))) == int32('-') {
neg = int32(1)
zNum = zNum + uintptr(incr)
} else {
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(zNum))) == int32('+') {
zNum = zNum + uintptr(incr)
}
}
}
zStart = zNum
for zNum < zEnd && libc.Int32FromUint8(**(**uint8)(__ccgo_up(zNum))) == int32('0') {
zNum = zNum + uintptr(incr)
} /* Skip leading zeros. */
i = 0
for {
if v4 = zNum+uintptr(i) < zEnd; v4 {
v3 = uint32(**(**uint8)(__ccgo_up(zNum + uintptr(i)))) - libc.Uint32FromUint8('0')
c = v3
}
if !(v4 && v3 <= uint32(9)) {
break
}
u = u*uint64(10) + uint64(c)
goto _2
_2:
;
i = i + incr
}
if u > libc.Uint64FromInt64(libc.Int64FromUint32(0xffffffff)|libc.Int64FromInt32(0x7fffffff)<<libc.Int32FromInt32(32)) {
/* This test and assignment is needed only to suppress UB warnings
** from clang and -fsanitize=undefined. This test and assignment make
** the code a little larger and slower, and no harm comes from omitting
** them, but we must appease the undefined-behavior pharisees. */
if neg != 0 {
v5 = int64(-libc.Int32FromInt32(1)) - (libc.Int64FromUint32(0xffffffff) | libc.Int64FromInt32(0x7fffffff)<<libc.Int32FromInt32(32))
} else {
v5 = libc.Int64FromUint32(0xffffffff) | libc.Int64FromInt32(0x7fffffff)<<libc.Int32FromInt32(32)
}
**(**Ti64)(__ccgo_up(pNum)) = v5
} else {
if neg != 0 {
**(**Ti64)(__ccgo_up(pNum)) = -libc.Int64FromUint64(u)
} else {
**(**Ti64)(__ccgo_up(pNum)) = libc.Int64FromUint64(u)
}
}
rc = 0
if i == 0 && zStart == zNum { /* No digits */
rc = -int32(1)
} else {
if nonNum != 0 { /* UTF16 with high-order bytes non-zero */
rc = int32(1)
} else {
if zNum+uintptr(i) < zEnd { /* Extra bytes at the end */
jj = i
for cond := true; cond; cond = zNum+uintptr(jj) < zEnd {
if !(libc.Int32FromUint8(_sqlite3CtypeMap[uint8(**(**uint8)(__ccgo_up(zNum + uintptr(jj))))])&libc.Int32FromInt32(0x01) != 0) {
rc = int32(1) /* Extra non-space text after the integer */
break
}
jj = jj + incr
}
}
}
}
if i < int32(19)*incr {
/* Less than 19 digits, so we know that it fits in 64 bits */
return rc
} else {
/* zNum is a 19-digit numbers. Compare it against 9223372036854775808. */
if i > int32(19)*incr {
v6 = int32(1)
} else {
v6 = _compare2pow63(tls, zNum, incr)
}
j = v6
if j < 0 {
/* zNum is less than 9223372036854775808 so it fits */
return rc
} else {
if neg != 0 {
v5 = int64(-libc.Int32FromInt32(1)) - (libc.Int64FromUint32(0xffffffff) | libc.Int64FromInt32(0x7fffffff)<<libc.Int32FromInt32(32))
} else {
v5 = libc.Int64FromUint32(0xffffffff) | libc.Int64FromInt32(0x7fffffff)<<libc.Int32FromInt32(32)
}
**(**Ti64)(__ccgo_up(pNum)) = v5
if j > 0 {
/* zNum is greater than 9223372036854775808 so it overflows */
return int32(2)
} else {
/* zNum is exactly 9223372036854775808. Fits if negative. The
** special case 2 overflow if positive */
if neg != 0 {
v6 = rc
} else {
v6 = int32(3)
}
return v6
}
}
}
return r
}
// C documentation
//
// /*
// ** Return the collating sequence name for a column
// */
func _sqlite3ColumnColl(tls *libc.TLS, pCol uintptr) (r uintptr) {
var z uintptr
_ = z
if libc.Int32FromUint16((*TColumn)(unsafe.Pointer(pCol)).FcolFlags)&int32(COLFLAG_HASCOLL) == 0 {
return uintptr(0)
}
z = (*TColumn)(unsafe.Pointer(pCol)).FzCnName
for **(**uint8)(__ccgo_up(z)) != 0 {
z = z + 1
}
if libc.Int32FromUint16((*TColumn)(unsafe.Pointer(pCol)).FcolFlags)&int32(COLFLAG_HASTYPE) != 0 {
for cond := true; cond; cond = **(**uint8)(__ccgo_up(z)) != 0 {
z = z + 1
}
}
return z + uintptr(1)
}
// C documentation
//
// /*
// ** pExpr is an operand of a comparison operator. aff2 is the
// ** type affinity of the other operand. This routine returns the
// ** type affinity that should be used for the comparison operator.
// */
func _sqlite3CompareAffinity(tls *libc.TLS, pExpr uintptr, aff2 uint8) (r uint8) {
var aff1 uint8
var v1 int32
_, _ = aff1, v1
aff1 = _sqlite3ExprAffinity(tls, pExpr)
if libc.Int32FromUint8(aff1) > int32(SQLITE_AFF_NONE) && libc.Int32FromUint8(aff2) > int32(SQLITE_AFF_NONE) {
/* Both sides of the comparison are columns. If one has numeric
** affinity, use that. Otherwise use no affinity.
*/
if libc.Int32FromUint8(aff1) >= int32(SQLITE_AFF_NUMERIC) || libc.Int32FromUint8(aff2) >= int32(SQLITE_AFF_NUMERIC) {
return uint8(SQLITE_AFF_NUMERIC)
} else {
return uint8(SQLITE_AFF_BLOB)
}
} else {
/* One side is a column, the other is not. Use the columns affinity. */
if libc.Int32FromUint8(aff1) <= int32(SQLITE_AFF_NONE) {
v1 = libc.Int32FromUint8(aff2)
} else {
v1 = libc.Int32FromUint8(aff1)
}
return libc.Uint8FromInt32(v1 | int32(SQLITE_AFF_NONE))
}
return r
}
// C documentation
//
// /*
// ** Convert an SQL-style quoted string into a normal string by removing
// ** the quote characters. The conversion is done in-place. If the
// ** input does not begin with a quote character, then this routine
// ** is a no-op.
// **
// ** The input string must be zero-terminated. A new zero-terminator
// ** is added to the dequoted string.
// **
// ** The return value is -1 if no dequoting occurs or the length of the
// ** dequoted string, exclusive of the zero terminator, if dequoting does
// ** occur.
// **
// ** 2002-02-14: This routine is extended to remove MS-Access style
// ** brackets from around identifiers. For example: "[a-b-c]" becomes
// ** "a-b-c".
// */
func _sqlite3Dequote(tls *libc.TLS, z uintptr) {
var i, j, v2 int32
var quote uint8
_, _, _, _ = i, j, quote, v2
if z == uintptr(0) {
return
}
quote = **(**uint8)(__ccgo_up(z))
if !(libc.Int32FromUint8(_sqlite3CtypeMap[quote])&libc.Int32FromInt32(0x80) != 0) {
return
}
if libc.Int32FromUint8(quote) == int32('[') {
quote = uint8(']')
}
i = int32(1)
j = libc.Int32FromInt32(0)
for {
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(i)))) == libc.Int32FromUint8(quote) {
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(i+int32(1))))) == libc.Int32FromUint8(quote) {
v2 = j
j = j + 1
**(**uint8)(__ccgo_up(z + uintptr(v2))) = quote
i = i + 1
} else {
break
}
} else {
v2 = j
j = j + 1
**(**uint8)(__ccgo_up(z + uintptr(v2))) = **(**uint8)(__ccgo_up(z + uintptr(i)))
}
goto _1
_1:
;
i = i + 1
}
**(**uint8)(__ccgo_up(z + uintptr(j))) = uint8(0)
}
func _sqlite3DequoteExpr(tls *libc.TLS, p uintptr) {
var v1 int32
_ = v1
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(*(*uintptr)(unsafe.Pointer(p + 8))))) == int32('"') {
v1 = libc.Int32FromInt32(EP_Quoted) | libc.Int32FromInt32(EP_DblQuoted)
} else {
v1 = int32(EP_Quoted)
}
**(**Tu32)(__ccgo_up(p + 4)) |= libc.Uint32FromInt32(v1)
_sqlite3Dequote(tls, *(*uintptr)(unsafe.Pointer(p + 8)))
}
// C documentation
//
// /*
// ** Digit pairs used to convert a U64 or I64 into text, two digits
// ** at a time.
// */
var _sqlite3DigitPairs = *(*struct {
FforceAlignment [0]int16
Fa [201]uint8
F__ccgo_pad2 [1]byte
})(unsafe.Pointer(&struct {
f [201]uint8
_ [1]byte
}{f: [201]uint8{'0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0', '7', '0', '8', '0', '9', '1', '0', '1', '1', '1', '2', '1', '3', '1', '4', '1', '5', '1', '6', '1', '7', '1', '8', '1', '9', '2', '0', '2', '1', '2', '2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9', '3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3', '7', '3', '8', '3', '9', '4', '0', '4', '1', '4', '2', '4', '3', '4', '4', '4', '5', '4', '6', '4', '7', '4', '8', '4', '9', '5', '0', '5', '1', '5', '2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9', '6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9', '7', '0', '7', '1', '7', '2', '7', '3', '7', '4', '7', '5', '7', '6', '7', '7', '7', '8', '7', '9', '8', '0', '8', '1', '8', '2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9', '9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9', '7', '9', '8', '9', '9'}}))
/*
** ARMv6, ARMv7, PPC32 are known to not support hardware u64 division.
*/
// C documentation
//
// /*
// ** Return TRUE if the given expression is a constant which would be
// ** unchanged by OP_Affinity with the affinity given in the second
// ** argument.
// **
// ** This routine is used to determine if the OP_Affinity operation
// ** can be omitted. When in doubt return FALSE. A false negative
// ** is harmless. A false positive, however, can result in the wrong
// ** answer.
// */
func _sqlite3ExprNeedsNoAffinityChange(tls *libc.TLS, p uintptr, aff uint8) (r int32) {
var op Tu8
var unaryMinus int32
_, _ = op, unaryMinus
unaryMinus = 0
if libc.Int32FromUint8(aff) == int32(SQLITE_AFF_BLOB) {
return int32(1)
}
for libc.Int32FromUint8((*TExpr)(unsafe.Pointer(p)).Fop) == int32(TK_UPLUS) || libc.Int32FromUint8((*TExpr)(unsafe.Pointer(p)).Fop) == int32(TK_UMINUS) {
if libc.Int32FromUint8((*TExpr)(unsafe.Pointer(p)).Fop) == int32(TK_UMINUS) {
unaryMinus = int32(1)
}
p = (*TExpr)(unsafe.Pointer(p)).FpLeft
}
op = (*TExpr)(unsafe.Pointer(p)).Fop
if libc.Int32FromUint8(op) == int32(TK_REGISTER) {
op = (*TExpr)(unsafe.Pointer(p)).Fop2
}
switch libc.Int32FromUint8(op) {
case int32(TK_INTEGER):
return libc.BoolInt32(libc.Int32FromUint8(aff) >= int32(SQLITE_AFF_NUMERIC))
case int32(TK_FLOAT):
return libc.BoolInt32(libc.Int32FromUint8(aff) >= int32(SQLITE_AFF_NUMERIC))
case int32(TK_STRING):
return libc.BoolInt32(!(unaryMinus != 0) && libc.Int32FromUint8(aff) == int32(SQLITE_AFF_TEXT))
case int32(TK_BLOB):
return libc.BoolInt32(!(unaryMinus != 0))
case int32(TK_COLUMN):
/* p cannot be part of a CHECK constraint */
return libc.BoolInt32(libc.Int32FromUint8(aff) >= int32(SQLITE_AFF_NUMERIC) && int32((*TExpr)(unsafe.Pointer(p)).FiColumn) < 0)
default:
return 0
}
return r
}
// C documentation
//
// /*
// ** The argument must be a TK_TRUEFALSE Expr node. Return 1 if it is TRUE
// ** and 0 if it is FALSE.
// */
func _sqlite3ExprTruthValue(tls *libc.TLS, pExpr uintptr) (r int32) {
pExpr = _sqlite3ExprSkipCollateAndLikely(tls, pExpr)
return libc.BoolInt32(libc.Int32FromUint8(**(**uint8)(__ccgo_up(*(*uintptr)(unsafe.Pointer(pExpr + 8)) + 4))) == 0)
}
// C documentation
//
// /*
// ** Value pVal is guaranteed to be an fts5_locale() value, according to
// ** sqlite3Fts5IsLocaleValue(). This function extracts the text and locale
// ** from the value and returns them separately.
// **
// ** If successful, SQLITE_OK is returned and (*ppText) and (*ppLoc) set
// ** to point to buffers containing the text and locale, as utf-8,
// ** respectively. In this case output parameters (*pnText) and (*pnLoc) are
// ** set to the sizes in bytes of these two buffers.
// **
// ** Or, if an error occurs, then an SQLite error code is returned. The final
// ** value of the four output parameters is undefined in this case.
// */
func _sqlite3Fts5DecodeLocaleValue(tls *libc.TLS, pVal uintptr, ppText uintptr, pnText uintptr, ppLoc uintptr, pnLoc uintptr) (r int32) {
var n, nLoc int32
var p uintptr
_, _, _ = n, nLoc, p
p = Xsqlite3_value_blob(tls, pVal)
n = Xsqlite3_value_bytes(tls, pVal)
nLoc = 0
nLoc = libc.Int32FromInt64(16)
for {
if !(**(**uint8)(__ccgo_up(p + uintptr(nLoc))) != 0) {
break
}
if nLoc == n-int32(1) {
return int32(SQLITE_MISMATCH)
}
goto _1
_1:
;
nLoc = nLoc + 1
}
**(**uintptr)(__ccgo_up(ppLoc)) = p + uintptr(libc.Int32FromInt64(16))
**(**int32)(__ccgo_up(pnLoc)) = nLoc - libc.Int32FromInt64(16)
**(**uintptr)(__ccgo_up(ppText)) = p + uintptr(nLoc+int32(1))
**(**int32)(__ccgo_up(pnText)) = n - nLoc - int32(1)
return SQLITE_OK
}
// C documentation
//
// /*
// ** Convert an SQL-style quoted string into a normal string by removing
// ** the quote characters. The conversion is done in-place. If the
// ** input does not begin with a quote character, then this routine
// ** is a no-op.
// **
// ** Examples:
// **
// ** "abc" becomes abc
// ** 'xyz' becomes xyz
// ** [pqr] becomes pqr
// ** `mno` becomes mno
// */
func _sqlite3Fts5Dequote(tls *libc.TLS, z uintptr) {
var quote uint8
_ = quote /* Quote character (if any ) */
quote = **(**uint8)(__ccgo_up(z))
if libc.Int32FromUint8(quote) == int32('[') || libc.Int32FromUint8(quote) == int32('\'') || libc.Int32FromUint8(quote) == int32('"') || libc.Int32FromUint8(quote) == int32('`') {
_fts5Dequote(tls, z)
}
}
// C documentation
//
// /*
// ** Argument p points to a buffer containing utf-8 text that is n bytes in
// ** size. Return the number of bytes in the nChar character prefix of the
// ** buffer, or 0 if there are less than nChar characters in total.
// */
func _sqlite3Fts5IndexCharlenToBytelen(tls *libc.TLS, p uintptr, nByte int32, nChar int32) (r int32) {
var i, n, v2 int32
_, _, _ = i, n, v2
n = 0
i = 0
for {
if !(i < nChar) {
break
}
if n >= nByte {
return 0
} /* Input contains fewer than nChar chars */
v2 = n
n = n + 1
if libc.Int32FromUint8(uint8(**(**uint8)(__ccgo_up(p + uintptr(v2))))) >= int32(0xc0) {
if n >= nByte {
return 0
}
for libc.Int32FromUint8(**(**uint8)(__ccgo_up(p + uintptr(n))))&int32(0xc0) == int32(0x80) {
n = n + 1
if n >= nByte {
if i+int32(1) == nChar {
break
}
return 0
}
}
}
goto _1
_1:
;
i = i + 1
}
return n
}
// C documentation
//
// /*
// ** Return a simple checksum value based on the arguments.
// */
func _sqlite3Fts5IndexEntryCksum(tls *libc.TLS, iRowid Ti64, iCol int32, iPos int32, iIdx int32, pTerm uintptr, nTerm int32) (r Tu64) {
var i int32
var ret Tu64
_, _ = i, ret
ret = libc.Uint64FromInt64(iRowid)
ret = ret + (ret<<libc.Int32FromInt32(3) + libc.Uint64FromInt32(iCol))
ret = ret + (ret<<libc.Int32FromInt32(3) + libc.Uint64FromInt32(iPos))
if iIdx >= 0 {
ret = ret + (ret<<libc.Int32FromInt32(3) + libc.Uint64FromInt32(libc.Int32FromUint8('0')+iIdx))
}
i = 0
for {
if !(i < nTerm) {
break
}
ret = ret + (ret<<libc.Int32FromInt32(3) + uint64(**(**uint8)(__ccgo_up(pTerm + uintptr(i)))))
goto _1
_1:
;
i = i + 1
}
return ret
}
// C documentation
//
// /*
// ** Insert or remove data to or from the index. Each time a document is
// ** added to or removed from the index, this function is called one or more
// ** times.
// **
// ** For an insert, it must be called once for each token in the new document.
// ** If the operation is a delete, it must be called (at least) once for each
// ** unique token in the document with an iCol value less than zero. The iPos
// ** argument is ignored for a delete.
// */
func _sqlite3Fts5IndexWrite(tls *libc.TLS, p uintptr, iCol int32, iPos int32, pToken uintptr, nToken int32) (r int32) {
var i, nByte, nChar, rc int32
var pConfig uintptr
_, _, _, _, _ = i, nByte, nChar, pConfig, rc /* Used to iterate through indexes */
rc = SQLITE_OK /* Return code */
pConfig = (*TFts5Index)(unsafe.Pointer(p)).FpConfig
/* Add the entry to the main terms index. */
rc = _sqlite3Fts5HashWrite(tls, (*TFts5Index)(unsafe.Pointer(p)).FpHash, (*TFts5Index)(unsafe.Pointer(p)).FiWriteRowid, iCol, iPos, uint8('0'), pToken, nToken)
i = 0
for {
if !(i < (*TFts5Config)(unsafe.Pointer(pConfig)).FnPrefix && rc == SQLITE_OK) {
break
}
nChar = **(**int32)(__ccgo_up((*TFts5Config)(unsafe.Pointer(pConfig)).FaPrefix + uintptr(i)*4))
nByte = _sqlite3Fts5IndexCharlenToBytelen(tls, pToken, nToken, nChar)
if nByte != 0 {
rc = _sqlite3Fts5HashWrite(tls, (*TFts5Index)(unsafe.Pointer(p)).FpHash, (*TFts5Index)(unsafe.Pointer(p)).FiWriteRowid, iCol, iPos, libc.Uint8FromInt32(libc.Int32FromUint8('0')+i+libc.Int32FromInt32(1)), pToken, nByte)
}
goto _1
_1:
;
i = i + 1
}
return rc
}
// C documentation
//
// /*
// ** Return true if character 't' may be part of an FTS5 bareword, or false
// ** otherwise. Characters that may be part of barewords:
// **
// ** * All non-ASCII characters,
// ** * The 52 upper and lower case ASCII characters, and
// ** * The 10 integer ASCII characters.
// ** * The underscore character "_" (0x5F).
// ** * The unicode "substitute" character (0x1A).
// */
func _sqlite3Fts5IsBareword(tls *libc.TLS, t uint8) (r int32) {
var aBareword [128]Tu8
_ = aBareword
aBareword = [128]Tu8{
26: uint8(1),
48: uint8(1),
49: uint8(1),
50: uint8(1),
51: uint8(1),
52: uint8(1),
53: uint8(1),
54: uint8(1),
55: uint8(1),
56: uint8(1),
57: uint8(1),
65: uint8(1),
66: uint8(1),
67: uint8(1),
68: uint8(1),
69: uint8(1),
70: uint8(1),
71: uint8(1),
72: uint8(1),
73: uint8(1),
74: uint8(1),
75: uint8(1),
76: uint8(1),
77: uint8(1),
78: uint8(1),
79: uint8(1),
80: uint8(1),
81: uint8(1),
82: uint8(1),
83: uint8(1),
84: uint8(1),
85: uint8(1),
86: uint8(1),
87: uint8(1),
88: uint8(1),
89: uint8(1),
90: uint8(1),
95: uint8(1),
97: uint8(1),
98: uint8(1),
99: uint8(1),
100: uint8(1),
101: uint8(1),
102: uint8(1),
103: uint8(1),
104: uint8(1),
105: uint8(1),
106: uint8(1),
107: uint8(1),
108: uint8(1),
109: uint8(1),
110: uint8(1),
111: uint8(1),
112: uint8(1),
113: uint8(1),
114: uint8(1),
115: uint8(1),
116: uint8(1),
117: uint8(1),
118: uint8(1),
119: uint8(1),
120: uint8(1),
121: uint8(1),
122: uint8(1),
}
return libc.BoolInt32(libc.Int32FromUint8(t)&int32(0x80) != 0 || aBareword[libc.Int32FromUint8(t)] != 0)
}
func _sqlite3Fts5UnicodeCatParse(tls *libc.TLS, zCat uintptr, aArray uintptr) (r int32) {
**(**Tu8)(__ccgo_up(aArray)) = uint8(1)
switch libc.Int32FromUint8(**(**uint8)(__ccgo_up(zCat))) {
case int32('C'):
switch libc.Int32FromUint8(**(**uint8)(__ccgo_up(zCat + 1))) {
case int32('c'):
**(**Tu8)(__ccgo_up(aArray + 1)) = uint8(1)
case int32('f'):
**(**Tu8)(__ccgo_up(aArray + 2)) = uint8(1)
case int32('n'):
**(**Tu8)(__ccgo_up(aArray + 3)) = uint8(1)
case int32('s'):
**(**Tu8)(__ccgo_up(aArray + 4)) = uint8(1)
case int32('o'):
**(**Tu8)(__ccgo_up(aArray + 31)) = uint8(1)
case int32('*'):
**(**Tu8)(__ccgo_up(aArray + 1)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 2)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 3)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 4)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 31)) = uint8(1)
default:
return int32(1)
}
case int32('L'):
switch libc.Int32FromUint8(**(**uint8)(__ccgo_up(zCat + 1))) {
case int32('l'):
**(**Tu8)(__ccgo_up(aArray + 5)) = uint8(1)
case int32('m'):
**(**Tu8)(__ccgo_up(aArray + 6)) = uint8(1)
case int32('o'):
**(**Tu8)(__ccgo_up(aArray + 7)) = uint8(1)
case int32('t'):
**(**Tu8)(__ccgo_up(aArray + 8)) = uint8(1)
case int32('u'):
**(**Tu8)(__ccgo_up(aArray + 9)) = uint8(1)
case int32('C'):
**(**Tu8)(__ccgo_up(aArray + 30)) = uint8(1)
case int32('*'):
**(**Tu8)(__ccgo_up(aArray + 5)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 6)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 7)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 8)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 9)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 30)) = uint8(1)
default:
return int32(1)
}
case int32('M'):
switch libc.Int32FromUint8(**(**uint8)(__ccgo_up(zCat + 1))) {
case int32('c'):
**(**Tu8)(__ccgo_up(aArray + 10)) = uint8(1)
case int32('e'):
**(**Tu8)(__ccgo_up(aArray + 11)) = uint8(1)
case int32('n'):
**(**Tu8)(__ccgo_up(aArray + 12)) = uint8(1)
case int32('*'):
**(**Tu8)(__ccgo_up(aArray + 10)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 11)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 12)) = uint8(1)
default:
return int32(1)
}
case int32('N'):
switch libc.Int32FromUint8(**(**uint8)(__ccgo_up(zCat + 1))) {
case int32('d'):
**(**Tu8)(__ccgo_up(aArray + 13)) = uint8(1)
case int32('l'):
**(**Tu8)(__ccgo_up(aArray + 14)) = uint8(1)
case int32('o'):
**(**Tu8)(__ccgo_up(aArray + 15)) = uint8(1)
case int32('*'):
**(**Tu8)(__ccgo_up(aArray + 13)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 14)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 15)) = uint8(1)
default:
return int32(1)
}
case int32('P'):
switch libc.Int32FromUint8(**(**uint8)(__ccgo_up(zCat + 1))) {
case int32('c'):
**(**Tu8)(__ccgo_up(aArray + 16)) = uint8(1)
case int32('d'):
**(**Tu8)(__ccgo_up(aArray + 17)) = uint8(1)
case int32('e'):
**(**Tu8)(__ccgo_up(aArray + 18)) = uint8(1)
case int32('f'):
**(**Tu8)(__ccgo_up(aArray + 19)) = uint8(1)
case int32('i'):
**(**Tu8)(__ccgo_up(aArray + 20)) = uint8(1)
case int32('o'):
**(**Tu8)(__ccgo_up(aArray + 21)) = uint8(1)
case int32('s'):
**(**Tu8)(__ccgo_up(aArray + 22)) = uint8(1)
case int32('*'):
**(**Tu8)(__ccgo_up(aArray + 16)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 17)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 18)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 19)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 20)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 21)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 22)) = uint8(1)
default:
return int32(1)
}
case int32('S'):
switch libc.Int32FromUint8(**(**uint8)(__ccgo_up(zCat + 1))) {
case int32('c'):
**(**Tu8)(__ccgo_up(aArray + 23)) = uint8(1)
case int32('k'):
**(**Tu8)(__ccgo_up(aArray + 24)) = uint8(1)
case int32('m'):
**(**Tu8)(__ccgo_up(aArray + 25)) = uint8(1)
case int32('o'):
**(**Tu8)(__ccgo_up(aArray + 26)) = uint8(1)
case int32('*'):
**(**Tu8)(__ccgo_up(aArray + 23)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 24)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 25)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 26)) = uint8(1)
default:
return int32(1)
}
case int32('Z'):
switch libc.Int32FromUint8(**(**uint8)(__ccgo_up(zCat + 1))) {
case int32('l'):
**(**Tu8)(__ccgo_up(aArray + 27)) = uint8(1)
case int32('p'):
**(**Tu8)(__ccgo_up(aArray + 28)) = uint8(1)
case int32('s'):
**(**Tu8)(__ccgo_up(aArray + 29)) = uint8(1)
case int32('*'):
**(**Tu8)(__ccgo_up(aArray + 27)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 28)) = uint8(1)
**(**Tu8)(__ccgo_up(aArray + 29)) = uint8(1)
default:
return int32(1)
}
default:
return int32(1)
}
return 0
}
// C documentation
//
// /*
// ** Try to convert z into an unsigned 32-bit integer. Return true on
// ** success and false if there is an error.
// **
// ** Only decimal notation is accepted.
// */
func _sqlite3GetUInt32(tls *libc.TLS, z uintptr, pI uintptr) (r int32) {
var i int32
var v Tu64
_, _ = i, v
v = uint64(0)
i = 0
for {
if !(libc.Int32FromUint8(_sqlite3CtypeMap[uint8(**(**uint8)(__ccgo_up(z + uintptr(i))))])&int32(0x04) != 0) {
break
}
v = v*uint64(10) + uint64(**(**uint8)(__ccgo_up(z + uintptr(i)))) - uint64('0')
if v > uint64(4294967296) {
**(**Tu32)(__ccgo_up(pI)) = uint32(0)
return 0
}
goto _1
_1:
;
i = i + 1
}
if i == 0 || libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(i)))) != 0 {
**(**Tu32)(__ccgo_up(pI)) = uint32(0)
return 0
}
**(**Tu32)(__ccgo_up(pI)) = uint32(v)
return int32(1)
}
/*
** The variable-length integer encoding is as follows:
**
** KEY:
** A = 0xxxxxxx 7 bits of data and one flag bit
** B = 1xxxxxxx 7 bits of data and one flag bit
** C = xxxxxxxx 8 bits of data
**
** 7 bits - A
** 14 bits - BA
** 21 bits - BBA
** 28 bits - BBBA
** 35 bits - BBBBA
** 42 bits - BBBBBA
** 49 bits - BBBBBBA
** 56 bits - BBBBBBBA
** 64 bits - BBBBBBBBC
*/
// C documentation
//
// /*
// ** Convert a BLOB literal of the form "x'hhhhhh'" into its binary
// ** value. Return a pointer to its binary value. Space to hold the
// ** binary value has been obtained from malloc and must be freed by
// ** the calling routine.
// */
func _sqlite3HexToBlob(tls *libc.TLS, db uintptr, z uintptr, n int32) (r uintptr) {
var i int32
var zBlob uintptr
_, _ = i, zBlob
zBlob = _sqlite3DbMallocRawNN(tls, db, libc.Uint64FromInt32(n/int32(2)+int32(1)))
n = n - 1
if zBlob != 0 {
i = 0
for {
if !(i < n) {
break
}
**(**uint8)(__ccgo_up(zBlob + uintptr(i/int32(2)))) = libc.Uint8FromInt32(libc.Int32FromUint8(_sqlite3HexToInt(tls, libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(i))))))<<int32(4) | libc.Int32FromUint8(_sqlite3HexToInt(tls, libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(i+int32(1))))))))
goto _1
_1:
;
i = i + int32(2)
}
**(**uint8)(__ccgo_up(zBlob + uintptr(i/int32(2)))) = uint8(0)
}
return zBlob
}
// C documentation
//
// /*
// ** pExpr is a comparison expression, eg. '=', '<', IN(...) etc.
// ** idx_affinity is the affinity of an indexed column. Return true
// ** if the index with affinity idx_affinity may be used to implement
// ** the comparison in pExpr.
// */
func _sqlite3IndexAffinityOk(tls *libc.TLS, pExpr uintptr, idx_affinity uint8) (r int32) {
var aff uint8
_ = aff
aff = _comparisonAffinity(tls, pExpr)
if libc.Int32FromUint8(aff) < int32(SQLITE_AFF_TEXT) {
return int32(1)
}
if libc.Int32FromUint8(aff) == int32(SQLITE_AFF_TEXT) {
return libc.BoolInt32(libc.Int32FromUint8(idx_affinity) == int32(SQLITE_AFF_TEXT))
}
return libc.BoolInt32(libc.Int32FromUint8(idx_affinity) >= int32(SQLITE_AFF_NUMERIC))
}
// C documentation
//
// /*
// ** Return the affinity for a single column of an index.
// */
func _sqlite3IndexColumnAffinity(tls *libc.TLS, db uintptr, pIdx uintptr, iCol int32) (r uint8) {
if !((*TIndex)(unsafe.Pointer(pIdx)).FzColAff != 0) {
if _sqlite3IndexAffinityStr(tls, db, pIdx) == uintptr(0) {
return uint8(SQLITE_AFF_BLOB)
}
}
return **(**uint8)(__ccgo_up((*TIndex)(unsafe.Pointer(pIdx)).FzColAff + uintptr(iCol)))
}
// C documentation
//
// /*
// ** Check to see if pExpr is one of the indexed expressions on pParse->pIdxEpr.
// ** If it is, then resolve the expression by reading from the index and
// ** return the register into which the value has been read. If pExpr is
// ** not an indexed expression, then return negative.
// */
func _sqlite3IndexedExprLookup(tls *libc.TLS, pParse uintptr, pExpr uintptr, target int32) (r int32) {
var addr, iDataCur int32
var exprAff Tu8
var p, v uintptr
_, _, _, _, _ = addr, exprAff, iDataCur, p, v
p = (*TParse)(unsafe.Pointer(pParse)).FpIdxEpr
for {
if !(p != 0) {
break
}
iDataCur = (*TIndexedExpr)(unsafe.Pointer(p)).FiDataCur
if iDataCur < 0 {
goto _1
}
if (*TParse)(unsafe.Pointer(pParse)).FiSelfTab != 0 {
if (*TIndexedExpr)(unsafe.Pointer(p)).FiDataCur != (*TParse)(unsafe.Pointer(pParse)).FiSelfTab-int32(1) {
goto _1
}
iDataCur = -int32(1)
}
if _sqlite3ExprCompare(tls, uintptr(0), pExpr, (*TIndexedExpr)(unsafe.Pointer(p)).FpExpr, iDataCur) != 0 {
goto _1
}
exprAff = _sqlite3ExprAffinity(tls, pExpr)
if libc.Int32FromUint8(exprAff) <= int32(SQLITE_AFF_BLOB) && libc.Int32FromUint8((*TIndexedExpr)(unsafe.Pointer(p)).Faff) != int32(SQLITE_AFF_BLOB) || libc.Int32FromUint8(exprAff) == int32(SQLITE_AFF_TEXT) && libc.Int32FromUint8((*TIndexedExpr)(unsafe.Pointer(p)).Faff) != int32(SQLITE_AFF_TEXT) || libc.Int32FromUint8(exprAff) >= int32(SQLITE_AFF_NUMERIC) && libc.Int32FromUint8((*TIndexedExpr)(unsafe.Pointer(p)).Faff) != int32(SQLITE_AFF_NUMERIC) {
/* Affinity mismatch on a generated column */
goto _1
}
/* Functions that might set a subtype should not be replaced by the
** value taken from an expression index if they are themselves an
** argument to another scalar function or aggregate.
** https://sqlite.org/forum/forumpost/68d284c86b082c3e */
if (*TExpr)(unsafe.Pointer(pExpr)).Fflags&libc.Uint32FromUint32(EP_SubtArg) != uint32(0) && _sqlite3ExprCanReturnSubtype(tls, pParse, pExpr) != 0 {
goto _1
}
v = (*TParse)(unsafe.Pointer(pParse)).FpVdbe
if (*TIndexedExpr)(unsafe.Pointer(p)).FbMaybeNullRow != 0 {
/* If the index is on a NULL row due to an outer join, then we
** cannot extract the value from the index. The value must be
** computed using the original expression. */
addr = _sqlite3VdbeCurrentAddr(tls, v)
_sqlite3VdbeAddOp3(tls, v, int32(OP_IfNullRow), (*TIndexedExpr)(unsafe.Pointer(p)).FiIdxCur, addr+int32(3), target)
_sqlite3VdbeAddOp3(tls, v, int32(OP_Column), (*TIndexedExpr)(unsafe.Pointer(p)).FiIdxCur, (*TIndexedExpr)(unsafe.Pointer(p)).FiIdxCol, target)
_sqlite3VdbeGoto(tls, v, 0)
p = (*TParse)(unsafe.Pointer(pParse)).FpIdxEpr
(*TParse)(unsafe.Pointer(pParse)).FpIdxEpr = uintptr(0)
_sqlite3ExprCode(tls, pParse, pExpr, target)
(*TParse)(unsafe.Pointer(pParse)).FpIdxEpr = p
_sqlite3VdbeJumpHere(tls, v, addr+int32(2))
} else {
_sqlite3VdbeAddOp3(tls, v, int32(OP_Column), (*TIndexedExpr)(unsafe.Pointer(p)).FiIdxCur, (*TIndexedExpr)(unsafe.Pointer(p)).FiIdxCol, target)
}
return target
goto _1
_1:
;
p = (*TIndexedExpr)(unsafe.Pointer(p)).FpIENext
}
return -int32(1) /* Not found */
}
// C documentation
//
// /*
// ** This routine implements the uncommon and slower path for
// ** sqlite3MemRealValueRC() that has to deal with input strings
// ** that are not UTF8 or that are not zero-terminated. It is
// ** broken out into a separate no-inline routine so that the
// ** main sqlite3MemRealValueRC() routine can avoid unnecessary
// ** stack pushes.
// **
// ** A text->float translation of pMem->z is written into *pValue.
// **
// ** Result code invariants:
// **
// ** rc==0 => ERROR: Input string not well-formed, or OOM
// ** rc<0 => Some prefix of the input is well-formed
// ** rc>0 => All of the input is well-formed
// ** (rc&2)==0 => The number is expressed as an integer, with no
// ** decimal point or eNNN suffix.
// */
func _sqlite3MemRealValueRCSlowPath(tls *libc.TLS, pMem uintptr, pValue uintptr) (r int32) {
var i, j, n, rc, v2 int32
var z, zCopy, zCopy1 uintptr
_, _, _, _, _, _, _, _ = i, j, n, rc, z, zCopy, zCopy1, v2
rc = SQLITE_OK
**(**float64)(__ccgo_up(pValue)) = float64(0)
if libc.Int32FromUint8((*TMem)(unsafe.Pointer(pMem)).Fenc) == int32(SQLITE_UTF8) {
zCopy = _sqlite3DbStrNDup(tls, (*TMem)(unsafe.Pointer(pMem)).Fdb, (*TMem)(unsafe.Pointer(pMem)).Fz, libc.Uint64FromInt32((*TMem)(unsafe.Pointer(pMem)).Fn))
if zCopy != 0 {
rc = _sqlite3AtoF(tls, zCopy, pValue)
_sqlite3DbFree(tls, (*TMem)(unsafe.Pointer(pMem)).Fdb, zCopy)
}
return rc
} else {
n = (*TMem)(unsafe.Pointer(pMem)).Fn & ^libc.Int32FromInt32(1)
zCopy1 = _sqlite3DbMallocRaw(tls, (*TMem)(unsafe.Pointer(pMem)).Fdb, libc.Uint64FromInt32(n/int32(2)+int32(2)))
if zCopy1 != 0 {
z = (*TMem)(unsafe.Pointer(pMem)).Fz
if libc.Int32FromUint8((*TMem)(unsafe.Pointer(pMem)).Fenc) == int32(SQLITE_UTF16LE) {
v2 = libc.Int32FromInt32(0)
j = v2
i = v2
for {
if !(i < n-int32(1)) {
break
}
**(**uint8)(__ccgo_up(zCopy1 + uintptr(j))) = **(**uint8)(__ccgo_up(z + uintptr(i)))
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(i+int32(1))))) != 0 {
break
}
goto _1
_1:
;
i = i + int32(2)
j = j + 1
}
} else {
v2 = libc.Int32FromInt32(0)
j = v2
i = v2
for {
if !(i < n-int32(1)) {
break
}
if libc.Int32FromUint8(**(**uint8)(__ccgo_up(z + uintptr(i)))) != 0 {
break
}
**(**uint8)(__ccgo_up(zCopy1 + uintptr(j))) = **(**uint8)(__ccgo_up(z + uintptr(i+int32(1))))
goto _3
_3:
;
i = i + int32(2)
j = j + 1
}
}
**(**uint8)(__ccgo_up(zCopy1 + uintptr(j))) = uint8(0)
rc = _sqlite3AtoF(tls, zCopy1, pValue)
if i < n {
rc = -int32(100)
}
_sqlite3DbFree(tls, (*TMem)(unsafe.Pointer(pMem)).Fdb, zCopy1)
}
return rc
}
return r
}
func _sqlite3OsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nPathOut int32, zPathOut uintptr) (r int32) {
**(**uint8)(__ccgo_up(zPathOut)) = uint8(0)
return (*(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*Tsqlite3_vfs)(unsafe.Pointer(pVfs)).FxFullPathname})))(tls, pVfs, zPath, nPathOut, zPathOut)
}
var _sqlite3StdTypeAffinity = [6]uint8{
0: uint8(SQLITE_AFF_NUMERIC),
1: uint8(SQLITE_AFF_BLOB),
2: uint8(SQLITE_AFF_INTEGER),
3: uint8(SQLITE_AFF_INTEGER),
4: uint8(SQLITE_AFF_REAL),
5: uint8(SQLITE_AFF_TEXT),
}
func _sqlite3StrAccumFinish(tls *libc.TLS, p uintptr) (r uintptr) {
if (*TStrAccum)(unsafe.Pointer(p)).FzText != 0 {
**(**uint8)(__ccgo_up((*TStrAccum)(unsafe.Pointer(p)).FzText + uintptr((*TStrAccum)(unsafe.Pointer(p)).FnChar))) = uint8(0)
if (*TStrAccum)(unsafe.Pointer(p)).FmxAlloc > uint32(0) && !(libc.Int32FromUint8((*TStrAccum)(unsafe.Pointer(p)).FprintfFlags)&libc.Int32FromInt32(SQLITE_PRINTF_MALLOCED) != libc.Int32FromInt32(0)) {
return _strAccumFinishRealloc(tls, p)
}
}
return (*TStrAccum)(unsafe.Pointer(p)).FzText
}
// C documentation
//
// /*
// ** Name of the default collating sequence
// */
var _sqlite3StrBINARY = [7]uint8{'B', 'I', 'N', 'A', 'R', 'Y'}
// C documentation
//
// /*
// ** Compute an 8-bit hash on a string that is insensitive to case differences
// */
func _sqlite3StrIHash(tls *libc.TLS, z uintptr) (r Tu8) {
var h Tu8
_ = h
h = uint8(0)
if z == uintptr(0) {
return uint8(0)
}
for **(**uint8)(__ccgo_up(z)) != 0 {
h = libc.Uint8FromInt32(int32(h) + libc.Int32FromUint8(_sqlite3UpperToLower[uint8(**(**uint8)(__ccgo_up(z)))]))
z = z + 1
}
return h
}
// C documentation
//
// /*
// ** Exported version of applyAffinity(). This one works on sqlite3_value*,
// ** not the internal Mem* type.
// */
func _sqlite3ValueApplyAffinity(tls *libc.TLS, pVal uintptr, affinity Tu8, enc Tu8) {
_applyAffinity(tls, pVal, affinity, enc)
}
// C documentation
//
// /*
// ** Move data out of a btree key or data field and into a Mem structure.
// ** The data is payload from the entry that pCur is currently pointing
// ** to. offset and amt determine what portion of the data or key to retrieve.
// ** The result is written into the pMem element.
// **
// ** The pMem object must have been initialized. This routine will use
// ** pMem->zMalloc to hold the content from the btree, if possible. New
// ** pMem->zMalloc space will be allocated if necessary. The calling routine
// ** is responsible for making sure that the pMem object is eventually
// ** destroyed.
// **
// ** If this routine fails for any reason (malloc returns NULL or unable
// ** to read from the disk) then the pMem is left in an inconsistent state.
// */
func _sqlite3VdbeMemFromBtree(tls *libc.TLS, pCur uintptr, offset Tu32, amt Tu32, pMem uintptr) (r int32) {
var rc, v1 int32
_, _ = rc, v1
(*TMem)(unsafe.Pointer(pMem)).Fflags = uint16(MEM_Null)
if amt >= uint32(SQLITE_MAX_ALLOCATION_SIZE) {
return int32(SQLITE_NOMEM)
}
if uint64(amt)+uint64(offset) > libc.Uint64FromInt64(_sqlite3BtreeMaxRecordSize(tls, pCur)) {
return _sqlite3CorruptError(tls, int32(87091))
}
v1 = _sqlite3VdbeMemClearAndResize(tls, pMem, libc.Int32FromUint32(amt+uint32(1)))
rc = v1
if SQLITE_OK == v1 {
rc = _sqlite3BtreePayload(tls, pCur, offset, amt, (*TMem)(unsafe.Pointer(pMem)).Fz)
if rc == SQLITE_OK {
**(**uint8)(__ccgo_up((*TMem)(unsafe.Pointer(pMem)).Fz + uintptr(amt))) = uint8(0) /* Overrun area used when reading malformed records */
(*TMem)(unsafe.Pointer(pMem)).Fflags = uint16(MEM_Blob)
(*TMem)(unsafe.Pointer(pMem)).Fn = libc.Int32FromUint32(amt)
} else {
_sqlite3VdbeMemRelease(tls, pMem)
}
}
return rc
}
// C documentation
//
// /*
// ** Generate code that initializes multiple registers to string or integer
// ** constants. The registers begin with iDest and increase consecutively.
// ** One register is initialized for each characgter in zTypes[]. For each
// ** "s" character in zTypes[], the register is a string if the argument is
// ** not NULL, or OP_Null if the value is a null pointer. For each "i" character
// ** in zTypes[], the register is initialized to an integer.
// **
// ** If the input string does not end with "X" then an OP_ResultRow instruction
// ** is generated for the values inserted.
// */
func _sqlite3VdbeMultiLoad(tls *libc.TLS, p uintptr, iDest int32, zTypes uintptr, va uintptr) {
var ap Tva_list
var c, v2 uint8
var i, v3 int32
var z uintptr
_, _, _, _, _, _ = ap, c, i, z, v2, v3
ap = va
i = 0
for {
v2 = **(**uint8)(__ccgo_up(zTypes + uintptr(i)))
c = v2
if !(libc.Int32FromUint8(v2) != 0) {
break
}
if libc.Int32FromUint8(c) == int32('s') {
z = libc.VaUintptr(&ap)
if z == uintptr(0) {
v3 = int32(OP_Null)
} else {
v3 = int32(OP_String8)
}
_sqlite3VdbeAddOp4(tls, p, v3, 0, iDest+i, 0, z, 0)
} else {
if libc.Int32FromUint8(c) == int32('i') {
_sqlite3VdbeAddOp2(tls, p, int32(OP_Integer), libc.VaInt32(&ap), iDest+i)
} else {
goto skip_op_resultrow
}
}
goto _1
_1:
;
i = i + 1
}
_sqlite3VdbeAddOp2(tls, p, int32(OP_ResultRow), iDest, i)
goto skip_op_resultrow
skip_op_resultrow:
;
_ = ap
}
// C documentation
//
// /*
// ** Elements of sqlite3Stat[] are protected by either the memory allocator
// ** mutex, or by the pcache1 mutex. The following array determines which.
// */
var _statMutex = [10]uint8{
1: uint8(1),
2: uint8(1),
7: uint8(1),
}
/* The "wsdStat" macro will resolve to the status information
** state vector. If writable static data is unsupported on the target,
** we have to locate the state vector at run-time. In the more common
** case where writable static data is supported, wsdStat can refer directly
** to the "sqlite3Stat" state vector declared above.
*/
// C documentation
//
// /*
// ** The hashing function.
// */
func _strHash(tls *libc.TLS, z uintptr) (r uint32) {
var h uint32
var v1 uintptr
_, _ = h, v1
h = uint32(0)
for **(**uint8)(__ccgo_up(z)) != 0 { /*OPTIMIZATION-IF-TRUE*/
/* Knuth multiplicative hashing. (Sorting & Searching, p. 510).
** 0x9e3779b1 is 2654435761 which is the closest prime number to
** (2**32)*golden_ratio, where golden_ratio = (sqrt(5) - 1)/2.
**
** Only bits 0xdf for ASCII and bits 0xbf for EBCDIC each octet are
** hashed since the omitted bits determine the upper/lower case difference.
*/
v1 = z
z = z + 1
h = h + libc.Uint32FromInt32(int32(0xdf)&libc.Int32FromUint8(uint8(**(**uint8)(__ccgo_up(v1)))))
h = h * uint32(0x9e3779b1)
}
return h
}
// C documentation
//
// /*
// ** We already know that pExpr is a binary operator where both operands are
// ** column references. This routine checks to see if pExpr is an equivalence
// ** relation:
// ** 1. The SQLITE_Transitive optimization must be enabled
// ** 2. Must be either an == or an IS operator
// ** 3. Not originating in the ON clause of an OUTER JOIN
// ** 4. The operator is not IS or else the query does not contain RIGHT JOIN
// ** 5. The affinities of A and B must be compatible
// ** 6. Both operands use the same collating sequence, and they must not
// ** use explicit COLLATE clauses.
// ** If this routine returns TRUE, that means that the RHS can be substituted
// ** for the LHS anyplace else in the WHERE clause where the LHS column occurs.
// ** This is an optimization. No harm comes from returning 0. But if 1 is
// ** returned when it should not be, then incorrect answers might result.
// */
func _termIsEquivalence(tls *libc.TLS, pParse uintptr, pExpr uintptr, pSrc uintptr) (r int32) {
var aff1, aff2 uint8
_, _ = aff1, aff2
if !((*Tsqlite3)(unsafe.Pointer((*TParse)(unsafe.Pointer(pParse)).Fdb)).FdbOptFlags&libc.Uint32FromInt32(libc.Int32FromInt32(SQLITE_Transitive)) == libc.Uint32FromInt32(0)) {
return 0
} /* (1) */
if libc.Int32FromUint8((*TExpr)(unsafe.Pointer(pExpr)).Fop) != int32(TK_EQ) && libc.Int32FromUint8((*TExpr)(unsafe.Pointer(pExpr)).Fop) != int32(TK_IS) {
return 0
} /* (2) */
if (*TExpr)(unsafe.Pointer(pExpr)).Fflags&libc.Uint32FromInt32(libc.Int32FromInt32(EP_OuterON)|libc.Int32FromInt32(EP_Collate)) != uint32(0) {
return 0
} /* (3) */
if libc.Int32FromUint8((*TExpr)(unsafe.Pointer(pExpr)).Fop) == int32(TK_IS) && (*TSrcList)(unsafe.Pointer(pSrc)).FnSrc >= int32(2) && libc.Int32FromUint8((*(*TSrcItem)(unsafe.Pointer(pSrc + 8))).Ffg.Fjointype)&int32(JT_LTORJ) != 0 {
return 0 /* (4) */
}
aff1 = _sqlite3ExprAffinity(tls, (*TExpr)(unsafe.Pointer(pExpr)).FpLeft)
aff2 = _sqlite3ExprAffinity(tls, (*TExpr)(unsafe.Pointer(pExpr)).FpRight)
if libc.Int32FromUint8(aff1) != libc.Int32FromUint8(aff2) && (!(libc.Int32FromUint8(aff1) >= libc.Int32FromInt32(SQLITE_AFF_NUMERIC)) || !(libc.Int32FromUint8(aff2) >= libc.Int32FromInt32(SQLITE_AFF_NUMERIC))) {
return 0 /* (5) */
}
if !(_sqlite3ExprCollSeqMatch(tls, pParse, (*TExpr)(unsafe.Pointer(pExpr)).FpLeft, (*TExpr)(unsafe.Pointer(pExpr)).FpRight) != 0) {
return 0 /* (6) */
}
return int32(1)
}
// C documentation
//
// /*
// ** Duplicate a range of text from an SQL statement, then convert all
// ** whitespace characters into ordinary space characters.
// */
func _triggerSpanDup(tls *libc.TLS, db uintptr, zStart uintptr, zEnd uintptr) (r uintptr) {
var i int32
var z uintptr
_, _ = i, z
z = _sqlite3DbSpanDup(tls, db, zStart, zEnd)
if z != 0 {
i = 0
for {
if !(**(**uint8)(__ccgo_up(z + uintptr(i))) != 0) {
break
}
if libc.Int32FromUint8(_sqlite3CtypeMap[uint8(**(**uint8)(__ccgo_up(z + uintptr(i))))])&int32(0x01) != 0 {
**(**uint8)(__ccgo_up(z + uintptr(i))) = uint8(' ')
}
goto _1
_1:
;
i = i + 1
}
}
return z
}
// C documentation
//
// /*
// ** Expression pRight, which is the RHS of a comparison operation, is
// ** either a vector of n elements or, if n==1, a scalar expression.
// ** Before the comparison operation, affinity zAff is to be applied
// ** to the pRight values. This function modifies characters within the
// ** affinity string to SQLITE_AFF_BLOB if either:
// **
// ** * the comparison will be performed with no affinity, or
// ** * the affinity change in zAff is guaranteed not to change the value.
// */
func _updateRangeAffinityStr(tls *libc.TLS, pRight uintptr, n int32, zAff uintptr) {
var i int32
var p uintptr
_, _ = i, p
i = 0
for {
if !(i < n) {
break
}
p = _sqlite3VectorFieldSubexpr(tls, pRight, i)
if libc.Int32FromUint8(_sqlite3CompareAffinity(tls, p, **(**uint8)(__ccgo_up(zAff + uintptr(i))))) == int32(SQLITE_AFF_BLOB) || _sqlite3ExprNeedsNoAffinityChange(tls, p, **(**uint8)(__ccgo_up(zAff + uintptr(i)))) != 0 {
**(**uint8)(__ccgo_up(zAff + uintptr(i))) = uint8(SQLITE_AFF_BLOB)
}
goto _1
_1:
;
i = i + 1
}
}
// C documentation
//
// /*
// ** Implementation of the upper() and lower() SQL functions.
// */
func _upperFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) {
var i, n int32
var z1, z2 uintptr
_, _, _, _ = i, n, z1, z2
_ = argc
z2 = Xsqlite3_value_text(tls, **(**uintptr)(__ccgo_up(argv)))
n = Xsqlite3_value_bytes(tls, **(**uintptr)(__ccgo_up(argv)))
/* Verify that the call to _bytes() does not invalidate the _text() pointer */
if z2 != 0 {
z1 = _contextMalloc(tls, context, int64(n)+int64(1))
if z1 != 0 {
i = 0
for {
if !(i < n) {
break
}
**(**uint8)(__ccgo_up(z1 + uintptr(i))) = libc.Uint8FromInt32(libc.Int32FromUint8(**(**uint8)(__ccgo_up(z2 + uintptr(i)))) & ^(libc.Int32FromUint8(_sqlite3CtypeMap[uint8(**(**uint8)(__ccgo_up(z2 + uintptr(i))))]) & libc.Int32FromInt32(0x20)))
goto _1
_1:
;
i = i + 1
}
Xsqlite3_result_text(tls, context, z1, n, __ccgo_fp(Xsqlite3_free))
}
}
}
// C documentation
//
// /*
// ** This routine does the core work of extracting URI parameters from a
// ** database filename for the sqlite3_uri_parameter() interface.
// */
func _uriParameter(tls *libc.TLS, zFilename uintptr, zParam uintptr) (r uintptr) {
var x int32
_ = x
zFilename = zFilename + uintptr(_sqlite3Strlen30(tls, zFilename)+int32(1))
for zFilename != uintptr(0) && **(**uint8)(__ccgo_up(zFilename)) != 0 {
x = libc.Xstrcmp(tls, zFilename, zParam)
zFilename = zFilename + uintptr(_sqlite3Strlen30(tls, zFilename)+int32(1))
if x == 0 {
return zFilename
}
zFilename = zFilename + uintptr(_sqlite3Strlen30(tls, zFilename)+int32(1))
}
return uintptr(0)
}
// C documentation
//
// /*
// ** Write a 32-bit integer into the given file descriptor. Return SQLITE_OK
// ** on success or an error code is something goes wrong.
// */
func _write32bits(tls *libc.TLS, fd uintptr, offset Ti64, val Tu32) (r int32) {
bp := tls.Alloc(16)
defer tls.Free(16)
var _ /* ac at bp+0 */ [4]uint8
_sqlite3Put4byte(tls, bp, val)
return _sqlite3OsWrite(tls, fd, bp, int32(4), offset)
}
var _zAff = [10]uint8{'B', 0, 'C', 0, 'D', 0, 'E', 0, 'F'}
// C documentation
//
// /*
// ** Page paths:
// **
// ** The value of the 'path' column describes the path taken from the
// ** root-node of the b-tree structure to each page. The value of the
// ** root-node path is '/'.
// **
// ** The value of the path for the left-most child page of the root of
// ** a b-tree is '/000/'. (Btrees store content ordered from left to right
// ** so the pages to the left have smaller keys than the pages to the right.)
// ** The next to left-most child of the root page is
// ** '/001', and so on, each sibling page identified by a 3-digit hex
// ** value. The children of the 451st left-most sibling have paths such
// ** as '/1c2/000/, '/1c2/001/' etc.
// **
// ** Overflow pages are specified by appending a '+' character and a
// ** six-digit hexadecimal value to the path to the cell they are linked
// ** from. For example, the three overflow pages in a chain linked from
// ** the left-most cell of the 450th child of the root page are identified
// ** by the paths:
// **
// ** '/1c2/000+000000' // First page in overflow chain
// ** '/1c2/000+000001' // Second page in overflow chain
// ** '/1c2/000+000002' // Third page in overflow chain
// **
// ** If the paths are sorted using the BINARY collation sequence, then
// ** the overflow pages associated with a cell will appear earlier in the
// ** sort-order than its child page:
// **
// ** '/1c2/000/' // Left-most child of 451st child of root
// */
var _zDbstatSchema = [258]uint8{'C', 'R', 'E', 'A', 'T', 'E', ' ', 'T', 'A', 'B', 'L', 'E', ' ', 'x', '(', ' ', 'n', 'a', 'm', 'e', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'T', 'E', 'X', 'T', ',', ' ', 'p', 'a', 't', 'h', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'T', 'E', 'X', 'T', ',', ' ', 'p', 'a', 'g', 'e', 'n', 'o', ' ', ' ', ' ', ' ', ' ', 'I', 'N', 'T', 'E', 'G', 'E', 'R', ',', ' ', 'p', 'a', 'g', 'e', 't', 'y', 'p', 'e', ' ', ' ', ' ', 'T', 'E', 'X', 'T', ',', ' ', 'n', 'c', 'e', 'l', 'l', ' ', ' ', ' ', ' ', ' ', ' ', 'I', 'N', 'T', 'E', 'G', 'E', 'R', ',', ' ', 'p', 'a', 'y', 'l', 'o', 'a', 'd', ' ', ' ', ' ', ' ', 'I', 'N', 'T', 'E', 'G', 'E', 'R', ',', ' ', 'u', 'n', 'u', 's', 'e', 'd', ' ', ' ', ' ', ' ', ' ', 'I', 'N', 'T', 'E', 'G', 'E', 'R', ',', ' ', 'm', 'x', '_', 'p', 'a', 'y', 'l', 'o', 'a', 'd', ' ', 'I', 'N', 'T', 'E', 'G', 'E', 'R', ',', ' ', 'p', 'g', 'o', 'f', 'f', 's', 'e', 't', ' ', ' ', ' ', 'I', 'N', 'T', 'E', 'G', 'E', 'R', ',', ' ', 'p', 'g', 's', 'i', 'z', 'e', ' ', ' ', ' ', ' ', ' ', 'I', 'N', 'T', 'E', 'G', 'E', 'R', ',', ' ', 's', 'c', 'h', 'e', 'm', 'a', ' ', ' ', ' ', ' ', ' ', 'T', 'E', 'X', 'T', ' ', 'H', 'I', 'D', 'D', 'E', 'N', ',', ' ', 'a', 'g', 'g', 'r', 'e', 'g', 'a', 't', 'e', ' ', ' ', 'B', 'O', 'O', 'L', 'E', 'A', 'N', ' ', 'H', 'I', 'D', 'D', 'E', 'N', ')'}
var _zFake = [8]uint8{}
// C documentation
//
// /*
// ** The sqlite3KeywordCode function looks up an identifier to determine if
// ** it is a keyword. If it is a keyword, the token code of that keyword is
// ** returned. If the input is not a keyword, TK_ID is returned.
// **
// ** The implementation of this routine was generated by a program,
// ** mkkeywordhash.c, located in the tool subdirectory of the distribution.
// ** The output of the mkkeywordhash.c program is written into a file
// ** named keywordhash.h and then included into this source file by
// ** the #include below.
// */
// /************** Include keywordhash.h in the middle of tokenize.c ************/
// /************** Begin file keywordhash.h *************************************/
// /***** This file contains automatically generated code ******
// **
// ** The code in this file has been automatically generated by
// **
// ** sqlite/tool/mkkeywordhash.c
// **
// ** The code in this file implements a function that determines whether
// ** or not a given identifier is really an SQL keyword. The same thing
// ** might be implemented more directly using a hand-written hash table.
// ** But by using this automatically generated code, the size of the code
// ** is substantially reduced. This is important for embedded applications
// ** on platforms with limited memory.
// */
// /* Hash score: 231 */
// /* zKWText[] encodes 1007 bytes of keyword text in 667 bytes */
// /* REINDEXEDESCAPEACHECKEYBEFOREIGNOREGEXPLAINSTEADDATABASELECT */
// /* ABLEFTHENDEFERRABLELSEXCLUDELETEMPORARYISNULLSAVEPOINTERSECT */
// /* IESNOTNULLIKEXCEPTRANSACTIONATURALTERAISEXCLUSIVEXISTS */
// /* CONSTRAINTOFFSETRIGGERANGENERATEDETACHAVINGLOBEGINNEREFERENCES */
// /* UNIQUERYWITHOUTERELEASEATTACHBETWEENOTHINGROUPSCASCADEFAULT */
// /* CASECOLLATECREATECURRENT_DATEIMMEDIATEJOINSERTMATCHPLANALYZE */
// /* PRAGMATERIALIZEDEFERREDISTINCTUPDATEVALUESVIRTUALWAYSWHENWHERE */
// /* CURSIVEABORTAFTERENAMEANDROPARTITIONAUTOINCREMENTCASTCOLUMN */
// /* COMMITCONFLICTCROSSCURRENT_TIMESTAMPRECEDINGFAILASTFILTER */
// /* EPLACEFIRSTFOLLOWINGFROMFULLIMITIFORDERESTRICTOTHERSOVER */
// /* ETURNINGRIGHTROLLBACKROWSUNBOUNDEDUNIONUSINGVACUUMVIEWINDOWBY */
// /* INITIALLYPRIMARY */
var _zKWText = [666]uint8{
0: uint8('R'),
1: uint8('E'),
2: uint8('I'),
3: uint8('N'),
4: uint8('D'),
5: uint8('E'),
6: uint8('X'),
7: uint8('E'),
8: uint8('D'),
9: uint8('E'),
10: uint8('S'),
11: uint8('C'),
12: uint8('A'),
13: uint8('P'),
14: uint8('E'),
15: uint8('A'),
16: uint8('C'),
17: uint8('H'),
18: uint8('E'),
19: uint8('C'),
20: uint8('K'),
21: uint8('E'),
22: uint8('Y'),
23: uint8('B'),
24: uint8('E'),
25: uint8('F'),
26: uint8('O'),
27: uint8('R'),
28: uint8('E'),
29: uint8('I'),
30: uint8('G'),
31: uint8('N'),
32: uint8('O'),
33: uint8('R'),
34: uint8('E'),
35: uint8('G'),
36: uint8('E'),
37: uint8('X'),
38: uint8('P'),
39: uint8('L'),
40: uint8('A'),
41: uint8('I'),
42: uint8('N'),
43: uint8('S'),
44: uint8('T'),
45: uint8('E'),
46: uint8('A'),
47: uint8('D'),
48: uint8('D'),
49: uint8('A'),
50: uint8('T'),
51: uint8('A'),
52: uint8('B'),
53: uint8('A'),
54: uint8('S'),
55: uint8('E'),
56: uint8('L'),
57: uint8('E'),
58: uint8('C'),
59: uint8('T'),
60: uint8('A'),
61: uint8('B'),
62: uint8('L'),
63: uint8('E'),
64: uint8('F'),
65: uint8('T'),
66: uint8('H'),
67: uint8('E'),
68: uint8('N'),
69: uint8('D'),
70: uint8('E'),
71: uint8('F'),
72: uint8('E'),
73: uint8('R'),
74: uint8('R'),
75: uint8('A'),
76: uint8('B'),
77: uint8('L'),
78: uint8('E'),
79: uint8('L'),
80: uint8('S'),
81: uint8('E'),
82: uint8('X'),
83: uint8('C'),
84: uint8('L'),
85: uint8('U'),
86: uint8('D'),
87: uint8('E'),
88: uint8('L'),
89: uint8('E'),
90: uint8('T'),
91: uint8('E'),
92: uint8('M'),
93: uint8('P'),
94: uint8('O'),
95: uint8('R'),
96: uint8('A'),
97: uint8('R'),
98: uint8('Y'),
99: uint8('I'),
100: uint8('S'),
101: uint8('N'),
102: uint8('U'),
103: uint8('L'),
104: uint8('L'),
105: uint8('S'),
106: uint8('A'),
107: uint8('V'),
108: uint8('E'),
109: uint8('P'),
110: uint8('O'),
111: uint8('I'),
112: uint8('N'),
113: uint8('T'),
114: uint8('E'),
115: uint8('R'),
116: uint8('S'),
117: uint8('E'),
118: uint8('C'),
119: uint8('T'),
120: uint8('I'),
121: uint8('E'),
122: uint8('S'),
123: uint8('N'),
124: uint8('O'),
125: uint8('T'),
126: uint8('N'),
127: uint8('U'),
128: uint8('L'),
129: uint8('L'),
130: uint8('I'),
131: uint8('K'),
132: uint8('E'),
133: uint8('X'),
134: uint8('C'),
135: uint8('E'),
136: uint8('P'),
137: uint8('T'),
138: uint8('R'),
139: uint8('A'),
140: uint8('N'),
141: uint8('S'),
142: uint8('A'),
143: uint8('C'),
144: uint8('T'),
145: uint8('I'),
146: uint8('O'),
147: uint8('N'),
148: uint8('A'),
149: uint8('T'),
150: uint8('U'),
151: uint8('R'),
152: uint8('A'),
153: uint8('L'),
154: uint8('T'),
155: uint8('E'),
156: uint8('R'),
157: uint8('A'),
158: uint8('I'),
159: uint8('S'),
160: uint8('E'),
161: uint8('X'),
162: uint8('C'),
163: uint8('L'),
164: uint8('U'),
165: uint8('S'),
166: uint8('I'),
167: uint8('V'),
168: uint8('E'),
169: uint8('X'),
170: uint8('I'),
171: uint8('S'),
172: uint8('T'),
173: uint8('S'),
174: uint8('C'),
175: uint8('O'),
176: uint8('N'),
177: uint8('S'),
178: uint8('T'),
179: uint8('R'),
180: uint8('A'),
181: uint8('I'),
182: uint8('N'),
183: uint8('T'),
184: uint8('O'),
185: uint8('F'),
186: uint8('F'),
187: uint8('S'),
188: uint8('E'),
189: uint8('T'),
190: uint8('R'),
191: uint8('I'),
192: uint8('G'),
193: uint8('G'),
194: uint8('E'),
195: uint8('R'),
196: uint8('A'),
197: uint8('N'),
198: uint8('G'),
199: uint8('E'),
200: uint8('N'),
201: uint8('E'),
202: uint8('R'),
203: uint8('A'),
204: uint8('T'),
205: uint8('E'),
206: uint8('D'),
207: uint8('E'),
208: uint8('T'),
209: uint8('A'),
210: uint8('C'),
211: uint8('H'),
212: uint8('A'),
213: uint8('V'),
214: uint8('I'),
215: uint8('N'),
216: uint8('G'),
217: uint8('L'),
218: uint8('O'),
219: uint8('B'),
220: uint8('E'),
221: uint8('G'),
222: uint8('I'),
223: uint8('N'),
224: uint8('N'),
225: uint8('E'),
226: uint8('R'),
227: uint8('E'),
228: uint8('F'),
229: uint8('E'),
230: uint8('R'),
231: uint8('E'),
232: uint8('N'),
233: uint8('C'),
234: uint8('E'),
235: uint8('S'),
236: uint8('U'),
237: uint8('N'),
238: uint8('I'),
239: uint8('Q'),
240: uint8('U'),
241: uint8('E'),
242: uint8('R'),
243: uint8('Y'),
244: uint8('W'),
245: uint8('I'),
246: uint8('T'),
247: uint8('H'),
248: uint8('O'),
249: uint8('U'),
250: uint8('T'),
251: uint8('E'),
252: uint8('R'),
253: uint8('E'),
254: uint8('L'),
255: uint8('E'),
256: uint8('A'),
257: uint8('S'),
258: uint8('E'),
259: uint8('A'),
260: uint8('T'),
261: uint8('T'),
262: uint8('A'),
263: uint8('C'),
264: uint8('H'),
265: uint8('B'),
266: uint8('E'),
267: uint8('T'),
268: uint8('W'),
269: uint8('E'),
270: uint8('E'),
271: uint8('N'),
272: uint8('O'),
273: uint8('T'),
274: uint8('H'),
275: uint8('I'),
276: uint8('N'),
277: uint8('G'),
278: uint8('R'),
279: uint8('O'),
280: uint8('U'),
281: uint8('P'),
282: uint8('S'),
283: uint8('C'),
284: uint8('A'),
285: uint8('S'),
286: uint8('C'),
287: uint8('A'),
288: uint8('D'),
289: uint8('E'),
290: uint8('F'),
291: uint8('A'),
292: uint8('U'),
293: uint8('L'),
294: uint8('T'),
295: uint8('C'),
296: uint8('A'),
297: uint8('S'),
298: uint8('E'),
299: uint8('C'),
300: uint8('O'),
301: uint8('L'),
302: uint8('L'),
303: uint8('A'),
304: uint8('T'),
305: uint8('E'),
306: uint8('C'),
307: uint8('R'),
308: uint8('E'),
309: uint8('A'),
310: uint8('T'),
311: uint8('E'),
312: uint8('C'),
313: uint8('U'),
314: uint8('R'),
315: uint8('R'),
316: uint8('E'),
317: uint8('N'),
318: uint8('T'),
319: uint8('_'),
320: uint8('D'),
321: uint8('A'),
322: uint8('T'),
323: uint8('E'),
324: uint8('I'),
325: uint8('M'),
326: uint8('M'),
327: uint8('E'),
328: uint8('D'),
329: uint8('I'),
330: uint8('A'),
331: uint8('T'),
332: uint8('E'),
333: uint8('J'),
334: uint8('O'),
335: uint8('I'),
336: uint8('N'),
337: uint8('S'),
338: uint8('E'),
339: uint8('R'),
340: uint8('T'),
341: uint8('M'),
342: uint8('A'),
343: uint8('T'),
344: uint8('C'),
345: uint8('H'),
346: uint8('P'),
347: uint8('L'),
348: uint8('A'),
349: uint8('N'),
350: uint8('A'),
351: uint8('L'),
352: uint8('Y'),
353: uint8('Z'),
354: uint8('E'),
355: uint8('P'),
356: uint8('R'),
357: uint8('A'),
358: uint8('G'),
359: uint8('M'),
360: uint8('A'),
361: uint8('T'),
362: uint8('E'),
363: uint8('R'),
364: uint8('I'),
365: uint8('A'),
366: uint8('L'),
367: uint8('I'),
368: uint8('Z'),
369: uint8('E'),
370: uint8('D'),
371: uint8('E'),
372: uint8('F'),
373: uint8('E'),
374: uint8('R'),
375: uint8('R'),
376: uint8('E'),
377: uint8('D'),
378: uint8('I'),
379: uint8('S'),
380: uint8('T'),
381: uint8('I'),
382: uint8('N'),
383: uint8('C'),
384: uint8('T'),
385: uint8('U'),
386: uint8('P'),
387: uint8('D'),
388: uint8('A'),
389: uint8('T'),
390: uint8('E'),
391: uint8('V'),
392: uint8('A'),
393: uint8('L'),
394: uint8('U'),
395: uint8('E'),
396: uint8('S'),
397: uint8('V'),
398: uint8('I'),
399: uint8('R'),
400: uint8('T'),
401: uint8('U'),
402: uint8('A'),
403: uint8('L'),
404: uint8('W'),
405: uint8('A'),
406: uint8('Y'),
407: uint8('S'),
408: uint8('W'),
409: uint8('H'),
410: uint8('E'),
411: uint8('N'),
412: uint8('W'),
413: uint8('H'),
414: uint8('E'),
415: uint8('R'),
416: uint8('E'),
417: uint8('C'),
418: uint8('U'),
419: uint8('R'),
420: uint8('S'),
421: uint8('I'),
422: uint8('V'),
423: uint8('E'),
424: uint8('A'),
425: uint8('B'),
426: uint8('O'),
427: uint8('R'),
428: uint8('T'),
429: uint8('A'),
430: uint8('F'),
431: uint8('T'),
432: uint8('E'),
433: uint8('R'),
434: uint8('E'),
435: uint8('N'),
436: uint8('A'),
437: uint8('M'),
438: uint8('E'),
439: uint8('A'),
440: uint8('N'),
441: uint8('D'),
442: uint8('R'),
443: uint8('O'),
444: uint8('P'),
445: uint8('A'),
446: uint8('R'),
447: uint8('T'),
448: uint8('I'),
449: uint8('T'),
450: uint8('I'),
451: uint8('O'),
452: uint8('N'),
453: uint8('A'),
454: uint8('U'),
455: uint8('T'),
456: uint8('O'),
457: uint8('I'),
458: uint8('N'),
459: uint8('C'),
460: uint8('R'),
461: uint8('E'),
462: uint8('M'),
463: uint8('E'),
464: uint8('N'),
465: uint8('T'),
466: uint8('C'),
467: uint8('A'),
468: uint8('S'),
469: uint8('T'),
470: uint8('C'),
471: uint8('O'),
472: uint8('L'),
473: uint8('U'),
474: uint8('M'),
475: uint8('N'),
476: uint8('C'),
477: uint8('O'),
478: uint8('M'),
479: uint8('M'),
480: uint8('I'),
481: uint8('T'),
482: uint8('C'),
483: uint8('O'),
484: uint8('N'),
485: uint8('F'),
486: uint8('L'),
487: uint8('I'),
488: uint8('C'),
489: uint8('T'),
490: uint8('C'),
491: uint8('R'),
492: uint8('O'),
493: uint8('S'),
494: uint8('S'),
495: uint8('C'),
496: uint8('U'),
497: uint8('R'),
498: uint8('R'),
499: uint8('E'),
500: uint8('N'),
501: uint8('T'),
502: uint8('_'),
503: uint8('T'),
504: uint8('I'),
505: uint8('M'),
506: uint8('E'),
507: uint8('S'),
508: uint8('T'),
509: uint8('A'),
510: uint8('M'),
511: uint8('P'),
512: uint8('R'),
513: uint8('E'),
514: uint8('C'),
515: uint8('E'),
516: uint8('D'),
517: uint8('I'),
518: uint8('N'),
519: uint8('G'),
520: uint8('F'),
521: uint8('A'),
522: uint8('I'),
523: uint8('L'),
524: uint8('A'),
525: uint8('S'),
526: uint8('T'),
527: uint8('F'),
528: uint8('I'),
529: uint8('L'),
530: uint8('T'),
531: uint8('E'),
532: uint8('R'),
533: uint8('E'),
534: uint8('P'),
535: uint8('L'),
536: uint8('A'),
537: uint8('C'),
538: uint8('E'),
539: uint8('F'),
540: uint8('I'),
541: uint8('R'),
542: uint8('S'),
543: uint8('T'),
544: uint8('F'),
545: uint8('O'),
546: uint8('L'),
547: uint8('L'),
548: uint8('O'),
549: uint8('W'),
550: uint8('I'),
551: uint8('N'),
552: uint8('G'),
553: uint8('F'),
554: uint8('R'),
555: uint8('O'),
556: uint8('M'),
557: uint8('F'),
558: uint8('U'),
559: uint8('L'),
560: uint8('L'),
561: uint8('I'),
562: uint8('M'),
563: uint8('I'),
564: uint8('T'),
565: uint8('I'),
566: uint8('F'),
567: uint8('O'),
568: uint8('R'),
569: uint8('D'),
570: uint8('E'),
571: uint8('R'),
572: uint8('E'),
573: uint8('S'),
574: uint8('T'),
575: uint8('R'),
576: uint8('I'),
577: uint8('C'),
578: uint8('T'),
579: uint8('O'),
580: uint8('T'),
581: uint8('H'),
582: uint8('E'),
583: uint8('R'),
584: uint8('S'),
585: uint8('O'),
586: uint8('V'),
587: uint8('E'),
588: uint8('R'),
589: uint8('E'),
590: uint8('T'),
591: uint8('U'),
592: uint8('R'),
593: uint8('N'),
594: uint8('I'),
595: uint8('N'),
596: uint8('G'),
597: uint8('R'),
598: uint8('I'),
599: uint8('G'),
600: uint8('H'),
601: uint8('T'),
602: uint8('R'),
603: uint8('O'),
604: uint8('L'),
605: uint8('L'),
606: uint8('B'),
607: uint8('A'),
608: uint8('C'),
609: uint8('K'),
610: uint8('R'),
611: uint8('O'),
612: uint8('W'),
613: uint8('S'),
614: uint8('U'),
615: uint8('N'),
616: uint8('B'),
617: uint8('O'),
618: uint8('U'),
619: uint8('N'),
620: uint8('D'),
621: uint8('E'),
622: uint8('D'),
623: uint8('U'),
624: uint8('N'),
625: uint8('I'),
626: uint8('O'),
627: uint8('N'),
628: uint8('U'),
629: uint8('S'),
630: uint8('I'),
631: uint8('N'),
632: uint8('G'),
633: uint8('V'),
634: uint8('A'),
635: uint8('C'),
636: uint8('U'),
637: uint8('U'),
638: uint8('M'),
639: uint8('V'),
640: uint8('I'),
641: uint8('E'),
642: uint8('W'),
643: uint8('I'),
644: uint8('N'),
645: uint8('D'),
646: uint8('O'),
647: uint8('W'),
648: uint8('B'),
649: uint8('Y'),
650: uint8('I'),
651: uint8('N'),
652: uint8('I'),
653: uint8('T'),
654: uint8('I'),
655: uint8('A'),
656: uint8('L'),
657: uint8('L'),
658: uint8('Y'),
659: uint8('P'),
660: uint8('R'),
661: uint8('I'),
662: uint8('M'),
663: uint8('A'),
664: uint8('R'),
665: uint8('Y'),
}
/* 0123456789 123456789 123456789 123 */
var _zKeyText = [34]uint8{'n', 'a', 't', 'u', 'r', 'a', 'l', 'e', 'f', 't', 'o', 'u', 't', 'e', 'r', 'i', 'g', 'h', 't', 'f', 'u', 'l', 'l', 'i', 'n', 'n', 'e', 'r', 'c', 'r', 'o', 's', 's'}
// C documentation
//
// /*
// ** The header string that appears at the beginning of every
// ** SQLite database.
// */
var _zMagicHeader = [16]uint8{'S', 'Q', 'L', 'i', 't', 'e', ' ', 'f', 'o', 'r', 'm', 'a', 't', ' ', '3'}
/*
** Set this global variable to 1 to enable tracing using the TRACE
** macro.
*/
/*
** Extract a 2-byte big-endian integer from an array of unsigned bytes.
** But if the value is zero, make it 65536.
**
** This routine is used to extract the "offset to cell content area" value
** from the header of a btree page. If the page size is 65536 and the page
** is empty, the offset should be 65536, but the 2-byte value stores zero.
** This routine makes the necessary adjustment to 65536.
*/
/*
** Values passed as the 5th argument to allocateBtreePage()
*/
/*
** Macro IfNotOmitAV(x) returns (x) if SQLITE_OMIT_AUTOVACUUM is not
** defined, or 0 if it is. For example:
**
** bIncrVacuum = IfNotOmitAV(pBtShared->incrVacuum);
*/
var _zOrd = [9]uint8{'t', 'h', 's', 't', 'n', 'd', 'r', 'd'}
/* End of function */
/* 123456789 123456789 123 */
var _zText = [25]uint8{'o', 'n', 'o', 'f', 'f', 'a', 'l', 's', 'e', 'y', 'e', 's', 't', 'r', 'u', 'e', 'x', 't', 'r', 'a', 'f', 'u', 'l', 'l'}
var _zeroHdr = [28]uint8{}