6c92f85d10
Bring the Nexus/Praxis/Hexis integration in line with MAVEN_ECOSYSTEM_ARCHITECTURE.md: - Praxis over HTTP: drop the in-process praxis.db open (praxisstore/ praxistools) and call praxisd's /api/v1/tools/* API via a new praxisClient. Honors the "no component reads another's DB" invariant (AC#12). PraxisConfig.DBPath -> URL. - Hexis confirmation gate: mutating capabilities (ReadOnly=false) now park a bound pendingHexis confirmation and require a spoken "да" before executing; read-only run immediately (AC#7, no auto attention->action). - Capability safety: >1 verb match is ambiguous -> ask instead of firing the first; ambiguous Nexus resolution asks for clarification (AC#2). - Correlation IDs on Hexis execute, recorded in the cross-service trace. - Bug: importance arrives as JSON float64 over HTTP, not int. - Tests: confirm-gate, decline, read-only, and ambiguity paths. Build: vendor/ bakes in the hexis client (replace-directed at a sibling repo outside the Docker context); Dockerfile builds from vendor and no longer `go mod download`s the unreachable replace paths. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3151 lines
86 KiB
Go
3151 lines
86 KiB
Go
// Code generated by modernc.org/undup from the per-target sqlite_*.go files; DO NOT EDIT.
|
|
|
|
//go:build (darwin && amd64) || (darwin && arm64) || (freebsd && 386) || (freebsd && amd64) || (linux && 386) || (linux && amd64) || (linux && loong64) || (netbsd && amd64) || (openbsd && amd64) || (windows && (amd64 || arm64)) || (windows && 386)
|
|
|
|
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]int8
|
|
}
|
|
|
|
type TFpDecode = struct {
|
|
Fn int32
|
|
FiDP int32
|
|
Fz uintptr
|
|
FzBuf [21]int8
|
|
Fsign int8
|
|
FisSpecial int8
|
|
}
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** Extra floating-point literals to allow in JSON.
|
|
// */
|
|
type TNanInfName = struct {
|
|
Fc1 int8
|
|
Fc2 int8
|
|
Fn int8
|
|
FeType int8
|
|
FnRepl int8
|
|
FzMatch uintptr
|
|
FzRepl uintptr
|
|
}
|
|
|
|
type TPorterTokenizer = struct {
|
|
Ftokenizer_v2 Tfts5_tokenizer_v2
|
|
FpTokenizer uintptr
|
|
FaBuf [128]int8
|
|
}
|
|
|
|
type TReturning = struct {
|
|
FpParse uintptr
|
|
FpReturnEL uintptr
|
|
FretTrig TTrigger
|
|
FretTStep TTriggerStep
|
|
FiRetCur int32
|
|
FnRetCol int32
|
|
FiRetReg int32
|
|
FzName [40]int8
|
|
}
|
|
|
|
type TWhereScan = struct {
|
|
FpOrigWC uintptr
|
|
FpWC uintptr
|
|
FzCollName uintptr
|
|
FpIdxExpr uintptr
|
|
Fk int32
|
|
FopMask Tu32
|
|
Fidxaff int8
|
|
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 int8
|
|
Fbase TetByte
|
|
Fflags TetByte
|
|
Ftype1 TetByte
|
|
Fcharset TetByte
|
|
Fprefix TetByte
|
|
FiNxt int8
|
|
}
|
|
|
|
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 && **(**int8)(__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
|
|
**(**int8)(__ccgo_up(zBuf + uintptr((**(**TStrAccum)(__ccgo_up(bp))).FnChar))) = 0
|
|
return zBuf
|
|
}
|
|
|
|
/* Maximum size of an sqlite3_log() message. */
|
|
|
|
// 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)
|
|
}
|
|
**(**int8)(__ccgo_up((*Tsqlite3_str)(unsafe.Pointer(p)).FzText + uintptr((*Tsqlite3_str)(unsafe.Pointer(p)).FnChar))) = 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 && **(**int8)(__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 **(**int8)(__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]int8{'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)
|
|
**(**int8)(__ccgo_up(zBuf + uintptr((**(**TStrAccum)(__ccgo_up(bp))).FnChar))) = 0
|
|
return zBuf
|
|
}
|
|
|
|
var _aDigits = [33]int8{'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]int8{'-', 'x', '0', 0, 'X', '0'}
|
|
|
|
var _aSpecial = [32]int8{
|
|
8: int8('b'),
|
|
9: int8('t'),
|
|
10: int8('n'),
|
|
12: int8('f'),
|
|
13: int8('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]int8
|
|
FrLimit float32
|
|
FrXform float32
|
|
}{
|
|
0: {
|
|
FnName: uint8(6),
|
|
FzName: [7]int8{'s', 'e', 'c', 'o', 'n', 'd'},
|
|
FrLimit: float32(4.6427e+14),
|
|
FrXform: float32(1),
|
|
},
|
|
1: {
|
|
FnName: uint8(6),
|
|
FzName: [7]int8{'m', 'i', 'n', 'u', 't', 'e'},
|
|
FrLimit: float32(7.7379e+12),
|
|
FrXform: float32(60),
|
|
},
|
|
2: {
|
|
FnName: uint8(4),
|
|
FzName: [7]int8{'h', 'o', 'u', 'r'},
|
|
FrLimit: float32(1.2897e+11),
|
|
FrXform: float32(3600),
|
|
},
|
|
3: {
|
|
FnName: uint8(3),
|
|
FzName: [7]int8{'d', 'a', 'y'},
|
|
FrLimit: float32(5.373485e+06),
|
|
FrXform: float32(86400),
|
|
},
|
|
4: {
|
|
FnName: uint8(5),
|
|
FzName: [7]int8{'m', 'o', 'n', 't', 'h'},
|
|
FrLimit: float32(176546),
|
|
FrXform: float32(2.592e+06),
|
|
},
|
|
5: {
|
|
FnName: uint8(4),
|
|
FzName: [7]int8{'y', 'e', 'a', 'r'},
|
|
FrLimit: float32(14713),
|
|
FrXform: float32(3.1536e+07),
|
|
},
|
|
}
|
|
|
|
func _asciiFold(tls *libc.TLS, aOut uintptr, aIn uintptr, nByte int32) {
|
|
var c int8
|
|
var i int32
|
|
_, _ = c, i
|
|
i = 0
|
|
for {
|
|
if !(i < nByte) {
|
|
break
|
|
}
|
|
c = **(**int8)(__ccgo_up(aIn + uintptr(i)))
|
|
if int32(c) >= int32('A') && int32(c) <= int32('Z') {
|
|
c = int8(int32(c) + libc.Int32FromInt32(32))
|
|
}
|
|
**(**int8)(__ccgo_up(aOut + uintptr(i))) = c
|
|
goto _1
|
|
_1:
|
|
;
|
|
i = i + 1
|
|
}
|
|
}
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** If the DateTime p is raw number, try to figure out if it is
|
|
// ** a julian day number of a unix timestamp. Set the p value
|
|
// ** appropriately.
|
|
// */
|
|
func _autoAdjustDate(tls *libc.TLS, p uintptr) {
|
|
var r float64
|
|
_ = r
|
|
if !(int32(uint32(*(*uint8)(unsafe.Pointer(p + 44))&0x1>>0)) != 0) || (*TDateTime)(unsafe.Pointer(p)).FvalidJD != 0 {
|
|
libc.SetBitFieldPtr8Uint32(p+44, libc.Uint32FromInt32(0), 0, 0x1)
|
|
} else {
|
|
if (*TDateTime)(unsafe.Pointer(p)).Fs >= float64(int64(-libc.Int32FromInt32(21086676))*libc.Int64FromInt32(10000)) && (*TDateTime)(unsafe.Pointer(p)).Fs <= float64(libc.Int64FromInt32(25340230)*libc.Int64FromInt32(10000)+libc.Int64FromInt32(799)) {
|
|
r = float64((*TDateTime)(unsafe.Pointer(p)).Fs*float64(1000)) + float64(2.1086676e+14)
|
|
_clearYMD_HMS_TZ(tls, p)
|
|
(*TDateTime)(unsafe.Pointer(p)).FiJD = int64(r + libc.Float64FromFloat64(0.5))
|
|
(*TDateTime)(unsafe.Pointer(p)).FvalidJD = int8(1)
|
|
libc.SetBitFieldPtr8Uint32(p+44, libc.Uint32FromInt32(0), 0, 0x1)
|
|
}
|
|
}
|
|
}
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** Clear the YMD and HMS and the TZ
|
|
// */
|
|
func _clearYMD_HMS_TZ(tls *libc.TLS, p uintptr) {
|
|
(*TDateTime)(unsafe.Pointer(p)).FvalidYMD = 0
|
|
(*TDateTime)(unsafe.Pointer(p)).FvalidHMS = 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 && int32(**(**int8)(__ccgo_up(zAff))) <= int32(SQLITE_AFF_BLOB) {
|
|
n = n - 1
|
|
base = base + 1
|
|
zAff = zAff + 1
|
|
}
|
|
for n > int32(1) && int32(**(**int8)(__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 = 0
|
|
} else {
|
|
if int32(1)<<(*TDateTime)(unsafe.Pointer(p)).FM&int32(0x15aa) != 0 {
|
|
(*TDateTime)(unsafe.Pointer(p)).FnFloor = 0
|
|
} else {
|
|
if (*TDateTime)(unsafe.Pointer(p)).FM != int32(2) {
|
|
(*TDateTime)(unsafe.Pointer(p)).FnFloor = libc.BoolInt8((*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 = int8((*TDateTime)(unsafe.Pointer(p)).FD - int32(28))
|
|
} else {
|
|
(*TDateTime)(unsafe.Pointer(p)).FnFloor = int8((*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 = int8(1)
|
|
}
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** Convert from YYYY-MM-DD HH:MM:SS to julian day. We always assume
|
|
// ** that the YYYY-MM-DD is according to the Gregorian calendar.
|
|
// **
|
|
// ** Reference: Meeus page 61
|
|
// */
|
|
func _computeJD(tls *libc.TLS, p uintptr) {
|
|
var A, B, D, M, X1, X2, Y int32
|
|
_, _, _, _, _, _, _ = A, B, D, M, X1, X2, Y
|
|
if (*TDateTime)(unsafe.Pointer(p)).FvalidJD != 0 {
|
|
return
|
|
}
|
|
if (*TDateTime)(unsafe.Pointer(p)).FvalidYMD != 0 {
|
|
Y = (*TDateTime)(unsafe.Pointer(p)).FY
|
|
M = (*TDateTime)(unsafe.Pointer(p)).FM
|
|
D = (*TDateTime)(unsafe.Pointer(p)).FD
|
|
} else {
|
|
Y = int32(2000) /* If no YMD specified, assume 2000-Jan-01 */
|
|
M = int32(1)
|
|
D = int32(1)
|
|
}
|
|
if Y < -int32(4713) || Y > int32(9999) || int32(uint32(*(*uint8)(unsafe.Pointer(p + 44))&0x1>>0)) != 0 {
|
|
_datetimeError(tls, p)
|
|
return
|
|
}
|
|
if M <= int32(2) {
|
|
Y = Y - 1
|
|
M = M + int32(12)
|
|
}
|
|
A = (Y + int32(4800)) / int32(100)
|
|
B = int32(38) - A + A/int32(4)
|
|
X1 = int32(36525) * (Y + int32(4716)) / int32(100)
|
|
X2 = int32(306001) * (M + int32(1)) / int32(10000)
|
|
(*TDateTime)(unsafe.Pointer(p)).FiJD = int64(float64((float64(X1+X2+D+B) - libc.Float64FromFloat64(1524.5)) * libc.Float64FromInt32(86400000)))
|
|
(*TDateTime)(unsafe.Pointer(p)).FvalidJD = int8(1)
|
|
if (*TDateTime)(unsafe.Pointer(p)).FvalidHMS != 0 {
|
|
**(**Tsqlite3_int64)(__ccgo_up(p)) += int64((*TDateTime)(unsafe.Pointer(p)).Fh*int32(3600000)+(*TDateTime)(unsafe.Pointer(p)).Fm*int32(60000)) + int64(float64((*TDateTime)(unsafe.Pointer(p)).Fs*libc.Float64FromInt32(1000))+libc.Float64FromFloat64(0.5))
|
|
if (*TDateTime)(unsafe.Pointer(p)).Ftz != 0 {
|
|
**(**Tsqlite3_int64)(__ccgo_up(p)) -= int64((*TDateTime)(unsafe.Pointer(p)).Ftz * int32(60000))
|
|
(*TDateTime)(unsafe.Pointer(p)).FvalidYMD = 0
|
|
(*TDateTime)(unsafe.Pointer(p)).FvalidHMS = 0
|
|
(*TDateTime)(unsafe.Pointer(p)).Ftz = 0
|
|
libc.SetBitFieldPtr8Uint32(p+44, libc.Uint32FromInt32(1), 3, 0x8)
|
|
libc.SetBitFieldPtr8Uint32(p+44, libc.Uint32FromInt32(0), 4, 0x10)
|
|
}
|
|
}
|
|
}
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** Compute the Year, Month, and Day from the julian day number.
|
|
// */
|
|
func _computeYMD(tls *libc.TLS, p uintptr) {
|
|
var A, B, C, D, E, X1, Z, alpha, v1 int32
|
|
_, _, _, _, _, _, _, _, _ = A, B, C, D, E, X1, Z, alpha, v1
|
|
if (*TDateTime)(unsafe.Pointer(p)).FvalidYMD != 0 {
|
|
return
|
|
}
|
|
if !((*TDateTime)(unsafe.Pointer(p)).FvalidJD != 0) {
|
|
(*TDateTime)(unsafe.Pointer(p)).FY = int32(2000)
|
|
(*TDateTime)(unsafe.Pointer(p)).FM = int32(1)
|
|
(*TDateTime)(unsafe.Pointer(p)).FD = int32(1)
|
|
} else {
|
|
if !(_validJulianDay(tls, (*TDateTime)(unsafe.Pointer(p)).FiJD) != 0) {
|
|
_datetimeError(tls, p)
|
|
return
|
|
} else {
|
|
Z = int32(((*TDateTime)(unsafe.Pointer(p)).FiJD + libc.Int64FromInt32(43200000)) / libc.Int64FromInt32(86400000))
|
|
alpha = int32((float64(Z)+libc.Float64FromFloat64(32044.75))/libc.Float64FromFloat64(36524.25)) - int32(52)
|
|
A = Z + int32(1) + alpha - (alpha+int32(100))/int32(4) + int32(25)
|
|
B = A + int32(1524)
|
|
C = int32((float64(B) - libc.Float64FromFloat64(122.1)) / libc.Float64FromFloat64(365.25))
|
|
D = int32(36525) * (C & int32(32767)) / int32(100)
|
|
E = int32(float64(B-D) / libc.Float64FromFloat64(30.6001))
|
|
X1 = int32(float64(libc.Float64FromFloat64(30.6001) * float64(E)))
|
|
(*TDateTime)(unsafe.Pointer(p)).FD = B - D - X1
|
|
if E < int32(14) {
|
|
v1 = E - int32(1)
|
|
} else {
|
|
v1 = E - int32(13)
|
|
}
|
|
(*TDateTime)(unsafe.Pointer(p)).FM = v1
|
|
if (*TDateTime)(unsafe.Pointer(p)).FM > int32(2) {
|
|
v1 = C - int32(4716)
|
|
} else {
|
|
v1 = C - int32(4715)
|
|
}
|
|
(*TDateTime)(unsafe.Pointer(p)).FY = v1
|
|
}
|
|
}
|
|
(*TDateTime)(unsafe.Pointer(p)).FvalidYMD = int8(1)
|
|
}
|
|
|
|
var _cume_distName = [10]int8{'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 int32(**(**int8)(__ccgo_up(zName + uintptr(-libc.Int32FromInt32(1))))) != 0 || int32(**(**int8)(__ccgo_up(zName + uintptr(-libc.Int32FromInt32(2))))) != 0 || int32(**(**int8)(__ccgo_up(zName + uintptr(-libc.Int32FromInt32(3))))) != 0 || int32(**(**int8)(__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]int8
|
|
_ = Y
|
|
if _isDate(tls, context, argc, argv, bp) == 0 {
|
|
_computeYMD(tls, bp)
|
|
Y = (**(**TDateTime)(__ccgo_up(bp))).FY
|
|
if Y < 0 {
|
|
Y = -Y
|
|
}
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(1)] = int8(int32('0') + Y/int32(1000)%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(2)] = int8(int32('0') + Y/int32(100)%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(3)] = int8(int32('0') + Y/int32(10)%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(4)] = int8(int32('0') + Y%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(5)] = int8('-')
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(6)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).FM/int32(10)%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(7)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).FM%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(8)] = int8('-')
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(9)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).FD/int32(10)%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(10)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).FD%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(11)] = 0
|
|
if (**(**TDateTime)(__ccgo_up(bp))).FY < 0 {
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[0] = int8('-')
|
|
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
|
|
//
|
|
// /*
|
|
// ** datetime( TIMESTRING, MOD, MOD, ...)
|
|
// **
|
|
// ** Return YYYY-MM-DD HH:MM:SS
|
|
// */
|
|
func _datetimeFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) {
|
|
bp := tls.Alloc(80)
|
|
defer tls.Free(80)
|
|
var Y, n, s int32
|
|
var _ /* x at bp+0 */ TDateTime
|
|
var _ /* zBuf at bp+48 */ [32]int8
|
|
_, _, _ = Y, n, s
|
|
if _isDate(tls, context, argc, argv, bp) == 0 {
|
|
_computeYMD_HMS(tls, bp)
|
|
Y = (**(**TDateTime)(__ccgo_up(bp))).FY
|
|
if Y < 0 {
|
|
Y = -Y
|
|
}
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(1)] = int8(int32('0') + Y/int32(1000)%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(2)] = int8(int32('0') + Y/int32(100)%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(3)] = int8(int32('0') + Y/int32(10)%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(4)] = int8(int32('0') + Y%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(5)] = int8('-')
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(6)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).FM/int32(10)%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(7)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).FM%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(8)] = int8('-')
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(9)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).FD/int32(10)%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(10)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).FD%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(11)] = int8(' ')
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(12)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).Fh/int32(10)%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(13)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).Fh%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(14)] = int8(':')
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(15)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).Fm/int32(10)%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(16)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).Fm%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(17)] = int8(':')
|
|
if int32(uint32(*(*uint8)(unsafe.Pointer(bp + 44))&0x4>>2)) != 0 {
|
|
s = int32(float64(libc.Float64FromFloat64(1000)*(**(**TDateTime)(__ccgo_up(bp))).Fs) + libc.Float64FromFloat64(0.5))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(18)] = int8(int32('0') + s/int32(10000)%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(19)] = int8(int32('0') + s/int32(1000)%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(20)] = int8('.')
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(21)] = int8(int32('0') + s/int32(100)%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(22)] = int8(int32('0') + s/int32(10)%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(23)] = int8(int32('0') + s%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(24)] = 0
|
|
n = int32(24)
|
|
} else {
|
|
s = int32((**(**TDateTime)(__ccgo_up(bp))).Fs)
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(18)] = int8(int32('0') + s/int32(10)%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(19)] = int8(int32('0') + s%int32(10))
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[int32(20)] = 0
|
|
n = int32(20)
|
|
}
|
|
if (**(**TDateTime)(__ccgo_up(bp))).FY < 0 {
|
|
(**(**[32]int8)(__ccgo_up(bp + 48)))[0] = int8('-')
|
|
Xsqlite3_result_text(tls, context, bp+48, n, uintptr(-libc.Int32FromInt32(1)))
|
|
} else {
|
|
Xsqlite3_result_text(tls, context, bp+48+1, n-int32(1), 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 = 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]int8{'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 **(**int8)(__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]int8{'f', 'i', 'r', 's', 't', '_', 'v', 'a', 'l', 'u', 'e'}
|
|
|
|
var _fmtinfo = [23]Tet_info{
|
|
0: {
|
|
Ffmttype: int8('s'),
|
|
Fflags: uint8(4),
|
|
Ftype1: uint8(etSTRING),
|
|
FiNxt: int8(1),
|
|
},
|
|
1: {
|
|
Ffmttype: int8('E'),
|
|
Fflags: uint8(1),
|
|
Ftype1: uint8(etEXP),
|
|
Fcharset: uint8(14),
|
|
},
|
|
2: {
|
|
Ffmttype: int8('u'),
|
|
Fbase: uint8(10),
|
|
Ftype1: uint8(etDECIMAL),
|
|
FiNxt: int8(3),
|
|
},
|
|
3: {
|
|
Ffmttype: int8('G'),
|
|
Fflags: uint8(1),
|
|
Ftype1: uint8(etGENERIC),
|
|
Fcharset: uint8(14),
|
|
},
|
|
4: {
|
|
Ffmttype: int8('w'),
|
|
Fflags: uint8(4),
|
|
Ftype1: uint8(etESCAPE_w),
|
|
},
|
|
5: {
|
|
Ffmttype: int8('x'),
|
|
Fbase: uint8(16),
|
|
Fcharset: uint8(16),
|
|
Fprefix: uint8(1),
|
|
},
|
|
6: {
|
|
Ffmttype: int8('c'),
|
|
Ftype1: uint8(etCHARX),
|
|
},
|
|
7: {
|
|
Ffmttype: int8('z'),
|
|
Fflags: uint8(4),
|
|
Ftype1: uint8(etDYNSTRING),
|
|
FiNxt: int8(6),
|
|
},
|
|
8: {
|
|
Ffmttype: int8('d'),
|
|
Fbase: uint8(10),
|
|
Fflags: uint8(1),
|
|
Ftype1: uint8(etDECIMAL),
|
|
},
|
|
9: {
|
|
Ffmttype: int8('e'),
|
|
Fflags: uint8(1),
|
|
Ftype1: uint8(etEXP),
|
|
Fcharset: uint8(30),
|
|
},
|
|
10: {
|
|
Ffmttype: int8('f'),
|
|
Fflags: uint8(1),
|
|
Ftype1: uint8(etFLOAT),
|
|
},
|
|
11: {
|
|
Ffmttype: int8('g'),
|
|
Fflags: uint8(1),
|
|
Ftype1: uint8(etGENERIC),
|
|
Fcharset: uint8(30),
|
|
},
|
|
12: {
|
|
Ffmttype: int8('Q'),
|
|
Fflags: uint8(4),
|
|
Ftype1: uint8(etESCAPE_Q),
|
|
},
|
|
13: {
|
|
Ffmttype: int8('i'),
|
|
Fbase: uint8(10),
|
|
Fflags: uint8(1),
|
|
Ftype1: uint8(etDECIMAL),
|
|
},
|
|
14: {
|
|
Ffmttype: int8('%'),
|
|
Ftype1: uint8(etPERCENT),
|
|
FiNxt: int8(16),
|
|
},
|
|
15: {
|
|
Ffmttype: int8('T'),
|
|
Ftype1: uint8(etTOKEN),
|
|
},
|
|
16: {
|
|
Ffmttype: int8('S'),
|
|
Ftype1: uint8(etSRCITEM),
|
|
},
|
|
17: {
|
|
Ffmttype: int8('X'),
|
|
Fbase: uint8(16),
|
|
Fprefix: uint8(4),
|
|
},
|
|
18: {
|
|
Ffmttype: int8('n'),
|
|
Ftype1: uint8(etSIZE),
|
|
},
|
|
19: {
|
|
Ffmttype: int8('o'),
|
|
Fbase: uint8(8),
|
|
Fprefix: uint8(2),
|
|
FiNxt: int8(17),
|
|
},
|
|
20: {
|
|
Ffmttype: int8('p'),
|
|
Fbase: uint8(16),
|
|
Ftype1: uint8(etPOINTER),
|
|
Fprefix: uint8(1),
|
|
},
|
|
21: {
|
|
Ffmttype: int8('q'),
|
|
Fflags: uint8(4),
|
|
Ftype1: uint8(etESCAPE_q),
|
|
},
|
|
22: {
|
|
Ffmttype: int8('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
|
|
*/
|
|
|
|
// 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) || int32(**(**int8)(__ccgo_up(p))) == int32(')') {
|
|
break
|
|
}
|
|
if int32(**(**int8)(__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, **(**int8)(__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, **(**int8)(__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 int8
|
|
_, _, _, _, _ = iIn, iOut, q, v1, v2
|
|
iIn = int32(1)
|
|
iOut = 0
|
|
q = **(**int8)(__ccgo_up(z))
|
|
/* Set stack variable q to the close-quote character */
|
|
if int32(q) == int32('[') {
|
|
q = int8(']')
|
|
}
|
|
for **(**int8)(__ccgo_up(z + uintptr(iIn))) != 0 {
|
|
if int32(**(**int8)(__ccgo_up(z + uintptr(iIn)))) == int32(q) {
|
|
if int32(**(**int8)(__ccgo_up(z + uintptr(iIn+int32(1))))) != int32(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
|
|
**(**int8)(__ccgo_up(z + uintptr(v1))) = q
|
|
}
|
|
} else {
|
|
v1 = iOut
|
|
iOut = iOut + 1
|
|
v2 = iIn
|
|
iIn = iIn + 1
|
|
**(**int8)(__ccgo_up(z + uintptr(v1))) = **(**int8)(__ccgo_up(z + uintptr(v2)))
|
|
}
|
|
}
|
|
**(**int8)(__ccgo_up(z + uintptr(iOut))) = int8('\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 int32(**(**int8)(__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 int8) (r int32) {
|
|
return libc.BoolInt32(int32(t) == int32(' ') || int32(t) == int32('\t') || int32(t) == int32('\n') || int32(t) == int32('\r'))
|
|
}
|
|
|
|
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, **(**int8)(__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, **(**int8)(__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 int8, bYIsVowel int32) (r int32) {
|
|
return libc.BoolInt32(int32(c) == int32('a') || int32(c) == int32('e') || int32(c) == int32('i') || int32(c) == int32('o') || int32(c) == int32('u') || bYIsVowel != 0 && int32(c) == int32('y'))
|
|
}
|
|
|
|
func _fts5PorterStep1A(tls *libc.TLS, aBuf uintptr, pnBuf uintptr) {
|
|
var nBuf int32
|
|
_ = nBuf
|
|
nBuf = **(**int32)(__ccgo_up(pnBuf))
|
|
if int32(**(**int8)(__ccgo_up(aBuf + uintptr(nBuf-int32(1))))) == int32('s') {
|
|
if int32(**(**int8)(__ccgo_up(aBuf + uintptr(nBuf-int32(2))))) == int32('e') {
|
|
if nBuf > int32(4) && int32(**(**int8)(__ccgo_up(aBuf + uintptr(nBuf-int32(4))))) == int32('s') && int32(**(**int8)(__ccgo_up(aBuf + uintptr(nBuf-int32(3))))) == int32('s') || nBuf > int32(3) && int32(**(**int8)(__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 int32(**(**int8)(__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((int32(**(**int8)(__ccgo_up(zStem + uintptr(nStem-int32(1))))) == int32('s') || int32(**(**int8)(__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 int32(**(**int8)(__ccgo_up(zStem + uintptr(nStem-int32(1))))) == int32('w') || int32(**(**int8)(__ccgo_up(zStem + uintptr(nStem-int32(1))))) == int32('x') || int32(**(**int8)(__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, **(**int8)(__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, **(**int8)(__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 && **(**int8)(__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 int8
|
|
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 = 0
|
|
i = iStartOff - int32(1)
|
|
for {
|
|
if !(i >= 0) {
|
|
break
|
|
}
|
|
c = **(**int8)(__ccgo_up((*TFts5SFinder)(unsafe.Pointer(p)).FzDoc + uintptr(i)))
|
|
if int32(c) != int32(' ') && int32(c) != int32('\t') && int32(c) != int32('\n') && int32(c) != int32('\r') {
|
|
break
|
|
}
|
|
goto _1
|
|
_1:
|
|
;
|
|
i = i - 1
|
|
}
|
|
if i != iStartOff-int32(1) && (int32(c) == int32('.') || int32(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 int8) (r int32) {
|
|
return libc.BoolInt32(int32(a) >= int32('0') && int32(a) <= int32('9'))
|
|
}
|
|
|
|
func _fts5_isopenquote(tls *libc.TLS, x int8) (r int32) {
|
|
return libc.BoolInt32(int32(x) == int32('"') || int32(x) == int32('\'') || int32(x) == int32('[') || int32(x) == int32('`'))
|
|
}
|
|
|
|
func _fts5_iswhitespace(tls *libc.TLS, x int8) (r int32) {
|
|
return libc.BoolInt32(int32(x) == int32(' '))
|
|
}
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** Growing our own isspace() routine this way is twice as fast as
|
|
// ** the library isspace() function.
|
|
// */
|
|
var _geopolyIsSpace = [256]int8{
|
|
9: int8(1),
|
|
10: int8(1),
|
|
13: int8(1),
|
|
32: int8(1),
|
|
}
|
|
|
|
/* Compiler and version */
|
|
|
|
// C documentation
|
|
//
|
|
// /* Array for converting from half-bytes (nybbles) into ASCII hex
|
|
// ** digits. */
|
|
var _hexdigits = [16]int8{
|
|
0: int8('0'),
|
|
1: int8('1'),
|
|
2: int8('2'),
|
|
3: int8('3'),
|
|
4: int8('4'),
|
|
5: int8('5'),
|
|
6: int8('6'),
|
|
7: int8('7'),
|
|
8: int8('8'),
|
|
9: int8('9'),
|
|
10: int8('A'),
|
|
11: int8('B'),
|
|
12: int8('C'),
|
|
13: int8('D'),
|
|
14: int8('E'),
|
|
15: int8('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 !(**(**int8)(__ccgo_up(z)) != 0) {
|
|
break
|
|
}
|
|
if int32(**(**int8)(__ccgo_up(z))) == int32('"') {
|
|
n = n + 1
|
|
}
|
|
goto _1
|
|
_1:
|
|
;
|
|
n = n + 1
|
|
z = z + 1
|
|
}
|
|
return n + int64(2)
|
|
}
|
|
|
|
// 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 **(**int8)(__ccgo_up(z + uintptr(i))) != 0 {
|
|
return 0
|
|
}
|
|
goto _1
|
|
_1:
|
|
;
|
|
i = i + 1
|
|
}
|
|
return int32(1)
|
|
}
|
|
|
|
// 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 int8
|
|
_ = c
|
|
if (*TJsonString)(unsafe.Pointer(p)).FnUsed == uint64(0) {
|
|
return
|
|
}
|
|
c = **(**int8)(__ccgo_up((*TJsonString)(unsafe.Pointer(p)).FzBuf + uintptr((*TJsonString)(unsafe.Pointer(p)).FnUsed-uint64(1))))
|
|
if int32(c) == int32('[') || int32(c) == int32('{') {
|
|
return
|
|
}
|
|
_jsonAppendChar(tls, p, int8(','))
|
|
}
|
|
|
|
// 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 int32(**(**int8)(__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]int8{
|
|
32: int8(1),
|
|
33: int8(1),
|
|
35: int8(1),
|
|
36: int8(1),
|
|
37: int8(1),
|
|
38: int8(1),
|
|
40: int8(1),
|
|
41: int8(1),
|
|
42: int8(1),
|
|
43: int8(1),
|
|
44: int8(1),
|
|
45: int8(1),
|
|
46: int8(1),
|
|
47: int8(1),
|
|
48: int8(1),
|
|
49: int8(1),
|
|
50: int8(1),
|
|
51: int8(1),
|
|
52: int8(1),
|
|
53: int8(1),
|
|
54: int8(1),
|
|
55: int8(1),
|
|
56: int8(1),
|
|
57: int8(1),
|
|
58: int8(1),
|
|
59: int8(1),
|
|
60: int8(1),
|
|
61: int8(1),
|
|
62: int8(1),
|
|
63: int8(1),
|
|
64: int8(1),
|
|
65: int8(1),
|
|
66: int8(1),
|
|
67: int8(1),
|
|
68: int8(1),
|
|
69: int8(1),
|
|
70: int8(1),
|
|
71: int8(1),
|
|
72: int8(1),
|
|
73: int8(1),
|
|
74: int8(1),
|
|
75: int8(1),
|
|
76: int8(1),
|
|
77: int8(1),
|
|
78: int8(1),
|
|
79: int8(1),
|
|
80: int8(1),
|
|
81: int8(1),
|
|
82: int8(1),
|
|
83: int8(1),
|
|
84: int8(1),
|
|
85: int8(1),
|
|
86: int8(1),
|
|
87: int8(1),
|
|
88: int8(1),
|
|
89: int8(1),
|
|
90: int8(1),
|
|
91: int8(1),
|
|
93: int8(1),
|
|
94: int8(1),
|
|
95: int8(1),
|
|
96: int8(1),
|
|
97: int8(1),
|
|
98: int8(1),
|
|
99: int8(1),
|
|
100: int8(1),
|
|
101: int8(1),
|
|
102: int8(1),
|
|
103: int8(1),
|
|
104: int8(1),
|
|
105: int8(1),
|
|
106: int8(1),
|
|
107: int8(1),
|
|
108: int8(1),
|
|
109: int8(1),
|
|
110: int8(1),
|
|
111: int8(1),
|
|
112: int8(1),
|
|
113: int8(1),
|
|
114: int8(1),
|
|
115: int8(1),
|
|
116: int8(1),
|
|
117: int8(1),
|
|
118: int8(1),
|
|
119: int8(1),
|
|
120: int8(1),
|
|
121: int8(1),
|
|
122: int8(1),
|
|
123: int8(1),
|
|
124: int8(1),
|
|
125: int8(1),
|
|
126: int8(1),
|
|
127: int8(1),
|
|
128: int8(1),
|
|
129: int8(1),
|
|
130: int8(1),
|
|
131: int8(1),
|
|
132: int8(1),
|
|
133: int8(1),
|
|
134: int8(1),
|
|
135: int8(1),
|
|
136: int8(1),
|
|
137: int8(1),
|
|
138: int8(1),
|
|
139: int8(1),
|
|
140: int8(1),
|
|
141: int8(1),
|
|
142: int8(1),
|
|
143: int8(1),
|
|
144: int8(1),
|
|
145: int8(1),
|
|
146: int8(1),
|
|
147: int8(1),
|
|
148: int8(1),
|
|
149: int8(1),
|
|
150: int8(1),
|
|
151: int8(1),
|
|
152: int8(1),
|
|
153: int8(1),
|
|
154: int8(1),
|
|
155: int8(1),
|
|
156: int8(1),
|
|
157: int8(1),
|
|
158: int8(1),
|
|
159: int8(1),
|
|
160: int8(1),
|
|
161: int8(1),
|
|
162: int8(1),
|
|
163: int8(1),
|
|
164: int8(1),
|
|
165: int8(1),
|
|
166: int8(1),
|
|
167: int8(1),
|
|
168: int8(1),
|
|
169: int8(1),
|
|
170: int8(1),
|
|
171: int8(1),
|
|
172: int8(1),
|
|
173: int8(1),
|
|
174: int8(1),
|
|
175: int8(1),
|
|
176: int8(1),
|
|
177: int8(1),
|
|
178: int8(1),
|
|
179: int8(1),
|
|
180: int8(1),
|
|
181: int8(1),
|
|
182: int8(1),
|
|
183: int8(1),
|
|
184: int8(1),
|
|
185: int8(1),
|
|
186: int8(1),
|
|
187: int8(1),
|
|
188: int8(1),
|
|
189: int8(1),
|
|
190: int8(1),
|
|
191: int8(1),
|
|
192: int8(1),
|
|
193: int8(1),
|
|
194: int8(1),
|
|
195: int8(1),
|
|
196: int8(1),
|
|
197: int8(1),
|
|
198: int8(1),
|
|
199: int8(1),
|
|
200: int8(1),
|
|
201: int8(1),
|
|
202: int8(1),
|
|
203: int8(1),
|
|
204: int8(1),
|
|
205: int8(1),
|
|
206: int8(1),
|
|
207: int8(1),
|
|
208: int8(1),
|
|
209: int8(1),
|
|
210: int8(1),
|
|
211: int8(1),
|
|
212: int8(1),
|
|
213: int8(1),
|
|
214: int8(1),
|
|
215: int8(1),
|
|
216: int8(1),
|
|
217: int8(1),
|
|
218: int8(1),
|
|
219: int8(1),
|
|
220: int8(1),
|
|
221: int8(1),
|
|
222: int8(1),
|
|
223: int8(1),
|
|
224: int8(1),
|
|
225: int8(1),
|
|
226: int8(1),
|
|
227: int8(1),
|
|
228: int8(1),
|
|
229: int8(1),
|
|
230: int8(1),
|
|
231: int8(1),
|
|
232: int8(1),
|
|
233: int8(1),
|
|
234: int8(1),
|
|
235: int8(1),
|
|
236: int8(1),
|
|
237: int8(1),
|
|
238: int8(1),
|
|
239: int8(1),
|
|
240: int8(1),
|
|
241: int8(1),
|
|
242: int8(1),
|
|
243: int8(1),
|
|
244: int8(1),
|
|
245: int8(1),
|
|
246: int8(1),
|
|
247: int8(1),
|
|
248: int8(1),
|
|
249: int8(1),
|
|
250: int8(1),
|
|
251: int8(1),
|
|
252: int8(1),
|
|
253: int8(1),
|
|
254: int8(1),
|
|
255: int8(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]int8{
|
|
9: int8(1),
|
|
10: int8(1),
|
|
13: int8(1),
|
|
32: int8(1),
|
|
}
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** The set of all space characters recognized by jsonIsspace().
|
|
// ** Useful as the second argument to strspn().
|
|
// */
|
|
var _jsonSpaces = [5]int8{9, 10, 13, ' '}
|
|
|
|
var _lagName = [4]int8{'l', 'a', 'g'}
|
|
|
|
var _last_valueName = [11]int8{'l', 'a', 's', 't', '_', 'v', 'a', 'l', 'u', 'e'}
|
|
|
|
var _leadName = [5]int8{'l', 'e', 'a', 'd'}
|
|
|
|
var _nth_valueName = [10]int8{'n', 't', 'h', '_', 'v', 'a', 'l', 'u', 'e'}
|
|
|
|
var _ntileName = [6]int8{'n', 't', 'i', 'l', 'e'}
|
|
|
|
/* nullRow[] is an OP_Record encoding of a row containing 5 NULLs */
|
|
var _nullRow = [6]int8{
|
|
0: int8(6),
|
|
}
|
|
|
|
/* Set properties of a table column based on the (magical)
|
|
** name of the column.
|
|
*/
|
|
|
|
var _percent_rankName = [13]int8{'p', 'e', 'r', 'c', 'e', 'n', 't', '_', 'r', 'a', 'n', 'k'}
|
|
|
|
var _rankName = [5]int8{'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
|
|
}
|
|
**(**int8)(__ccgo_up(zRet + uintptr(i*int32(2)))) = int8('?')
|
|
if i+int32(1) == nBind {
|
|
v2 = int32('\000')
|
|
} else {
|
|
v2 = int32(',')
|
|
}
|
|
**(**int8)(__ccgo_up(zRet + uintptr(i*int32(2)+int32(1)))) = int8(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]int8{'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 = int8(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
|
|
//
|
|
// /*
|
|
// ** Input "r" is a numeric quantity which might be a julian day number,
|
|
// ** or the number of seconds since 1970. If the value if r is within
|
|
// ** range of a julian day number, install it as such and set validJD.
|
|
// ** If the value is a valid unix timestamp, put it in p->s and set p->rawS.
|
|
// */
|
|
func _setRawDateNumber(tls *libc.TLS, p uintptr, r float64) {
|
|
(*TDateTime)(unsafe.Pointer(p)).Fs = r
|
|
libc.SetBitFieldPtr8Uint32(p+44, libc.Uint32FromInt32(1), 0, 0x1)
|
|
if r >= float64(0) && r < float64(5.3734845e+06) {
|
|
(*TDateTime)(unsafe.Pointer(p)).FiJD = int64(float64(r*libc.Float64FromFloat64(8.64e+07)) + libc.Float64FromFloat64(0.5))
|
|
(*TDateTime)(unsafe.Pointer(p)).FvalidJD = int8(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 int8) (r int8) {
|
|
var aff1 int8
|
|
var v1 int32
|
|
_, _ = aff1, v1
|
|
aff1 = _sqlite3ExprAffinity(tls, pExpr)
|
|
if int32(aff1) > int32(SQLITE_AFF_NONE) && int32(aff2) > int32(SQLITE_AFF_NONE) {
|
|
/* Both sides of the comparison are columns. If one has numeric
|
|
** affinity, use that. Otherwise use no affinity.
|
|
*/
|
|
if int32(aff1) >= int32(SQLITE_AFF_NUMERIC) || int32(aff2) >= int32(SQLITE_AFF_NUMERIC) {
|
|
return int8(SQLITE_AFF_NUMERIC)
|
|
} else {
|
|
return int8(SQLITE_AFF_BLOB)
|
|
}
|
|
} else {
|
|
/* One side is a column, the other is not. Use the columns affinity. */
|
|
if int32(aff1) <= int32(SQLITE_AFF_NONE) {
|
|
v1 = int32(aff2)
|
|
} else {
|
|
v1 = int32(aff1)
|
|
}
|
|
return int8(v1 | int32(SQLITE_AFF_NONE))
|
|
}
|
|
return r
|
|
}
|
|
|
|
// 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]int8
|
|
F__ccgo_pad2 [1]byte
|
|
})(unsafe.Pointer(&struct {
|
|
f [201]int8
|
|
_ [1]byte
|
|
}{f: [201]int8{'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
|
|
//
|
|
// /*
|
|
// ** 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(int32(**(**int8)(__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 !(**(**int8)(__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 int8
|
|
_ = quote /* Quote character (if any ) */
|
|
quote = **(**int8)(__ccgo_up(z))
|
|
if int32(quote) == int32('[') || int32(quote) == int32('\'') || int32(quote) == int32('"') || int32(quote) == int32('`') {
|
|
_fts5Dequote(tls, z)
|
|
}
|
|
}
|
|
|
|
// 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, int8('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, int8(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 int8) (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(int32(t)&int32(0x80) != 0 || aBareword[int32(t)] != 0)
|
|
}
|
|
|
|
func _sqlite3Fts5UnicodeCatParse(tls *libc.TLS, zCat uintptr, aArray uintptr) (r int32) {
|
|
**(**Tu8)(__ccgo_up(aArray)) = uint8(1)
|
|
switch int32(**(**int8)(__ccgo_up(zCat))) {
|
|
case int32('C'):
|
|
switch int32(**(**int8)(__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 int32(**(**int8)(__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 int32(**(**int8)(__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 int32(**(**int8)(__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 int32(**(**int8)(__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 int32(**(**int8)(__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 int32(**(**int8)(__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
|
|
//
|
|
// /*
|
|
// ** 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 int8) (r int32) {
|
|
var aff int8
|
|
_ = aff
|
|
aff = _comparisonAffinity(tls, pExpr)
|
|
if int32(aff) < int32(SQLITE_AFF_TEXT) {
|
|
return int32(1)
|
|
}
|
|
if int32(aff) == int32(SQLITE_AFF_TEXT) {
|
|
return libc.BoolInt32(int32(idx_affinity) == int32(SQLITE_AFF_TEXT))
|
|
}
|
|
return libc.BoolInt32(int32(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 int8) {
|
|
if !((*TIndex)(unsafe.Pointer(pIdx)).FzColAff != 0) {
|
|
if _sqlite3IndexAffinityStr(tls, db, pIdx) == uintptr(0) {
|
|
return int8(SQLITE_AFF_BLOB)
|
|
}
|
|
}
|
|
return **(**int8)(__ccgo_up((*TIndex)(unsafe.Pointer(pIdx)).FzColAff + uintptr(iCol)))
|
|
}
|
|
|
|
func _sqlite3OsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nPathOut int32, zPathOut uintptr) (r int32) {
|
|
**(**int8)(__ccgo_up(zPathOut)) = 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]int8{
|
|
0: int8(SQLITE_AFF_NUMERIC),
|
|
1: int8(SQLITE_AFF_BLOB),
|
|
2: int8(SQLITE_AFF_INTEGER),
|
|
3: int8(SQLITE_AFF_INTEGER),
|
|
4: int8(SQLITE_AFF_REAL),
|
|
5: int8(SQLITE_AFF_TEXT),
|
|
}
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** Name of the default collating sequence
|
|
// */
|
|
var _sqlite3StrBINARY = [7]int8{'B', 'I', 'N', 'A', 'R', 'Y'}
|
|
|
|
// 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 int8
|
|
var i, v3 int32
|
|
var z uintptr
|
|
_, _, _, _, _, _ = ap, c, i, z, v2, v3
|
|
ap = va
|
|
i = 0
|
|
for {
|
|
v2 = **(**int8)(__ccgo_up(zTypes + uintptr(i)))
|
|
c = v2
|
|
if !(int32(v2) != 0) {
|
|
break
|
|
}
|
|
if int32(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 int32(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]int8{
|
|
1: int8(1),
|
|
2: int8(1),
|
|
7: int8(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
|
|
//
|
|
// /*
|
|
// ** time( TIMESTRING, MOD, MOD, ...)
|
|
// **
|
|
// ** Return HH:MM:SS
|
|
// */
|
|
func _timeFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) {
|
|
bp := tls.Alloc(64)
|
|
defer tls.Free(64)
|
|
var n, s int32
|
|
var _ /* x at bp+0 */ TDateTime
|
|
var _ /* zBuf at bp+48 */ [16]int8
|
|
_, _ = n, s
|
|
if _isDate(tls, context, argc, argv, bp) == 0 {
|
|
_computeHMS(tls, bp)
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[0] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).Fh/int32(10)%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(1)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).Fh%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(2)] = int8(':')
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(3)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).Fm/int32(10)%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(4)] = int8(int32('0') + (**(**TDateTime)(__ccgo_up(bp))).Fm%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(5)] = int8(':')
|
|
if int32(uint32(*(*uint8)(unsafe.Pointer(bp + 44))&0x4>>2)) != 0 {
|
|
s = int32(float64(libc.Float64FromFloat64(1000)*(**(**TDateTime)(__ccgo_up(bp))).Fs) + libc.Float64FromFloat64(0.5))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(6)] = int8(int32('0') + s/int32(10000)%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(7)] = int8(int32('0') + s/int32(1000)%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(8)] = int8('.')
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(9)] = int8(int32('0') + s/int32(100)%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(10)] = int8(int32('0') + s/int32(10)%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(11)] = int8(int32('0') + s%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(12)] = 0
|
|
n = int32(12)
|
|
} else {
|
|
s = int32((**(**TDateTime)(__ccgo_up(bp))).Fs)
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(6)] = int8(int32('0') + s/int32(10)%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(7)] = int8(int32('0') + s%int32(10))
|
|
(**(**[16]int8)(__ccgo_up(bp + 48)))[int32(8)] = 0
|
|
n = int32(8)
|
|
}
|
|
Xsqlite3_result_text(tls, context, bp+48, n, uintptr(-libc.Int32FromInt32(1)))
|
|
}
|
|
}
|
|
|
|
// 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 int32(_sqlite3CompareAffinity(tls, p, **(**int8)(__ccgo_up(zAff + uintptr(i))))) == int32(SQLITE_AFF_BLOB) || _sqlite3ExprNeedsNoAffinityChange(tls, p, **(**int8)(__ccgo_up(zAff + uintptr(i)))) != 0 {
|
|
**(**int8)(__ccgo_up(zAff + uintptr(i))) = int8(SQLITE_AFF_BLOB)
|
|
}
|
|
goto _1
|
|
_1:
|
|
;
|
|
i = i + 1
|
|
}
|
|
}
|
|
|
|
// 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) && **(**int8)(__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]int8
|
|
_sqlite3Put4byte(tls, bp, val)
|
|
return _sqlite3OsWrite(tls, fd, bp, int32(4), offset)
|
|
}
|
|
|
|
var _zAff = [10]int8{'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]int8{'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]int8{}
|
|
|
|
// 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]int8{
|
|
0: int8('R'),
|
|
1: int8('E'),
|
|
2: int8('I'),
|
|
3: int8('N'),
|
|
4: int8('D'),
|
|
5: int8('E'),
|
|
6: int8('X'),
|
|
7: int8('E'),
|
|
8: int8('D'),
|
|
9: int8('E'),
|
|
10: int8('S'),
|
|
11: int8('C'),
|
|
12: int8('A'),
|
|
13: int8('P'),
|
|
14: int8('E'),
|
|
15: int8('A'),
|
|
16: int8('C'),
|
|
17: int8('H'),
|
|
18: int8('E'),
|
|
19: int8('C'),
|
|
20: int8('K'),
|
|
21: int8('E'),
|
|
22: int8('Y'),
|
|
23: int8('B'),
|
|
24: int8('E'),
|
|
25: int8('F'),
|
|
26: int8('O'),
|
|
27: int8('R'),
|
|
28: int8('E'),
|
|
29: int8('I'),
|
|
30: int8('G'),
|
|
31: int8('N'),
|
|
32: int8('O'),
|
|
33: int8('R'),
|
|
34: int8('E'),
|
|
35: int8('G'),
|
|
36: int8('E'),
|
|
37: int8('X'),
|
|
38: int8('P'),
|
|
39: int8('L'),
|
|
40: int8('A'),
|
|
41: int8('I'),
|
|
42: int8('N'),
|
|
43: int8('S'),
|
|
44: int8('T'),
|
|
45: int8('E'),
|
|
46: int8('A'),
|
|
47: int8('D'),
|
|
48: int8('D'),
|
|
49: int8('A'),
|
|
50: int8('T'),
|
|
51: int8('A'),
|
|
52: int8('B'),
|
|
53: int8('A'),
|
|
54: int8('S'),
|
|
55: int8('E'),
|
|
56: int8('L'),
|
|
57: int8('E'),
|
|
58: int8('C'),
|
|
59: int8('T'),
|
|
60: int8('A'),
|
|
61: int8('B'),
|
|
62: int8('L'),
|
|
63: int8('E'),
|
|
64: int8('F'),
|
|
65: int8('T'),
|
|
66: int8('H'),
|
|
67: int8('E'),
|
|
68: int8('N'),
|
|
69: int8('D'),
|
|
70: int8('E'),
|
|
71: int8('F'),
|
|
72: int8('E'),
|
|
73: int8('R'),
|
|
74: int8('R'),
|
|
75: int8('A'),
|
|
76: int8('B'),
|
|
77: int8('L'),
|
|
78: int8('E'),
|
|
79: int8('L'),
|
|
80: int8('S'),
|
|
81: int8('E'),
|
|
82: int8('X'),
|
|
83: int8('C'),
|
|
84: int8('L'),
|
|
85: int8('U'),
|
|
86: int8('D'),
|
|
87: int8('E'),
|
|
88: int8('L'),
|
|
89: int8('E'),
|
|
90: int8('T'),
|
|
91: int8('E'),
|
|
92: int8('M'),
|
|
93: int8('P'),
|
|
94: int8('O'),
|
|
95: int8('R'),
|
|
96: int8('A'),
|
|
97: int8('R'),
|
|
98: int8('Y'),
|
|
99: int8('I'),
|
|
100: int8('S'),
|
|
101: int8('N'),
|
|
102: int8('U'),
|
|
103: int8('L'),
|
|
104: int8('L'),
|
|
105: int8('S'),
|
|
106: int8('A'),
|
|
107: int8('V'),
|
|
108: int8('E'),
|
|
109: int8('P'),
|
|
110: int8('O'),
|
|
111: int8('I'),
|
|
112: int8('N'),
|
|
113: int8('T'),
|
|
114: int8('E'),
|
|
115: int8('R'),
|
|
116: int8('S'),
|
|
117: int8('E'),
|
|
118: int8('C'),
|
|
119: int8('T'),
|
|
120: int8('I'),
|
|
121: int8('E'),
|
|
122: int8('S'),
|
|
123: int8('N'),
|
|
124: int8('O'),
|
|
125: int8('T'),
|
|
126: int8('N'),
|
|
127: int8('U'),
|
|
128: int8('L'),
|
|
129: int8('L'),
|
|
130: int8('I'),
|
|
131: int8('K'),
|
|
132: int8('E'),
|
|
133: int8('X'),
|
|
134: int8('C'),
|
|
135: int8('E'),
|
|
136: int8('P'),
|
|
137: int8('T'),
|
|
138: int8('R'),
|
|
139: int8('A'),
|
|
140: int8('N'),
|
|
141: int8('S'),
|
|
142: int8('A'),
|
|
143: int8('C'),
|
|
144: int8('T'),
|
|
145: int8('I'),
|
|
146: int8('O'),
|
|
147: int8('N'),
|
|
148: int8('A'),
|
|
149: int8('T'),
|
|
150: int8('U'),
|
|
151: int8('R'),
|
|
152: int8('A'),
|
|
153: int8('L'),
|
|
154: int8('T'),
|
|
155: int8('E'),
|
|
156: int8('R'),
|
|
157: int8('A'),
|
|
158: int8('I'),
|
|
159: int8('S'),
|
|
160: int8('E'),
|
|
161: int8('X'),
|
|
162: int8('C'),
|
|
163: int8('L'),
|
|
164: int8('U'),
|
|
165: int8('S'),
|
|
166: int8('I'),
|
|
167: int8('V'),
|
|
168: int8('E'),
|
|
169: int8('X'),
|
|
170: int8('I'),
|
|
171: int8('S'),
|
|
172: int8('T'),
|
|
173: int8('S'),
|
|
174: int8('C'),
|
|
175: int8('O'),
|
|
176: int8('N'),
|
|
177: int8('S'),
|
|
178: int8('T'),
|
|
179: int8('R'),
|
|
180: int8('A'),
|
|
181: int8('I'),
|
|
182: int8('N'),
|
|
183: int8('T'),
|
|
184: int8('O'),
|
|
185: int8('F'),
|
|
186: int8('F'),
|
|
187: int8('S'),
|
|
188: int8('E'),
|
|
189: int8('T'),
|
|
190: int8('R'),
|
|
191: int8('I'),
|
|
192: int8('G'),
|
|
193: int8('G'),
|
|
194: int8('E'),
|
|
195: int8('R'),
|
|
196: int8('A'),
|
|
197: int8('N'),
|
|
198: int8('G'),
|
|
199: int8('E'),
|
|
200: int8('N'),
|
|
201: int8('E'),
|
|
202: int8('R'),
|
|
203: int8('A'),
|
|
204: int8('T'),
|
|
205: int8('E'),
|
|
206: int8('D'),
|
|
207: int8('E'),
|
|
208: int8('T'),
|
|
209: int8('A'),
|
|
210: int8('C'),
|
|
211: int8('H'),
|
|
212: int8('A'),
|
|
213: int8('V'),
|
|
214: int8('I'),
|
|
215: int8('N'),
|
|
216: int8('G'),
|
|
217: int8('L'),
|
|
218: int8('O'),
|
|
219: int8('B'),
|
|
220: int8('E'),
|
|
221: int8('G'),
|
|
222: int8('I'),
|
|
223: int8('N'),
|
|
224: int8('N'),
|
|
225: int8('E'),
|
|
226: int8('R'),
|
|
227: int8('E'),
|
|
228: int8('F'),
|
|
229: int8('E'),
|
|
230: int8('R'),
|
|
231: int8('E'),
|
|
232: int8('N'),
|
|
233: int8('C'),
|
|
234: int8('E'),
|
|
235: int8('S'),
|
|
236: int8('U'),
|
|
237: int8('N'),
|
|
238: int8('I'),
|
|
239: int8('Q'),
|
|
240: int8('U'),
|
|
241: int8('E'),
|
|
242: int8('R'),
|
|
243: int8('Y'),
|
|
244: int8('W'),
|
|
245: int8('I'),
|
|
246: int8('T'),
|
|
247: int8('H'),
|
|
248: int8('O'),
|
|
249: int8('U'),
|
|
250: int8('T'),
|
|
251: int8('E'),
|
|
252: int8('R'),
|
|
253: int8('E'),
|
|
254: int8('L'),
|
|
255: int8('E'),
|
|
256: int8('A'),
|
|
257: int8('S'),
|
|
258: int8('E'),
|
|
259: int8('A'),
|
|
260: int8('T'),
|
|
261: int8('T'),
|
|
262: int8('A'),
|
|
263: int8('C'),
|
|
264: int8('H'),
|
|
265: int8('B'),
|
|
266: int8('E'),
|
|
267: int8('T'),
|
|
268: int8('W'),
|
|
269: int8('E'),
|
|
270: int8('E'),
|
|
271: int8('N'),
|
|
272: int8('O'),
|
|
273: int8('T'),
|
|
274: int8('H'),
|
|
275: int8('I'),
|
|
276: int8('N'),
|
|
277: int8('G'),
|
|
278: int8('R'),
|
|
279: int8('O'),
|
|
280: int8('U'),
|
|
281: int8('P'),
|
|
282: int8('S'),
|
|
283: int8('C'),
|
|
284: int8('A'),
|
|
285: int8('S'),
|
|
286: int8('C'),
|
|
287: int8('A'),
|
|
288: int8('D'),
|
|
289: int8('E'),
|
|
290: int8('F'),
|
|
291: int8('A'),
|
|
292: int8('U'),
|
|
293: int8('L'),
|
|
294: int8('T'),
|
|
295: int8('C'),
|
|
296: int8('A'),
|
|
297: int8('S'),
|
|
298: int8('E'),
|
|
299: int8('C'),
|
|
300: int8('O'),
|
|
301: int8('L'),
|
|
302: int8('L'),
|
|
303: int8('A'),
|
|
304: int8('T'),
|
|
305: int8('E'),
|
|
306: int8('C'),
|
|
307: int8('R'),
|
|
308: int8('E'),
|
|
309: int8('A'),
|
|
310: int8('T'),
|
|
311: int8('E'),
|
|
312: int8('C'),
|
|
313: int8('U'),
|
|
314: int8('R'),
|
|
315: int8('R'),
|
|
316: int8('E'),
|
|
317: int8('N'),
|
|
318: int8('T'),
|
|
319: int8('_'),
|
|
320: int8('D'),
|
|
321: int8('A'),
|
|
322: int8('T'),
|
|
323: int8('E'),
|
|
324: int8('I'),
|
|
325: int8('M'),
|
|
326: int8('M'),
|
|
327: int8('E'),
|
|
328: int8('D'),
|
|
329: int8('I'),
|
|
330: int8('A'),
|
|
331: int8('T'),
|
|
332: int8('E'),
|
|
333: int8('J'),
|
|
334: int8('O'),
|
|
335: int8('I'),
|
|
336: int8('N'),
|
|
337: int8('S'),
|
|
338: int8('E'),
|
|
339: int8('R'),
|
|
340: int8('T'),
|
|
341: int8('M'),
|
|
342: int8('A'),
|
|
343: int8('T'),
|
|
344: int8('C'),
|
|
345: int8('H'),
|
|
346: int8('P'),
|
|
347: int8('L'),
|
|
348: int8('A'),
|
|
349: int8('N'),
|
|
350: int8('A'),
|
|
351: int8('L'),
|
|
352: int8('Y'),
|
|
353: int8('Z'),
|
|
354: int8('E'),
|
|
355: int8('P'),
|
|
356: int8('R'),
|
|
357: int8('A'),
|
|
358: int8('G'),
|
|
359: int8('M'),
|
|
360: int8('A'),
|
|
361: int8('T'),
|
|
362: int8('E'),
|
|
363: int8('R'),
|
|
364: int8('I'),
|
|
365: int8('A'),
|
|
366: int8('L'),
|
|
367: int8('I'),
|
|
368: int8('Z'),
|
|
369: int8('E'),
|
|
370: int8('D'),
|
|
371: int8('E'),
|
|
372: int8('F'),
|
|
373: int8('E'),
|
|
374: int8('R'),
|
|
375: int8('R'),
|
|
376: int8('E'),
|
|
377: int8('D'),
|
|
378: int8('I'),
|
|
379: int8('S'),
|
|
380: int8('T'),
|
|
381: int8('I'),
|
|
382: int8('N'),
|
|
383: int8('C'),
|
|
384: int8('T'),
|
|
385: int8('U'),
|
|
386: int8('P'),
|
|
387: int8('D'),
|
|
388: int8('A'),
|
|
389: int8('T'),
|
|
390: int8('E'),
|
|
391: int8('V'),
|
|
392: int8('A'),
|
|
393: int8('L'),
|
|
394: int8('U'),
|
|
395: int8('E'),
|
|
396: int8('S'),
|
|
397: int8('V'),
|
|
398: int8('I'),
|
|
399: int8('R'),
|
|
400: int8('T'),
|
|
401: int8('U'),
|
|
402: int8('A'),
|
|
403: int8('L'),
|
|
404: int8('W'),
|
|
405: int8('A'),
|
|
406: int8('Y'),
|
|
407: int8('S'),
|
|
408: int8('W'),
|
|
409: int8('H'),
|
|
410: int8('E'),
|
|
411: int8('N'),
|
|
412: int8('W'),
|
|
413: int8('H'),
|
|
414: int8('E'),
|
|
415: int8('R'),
|
|
416: int8('E'),
|
|
417: int8('C'),
|
|
418: int8('U'),
|
|
419: int8('R'),
|
|
420: int8('S'),
|
|
421: int8('I'),
|
|
422: int8('V'),
|
|
423: int8('E'),
|
|
424: int8('A'),
|
|
425: int8('B'),
|
|
426: int8('O'),
|
|
427: int8('R'),
|
|
428: int8('T'),
|
|
429: int8('A'),
|
|
430: int8('F'),
|
|
431: int8('T'),
|
|
432: int8('E'),
|
|
433: int8('R'),
|
|
434: int8('E'),
|
|
435: int8('N'),
|
|
436: int8('A'),
|
|
437: int8('M'),
|
|
438: int8('E'),
|
|
439: int8('A'),
|
|
440: int8('N'),
|
|
441: int8('D'),
|
|
442: int8('R'),
|
|
443: int8('O'),
|
|
444: int8('P'),
|
|
445: int8('A'),
|
|
446: int8('R'),
|
|
447: int8('T'),
|
|
448: int8('I'),
|
|
449: int8('T'),
|
|
450: int8('I'),
|
|
451: int8('O'),
|
|
452: int8('N'),
|
|
453: int8('A'),
|
|
454: int8('U'),
|
|
455: int8('T'),
|
|
456: int8('O'),
|
|
457: int8('I'),
|
|
458: int8('N'),
|
|
459: int8('C'),
|
|
460: int8('R'),
|
|
461: int8('E'),
|
|
462: int8('M'),
|
|
463: int8('E'),
|
|
464: int8('N'),
|
|
465: int8('T'),
|
|
466: int8('C'),
|
|
467: int8('A'),
|
|
468: int8('S'),
|
|
469: int8('T'),
|
|
470: int8('C'),
|
|
471: int8('O'),
|
|
472: int8('L'),
|
|
473: int8('U'),
|
|
474: int8('M'),
|
|
475: int8('N'),
|
|
476: int8('C'),
|
|
477: int8('O'),
|
|
478: int8('M'),
|
|
479: int8('M'),
|
|
480: int8('I'),
|
|
481: int8('T'),
|
|
482: int8('C'),
|
|
483: int8('O'),
|
|
484: int8('N'),
|
|
485: int8('F'),
|
|
486: int8('L'),
|
|
487: int8('I'),
|
|
488: int8('C'),
|
|
489: int8('T'),
|
|
490: int8('C'),
|
|
491: int8('R'),
|
|
492: int8('O'),
|
|
493: int8('S'),
|
|
494: int8('S'),
|
|
495: int8('C'),
|
|
496: int8('U'),
|
|
497: int8('R'),
|
|
498: int8('R'),
|
|
499: int8('E'),
|
|
500: int8('N'),
|
|
501: int8('T'),
|
|
502: int8('_'),
|
|
503: int8('T'),
|
|
504: int8('I'),
|
|
505: int8('M'),
|
|
506: int8('E'),
|
|
507: int8('S'),
|
|
508: int8('T'),
|
|
509: int8('A'),
|
|
510: int8('M'),
|
|
511: int8('P'),
|
|
512: int8('R'),
|
|
513: int8('E'),
|
|
514: int8('C'),
|
|
515: int8('E'),
|
|
516: int8('D'),
|
|
517: int8('I'),
|
|
518: int8('N'),
|
|
519: int8('G'),
|
|
520: int8('F'),
|
|
521: int8('A'),
|
|
522: int8('I'),
|
|
523: int8('L'),
|
|
524: int8('A'),
|
|
525: int8('S'),
|
|
526: int8('T'),
|
|
527: int8('F'),
|
|
528: int8('I'),
|
|
529: int8('L'),
|
|
530: int8('T'),
|
|
531: int8('E'),
|
|
532: int8('R'),
|
|
533: int8('E'),
|
|
534: int8('P'),
|
|
535: int8('L'),
|
|
536: int8('A'),
|
|
537: int8('C'),
|
|
538: int8('E'),
|
|
539: int8('F'),
|
|
540: int8('I'),
|
|
541: int8('R'),
|
|
542: int8('S'),
|
|
543: int8('T'),
|
|
544: int8('F'),
|
|
545: int8('O'),
|
|
546: int8('L'),
|
|
547: int8('L'),
|
|
548: int8('O'),
|
|
549: int8('W'),
|
|
550: int8('I'),
|
|
551: int8('N'),
|
|
552: int8('G'),
|
|
553: int8('F'),
|
|
554: int8('R'),
|
|
555: int8('O'),
|
|
556: int8('M'),
|
|
557: int8('F'),
|
|
558: int8('U'),
|
|
559: int8('L'),
|
|
560: int8('L'),
|
|
561: int8('I'),
|
|
562: int8('M'),
|
|
563: int8('I'),
|
|
564: int8('T'),
|
|
565: int8('I'),
|
|
566: int8('F'),
|
|
567: int8('O'),
|
|
568: int8('R'),
|
|
569: int8('D'),
|
|
570: int8('E'),
|
|
571: int8('R'),
|
|
572: int8('E'),
|
|
573: int8('S'),
|
|
574: int8('T'),
|
|
575: int8('R'),
|
|
576: int8('I'),
|
|
577: int8('C'),
|
|
578: int8('T'),
|
|
579: int8('O'),
|
|
580: int8('T'),
|
|
581: int8('H'),
|
|
582: int8('E'),
|
|
583: int8('R'),
|
|
584: int8('S'),
|
|
585: int8('O'),
|
|
586: int8('V'),
|
|
587: int8('E'),
|
|
588: int8('R'),
|
|
589: int8('E'),
|
|
590: int8('T'),
|
|
591: int8('U'),
|
|
592: int8('R'),
|
|
593: int8('N'),
|
|
594: int8('I'),
|
|
595: int8('N'),
|
|
596: int8('G'),
|
|
597: int8('R'),
|
|
598: int8('I'),
|
|
599: int8('G'),
|
|
600: int8('H'),
|
|
601: int8('T'),
|
|
602: int8('R'),
|
|
603: int8('O'),
|
|
604: int8('L'),
|
|
605: int8('L'),
|
|
606: int8('B'),
|
|
607: int8('A'),
|
|
608: int8('C'),
|
|
609: int8('K'),
|
|
610: int8('R'),
|
|
611: int8('O'),
|
|
612: int8('W'),
|
|
613: int8('S'),
|
|
614: int8('U'),
|
|
615: int8('N'),
|
|
616: int8('B'),
|
|
617: int8('O'),
|
|
618: int8('U'),
|
|
619: int8('N'),
|
|
620: int8('D'),
|
|
621: int8('E'),
|
|
622: int8('D'),
|
|
623: int8('U'),
|
|
624: int8('N'),
|
|
625: int8('I'),
|
|
626: int8('O'),
|
|
627: int8('N'),
|
|
628: int8('U'),
|
|
629: int8('S'),
|
|
630: int8('I'),
|
|
631: int8('N'),
|
|
632: int8('G'),
|
|
633: int8('V'),
|
|
634: int8('A'),
|
|
635: int8('C'),
|
|
636: int8('U'),
|
|
637: int8('U'),
|
|
638: int8('M'),
|
|
639: int8('V'),
|
|
640: int8('I'),
|
|
641: int8('E'),
|
|
642: int8('W'),
|
|
643: int8('I'),
|
|
644: int8('N'),
|
|
645: int8('D'),
|
|
646: int8('O'),
|
|
647: int8('W'),
|
|
648: int8('B'),
|
|
649: int8('Y'),
|
|
650: int8('I'),
|
|
651: int8('N'),
|
|
652: int8('I'),
|
|
653: int8('T'),
|
|
654: int8('I'),
|
|
655: int8('A'),
|
|
656: int8('L'),
|
|
657: int8('L'),
|
|
658: int8('Y'),
|
|
659: int8('P'),
|
|
660: int8('R'),
|
|
661: int8('I'),
|
|
662: int8('M'),
|
|
663: int8('A'),
|
|
664: int8('R'),
|
|
665: int8('Y'),
|
|
}
|
|
|
|
/* 0123456789 123456789 123456789 123 */
|
|
var _zKeyText = [34]int8{'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]int8{'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]int8{'t', 'h', 's', 't', 'n', 'd', 'r', 'd'}
|
|
|
|
/* End of function */
|
|
|
|
/* 123456789 123456789 123 */
|
|
var _zText = [25]int8{'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]int8{}
|