aboutsummaryrefslogtreecommitdiff
path: root/internal/mptest/main_linux_arm.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/mptest/main_linux_arm.go')
-rw-r--r--internal/mptest/main_linux_arm.go5736
1 files changed, 5736 insertions, 0 deletions
diff --git a/internal/mptest/main_linux_arm.go b/internal/mptest/main_linux_arm.go
new file mode 100644
index 0000000..6a598a2
--- /dev/null
+++ b/internal/mptest/main_linux_arm.go
@@ -0,0 +1,5736 @@
+// Code generated by 'ccgo -o internal/mptest/main_linux_arm.go testdata/sqlite-src-3330000/mptest/mptest.c -Itestdata/sqlite-amalgamation-3330000 -l modernc.org/sqlite/lib -DNDEBUG -DHAVE_USLEEP -DLONGDOUBLE_TYPE=double -DSQLITE_CORE -DSQLITE_DEFAULT_MEMSTATUS=0 -DSQLITE_DEFAULT_PAGE_SIZE=1024 -DSQLITE_ENABLE_BYTECODE_VTAB -DSQLITE_ENABLE_COLUMN_METADATA -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_ENABLE_DBSTAT_VTAB -DSQLITE_ENABLE_DESERIALIZE -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_FTS5 -DSQLITE_ENABLE_GEOPOLY -DSQLITE_ENABLE_JSON1 -DSQLITE_ENABLE_MEMORY_MANAGEMENT -DSQLITE_ENABLE_OFFSET_SQL_FUNC -DSQLITE_ENABLE_PREUPDATE_HOOK -DSQLITE_ENABLE_RBU -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_SNAPSHOT -DSQLITE_ENABLE_STAT4 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_ENABLE_UNLOCK_NOTIFY -DSQLITE_HAVE_ZLIB=1 -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_MUTEX_APPDEF=1 -DSQLITE_MUTEX_NOOP -DSQLITE_OS_UNIX=1 -DSQLITE_SOUNDEX -DSQLITE_TEMP_STORE=1 -DSQLITE_TEST -DSQLITE_THREADSAFE=1 -ccgo-long-double-is-double', DO NOT EDIT.
+
+package main
+
+import (
+ "math"
+ "reflect"
+ "unsafe"
+
+ "modernc.org/libc"
+ "modernc.org/sqlite/lib"
+)
+
+var _ = math.Pi
+var _ reflect.Kind
+var _ unsafe.Pointer
+
+func main() { libc.Start(main1) }
+
+// Get the `_PC_*' symbols for the NAME argument to `pathconf' and `fpathconf';
+// the `_SC_*' symbols for the NAME argument to `sysconf';
+// and the `_CS_*' symbols for the NAME argument to `confstr'.
+// `sysconf', `pathconf', and `confstr' NAME values. Generic version.
+// Copyright (C) 1993-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Values for the NAME argument to `pathconf' and `fpathconf'.
+const ( /* confname.h:24:1: */
+ _PC_LINK_MAX = 0
+ _PC_MAX_CANON = 1
+ _PC_MAX_INPUT = 2
+ _PC_NAME_MAX = 3
+ _PC_PATH_MAX = 4
+ _PC_PIPE_BUF = 5
+ _PC_CHOWN_RESTRICTED = 6
+ _PC_NO_TRUNC = 7
+ _PC_VDISABLE = 8
+ _PC_SYNC_IO = 9
+ _PC_ASYNC_IO = 10
+ _PC_PRIO_IO = 11
+ _PC_SOCK_MAXBUF = 12
+ _PC_FILESIZEBITS = 13
+ _PC_REC_INCR_XFER_SIZE = 14
+ _PC_REC_MAX_XFER_SIZE = 15
+ _PC_REC_MIN_XFER_SIZE = 16
+ _PC_REC_XFER_ALIGN = 17
+ _PC_ALLOC_SIZE_MIN = 18
+ _PC_SYMLINK_MAX = 19
+ _PC_2_SYMLINKS = 20
+)
+
+// Values for the NAME argument to `confstr'.
+const ( /* confname.h:533:1: */
+ _CS_PATH = 0 // The default search path.
+
+ _CS_V6_WIDTH_RESTRICTED_ENVS = 1
+
+ _CS_GNU_LIBC_VERSION = 2
+ _CS_GNU_LIBPTHREAD_VERSION = 3
+
+ _CS_V5_WIDTH_RESTRICTED_ENVS = 4
+
+ _CS_V7_WIDTH_RESTRICTED_ENVS = 5
+
+ _CS_LFS_CFLAGS = 1000
+ _CS_LFS_LDFLAGS = 1001
+ _CS_LFS_LIBS = 1002
+ _CS_LFS_LINTFLAGS = 1003
+ _CS_LFS64_CFLAGS = 1004
+ _CS_LFS64_LDFLAGS = 1005
+ _CS_LFS64_LIBS = 1006
+ _CS_LFS64_LINTFLAGS = 1007
+
+ _CS_XBS5_ILP32_OFF32_CFLAGS = 1100
+ _CS_XBS5_ILP32_OFF32_LDFLAGS = 1101
+ _CS_XBS5_ILP32_OFF32_LIBS = 1102
+ _CS_XBS5_ILP32_OFF32_LINTFLAGS = 1103
+ _CS_XBS5_ILP32_OFFBIG_CFLAGS = 1104
+ _CS_XBS5_ILP32_OFFBIG_LDFLAGS = 1105
+ _CS_XBS5_ILP32_OFFBIG_LIBS = 1106
+ _CS_XBS5_ILP32_OFFBIG_LINTFLAGS = 1107
+ _CS_XBS5_LP64_OFF64_CFLAGS = 1108
+ _CS_XBS5_LP64_OFF64_LDFLAGS = 1109
+ _CS_XBS5_LP64_OFF64_LIBS = 1110
+ _CS_XBS5_LP64_OFF64_LINTFLAGS = 1111
+ _CS_XBS5_LPBIG_OFFBIG_CFLAGS = 1112
+ _CS_XBS5_LPBIG_OFFBIG_LDFLAGS = 1113
+ _CS_XBS5_LPBIG_OFFBIG_LIBS = 1114
+ _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS = 1115
+
+ _CS_POSIX_V6_ILP32_OFF32_CFLAGS = 1116
+ _CS_POSIX_V6_ILP32_OFF32_LDFLAGS = 1117
+ _CS_POSIX_V6_ILP32_OFF32_LIBS = 1118
+ _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS = 1119
+ _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS = 1120
+ _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS = 1121
+ _CS_POSIX_V6_ILP32_OFFBIG_LIBS = 1122
+ _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS = 1123
+ _CS_POSIX_V6_LP64_OFF64_CFLAGS = 1124
+ _CS_POSIX_V6_LP64_OFF64_LDFLAGS = 1125
+ _CS_POSIX_V6_LP64_OFF64_LIBS = 1126
+ _CS_POSIX_V6_LP64_OFF64_LINTFLAGS = 1127
+ _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS = 1128
+ _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS = 1129
+ _CS_POSIX_V6_LPBIG_OFFBIG_LIBS = 1130
+ _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS = 1131
+
+ _CS_POSIX_V7_ILP32_OFF32_CFLAGS = 1132
+ _CS_POSIX_V7_ILP32_OFF32_LDFLAGS = 1133
+ _CS_POSIX_V7_ILP32_OFF32_LIBS = 1134
+ _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS = 1135
+ _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS = 1136
+ _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS = 1137
+ _CS_POSIX_V7_ILP32_OFFBIG_LIBS = 1138
+ _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS = 1139
+ _CS_POSIX_V7_LP64_OFF64_CFLAGS = 1140
+ _CS_POSIX_V7_LP64_OFF64_LDFLAGS = 1141
+ _CS_POSIX_V7_LP64_OFF64_LIBS = 1142
+ _CS_POSIX_V7_LP64_OFF64_LINTFLAGS = 1143
+ _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS = 1144
+ _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS = 1145
+ _CS_POSIX_V7_LPBIG_OFFBIG_LIBS = 1146
+ _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS = 1147
+
+ _CS_V6_ENV = 1148
+ _CS_V7_ENV = 1149
+)
+
+// Values for the argument to `sysconf'.
+const ( /* confname.h:71:1: */
+ _SC_ARG_MAX = 0
+ _SC_CHILD_MAX = 1
+ _SC_CLK_TCK = 2
+ _SC_NGROUPS_MAX = 3
+ _SC_OPEN_MAX = 4
+ _SC_STREAM_MAX = 5
+ _SC_TZNAME_MAX = 6
+ _SC_JOB_CONTROL = 7
+ _SC_SAVED_IDS = 8
+ _SC_REALTIME_SIGNALS = 9
+ _SC_PRIORITY_SCHEDULING = 10
+ _SC_TIMERS = 11
+ _SC_ASYNCHRONOUS_IO = 12
+ _SC_PRIORITIZED_IO = 13
+ _SC_SYNCHRONIZED_IO = 14
+ _SC_FSYNC = 15
+ _SC_MAPPED_FILES = 16
+ _SC_MEMLOCK = 17
+ _SC_MEMLOCK_RANGE = 18
+ _SC_MEMORY_PROTECTION = 19
+ _SC_MESSAGE_PASSING = 20
+ _SC_SEMAPHORES = 21
+ _SC_SHARED_MEMORY_OBJECTS = 22
+ _SC_AIO_LISTIO_MAX = 23
+ _SC_AIO_MAX = 24
+ _SC_AIO_PRIO_DELTA_MAX = 25
+ _SC_DELAYTIMER_MAX = 26
+ _SC_MQ_OPEN_MAX = 27
+ _SC_MQ_PRIO_MAX = 28
+ _SC_VERSION = 29
+ _SC_PAGESIZE = 30
+ _SC_RTSIG_MAX = 31
+ _SC_SEM_NSEMS_MAX = 32
+ _SC_SEM_VALUE_MAX = 33
+ _SC_SIGQUEUE_MAX = 34
+ _SC_TIMER_MAX = 35
+
+ // Values for the argument to `sysconf'
+ // corresponding to _POSIX2_* symbols.
+ _SC_BC_BASE_MAX = 36
+ _SC_BC_DIM_MAX = 37
+ _SC_BC_SCALE_MAX = 38
+ _SC_BC_STRING_MAX = 39
+ _SC_COLL_WEIGHTS_MAX = 40
+ _SC_EQUIV_CLASS_MAX = 41
+ _SC_EXPR_NEST_MAX = 42
+ _SC_LINE_MAX = 43
+ _SC_RE_DUP_MAX = 44
+ _SC_CHARCLASS_NAME_MAX = 45
+
+ _SC_2_VERSION = 46
+ _SC_2_C_BIND = 47
+ _SC_2_C_DEV = 48
+ _SC_2_FORT_DEV = 49
+ _SC_2_FORT_RUN = 50
+ _SC_2_SW_DEV = 51
+ _SC_2_LOCALEDEF = 52
+
+ _SC_PII = 53
+ _SC_PII_XTI = 54
+ _SC_PII_SOCKET = 55
+ _SC_PII_INTERNET = 56
+ _SC_PII_OSI = 57
+ _SC_POLL = 58
+ _SC_SELECT = 59
+ _SC_UIO_MAXIOV = 60
+ _SC_IOV_MAX = 60
+ _SC_PII_INTERNET_STREAM = 61
+ _SC_PII_INTERNET_DGRAM = 62
+ _SC_PII_OSI_COTS = 63
+ _SC_PII_OSI_CLTS = 64
+ _SC_PII_OSI_M = 65
+ _SC_T_IOV_MAX = 66
+
+ // Values according to POSIX 1003.1c (POSIX threads).
+ _SC_THREADS = 67
+ _SC_THREAD_SAFE_FUNCTIONS = 68
+ _SC_GETGR_R_SIZE_MAX = 69
+ _SC_GETPW_R_SIZE_MAX = 70
+ _SC_LOGIN_NAME_MAX = 71
+ _SC_TTY_NAME_MAX = 72
+ _SC_THREAD_DESTRUCTOR_ITERATIONS = 73
+ _SC_THREAD_KEYS_MAX = 74
+ _SC_THREAD_STACK_MIN = 75
+ _SC_THREAD_THREADS_MAX = 76
+ _SC_THREAD_ATTR_STACKADDR = 77
+ _SC_THREAD_ATTR_STACKSIZE = 78
+ _SC_THREAD_PRIORITY_SCHEDULING = 79
+ _SC_THREAD_PRIO_INHERIT = 80
+ _SC_THREAD_PRIO_PROTECT = 81
+ _SC_THREAD_PROCESS_SHARED = 82
+
+ _SC_NPROCESSORS_CONF = 83
+ _SC_NPROCESSORS_ONLN = 84
+ _SC_PHYS_PAGES = 85
+ _SC_AVPHYS_PAGES = 86
+ _SC_ATEXIT_MAX = 87
+ _SC_PASS_MAX = 88
+
+ _SC_XOPEN_VERSION = 89
+ _SC_XOPEN_XCU_VERSION = 90
+ _SC_XOPEN_UNIX = 91
+ _SC_XOPEN_CRYPT = 92
+ _SC_XOPEN_ENH_I18N = 93
+ _SC_XOPEN_SHM = 94
+
+ _SC_2_CHAR_TERM = 95
+ _SC_2_C_VERSION = 96
+ _SC_2_UPE = 97
+
+ _SC_XOPEN_XPG2 = 98
+ _SC_XOPEN_XPG3 = 99
+ _SC_XOPEN_XPG4 = 100
+
+ _SC_CHAR_BIT = 101
+ _SC_CHAR_MAX = 102
+ _SC_CHAR_MIN = 103
+ _SC_INT_MAX = 104
+ _SC_INT_MIN = 105
+ _SC_LONG_BIT = 106
+ _SC_WORD_BIT = 107
+ _SC_MB_LEN_MAX = 108
+ _SC_NZERO = 109
+ _SC_SSIZE_MAX = 110
+ _SC_SCHAR_MAX = 111
+ _SC_SCHAR_MIN = 112
+ _SC_SHRT_MAX = 113
+ _SC_SHRT_MIN = 114
+ _SC_UCHAR_MAX = 115
+ _SC_UINT_MAX = 116
+ _SC_ULONG_MAX = 117
+ _SC_USHRT_MAX = 118
+
+ _SC_NL_ARGMAX = 119
+ _SC_NL_LANGMAX = 120
+ _SC_NL_MSGMAX = 121
+ _SC_NL_NMAX = 122
+ _SC_NL_SETMAX = 123
+ _SC_NL_TEXTMAX = 124
+
+ _SC_XBS5_ILP32_OFF32 = 125
+ _SC_XBS5_ILP32_OFFBIG = 126
+ _SC_XBS5_LP64_OFF64 = 127
+ _SC_XBS5_LPBIG_OFFBIG = 128
+
+ _SC_XOPEN_LEGACY = 129
+ _SC_XOPEN_REALTIME = 130
+ _SC_XOPEN_REALTIME_THREADS = 131
+
+ _SC_ADVISORY_INFO = 132
+ _SC_BARRIERS = 133
+ _SC_BASE = 134
+ _SC_C_LANG_SUPPORT = 135
+ _SC_C_LANG_SUPPORT_R = 136
+ _SC_CLOCK_SELECTION = 137
+ _SC_CPUTIME = 138
+ _SC_THREAD_CPUTIME = 139
+ _SC_DEVICE_IO = 140
+ _SC_DEVICE_SPECIFIC = 141
+ _SC_DEVICE_SPECIFIC_R = 142
+ _SC_FD_MGMT = 143
+ _SC_FIFO = 144
+ _SC_PIPE = 145
+ _SC_FILE_ATTRIBUTES = 146
+ _SC_FILE_LOCKING = 147
+ _SC_FILE_SYSTEM = 148
+ _SC_MONOTONIC_CLOCK = 149
+ _SC_MULTI_PROCESS = 150
+ _SC_SINGLE_PROCESS = 151
+ _SC_NETWORKING = 152
+ _SC_READER_WRITER_LOCKS = 153
+ _SC_SPIN_LOCKS = 154
+ _SC_REGEXP = 155
+ _SC_REGEX_VERSION = 156
+ _SC_SHELL = 157
+ _SC_SIGNALS = 158
+ _SC_SPAWN = 159
+ _SC_SPORADIC_SERVER = 160
+ _SC_THREAD_SPORADIC_SERVER = 161
+ _SC_SYSTEM_DATABASE = 162
+ _SC_SYSTEM_DATABASE_R = 163
+ _SC_TIMEOUTS = 164
+ _SC_TYPED_MEMORY_OBJECTS = 165
+ _SC_USER_GROUPS = 166
+ _SC_USER_GROUPS_R = 167
+ _SC_2_PBS = 168
+ _SC_2_PBS_ACCOUNTING = 169
+ _SC_2_PBS_LOCATE = 170
+ _SC_2_PBS_MESSAGE = 171
+ _SC_2_PBS_TRACK = 172
+ _SC_SYMLOOP_MAX = 173
+ _SC_STREAMS = 174
+ _SC_2_PBS_CHECKPOINT = 175
+
+ _SC_V6_ILP32_OFF32 = 176
+ _SC_V6_ILP32_OFFBIG = 177
+ _SC_V6_LP64_OFF64 = 178
+ _SC_V6_LPBIG_OFFBIG = 179
+
+ _SC_HOST_NAME_MAX = 180
+ _SC_TRACE = 181
+ _SC_TRACE_EVENT_FILTER = 182
+ _SC_TRACE_INHERIT = 183
+ _SC_TRACE_LOG = 184
+
+ _SC_LEVEL1_ICACHE_SIZE = 185
+ _SC_LEVEL1_ICACHE_ASSOC = 186
+ _SC_LEVEL1_ICACHE_LINESIZE = 187
+ _SC_LEVEL1_DCACHE_SIZE = 188
+ _SC_LEVEL1_DCACHE_ASSOC = 189
+ _SC_LEVEL1_DCACHE_LINESIZE = 190
+ _SC_LEVEL2_CACHE_SIZE = 191
+ _SC_LEVEL2_CACHE_ASSOC = 192
+ _SC_LEVEL2_CACHE_LINESIZE = 193
+ _SC_LEVEL3_CACHE_SIZE = 194
+ _SC_LEVEL3_CACHE_ASSOC = 195
+ _SC_LEVEL3_CACHE_LINESIZE = 196
+ _SC_LEVEL4_CACHE_SIZE = 197
+ _SC_LEVEL4_CACHE_ASSOC = 198
+ _SC_LEVEL4_CACHE_LINESIZE = 199
+ // Leave room here, maybe we need a few more cache levels some day.
+
+ _SC_IPV6 = 235
+ _SC_RAW_SOCKETS = 236
+
+ _SC_V7_ILP32_OFF32 = 237
+ _SC_V7_ILP32_OFFBIG = 238
+ _SC_V7_LP64_OFF64 = 239
+ _SC_V7_LPBIG_OFFBIG = 240
+
+ _SC_SS_REPL_MAX = 241
+
+ _SC_TRACE_EVENT_NAME_MAX = 242
+ _SC_TRACE_NAME_MAX = 243
+ _SC_TRACE_SYS_MAX = 244
+ _SC_TRACE_USER_EVENT_MAX = 245
+
+ _SC_XOPEN_STREAMS = 246
+
+ _SC_THREAD_ROBUST_PRIO_INHERIT = 247
+ _SC_THREAD_ROBUST_PRIO_PROTECT = 248
+)
+
+// In 4.3bsd-net2, leave these undefined to indicate that size_t, etc.
+// are already defined.
+// BSD/OS 3.1 and FreeBSD [23].x require the MACHINE_ANSI_H check here.
+// NetBSD 5 requires the I386_ANSI_H and X86_64_ANSI_H checks here.
+
+// A null pointer constant.
+
+// XPG requires a few symbols from <sys/wait.h> being defined.
+// Definitions of flag bits for `waitpid' et al.
+// Copyright (C) 1992-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Bits in the third argument to `waitpid'.
+
+// Bits in the fourth argument to `waitid'.
+
+// The following values are used by the `waitid' function.
+
+// The Linux kernel defines these bare, rather than an enum,
+// which causes a conflict if the include order is reversed.
+
+const ( /* waitflags.h:52:1: */
+ P_ALL = 0 // Wait for any child.
+ P_PID = 1 // Wait for specified process.
+ P_PGID = 2
+)
+
+// Copyright (C) 1991-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// ISO C99 Standard: 7.2 Diagnostics <assert.h>
+
+// Copyright (C) 1991-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// void assert (int expression);
+//
+// If NDEBUG is defined, do nothing.
+// If not, and EXPRESSION is zero, print an error message and abort.
+
+// void assert_perror (int errnum);
+//
+// If NDEBUG is defined, do nothing. If not, and ERRNUM is not zero, print an
+// error message with the error text for ERRNUM and abort.
+// (This is a GNU extension.)
+
+// Copyright (C) 1991-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// ISO C99 Standard 7.4: Character handling <ctype.h>
+
+// Copyright (C) 1991-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// bits/types.h -- definitions of __*_t types underlying *_t types.
+// Copyright (C) 2002-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Never include this file directly; use <sys/types.h> instead.
+
+// These are all the characteristics of characters.
+// If there get to be more than 16 distinct characteristics,
+// many things must be changed that use `unsigned short int's.
+//
+// The characteristics are stored always in network byte order (big
+// endian). We define the bit value interpretations here dependent on the
+// machine's byte order.
+
+// Copyright (C) 1992-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+const ( /* ctype.h:46:1: */
+ _ISupper = 256 // UPPERCASE.
+ _ISlower = 512 // lowercase.
+ _ISalpha = 1024 // Alphabetic.
+ _ISdigit = 2048 // Numeric.
+ _ISxdigit = 4096 // Hexadecimal numeric.
+ _ISspace = 8192 // Whitespace.
+ _ISprint = 16384 // Printing.
+ _ISgraph = 32768 // Graphical.
+ _ISblank = 1 // Blank (usually SPC and TAB).
+ _IScntrl = 2 // Control character.
+ _ISpunct = 4 // Punctuation.
+ _ISalnum = 8
+)
+
+type ptrdiff_t = int32 /* <builtin>:3:26 */
+
+type size_t = uint32 /* <builtin>:9:23 */
+
+type wchar_t = uint32 /* <builtin>:15:24 */
+
+// Define the standard macros for the user,
+// if this invocation was from the user program.
+
+// Define va_list, if desired, from __gnuc_va_list.
+// We deliberately do not define va_list when called from
+// stdio.h, because ANSI C says that stdio.h is not supposed to define
+// va_list. stdio.h needs to have access to that data type,
+// but must not use that name. It should use the name __gnuc_va_list,
+// which is safe because it is reserved for the implementation.
+
+// The macro _VA_LIST_ is the same thing used by this file in Ultrix.
+// But on BSD NET2 we must not test or define or undef it.
+// (Note that the comments in NET 2's ansi.h
+// are incorrect for _VA_LIST_--see stdio.h!)
+// The macro _VA_LIST_DEFINED is used in Windows NT 3.5
+// The macro _VA_LIST is used in SCO Unix 3.2.
+// The macro _VA_LIST_T_H is used in the Bull dpx2
+// The macro __va_list__ is used by BeOS.
+type va_list = uintptr /* stdarg.h:99:24 */
+
+// CAPI3REF: 64-Bit Integer Types
+// KEYWORDS: sqlite_int64 sqlite_uint64
+//
+// Because there is no cross-platform way to specify 64-bit integer types
+// SQLite includes typedefs for 64-bit signed and unsigned integers.
+//
+// The sqlite3_int64 and sqlite3_uint64 are the preferred type definitions.
+// The sqlite_int64 and sqlite_uint64 types are supported for backwards
+// compatibility only.
+//
+// ^The sqlite3_int64 and sqlite_int64 types can store integer values
+// between -9223372036854775808 and +9223372036854775807 inclusive. ^The
+// sqlite3_uint64 and sqlite_uint64 types can store integer values
+// between 0 and +18446744073709551615 inclusive.
+type sqlite_int64 = int64 /* sqlite3.h:278:25 */
+type sqlite_uint64 = uint64 /* sqlite3.h:279:34 */
+type sqlite3_int64 = sqlite_int64 /* sqlite3.h:281:22 */
+type sqlite3_uint64 = sqlite_uint64 /* sqlite3.h:282:23 */
+
+// The type for a callback function.
+// This is legacy and deprecated. It is included for historical
+// compatibility and is not documented.
+type sqlite3_callback = uintptr /* sqlite3.h:338:13 */
+
+// CAPI3REF: Result Codes
+// KEYWORDS: {result code definitions}
+//
+// Many SQLite functions return an integer result code from the set shown
+// here in order to indicate success or failure.
+//
+// New error codes may be added in future versions of SQLite.
+//
+// See also: [extended result code definitions]
+// beginning-of-error-codes
+// end-of-error-codes
+
+// CAPI3REF: Extended Result Codes
+// KEYWORDS: {extended result code definitions}
+//
+// In its default configuration, SQLite API routines return one of 30 integer
+// [result codes]. However, experience has shown that many of
+// these result codes are too coarse-grained. They do not provide as
+// much information about problems as programmers might like. In an effort to
+// address this, newer versions of SQLite (version 3.3.8 [dateof:3.3.8]
+// and later) include
+// support for additional result codes that provide more detailed information
+// about errors. These [extended result codes] are enabled or disabled
+// on a per database connection basis using the
+// [sqlite3_extended_result_codes()] API. Or, the extended code for
+// the most recent error can be obtained using
+// [sqlite3_extended_errcode()].
+
+// CAPI3REF: Flags For File Open Operations
+//
+// These bit values are intended for use in the
+// 3rd parameter to the [sqlite3_open_v2()] interface and
+// in the 4th parameter to the [sqlite3_vfs.xOpen] method.
+
+// Reserved: 0x00F00000
+// Legacy compatibility:
+
+// CAPI3REF: Device Characteristics
+//
+// The xDeviceCharacteristics method of the [sqlite3_io_methods]
+// object returns an integer which is a vector of these
+// bit values expressing I/O characteristics of the mass storage
+// device that holds the file that the [sqlite3_io_methods]
+// refers to.
+//
+// The SQLITE_IOCAP_ATOMIC property means that all writes of
+// any size are atomic. The SQLITE_IOCAP_ATOMICnnn values
+// mean that writes of blocks that are nnn bytes in size and
+// are aligned to an address which is an integer multiple of
+// nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means
+// that when data is appended to a file, the data is appended
+// first then the size of the file is extended, never the other
+// way around. The SQLITE_IOCAP_SEQUENTIAL property means that
+// information is written to disk in the same order as calls
+// to xWrite(). The SQLITE_IOCAP_POWERSAFE_OVERWRITE property means that
+// after reboot following a crash or power loss, the only bytes in a
+// file that were written at the application level might have changed
+// and that adjacent bytes, even bytes within the same sector are
+// guaranteed to be unchanged. The SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN
+// flag indicates that a file cannot be deleted when open. The
+// SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on
+// read-only media and cannot be changed even by processes with
+// elevated privileges.
+//
+// The SQLITE_IOCAP_BATCH_ATOMIC property means that the underlying
+// filesystem supports doing multiple write operations atomically when those
+// write operations are bracketed by [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] and
+// [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE].
+
+// CAPI3REF: File Locking Levels
+//
+// SQLite uses one of these integer values as the second
+// argument to calls it makes to the xLock() and xUnlock() methods
+// of an [sqlite3_io_methods] object.
+
+// CAPI3REF: Synchronization Type Flags
+//
+// When SQLite invokes the xSync() method of an
+// [sqlite3_io_methods] object it uses a combination of
+// these integer values as the second argument.
+//
+// When the SQLITE_SYNC_DATAONLY flag is used, it means that the
+// sync operation only needs to flush data to mass storage. Inode
+// information need not be flushed. If the lower four bits of the flag
+// equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics.
+// If the lower four bits equal SQLITE_SYNC_FULL, that means
+// to use Mac OS X style fullsync instead of fsync().
+//
+// Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags
+// with the [PRAGMA synchronous]=NORMAL and [PRAGMA synchronous]=FULL
+// settings. The [synchronous pragma] determines when calls to the
+// xSync VFS method occur and applies uniformly across all platforms.
+// The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how
+// energetic or rigorous or forceful the sync operations are and
+// only make a difference on Mac OSX for the default SQLite code.
+// (Third-party VFS implementations might also make the distinction
+// between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the
+// operating systems natively supported by SQLite, only Mac OSX
+// cares about the difference.)
+
+// CAPI3REF: OS Interface Open File Handle
+//
+// An [sqlite3_file] object represents an open file in the
+// [sqlite3_vfs | OS interface layer]. Individual OS interface
+// implementations will
+// want to subclass this object by appending additional fields
+// for their own use. The pMethods entry is a pointer to an
+// [sqlite3_io_methods] object that defines methods for performing
+// I/O operations on the open file.
+type sqlite3_file1 = struct{ pMethods uintptr } /* sqlite3.h:683:9 */
+
+// CAPI3REF: Result Codes
+// KEYWORDS: {result code definitions}
+//
+// Many SQLite functions return an integer result code from the set shown
+// here in order to indicate success or failure.
+//
+// New error codes may be added in future versions of SQLite.
+//
+// See also: [extended result code definitions]
+// beginning-of-error-codes
+// end-of-error-codes
+
+// CAPI3REF: Extended Result Codes
+// KEYWORDS: {extended result code definitions}
+//
+// In its default configuration, SQLite API routines return one of 30 integer
+// [result codes]. However, experience has shown that many of
+// these result codes are too coarse-grained. They do not provide as
+// much information about problems as programmers might like. In an effort to
+// address this, newer versions of SQLite (version 3.3.8 [dateof:3.3.8]
+// and later) include
+// support for additional result codes that provide more detailed information
+// about errors. These [extended result codes] are enabled or disabled
+// on a per database connection basis using the
+// [sqlite3_extended_result_codes()] API. Or, the extended code for
+// the most recent error can be obtained using
+// [sqlite3_extended_errcode()].
+
+// CAPI3REF: Flags For File Open Operations
+//
+// These bit values are intended for use in the
+// 3rd parameter to the [sqlite3_open_v2()] interface and
+// in the 4th parameter to the [sqlite3_vfs.xOpen] method.
+
+// Reserved: 0x00F00000
+// Legacy compatibility:
+
+// CAPI3REF: Device Characteristics
+//
+// The xDeviceCharacteristics method of the [sqlite3_io_methods]
+// object returns an integer which is a vector of these
+// bit values expressing I/O characteristics of the mass storage
+// device that holds the file that the [sqlite3_io_methods]
+// refers to.
+//
+// The SQLITE_IOCAP_ATOMIC property means that all writes of
+// any size are atomic. The SQLITE_IOCAP_ATOMICnnn values
+// mean that writes of blocks that are nnn bytes in size and
+// are aligned to an address which is an integer multiple of
+// nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means
+// that when data is appended to a file, the data is appended
+// first then the size of the file is extended, never the other
+// way around. The SQLITE_IOCAP_SEQUENTIAL property means that
+// information is written to disk in the same order as calls
+// to xWrite(). The SQLITE_IOCAP_POWERSAFE_OVERWRITE property means that
+// after reboot following a crash or power loss, the only bytes in a
+// file that were written at the application level might have changed
+// and that adjacent bytes, even bytes within the same sector are
+// guaranteed to be unchanged. The SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN
+// flag indicates that a file cannot be deleted when open. The
+// SQLITE_IOCAP_IMMUTABLE flag indicates that the file is on
+// read-only media and cannot be changed even by processes with
+// elevated privileges.
+//
+// The SQLITE_IOCAP_BATCH_ATOMIC property means that the underlying
+// filesystem supports doing multiple write operations atomically when those
+// write operations are bracketed by [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE] and
+// [SQLITE_FCNTL_COMMIT_ATOMIC_WRITE].
+
+// CAPI3REF: File Locking Levels
+//
+// SQLite uses one of these integer values as the second
+// argument to calls it makes to the xLock() and xUnlock() methods
+// of an [sqlite3_io_methods] object.
+
+// CAPI3REF: Synchronization Type Flags
+//
+// When SQLite invokes the xSync() method of an
+// [sqlite3_io_methods] object it uses a combination of
+// these integer values as the second argument.
+//
+// When the SQLITE_SYNC_DATAONLY flag is used, it means that the
+// sync operation only needs to flush data to mass storage. Inode
+// information need not be flushed. If the lower four bits of the flag
+// equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics.
+// If the lower four bits equal SQLITE_SYNC_FULL, that means
+// to use Mac OS X style fullsync instead of fsync().
+//
+// Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags
+// with the [PRAGMA synchronous]=NORMAL and [PRAGMA synchronous]=FULL
+// settings. The [synchronous pragma] determines when calls to the
+// xSync VFS method occur and applies uniformly across all platforms.
+// The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how
+// energetic or rigorous or forceful the sync operations are and
+// only make a difference on Mac OSX for the default SQLite code.
+// (Third-party VFS implementations might also make the distinction
+// between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the
+// operating systems natively supported by SQLite, only Mac OSX
+// cares about the difference.)
+
+// CAPI3REF: OS Interface Open File Handle
+//
+// An [sqlite3_file] object represents an open file in the
+// [sqlite3_vfs | OS interface layer]. Individual OS interface
+// implementations will
+// want to subclass this object by appending additional fields
+// for their own use. The pMethods entry is a pointer to an
+// [sqlite3_io_methods] object that defines methods for performing
+// I/O operations on the open file.
+type sqlite3_file = sqlite3_file1 /* sqlite3.h:683:29 */
+type sqlite3_io_methods1 = struct {
+ iVersion int32
+ xClose uintptr
+ xRead uintptr
+ xWrite uintptr
+ xTruncate uintptr
+ xSync uintptr
+ xFileSize uintptr
+ xLock uintptr
+ xUnlock uintptr
+ xCheckReservedLock uintptr
+ xFileControl uintptr
+ xSectorSize uintptr
+ xDeviceCharacteristics uintptr
+ xShmMap uintptr
+ xShmLock uintptr
+ xShmBarrier uintptr
+ xShmUnmap uintptr
+ xFetch uintptr
+ xUnfetch uintptr
+} /* sqlite3.h:683:9 */
+
+// CAPI3REF: OS Interface File Virtual Methods Object
+//
+// Every file opened by the [sqlite3_vfs.xOpen] method populates an
+// [sqlite3_file] object (or, more commonly, a subclass of the
+// [sqlite3_file] object) with a pointer to an instance of this object.
+// This object defines the methods used to perform various operations
+// against the open file represented by the [sqlite3_file] object.
+//
+// If the [sqlite3_vfs.xOpen] method sets the sqlite3_file.pMethods element
+// to a non-NULL pointer, then the sqlite3_io_methods.xClose method
+// may be invoked even if the [sqlite3_vfs.xOpen] reported that it failed. The
+// only way to prevent a call to xClose following a failed [sqlite3_vfs.xOpen]
+// is for the [sqlite3_vfs.xOpen] to set the sqlite3_file.pMethods element
+// to NULL.
+//
+// The flags argument to xSync may be one of [SQLITE_SYNC_NORMAL] or
+// [SQLITE_SYNC_FULL]. The first choice is the normal fsync().
+// The second choice is a Mac OS X style fullsync. The [SQLITE_SYNC_DATAONLY]
+// flag may be ORed in to indicate that only the data of the file
+// and not its inode needs to be synced.
+//
+// The integer values to xLock() and xUnlock() are one of
+// <ul>
+// <li> [SQLITE_LOCK_NONE],
+// <li> [SQLITE_LOCK_SHARED],
+// <li> [SQLITE_LOCK_RESERVED],
+// <li> [SQLITE_LOCK_PENDING], or
+// <li> [SQLITE_LOCK_EXCLUSIVE].
+// </ul>
+// xLock() increases the lock. xUnlock() decreases the lock.
+// The xCheckReservedLock() method checks whether any database connection,
+// either in this process or in some other process, is holding a RESERVED,
+// PENDING, or EXCLUSIVE lock on the file. It returns true
+// if such a lock exists and false otherwise.
+//
+// The xFileControl() method is a generic interface that allows custom
+// VFS implementations to directly control an open file using the
+// [sqlite3_file_control()] interface. The second "op" argument is an
+// integer opcode. The third argument is a generic pointer intended to
+// point to a structure that may contain arguments or space in which to
+// write return values. Potential uses for xFileControl() might be
+// functions to enable blocking locks with timeouts, to change the
+// locking strategy (for example to use dot-file locks), to inquire
+// about the status of a lock, or to break stale locks. The SQLite
+// core reserves all opcodes less than 100 for its own use.
+// A [file control opcodes | list of opcodes] less than 100 is available.
+// Applications that define a custom xFileControl method should use opcodes
+// greater than 100 to avoid conflicts. VFS implementations should
+// return [SQLITE_NOTFOUND] for file control opcodes that they do not
+// recognize.
+//
+// The xSectorSize() method returns the sector size of the
+// device that underlies the file. The sector size is the
+// minimum write that can be performed without disturbing
+// other bytes in the file. The xDeviceCharacteristics()
+// method returns a bit vector describing behaviors of the
+// underlying device:
+//
+// <ul>
+// <li> [SQLITE_IOCAP_ATOMIC]
+// <li> [SQLITE_IOCAP_ATOMIC512]
+// <li> [SQLITE_IOCAP_ATOMIC1K]
+// <li> [SQLITE_IOCAP_ATOMIC2K]
+// <li> [SQLITE_IOCAP_ATOMIC4K]
+// <li> [SQLITE_IOCAP_ATOMIC8K]
+// <li> [SQLITE_IOCAP_ATOMIC16K]
+// <li> [SQLITE_IOCAP_ATOMIC32K]
+// <li> [SQLITE_IOCAP_ATOMIC64K]
+// <li> [SQLITE_IOCAP_SAFE_APPEND]
+// <li> [SQLITE_IOCAP_SEQUENTIAL]
+// <li> [SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN]
+// <li> [SQLITE_IOCAP_POWERSAFE_OVERWRITE]
+// <li> [SQLITE_IOCAP_IMMUTABLE]
+// <li> [SQLITE_IOCAP_BATCH_ATOMIC]
+// </ul>
+//
+// The SQLITE_IOCAP_ATOMIC property means that all writes of
+// any size are atomic. The SQLITE_IOCAP_ATOMICnnn values
+// mean that writes of blocks that are nnn bytes in size and
+// are aligned to an address which is an integer multiple of
+// nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means
+// that when data is appended to a file, the data is appended
+// first then the size of the file is extended, never the other
+// way around. The SQLITE_IOCAP_SEQUENTIAL property means that
+// information is written to disk in the same order as calls
+// to xWrite().
+//
+// If xRead() returns SQLITE_IOERR_SHORT_READ it must also fill
+// in the unread portions of the buffer with zeros. A VFS that
+// fails to zero-fill short reads might seem to work. However,
+// failure to zero-fill short reads will eventually lead to
+// database corruption.
+type sqlite3_io_methods = sqlite3_io_methods1 /* sqlite3.h:782:35 */
+
+// CAPI3REF: OS Interface Object
+//
+// An instance of the sqlite3_vfs object defines the interface between
+// the SQLite core and the underlying operating system. The "vfs"
+// in the name of the object stands for "virtual file system". See
+// the [VFS | VFS documentation] for further information.
+//
+// The VFS interface is sometimes extended by adding new methods onto
+// the end. Each time such an extension occurs, the iVersion field
+// is incremented. The iVersion value started out as 1 in
+// SQLite [version 3.5.0] on [dateof:3.5.0], then increased to 2
+// with SQLite [version 3.7.0] on [dateof:3.7.0], and then increased
+// to 3 with SQLite [version 3.7.6] on [dateof:3.7.6]. Additional fields
+// may be appended to the sqlite3_vfs object and the iVersion value
+// may increase again in future versions of SQLite.
+// Note that due to an oversight, the structure
+// of the sqlite3_vfs object changed in the transition from
+// SQLite [version 3.5.9] to [version 3.6.0] on [dateof:3.6.0]
+// and yet the iVersion field was not increased.
+//
+// The szOsFile field is the size of the subclassed [sqlite3_file]
+// structure used by this VFS. mxPathname is the maximum length of
+// a pathname in this VFS.
+//
+// Registered sqlite3_vfs objects are kept on a linked list formed by
+// the pNext pointer. The [sqlite3_vfs_register()]
+// and [sqlite3_vfs_unregister()] interfaces manage this list
+// in a thread-safe way. The [sqlite3_vfs_find()] interface
+// searches the list. Neither the application code nor the VFS
+// implementation should use the pNext pointer.
+//
+// The pNext field is the only field in the sqlite3_vfs
+// structure that SQLite will ever modify. SQLite will only access
+// or modify this field while holding a particular static mutex.
+// The application should never modify anything within the sqlite3_vfs
+// object once the object has been registered.
+//
+// The zName field holds the name of the VFS module. The name must
+// be unique across all VFS modules.
+//
+// [[sqlite3_vfs.xOpen]]
+// ^SQLite guarantees that the zFilename parameter to xOpen
+// is either a NULL pointer or string obtained
+// from xFullPathname() with an optional suffix added.
+// ^If a suffix is added to the zFilename parameter, it will
+// consist of a single "-" character followed by no more than
+// 11 alphanumeric and/or "-" characters.
+// ^SQLite further guarantees that
+// the string will be valid and unchanged until xClose() is
+// called. Because of the previous sentence,
+// the [sqlite3_file] can safely store a pointer to the
+// filename if it needs to remember the filename for some reason.
+// If the zFilename parameter to xOpen is a NULL pointer then xOpen
+// must invent its own temporary name for the file. ^Whenever the
+// xFilename parameter is NULL it will also be the case that the
+// flags parameter will include [SQLITE_OPEN_DELETEONCLOSE].
+//
+// The flags argument to xOpen() includes all bits set in
+// the flags argument to [sqlite3_open_v2()]. Or if [sqlite3_open()]
+// or [sqlite3_open16()] is used, then flags includes at least
+// [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE].
+// If xOpen() opens a file read-only then it sets *pOutFlags to
+// include [SQLITE_OPEN_READONLY]. Other bits in *pOutFlags may be set.
+//
+// ^(SQLite will also add one of the following flags to the xOpen()
+// call, depending on the object being opened:
+//
+// <ul>
+// <li> [SQLITE_OPEN_MAIN_DB]
+// <li> [SQLITE_OPEN_MAIN_JOURNAL]
+// <li> [SQLITE_OPEN_TEMP_DB]
+// <li> [SQLITE_OPEN_TEMP_JOURNAL]
+// <li> [SQLITE_OPEN_TRANSIENT_DB]
+// <li> [SQLITE_OPEN_SUBJOURNAL]
+// <li> [SQLITE_OPEN_SUPER_JOURNAL]
+// <li> [SQLITE_OPEN_WAL]
+// </ul>)^
+//
+// The file I/O implementation can use the object type flags to
+// change the way it deals with files. For example, an application
+// that does not care about crash recovery or rollback might make
+// the open of a journal file a no-op. Writes to this journal would
+// also be no-ops, and any attempt to read the journal would return
+// SQLITE_IOERR. Or the implementation might recognize that a database
+// file will be doing page-aligned sector reads and writes in a random
+// order and set up its I/O subsystem accordingly.
+//
+// SQLite might also add one of the following flags to the xOpen method:
+//
+// <ul>
+// <li> [SQLITE_OPEN_DELETEONCLOSE]
+// <li> [SQLITE_OPEN_EXCLUSIVE]
+// </ul>
+//
+// The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be
+// deleted when it is closed. ^The [SQLITE_OPEN_DELETEONCLOSE]
+// will be set for TEMP databases and their journals, transient
+// databases, and subjournals.
+//
+// ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction
+// with the [SQLITE_OPEN_CREATE] flag, which are both directly
+// analogous to the O_EXCL and O_CREAT flags of the POSIX open()
+// API. The SQLITE_OPEN_EXCLUSIVE flag, when paired with the
+// SQLITE_OPEN_CREATE, is used to indicate that file should always
+// be created, and that it is an error if it already exists.
+// It is <i>not</i> used to indicate the file should be opened
+// for exclusive access.
+//
+// ^At least szOsFile bytes of memory are allocated by SQLite
+// to hold the [sqlite3_file] structure passed as the third
+// argument to xOpen. The xOpen method does not have to
+// allocate the structure; it should just fill it in. Note that
+// the xOpen method must set the sqlite3_file.pMethods to either
+// a valid [sqlite3_io_methods] object or to NULL. xOpen must do
+// this even if the open fails. SQLite expects that the sqlite3_file.pMethods
+// element will be valid after xOpen returns regardless of the success
+// or failure of the xOpen call.
+//
+// [[sqlite3_vfs.xAccess]]
+// ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
+// to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to
+// test whether a file is readable and writable, or [SQLITE_ACCESS_READ]
+// to test whether a file is at least readable. The SQLITE_ACCESS_READ
+// flag is never actually used and is not implemented in the built-in
+// VFSes of SQLite. The file is named by the second argument and can be a
+// directory. The xAccess method returns [SQLITE_OK] on success or some
+// non-zero error code if there is an I/O error or if the name of
+// the file given in the second argument is illegal. If SQLITE_OK
+// is returned, then non-zero or zero is written into *pResOut to indicate
+// whether or not the file is accessible.
+//
+// ^SQLite will always allocate at least mxPathname+1 bytes for the
+// output buffer xFullPathname. The exact size of the output buffer
+// is also passed as a parameter to both methods. If the output buffer
+// is not large enough, [SQLITE_CANTOPEN] should be returned. Since this is
+// handled as a fatal error by SQLite, vfs implementations should endeavor
+// to prevent this by setting mxPathname to a sufficiently large value.
+//
+// The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64()
+// interfaces are not strictly a part of the filesystem, but they are
+// included in the VFS structure for completeness.
+// The xRandomness() function attempts to return nBytes bytes
+// of good-quality randomness into zOut. The return value is
+// the actual number of bytes of randomness obtained.
+// The xSleep() method causes the calling thread to sleep for at
+// least the number of microseconds given. ^The xCurrentTime()
+// method returns a Julian Day Number for the current date and time as
+// a floating point value.
+// ^The xCurrentTimeInt64() method returns, as an integer, the Julian
+// Day Number multiplied by 86400000 (the number of milliseconds in
+// a 24-hour day).
+// ^SQLite will use the xCurrentTimeInt64() method to get the current
+// date and time if that method is available (if iVersion is 2 or
+// greater and the function pointer is not NULL) and will fall back
+// to xCurrentTime() if xCurrentTimeInt64() is unavailable.
+//
+// ^The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces
+// are not used by the SQLite core. These optional interfaces are provided
+// by some VFSes to facilitate testing of the VFS code. By overriding
+// system calls with functions under its control, a test program can
+// simulate faults and error conditions that would otherwise be difficult
+// or impossible to induce. The set of system calls that can be overridden
+// varies from one VFS to another, and from one version of the same VFS to the
+// next. Applications that use these interfaces must be prepared for any
+// or all of these interfaces to be NULL or for their behavior to change
+// from one release to the next. Applications must not attempt to access
+// any of these methods if the iVersion of the VFS is less than 3.
+type sqlite3_vfs1 = struct {
+ iVersion int32
+ szOsFile int32
+ mxPathname int32
+ pNext uintptr
+ zName uintptr
+ pAppData uintptr
+ xOpen uintptr
+ xDelete uintptr
+ xAccess uintptr
+ xFullPathname uintptr
+ xDlOpen uintptr
+ xDlError uintptr
+ xDlSym uintptr
+ xDlClose uintptr
+ xRandomness uintptr
+ xSleep uintptr
+ xCurrentTime uintptr
+ xGetLastError uintptr
+ xCurrentTimeInt64 uintptr
+ xSetSystemCall uintptr
+ xGetSystemCall uintptr
+ xNextSystemCall uintptr
+} /* sqlite3.h:1367:9 */
+
+// CAPI3REF: OS Interface Object
+//
+// An instance of the sqlite3_vfs object defines the interface between
+// the SQLite core and the underlying operating system. The "vfs"
+// in the name of the object stands for "virtual file system". See
+// the [VFS | VFS documentation] for further information.
+//
+// The VFS interface is sometimes extended by adding new methods onto
+// the end. Each time such an extension occurs, the iVersion field
+// is incremented. The iVersion value started out as 1 in
+// SQLite [version 3.5.0] on [dateof:3.5.0], then increased to 2
+// with SQLite [version 3.7.0] on [dateof:3.7.0], and then increased
+// to 3 with SQLite [version 3.7.6] on [dateof:3.7.6]. Additional fields
+// may be appended to the sqlite3_vfs object and the iVersion value
+// may increase again in future versions of SQLite.
+// Note that due to an oversight, the structure
+// of the sqlite3_vfs object changed in the transition from
+// SQLite [version 3.5.9] to [version 3.6.0] on [dateof:3.6.0]
+// and yet the iVersion field was not increased.
+//
+// The szOsFile field is the size of the subclassed [sqlite3_file]
+// structure used by this VFS. mxPathname is the maximum length of
+// a pathname in this VFS.
+//
+// Registered sqlite3_vfs objects are kept on a linked list formed by
+// the pNext pointer. The [sqlite3_vfs_register()]
+// and [sqlite3_vfs_unregister()] interfaces manage this list
+// in a thread-safe way. The [sqlite3_vfs_find()] interface
+// searches the list. Neither the application code nor the VFS
+// implementation should use the pNext pointer.
+//
+// The pNext field is the only field in the sqlite3_vfs
+// structure that SQLite will ever modify. SQLite will only access
+// or modify this field while holding a particular static mutex.
+// The application should never modify anything within the sqlite3_vfs
+// object once the object has been registered.
+//
+// The zName field holds the name of the VFS module. The name must
+// be unique across all VFS modules.
+//
+// [[sqlite3_vfs.xOpen]]
+// ^SQLite guarantees that the zFilename parameter to xOpen
+// is either a NULL pointer or string obtained
+// from xFullPathname() with an optional suffix added.
+// ^If a suffix is added to the zFilename parameter, it will
+// consist of a single "-" character followed by no more than
+// 11 alphanumeric and/or "-" characters.
+// ^SQLite further guarantees that
+// the string will be valid and unchanged until xClose() is
+// called. Because of the previous sentence,
+// the [sqlite3_file] can safely store a pointer to the
+// filename if it needs to remember the filename for some reason.
+// If the zFilename parameter to xOpen is a NULL pointer then xOpen
+// must invent its own temporary name for the file. ^Whenever the
+// xFilename parameter is NULL it will also be the case that the
+// flags parameter will include [SQLITE_OPEN_DELETEONCLOSE].
+//
+// The flags argument to xOpen() includes all bits set in
+// the flags argument to [sqlite3_open_v2()]. Or if [sqlite3_open()]
+// or [sqlite3_open16()] is used, then flags includes at least
+// [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE].
+// If xOpen() opens a file read-only then it sets *pOutFlags to
+// include [SQLITE_OPEN_READONLY]. Other bits in *pOutFlags may be set.
+//
+// ^(SQLite will also add one of the following flags to the xOpen()
+// call, depending on the object being opened:
+//
+// <ul>
+// <li> [SQLITE_OPEN_MAIN_DB]
+// <li> [SQLITE_OPEN_MAIN_JOURNAL]
+// <li> [SQLITE_OPEN_TEMP_DB]
+// <li> [SQLITE_OPEN_TEMP_JOURNAL]
+// <li> [SQLITE_OPEN_TRANSIENT_DB]
+// <li> [SQLITE_OPEN_SUBJOURNAL]
+// <li> [SQLITE_OPEN_SUPER_JOURNAL]
+// <li> [SQLITE_OPEN_WAL]
+// </ul>)^
+//
+// The file I/O implementation can use the object type flags to
+// change the way it deals with files. For example, an application
+// that does not care about crash recovery or rollback might make
+// the open of a journal file a no-op. Writes to this journal would
+// also be no-ops, and any attempt to read the journal would return
+// SQLITE_IOERR. Or the implementation might recognize that a database
+// file will be doing page-aligned sector reads and writes in a random
+// order and set up its I/O subsystem accordingly.
+//
+// SQLite might also add one of the following flags to the xOpen method:
+//
+// <ul>
+// <li> [SQLITE_OPEN_DELETEONCLOSE]
+// <li> [SQLITE_OPEN_EXCLUSIVE]
+// </ul>
+//
+// The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be
+// deleted when it is closed. ^The [SQLITE_OPEN_DELETEONCLOSE]
+// will be set for TEMP databases and their journals, transient
+// databases, and subjournals.
+//
+// ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction
+// with the [SQLITE_OPEN_CREATE] flag, which are both directly
+// analogous to the O_EXCL and O_CREAT flags of the POSIX open()
+// API. The SQLITE_OPEN_EXCLUSIVE flag, when paired with the
+// SQLITE_OPEN_CREATE, is used to indicate that file should always
+// be created, and that it is an error if it already exists.
+// It is <i>not</i> used to indicate the file should be opened
+// for exclusive access.
+//
+// ^At least szOsFile bytes of memory are allocated by SQLite
+// to hold the [sqlite3_file] structure passed as the third
+// argument to xOpen. The xOpen method does not have to
+// allocate the structure; it should just fill it in. Note that
+// the xOpen method must set the sqlite3_file.pMethods to either
+// a valid [sqlite3_io_methods] object or to NULL. xOpen must do
+// this even if the open fails. SQLite expects that the sqlite3_file.pMethods
+// element will be valid after xOpen returns regardless of the success
+// or failure of the xOpen call.
+//
+// [[sqlite3_vfs.xAccess]]
+// ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
+// to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to
+// test whether a file is readable and writable, or [SQLITE_ACCESS_READ]
+// to test whether a file is at least readable. The SQLITE_ACCESS_READ
+// flag is never actually used and is not implemented in the built-in
+// VFSes of SQLite. The file is named by the second argument and can be a
+// directory. The xAccess method returns [SQLITE_OK] on success or some
+// non-zero error code if there is an I/O error or if the name of
+// the file given in the second argument is illegal. If SQLITE_OK
+// is returned, then non-zero or zero is written into *pResOut to indicate
+// whether or not the file is accessible.
+//
+// ^SQLite will always allocate at least mxPathname+1 bytes for the
+// output buffer xFullPathname. The exact size of the output buffer
+// is also passed as a parameter to both methods. If the output buffer
+// is not large enough, [SQLITE_CANTOPEN] should be returned. Since this is
+// handled as a fatal error by SQLite, vfs implementations should endeavor
+// to prevent this by setting mxPathname to a sufficiently large value.
+//
+// The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64()
+// interfaces are not strictly a part of the filesystem, but they are
+// included in the VFS structure for completeness.
+// The xRandomness() function attempts to return nBytes bytes
+// of good-quality randomness into zOut. The return value is
+// the actual number of bytes of randomness obtained.
+// The xSleep() method causes the calling thread to sleep for at
+// least the number of microseconds given. ^The xCurrentTime()
+// method returns a Julian Day Number for the current date and time as
+// a floating point value.
+// ^The xCurrentTimeInt64() method returns, as an integer, the Julian
+// Day Number multiplied by 86400000 (the number of milliseconds in
+// a 24-hour day).
+// ^SQLite will use the xCurrentTimeInt64() method to get the current
+// date and time if that method is available (if iVersion is 2 or
+// greater and the function pointer is not NULL) and will fall back
+// to xCurrentTime() if xCurrentTimeInt64() is unavailable.
+//
+// ^The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces
+// are not used by the SQLite core. These optional interfaces are provided
+// by some VFSes to facilitate testing of the VFS code. By overriding
+// system calls with functions under its control, a test program can
+// simulate faults and error conditions that would otherwise be difficult
+// or impossible to induce. The set of system calls that can be overridden
+// varies from one VFS to another, and from one version of the same VFS to the
+// next. Applications that use these interfaces must be prepared for any
+// or all of these interfaces to be NULL or for their behavior to change
+// from one release to the next. Applications must not attempt to access
+// any of these methods if the iVersion of the VFS is less than 3.
+type sqlite3_vfs = sqlite3_vfs1 /* sqlite3.h:1367:28 */
+type sqlite3_syscall_ptr = uintptr /* sqlite3.h:1368:14 */
+
+// CAPI3REF: Memory Allocation Routines
+//
+// An instance of this object defines the interface between SQLite
+// and low-level memory allocation routines.
+//
+// This object is used in only one place in the SQLite interface.
+// A pointer to an instance of this object is the argument to
+// [sqlite3_config()] when the configuration option is
+// [SQLITE_CONFIG_MALLOC] or [SQLITE_CONFIG_GETMALLOC].
+// By creating an instance of this object
+// and passing it to [sqlite3_config]([SQLITE_CONFIG_MALLOC])
+// during configuration, an application can specify an alternative
+// memory allocation subsystem for SQLite to use for all of its
+// dynamic memory needs.
+//
+// Note that SQLite comes with several [built-in memory allocators]
+// that are perfectly adequate for the overwhelming majority of applications
+// and that this object is only useful to a tiny minority of applications
+// with specialized memory allocation requirements. This object is
+// also used during testing of SQLite in order to specify an alternative
+// memory allocator that simulates memory out-of-memory conditions in
+// order to verify that SQLite recovers gracefully from such
+// conditions.
+//
+// The xMalloc, xRealloc, and xFree methods must work like the
+// malloc(), realloc() and free() functions from the standard C library.
+// ^SQLite guarantees that the second argument to
+// xRealloc is always a value returned by a prior call to xRoundup.
+//
+// xSize should return the allocated size of a memory allocation
+// previously obtained from xMalloc or xRealloc. The allocated size
+// is always at least as big as the requested size but may be larger.
+//
+// The xRoundup method returns what would be the allocated size of
+// a memory allocation given a particular requested size. Most memory
+// allocators round up memory allocations at least to the next multiple
+// of 8. Some allocators round up to a larger multiple or to a power of 2.
+// Every memory allocation request coming in through [sqlite3_malloc()]
+// or [sqlite3_realloc()] first calls xRoundup. If xRoundup returns 0,
+// that causes the corresponding memory allocation to fail.
+//
+// The xInit method initializes the memory allocator. For example,
+// it might allocate any required mutexes or initialize internal data
+// structures. The xShutdown method is invoked (indirectly) by
+// [sqlite3_shutdown()] and should deallocate any resources acquired
+// by xInit. The pAppData pointer is used as the only parameter to
+// xInit and xShutdown.
+//
+// SQLite holds the [SQLITE_MUTEX_STATIC_MAIN] mutex when it invokes
+// the xInit method, so the xInit method need not be threadsafe. The
+// xShutdown method is only called from [sqlite3_shutdown()] so it does
+// not need to be threadsafe either. For all other methods, SQLite
+// holds the [SQLITE_MUTEX_STATIC_MEM] mutex as long as the
+// [SQLITE_CONFIG_MEMSTATUS] configuration option is turned on (which
+// it is by default) and so the methods are automatically serialized.
+// However, if [SQLITE_CONFIG_MEMSTATUS] is disabled, then the other
+// methods must be threadsafe or else make their own arrangements for
+// serialization.
+//
+// SQLite will never invoke xInit() more than once without an intervening
+// call to xShutdown().
+type sqlite3_mem_methods1 = struct {
+ xMalloc uintptr
+ xFree uintptr
+ xRealloc uintptr
+ xSize uintptr
+ xRoundup uintptr
+ xInit uintptr
+ xShutdown uintptr
+ pAppData uintptr
+} /* sqlite3.h:1665:9 */
+
+// CAPI3REF: Memory Allocation Routines
+//
+// An instance of this object defines the interface between SQLite
+// and low-level memory allocation routines.
+//
+// This object is used in only one place in the SQLite interface.
+// A pointer to an instance of this object is the argument to
+// [sqlite3_config()] when the configuration option is
+// [SQLITE_CONFIG_MALLOC] or [SQLITE_CONFIG_GETMALLOC].
+// By creating an instance of this object
+// and passing it to [sqlite3_config]([SQLITE_CONFIG_MALLOC])
+// during configuration, an application can specify an alternative
+// memory allocation subsystem for SQLite to use for all of its
+// dynamic memory needs.
+//
+// Note that SQLite comes with several [built-in memory allocators]
+// that are perfectly adequate for the overwhelming majority of applications
+// and that this object is only useful to a tiny minority of applications
+// with specialized memory allocation requirements. This object is
+// also used during testing of SQLite in order to specify an alternative
+// memory allocator that simulates memory out-of-memory conditions in
+// order to verify that SQLite recovers gracefully from such
+// conditions.
+//
+// The xMalloc, xRealloc, and xFree methods must work like the
+// malloc(), realloc() and free() functions from the standard C library.
+// ^SQLite guarantees that the second argument to
+// xRealloc is always a value returned by a prior call to xRoundup.
+//
+// xSize should return the allocated size of a memory allocation
+// previously obtained from xMalloc or xRealloc. The allocated size
+// is always at least as big as the requested size but may be larger.
+//
+// The xRoundup method returns what would be the allocated size of
+// a memory allocation given a particular requested size. Most memory
+// allocators round up memory allocations at least to the next multiple
+// of 8. Some allocators round up to a larger multiple or to a power of 2.
+// Every memory allocation request coming in through [sqlite3_malloc()]
+// or [sqlite3_realloc()] first calls xRoundup. If xRoundup returns 0,
+// that causes the corresponding memory allocation to fail.
+//
+// The xInit method initializes the memory allocator. For example,
+// it might allocate any required mutexes or initialize internal data
+// structures. The xShutdown method is invoked (indirectly) by
+// [sqlite3_shutdown()] and should deallocate any resources acquired
+// by xInit. The pAppData pointer is used as the only parameter to
+// xInit and xShutdown.
+//
+// SQLite holds the [SQLITE_MUTEX_STATIC_MAIN] mutex when it invokes
+// the xInit method, so the xInit method need not be threadsafe. The
+// xShutdown method is only called from [sqlite3_shutdown()] so it does
+// not need to be threadsafe either. For all other methods, SQLite
+// holds the [SQLITE_MUTEX_STATIC_MEM] mutex as long as the
+// [SQLITE_CONFIG_MEMSTATUS] configuration option is turned on (which
+// it is by default) and so the methods are automatically serialized.
+// However, if [SQLITE_CONFIG_MEMSTATUS] is disabled, then the other
+// methods must be threadsafe or else make their own arrangements for
+// serialization.
+//
+// SQLite will never invoke xInit() more than once without an intervening
+// call to xShutdown().
+type sqlite3_mem_methods = sqlite3_mem_methods1 /* sqlite3.h:1665:36 */
+
+// CAPI3REF: Constants Defining Special Destructor Behavior
+//
+// These are special values for the destructor that is passed in as the
+// final argument to routines like [sqlite3_result_blob()]. ^If the destructor
+// argument is SQLITE_STATIC, it means that the content pointer is constant
+// and will never change. It does not need to be destroyed. ^The
+// SQLITE_TRANSIENT value means that the content will likely change in
+// the near future and that SQLite should make its own private copy of
+// the content before returning.
+//
+// The typedef is necessary to work around problems in certain
+// C++ compilers.
+type sqlite3_destructor_type = uintptr /* sqlite3.h:5621:14 */
+
+// The interface to the virtual-table mechanism is currently considered
+// to be experimental. The interface might change in incompatible ways.
+// If this is a problem for you, do not use the interface at this time.
+//
+// When the virtual-table mechanism stabilizes, we will declare the
+// interface fixed, support it indefinitely, and remove this comment.
+
+// Structures used by the virtual table interface
+type sqlite3_vtab1 = struct {
+ pModule uintptr
+ nRef int32
+ zErrMsg uintptr
+} /* sqlite3.h:6689:9 */
+
+// The interface to the virtual-table mechanism is currently considered
+// to be experimental. The interface might change in incompatible ways.
+// If this is a problem for you, do not use the interface at this time.
+//
+// When the virtual-table mechanism stabilizes, we will declare the
+// interface fixed, support it indefinitely, and remove this comment.
+
+// Structures used by the virtual table interface
+type sqlite3_vtab = sqlite3_vtab1 /* sqlite3.h:6689:29 */
+type sqlite3_index_info1 = struct {
+ nConstraint int32
+ aConstraint uintptr
+ nOrderBy int32
+ aOrderBy uintptr
+ aConstraintUsage uintptr
+ idxNum int32
+ idxStr uintptr
+ needToFreeIdxStr int32
+ orderByConsumed int32
+ _ [4]byte
+ estimatedCost float64
+ estimatedRows sqlite3_int64
+ idxFlags int32
+ _ [4]byte
+ colUsed sqlite3_uint64
+} /* sqlite3.h:6690:9 */
+
+type sqlite3_index_info = sqlite3_index_info1 /* sqlite3.h:6690:35 */
+type sqlite3_vtab_cursor1 = struct{ pVtab uintptr } /* sqlite3.h:6691:9 */
+
+type sqlite3_vtab_cursor = sqlite3_vtab_cursor1 /* sqlite3.h:6691:36 */
+type sqlite3_module1 = struct {
+ iVersion int32
+ xCreate uintptr
+ xConnect uintptr
+ xBestIndex uintptr
+ xDisconnect uintptr
+ xDestroy uintptr
+ xOpen uintptr
+ xClose uintptr
+ xFilter uintptr
+ xNext uintptr
+ xEof uintptr
+ xColumn uintptr
+ xRowid uintptr
+ xUpdate uintptr
+ xBegin uintptr
+ xSync uintptr
+ xCommit uintptr
+ xRollback uintptr
+ xFindFunction uintptr
+ xRename uintptr
+ xSavepoint uintptr
+ xRelease uintptr
+ xRollbackTo uintptr
+ xShadowName uintptr
+} /* sqlite3.h:6689:9 */
+
+type sqlite3_module = sqlite3_module1 /* sqlite3.h:6692:31 */
+
+// CAPI3REF: Virtual Table Indexing Information
+// KEYWORDS: sqlite3_index_info
+//
+// The sqlite3_index_info structure and its substructures is used as part
+// of the [virtual table] interface to
+// pass information into and receive the reply from the [xBestIndex]
+// method of a [virtual table module]. The fields under **Inputs** are the
+// inputs to xBestIndex and are read-only. xBestIndex inserts its
+// results into the **Outputs** fields.
+//
+// ^(The aConstraint[] array records WHERE clause constraints of the form:
+//
+// <blockquote>column OP expr</blockquote>
+//
+// where OP is =, &lt;, &lt;=, &gt;, or &gt;=.)^ ^(The particular operator is
+// stored in aConstraint[].op using one of the
+// [SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_ values].)^
+// ^(The index of the column is stored in
+// aConstraint[].iColumn.)^ ^(aConstraint[].usable is TRUE if the
+// expr on the right-hand side can be evaluated (and thus the constraint
+// is usable) and false if it cannot.)^
+//
+// ^The optimizer automatically inverts terms of the form "expr OP column"
+// and makes other simplifications to the WHERE clause in an attempt to
+// get as many WHERE clause terms into the form shown above as possible.
+// ^The aConstraint[] array only reports WHERE clause terms that are
+// relevant to the particular virtual table being queried.
+//
+// ^Information about the ORDER BY clause is stored in aOrderBy[].
+// ^Each term of aOrderBy records a column of the ORDER BY clause.
+//
+// The colUsed field indicates which columns of the virtual table may be
+// required by the current scan. Virtual table columns are numbered from
+// zero in the order in which they appear within the CREATE TABLE statement
+// passed to sqlite3_declare_vtab(). For the first 63 columns (columns 0-62),
+// the corresponding bit is set within the colUsed mask if the column may be
+// required by SQLite. If the table has at least 64 columns and any column
+// to the right of the first 63 is required, then bit 63 of colUsed is also
+// set. In other words, column iCol may be required if the expression
+// (colUsed & ((sqlite3_uint64)1 << (iCol>=63 ? 63 : iCol))) evaluates to
+// non-zero.
+//
+// The [xBestIndex] method must fill aConstraintUsage[] with information
+// about what parameters to pass to xFilter. ^If argvIndex>0 then
+// the right-hand side of the corresponding aConstraint[] is evaluated
+// and becomes the argvIndex-th entry in argv. ^(If aConstraintUsage[].omit
+// is true, then the constraint is assumed to be fully handled by the
+// virtual table and might not be checked again by the byte code.)^ ^(The
+// aConstraintUsage[].omit flag is an optimization hint. When the omit flag
+// is left in its default setting of false, the constraint will always be
+// checked separately in byte code. If the omit flag is change to true, then
+// the constraint may or may not be checked in byte code. In other words,
+// when the omit flag is true there is no guarantee that the constraint will
+// not be checked again using byte code.)^
+//
+// ^The idxNum and idxPtr values are recorded and passed into the
+// [xFilter] method.
+// ^[sqlite3_free()] is used to free idxPtr if and only if
+// needToFreeIdxPtr is true.
+//
+// ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in
+// the correct order to satisfy the ORDER BY clause so that no separate
+// sorting step is required.
+//
+// ^The estimatedCost value is an estimate of the cost of a particular
+// strategy. A cost of N indicates that the cost of the strategy is similar
+// to a linear scan of an SQLite table with N rows. A cost of log(N)
+// indicates that the expense of the operation is similar to that of a
+// binary search on a unique indexed field of an SQLite table with N rows.
+//
+// ^The estimatedRows value is an estimate of the number of rows that
+// will be returned by the strategy.
+//
+// The xBestIndex method may optionally populate the idxFlags field with a
+// mask of SQLITE_INDEX_SCAN_* flags. Currently there is only one such flag -
+// SQLITE_INDEX_SCAN_UNIQUE. If the xBestIndex method sets this flag, SQLite
+// assumes that the strategy may visit at most one row.
+//
+// Additionally, if xBestIndex sets the SQLITE_INDEX_SCAN_UNIQUE flag, then
+// SQLite also assumes that if a call to the xUpdate() method is made as
+// part of the same statement to delete or update a virtual table row and the
+// implementation returns SQLITE_CONSTRAINT, then there is no need to rollback
+// any database changes. In other words, if the xUpdate() returns
+// SQLITE_CONSTRAINT, the database contents must be exactly as they were
+// before xUpdate was called. By contrast, if SQLITE_INDEX_SCAN_UNIQUE is not
+// set and xUpdate returns SQLITE_CONSTRAINT, any database changes made by
+// the xUpdate method are automatically rolled back by SQLite.
+//
+// IMPORTANT: The estimatedRows field was added to the sqlite3_index_info
+// structure for SQLite [version 3.8.2] ([dateof:3.8.2]).
+// If a virtual table extension is
+// used with an SQLite version earlier than 3.8.2, the results of attempting
+// to read or write the estimatedRows field are undefined (but are likely
+// to include crashing the application). The estimatedRows field should
+// therefore only be used if [sqlite3_libversion_number()] returns a
+// value greater than or equal to 3008002. Similarly, the idxFlags field
+// was added for [version 3.9.0] ([dateof:3.9.0]).
+// It may therefore only be used if
+// sqlite3_libversion_number() returns a value greater than or equal to
+// 3009000.
+type sqlite3_index_constraint = struct {
+ iColumn int32
+ op uint8
+ usable uint8
+ _ [2]byte
+ iTermOffset int32
+} /* sqlite3.h:6690:9 */
+
+// CAPI3REF: Virtual Table Indexing Information
+// KEYWORDS: sqlite3_index_info
+//
+// The sqlite3_index_info structure and its substructures is used as part
+// of the [virtual table] interface to
+// pass information into and receive the reply from the [xBestIndex]
+// method of a [virtual table module]. The fields under **Inputs** are the
+// inputs to xBestIndex and are read-only. xBestIndex inserts its
+// results into the **Outputs** fields.
+//
+// ^(The aConstraint[] array records WHERE clause constraints of the form:
+//
+// <blockquote>column OP expr</blockquote>
+//
+// where OP is =, &lt;, &lt;=, &gt;, or &gt;=.)^ ^(The particular operator is
+// stored in aConstraint[].op using one of the
+// [SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_ values].)^
+// ^(The index of the column is stored in
+// aConstraint[].iColumn.)^ ^(aConstraint[].usable is TRUE if the
+// expr on the right-hand side can be evaluated (and thus the constraint
+// is usable) and false if it cannot.)^
+//
+// ^The optimizer automatically inverts terms of the form "expr OP column"
+// and makes other simplifications to the WHERE clause in an attempt to
+// get as many WHERE clause terms into the form shown above as possible.
+// ^The aConstraint[] array only reports WHERE clause terms that are
+// relevant to the particular virtual table being queried.
+//
+// ^Information about the ORDER BY clause is stored in aOrderBy[].
+// ^Each term of aOrderBy records a column of the ORDER BY clause.
+//
+// The colUsed field indicates which columns of the virtual table may be
+// required by the current scan. Virtual table columns are numbered from
+// zero in the order in which they appear within the CREATE TABLE statement
+// passed to sqlite3_declare_vtab(). For the first 63 columns (columns 0-62),
+// the corresponding bit is set within the colUsed mask if the column may be
+// required by SQLite. If the table has at least 64 columns and any column
+// to the right of the first 63 is required, then bit 63 of colUsed is also
+// set. In other words, column iCol may be required if the expression
+// (colUsed & ((sqlite3_uint64)1 << (iCol>=63 ? 63 : iCol))) evaluates to
+// non-zero.
+//
+// The [xBestIndex] method must fill aConstraintUsage[] with information
+// about what parameters to pass to xFilter. ^If argvIndex>0 then
+// the right-hand side of the corresponding aConstraint[] is evaluated
+// and becomes the argvIndex-th entry in argv. ^(If aConstraintUsage[].omit
+// is true, then the constraint is assumed to be fully handled by the
+// virtual table and might not be checked again by the byte code.)^ ^(The
+// aConstraintUsage[].omit flag is an optimization hint. When the omit flag
+// is left in its default setting of false, the constraint will always be
+// checked separately in byte code. If the omit flag is change to true, then
+// the constraint may or may not be checked in byte code. In other words,
+// when the omit flag is true there is no guarantee that the constraint will
+// not be checked again using byte code.)^
+//
+// ^The idxNum and idxPtr values are recorded and passed into the
+// [xFilter] method.
+// ^[sqlite3_free()] is used to free idxPtr if and only if
+// needToFreeIdxPtr is true.
+//
+// ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in
+// the correct order to satisfy the ORDER BY clause so that no separate
+// sorting step is required.
+//
+// ^The estimatedCost value is an estimate of the cost of a particular
+// strategy. A cost of N indicates that the cost of the strategy is similar
+// to a linear scan of an SQLite table with N rows. A cost of log(N)
+// indicates that the expense of the operation is similar to that of a
+// binary search on a unique indexed field of an SQLite table with N rows.
+//
+// ^The estimatedRows value is an estimate of the number of rows that
+// will be returned by the strategy.
+//
+// The xBestIndex method may optionally populate the idxFlags field with a
+// mask of SQLITE_INDEX_SCAN_* flags. Currently there is only one such flag -
+// SQLITE_INDEX_SCAN_UNIQUE. If the xBestIndex method sets this flag, SQLite
+// assumes that the strategy may visit at most one row.
+//
+// Additionally, if xBestIndex sets the SQLITE_INDEX_SCAN_UNIQUE flag, then
+// SQLite also assumes that if a call to the xUpdate() method is made as
+// part of the same statement to delete or update a virtual table row and the
+// implementation returns SQLITE_CONSTRAINT, then there is no need to rollback
+// any database changes. In other words, if the xUpdate() returns
+// SQLITE_CONSTRAINT, the database contents must be exactly as they were
+// before xUpdate was called. By contrast, if SQLITE_INDEX_SCAN_UNIQUE is not
+// set and xUpdate returns SQLITE_CONSTRAINT, any database changes made by
+// the xUpdate method are automatically rolled back by SQLite.
+//
+// IMPORTANT: The estimatedRows field was added to the sqlite3_index_info
+// structure for SQLite [version 3.8.2] ([dateof:3.8.2]).
+// If a virtual table extension is
+// used with an SQLite version earlier than 3.8.2, the results of attempting
+// to read or write the estimatedRows field are undefined (but are likely
+// to include crashing the application). The estimatedRows field should
+// therefore only be used if [sqlite3_libversion_number()] returns a
+// value greater than or equal to 3008002. Similarly, the idxFlags field
+// was added for [version 3.9.0] ([dateof:3.9.0]).
+// It may therefore only be used if
+// sqlite3_libversion_number() returns a value greater than or equal to
+// 3009000.
+type sqlite3_index_orderby = struct {
+ iColumn int32
+ desc uint8
+ _ [3]byte
+} /* sqlite3.h:6690:9 */
+
+// CAPI3REF: Virtual Table Indexing Information
+// KEYWORDS: sqlite3_index_info
+//
+// The sqlite3_index_info structure and its substructures is used as part
+// of the [virtual table] interface to
+// pass information into and receive the reply from the [xBestIndex]
+// method of a [virtual table module]. The fields under **Inputs** are the
+// inputs to xBestIndex and are read-only. xBestIndex inserts its
+// results into the **Outputs** fields.
+//
+// ^(The aConstraint[] array records WHERE clause constraints of the form:
+//
+// <blockquote>column OP expr</blockquote>
+//
+// where OP is =, &lt;, &lt;=, &gt;, or &gt;=.)^ ^(The particular operator is
+// stored in aConstraint[].op using one of the
+// [SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_ values].)^
+// ^(The index of the column is stored in
+// aConstraint[].iColumn.)^ ^(aConstraint[].usable is TRUE if the
+// expr on the right-hand side can be evaluated (and thus the constraint
+// is usable) and false if it cannot.)^
+//
+// ^The optimizer automatically inverts terms of the form "expr OP column"
+// and makes other simplifications to the WHERE clause in an attempt to
+// get as many WHERE clause terms into the form shown above as possible.
+// ^The aConstraint[] array only reports WHERE clause terms that are
+// relevant to the particular virtual table being queried.
+//
+// ^Information about the ORDER BY clause is stored in aOrderBy[].
+// ^Each term of aOrderBy records a column of the ORDER BY clause.
+//
+// The colUsed field indicates which columns of the virtual table may be
+// required by the current scan. Virtual table columns are numbered from
+// zero in the order in which they appear within the CREATE TABLE statement
+// passed to sqlite3_declare_vtab(). For the first 63 columns (columns 0-62),
+// the corresponding bit is set within the colUsed mask if the column may be
+// required by SQLite. If the table has at least 64 columns and any column
+// to the right of the first 63 is required, then bit 63 of colUsed is also
+// set. In other words, column iCol may be required if the expression
+// (colUsed & ((sqlite3_uint64)1 << (iCol>=63 ? 63 : iCol))) evaluates to
+// non-zero.
+//
+// The [xBestIndex] method must fill aConstraintUsage[] with information
+// about what parameters to pass to xFilter. ^If argvIndex>0 then
+// the right-hand side of the corresponding aConstraint[] is evaluated
+// and becomes the argvIndex-th entry in argv. ^(If aConstraintUsage[].omit
+// is true, then the constraint is assumed to be fully handled by the
+// virtual table and might not be checked again by the byte code.)^ ^(The
+// aConstraintUsage[].omit flag is an optimization hint. When the omit flag
+// is left in its default setting of false, the constraint will always be
+// checked separately in byte code. If the omit flag is change to true, then
+// the constraint may or may not be checked in byte code. In other words,
+// when the omit flag is true there is no guarantee that the constraint will
+// not be checked again using byte code.)^
+//
+// ^The idxNum and idxPtr values are recorded and passed into the
+// [xFilter] method.
+// ^[sqlite3_free()] is used to free idxPtr if and only if
+// needToFreeIdxPtr is true.
+//
+// ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in
+// the correct order to satisfy the ORDER BY clause so that no separate
+// sorting step is required.
+//
+// ^The estimatedCost value is an estimate of the cost of a particular
+// strategy. A cost of N indicates that the cost of the strategy is similar
+// to a linear scan of an SQLite table with N rows. A cost of log(N)
+// indicates that the expense of the operation is similar to that of a
+// binary search on a unique indexed field of an SQLite table with N rows.
+//
+// ^The estimatedRows value is an estimate of the number of rows that
+// will be returned by the strategy.
+//
+// The xBestIndex method may optionally populate the idxFlags field with a
+// mask of SQLITE_INDEX_SCAN_* flags. Currently there is only one such flag -
+// SQLITE_INDEX_SCAN_UNIQUE. If the xBestIndex method sets this flag, SQLite
+// assumes that the strategy may visit at most one row.
+//
+// Additionally, if xBestIndex sets the SQLITE_INDEX_SCAN_UNIQUE flag, then
+// SQLite also assumes that if a call to the xUpdate() method is made as
+// part of the same statement to delete or update a virtual table row and the
+// implementation returns SQLITE_CONSTRAINT, then there is no need to rollback
+// any database changes. In other words, if the xUpdate() returns
+// SQLITE_CONSTRAINT, the database contents must be exactly as they were
+// before xUpdate was called. By contrast, if SQLITE_INDEX_SCAN_UNIQUE is not
+// set and xUpdate returns SQLITE_CONSTRAINT, any database changes made by
+// the xUpdate method are automatically rolled back by SQLite.
+//
+// IMPORTANT: The estimatedRows field was added to the sqlite3_index_info
+// structure for SQLite [version 3.8.2] ([dateof:3.8.2]).
+// If a virtual table extension is
+// used with an SQLite version earlier than 3.8.2, the results of attempting
+// to read or write the estimatedRows field are undefined (but are likely
+// to include crashing the application). The estimatedRows field should
+// therefore only be used if [sqlite3_libversion_number()] returns a
+// value greater than or equal to 3008002. Similarly, the idxFlags field
+// was added for [version 3.9.0] ([dateof:3.9.0]).
+// It may therefore only be used if
+// sqlite3_libversion_number() returns a value greater than or equal to
+// 3009000.
+type sqlite3_index_constraint_usage = struct {
+ argvIndex int32
+ omit uint8
+ _ [3]byte
+} /* sqlite3.h:6690:9 */
+
+// CAPI3REF: Mutex Methods Object
+//
+// An instance of this structure defines the low-level routines
+// used to allocate and use mutexes.
+//
+// Usually, the default mutex implementations provided by SQLite are
+// sufficient, however the application has the option of substituting a custom
+// implementation for specialized deployments or systems for which SQLite
+// does not provide a suitable implementation. In this case, the application
+// creates and populates an instance of this structure to pass
+// to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option.
+// Additionally, an instance of this structure can be used as an
+// output variable when querying the system for the current mutex
+// implementation, using the [SQLITE_CONFIG_GETMUTEX] option.
+//
+// ^The xMutexInit method defined by this structure is invoked as
+// part of system initialization by the sqlite3_initialize() function.
+// ^The xMutexInit routine is called by SQLite exactly once for each
+// effective call to [sqlite3_initialize()].
+//
+// ^The xMutexEnd method defined by this structure is invoked as
+// part of system shutdown by the sqlite3_shutdown() function. The
+// implementation of this method is expected to release all outstanding
+// resources obtained by the mutex methods implementation, especially
+// those obtained by the xMutexInit method. ^The xMutexEnd()
+// interface is invoked exactly once for each call to [sqlite3_shutdown()].
+//
+// ^(The remaining seven methods defined by this structure (xMutexAlloc,
+// xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and
+// xMutexNotheld) implement the following interfaces (respectively):
+//
+// <ul>
+// <li> [sqlite3_mutex_alloc()] </li>
+// <li> [sqlite3_mutex_free()] </li>
+// <li> [sqlite3_mutex_enter()] </li>
+// <li> [sqlite3_mutex_try()] </li>
+// <li> [sqlite3_mutex_leave()] </li>
+// <li> [sqlite3_mutex_held()] </li>
+// <li> [sqlite3_mutex_notheld()] </li>
+// </ul>)^
+//
+// The only difference is that the public sqlite3_XXX functions enumerated
+// above silently ignore any invocations that pass a NULL pointer instead
+// of a valid mutex handle. The implementations of the methods defined
+// by this structure are not required to handle this case. The results
+// of passing a NULL pointer instead of a valid mutex handle are undefined
+// (i.e. it is acceptable to provide an implementation that segfaults if
+// it is passed a NULL pointer).
+//
+// The xMutexInit() method must be threadsafe. It must be harmless to
+// invoke xMutexInit() multiple times within the same process and without
+// intervening calls to xMutexEnd(). Second and subsequent calls to
+// xMutexInit() must be no-ops.
+//
+// xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
+// and its associates). Similarly, xMutexAlloc() must not use SQLite memory
+// allocation for a static mutex. ^However xMutexAlloc() may use SQLite
+// memory allocation for a fast or recursive mutex.
+//
+// ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is
+// called, but only if the prior call to xMutexInit returned SQLITE_OK.
+// If xMutexInit fails in any way, it is expected to clean up after itself
+// prior to returning.
+type sqlite3_mutex_methods1 = struct {
+ xMutexInit uintptr
+ xMutexEnd uintptr
+ xMutexAlloc uintptr
+ xMutexFree uintptr
+ xMutexEnter uintptr
+ xMutexTry uintptr
+ xMutexLeave uintptr
+ xMutexHeld uintptr
+ xMutexNotheld uintptr
+} /* sqlite3.h:7524:9 */
+
+// CAPI3REF: Mutex Methods Object
+//
+// An instance of this structure defines the low-level routines
+// used to allocate and use mutexes.
+//
+// Usually, the default mutex implementations provided by SQLite are
+// sufficient, however the application has the option of substituting a custom
+// implementation for specialized deployments or systems for which SQLite
+// does not provide a suitable implementation. In this case, the application
+// creates and populates an instance of this structure to pass
+// to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option.
+// Additionally, an instance of this structure can be used as an
+// output variable when querying the system for the current mutex
+// implementation, using the [SQLITE_CONFIG_GETMUTEX] option.
+//
+// ^The xMutexInit method defined by this structure is invoked as
+// part of system initialization by the sqlite3_initialize() function.
+// ^The xMutexInit routine is called by SQLite exactly once for each
+// effective call to [sqlite3_initialize()].
+//
+// ^The xMutexEnd method defined by this structure is invoked as
+// part of system shutdown by the sqlite3_shutdown() function. The
+// implementation of this method is expected to release all outstanding
+// resources obtained by the mutex methods implementation, especially
+// those obtained by the xMutexInit method. ^The xMutexEnd()
+// interface is invoked exactly once for each call to [sqlite3_shutdown()].
+//
+// ^(The remaining seven methods defined by this structure (xMutexAlloc,
+// xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and
+// xMutexNotheld) implement the following interfaces (respectively):
+//
+// <ul>
+// <li> [sqlite3_mutex_alloc()] </li>
+// <li> [sqlite3_mutex_free()] </li>
+// <li> [sqlite3_mutex_enter()] </li>
+// <li> [sqlite3_mutex_try()] </li>
+// <li> [sqlite3_mutex_leave()] </li>
+// <li> [sqlite3_mutex_held()] </li>
+// <li> [sqlite3_mutex_notheld()] </li>
+// </ul>)^
+//
+// The only difference is that the public sqlite3_XXX functions enumerated
+// above silently ignore any invocations that pass a NULL pointer instead
+// of a valid mutex handle. The implementations of the methods defined
+// by this structure are not required to handle this case. The results
+// of passing a NULL pointer instead of a valid mutex handle are undefined
+// (i.e. it is acceptable to provide an implementation that segfaults if
+// it is passed a NULL pointer).
+//
+// The xMutexInit() method must be threadsafe. It must be harmless to
+// invoke xMutexInit() multiple times within the same process and without
+// intervening calls to xMutexEnd(). Second and subsequent calls to
+// xMutexInit() must be no-ops.
+//
+// xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
+// and its associates). Similarly, xMutexAlloc() must not use SQLite memory
+// allocation for a static mutex. ^However xMutexAlloc() may use SQLite
+// memory allocation for a fast or recursive mutex.
+//
+// ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is
+// called, but only if the prior call to xMutexInit returned SQLITE_OK.
+// If xMutexInit fails in any way, it is expected to clean up after itself
+// prior to returning.
+type sqlite3_mutex_methods = sqlite3_mutex_methods1 /* sqlite3.h:7524:38 */
+
+// CAPI3REF: Custom Page Cache Object
+//
+// The sqlite3_pcache_page object represents a single page in the
+// page cache. The page cache will allocate instances of this
+// object. Various methods of the page cache use pointers to instances
+// of this object as parameters or as their return value.
+//
+// See [sqlite3_pcache_methods2] for additional information.
+type sqlite3_pcache_page1 = struct {
+ pBuf uintptr
+ pExtra uintptr
+} /* sqlite3.h:8277:9 */
+
+// CAPI3REF: Custom Page Cache Object
+//
+// The sqlite3_pcache_page object represents a single page in the
+// page cache. The page cache will allocate instances of this
+// object. Various methods of the page cache use pointers to instances
+// of this object as parameters or as their return value.
+//
+// See [sqlite3_pcache_methods2] for additional information.
+type sqlite3_pcache_page = sqlite3_pcache_page1 /* sqlite3.h:8277:36 */
+
+// CAPI3REF: Application Defined Page Cache.
+// KEYWORDS: {page cache}
+//
+// ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE2], ...) interface can
+// register an alternative page cache implementation by passing in an
+// instance of the sqlite3_pcache_methods2 structure.)^
+// In many applications, most of the heap memory allocated by
+// SQLite is used for the page cache.
+// By implementing a
+// custom page cache using this API, an application can better control
+// the amount of memory consumed by SQLite, the way in which
+// that memory is allocated and released, and the policies used to
+// determine exactly which parts of a database file are cached and for
+// how long.
+//
+// The alternative page cache mechanism is an
+// extreme measure that is only needed by the most demanding applications.
+// The built-in page cache is recommended for most uses.
+//
+// ^(The contents of the sqlite3_pcache_methods2 structure are copied to an
+// internal buffer by SQLite within the call to [sqlite3_config]. Hence
+// the application may discard the parameter after the call to
+// [sqlite3_config()] returns.)^
+//
+// [[the xInit() page cache method]]
+// ^(The xInit() method is called once for each effective
+// call to [sqlite3_initialize()])^
+// (usually only once during the lifetime of the process). ^(The xInit()
+// method is passed a copy of the sqlite3_pcache_methods2.pArg value.)^
+// The intent of the xInit() method is to set up global data structures
+// required by the custom page cache implementation.
+// ^(If the xInit() method is NULL, then the
+// built-in default page cache is used instead of the application defined
+// page cache.)^
+//
+// [[the xShutdown() page cache method]]
+// ^The xShutdown() method is called by [sqlite3_shutdown()].
+// It can be used to clean up
+// any outstanding resources before process shutdown, if required.
+// ^The xShutdown() method may be NULL.
+//
+// ^SQLite automatically serializes calls to the xInit method,
+// so the xInit method need not be threadsafe. ^The
+// xShutdown method is only called from [sqlite3_shutdown()] so it does
+// not need to be threadsafe either. All other methods must be threadsafe
+// in multithreaded applications.
+//
+// ^SQLite will never invoke xInit() more than once without an intervening
+// call to xShutdown().
+//
+// [[the xCreate() page cache methods]]
+// ^SQLite invokes the xCreate() method to construct a new cache instance.
+// SQLite will typically create one cache instance for each open database file,
+// though this is not guaranteed. ^The
+// first parameter, szPage, is the size in bytes of the pages that must
+// be allocated by the cache. ^szPage will always a power of two. ^The
+// second parameter szExtra is a number of bytes of extra storage
+// associated with each page cache entry. ^The szExtra parameter will
+// a number less than 250. SQLite will use the
+// extra szExtra bytes on each page to store metadata about the underlying
+// database page on disk. The value passed into szExtra depends
+// on the SQLite version, the target platform, and how SQLite was compiled.
+// ^The third argument to xCreate(), bPurgeable, is true if the cache being
+// created will be used to cache database pages of a file stored on disk, or
+// false if it is used for an in-memory database. The cache implementation
+// does not have to do anything special based with the value of bPurgeable;
+// it is purely advisory. ^On a cache where bPurgeable is false, SQLite will
+// never invoke xUnpin() except to deliberately delete a page.
+// ^In other words, calls to xUnpin() on a cache with bPurgeable set to
+// false will always have the "discard" flag set to true.
+// ^Hence, a cache created with bPurgeable false will
+// never contain any unpinned pages.
+//
+// [[the xCachesize() page cache method]]
+// ^(The xCachesize() method may be called at any time by SQLite to set the
+// suggested maximum cache-size (number of pages stored by) the cache
+// instance passed as the first argument. This is the value configured using
+// the SQLite "[PRAGMA cache_size]" command.)^ As with the bPurgeable
+// parameter, the implementation is not required to do anything with this
+// value; it is advisory only.
+//
+// [[the xPagecount() page cache methods]]
+// The xPagecount() method must return the number of pages currently
+// stored in the cache, both pinned and unpinned.
+//
+// [[the xFetch() page cache methods]]
+// The xFetch() method locates a page in the cache and returns a pointer to
+// an sqlite3_pcache_page object associated with that page, or a NULL pointer.
+// The pBuf element of the returned sqlite3_pcache_page object will be a
+// pointer to a buffer of szPage bytes used to store the content of a
+// single database page. The pExtra element of sqlite3_pcache_page will be
+// a pointer to the szExtra bytes of extra storage that SQLite has requested
+// for each entry in the page cache.
+//
+// The page to be fetched is determined by the key. ^The minimum key value
+// is 1. After it has been retrieved using xFetch, the page is considered
+// to be "pinned".
+//
+// If the requested page is already in the page cache, then the page cache
+// implementation must return a pointer to the page buffer with its content
+// intact. If the requested page is not already in the cache, then the
+// cache implementation should use the value of the createFlag
+// parameter to help it determined what action to take:
+//
+// <table border=1 width=85% align=center>
+// <tr><th> createFlag <th> Behavior when page is not already in cache
+// <tr><td> 0 <td> Do not allocate a new page. Return NULL.
+// <tr><td> 1 <td> Allocate a new page if it easy and convenient to do so.
+// Otherwise return NULL.
+// <tr><td> 2 <td> Make every effort to allocate a new page. Only return
+// NULL if allocating a new page is effectively impossible.
+// </table>
+//
+// ^(SQLite will normally invoke xFetch() with a createFlag of 0 or 1. SQLite
+// will only use a createFlag of 2 after a prior call with a createFlag of 1
+// failed.)^ In between the xFetch() calls, SQLite may
+// attempt to unpin one or more cache pages by spilling the content of
+// pinned pages to disk and synching the operating system disk cache.
+//
+// [[the xUnpin() page cache method]]
+// ^xUnpin() is called by SQLite with a pointer to a currently pinned page
+// as its second argument. If the third parameter, discard, is non-zero,
+// then the page must be evicted from the cache.
+// ^If the discard parameter is
+// zero, then the page may be discarded or retained at the discretion of
+// page cache implementation. ^The page cache implementation
+// may choose to evict unpinned pages at any time.
+//
+// The cache must not perform any reference counting. A single
+// call to xUnpin() unpins the page regardless of the number of prior calls
+// to xFetch().
+//
+// [[the xRekey() page cache methods]]
+// The xRekey() method is used to change the key value associated with the
+// page passed as the second argument. If the cache
+// previously contains an entry associated with newKey, it must be
+// discarded. ^Any prior cache entry associated with newKey is guaranteed not
+// to be pinned.
+//
+// When SQLite calls the xTruncate() method, the cache must discard all
+// existing cache entries with page numbers (keys) greater than or equal
+// to the value of the iLimit parameter passed to xTruncate(). If any
+// of these pages are pinned, they are implicitly unpinned, meaning that
+// they can be safely discarded.
+//
+// [[the xDestroy() page cache method]]
+// ^The xDestroy() method is used to delete a cache allocated by xCreate().
+// All resources associated with the specified cache should be freed. ^After
+// calling the xDestroy() method, SQLite considers the [sqlite3_pcache*]
+// handle invalid, and will not use it with any other sqlite3_pcache_methods2
+// functions.
+//
+// [[the xShrink() page cache method]]
+// ^SQLite invokes the xShrink() method when it wants the page cache to
+// free up as much of heap memory as possible. The page cache implementation
+// is not obligated to free any memory, but well-behaved implementations should
+// do their best.
+type sqlite3_pcache_methods21 = struct {
+ iVersion int32
+ pArg uintptr
+ xInit uintptr
+ xShutdown uintptr
+ xCreate uintptr
+ xCachesize uintptr
+ xPagecount uintptr
+ xFetch uintptr
+ xUnpin uintptr
+ xRekey uintptr
+ xTruncate uintptr
+ xDestroy uintptr
+ xShrink uintptr
+} /* sqlite3.h:8442:9 */
+
+// CAPI3REF: Application Defined Page Cache.
+// KEYWORDS: {page cache}
+//
+// ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE2], ...) interface can
+// register an alternative page cache implementation by passing in an
+// instance of the sqlite3_pcache_methods2 structure.)^
+// In many applications, most of the heap memory allocated by
+// SQLite is used for the page cache.
+// By implementing a
+// custom page cache using this API, an application can better control
+// the amount of memory consumed by SQLite, the way in which
+// that memory is allocated and released, and the policies used to
+// determine exactly which parts of a database file are cached and for
+// how long.
+//
+// The alternative page cache mechanism is an
+// extreme measure that is only needed by the most demanding applications.
+// The built-in page cache is recommended for most uses.
+//
+// ^(The contents of the sqlite3_pcache_methods2 structure are copied to an
+// internal buffer by SQLite within the call to [sqlite3_config]. Hence
+// the application may discard the parameter after the call to
+// [sqlite3_config()] returns.)^
+//
+// [[the xInit() page cache method]]
+// ^(The xInit() method is called once for each effective
+// call to [sqlite3_initialize()])^
+// (usually only once during the lifetime of the process). ^(The xInit()
+// method is passed a copy of the sqlite3_pcache_methods2.pArg value.)^
+// The intent of the xInit() method is to set up global data structures
+// required by the custom page cache implementation.
+// ^(If the xInit() method is NULL, then the
+// built-in default page cache is used instead of the application defined
+// page cache.)^
+//
+// [[the xShutdown() page cache method]]
+// ^The xShutdown() method is called by [sqlite3_shutdown()].
+// It can be used to clean up
+// any outstanding resources before process shutdown, if required.
+// ^The xShutdown() method may be NULL.
+//
+// ^SQLite automatically serializes calls to the xInit method,
+// so the xInit method need not be threadsafe. ^The
+// xShutdown method is only called from [sqlite3_shutdown()] so it does
+// not need to be threadsafe either. All other methods must be threadsafe
+// in multithreaded applications.
+//
+// ^SQLite will never invoke xInit() more than once without an intervening
+// call to xShutdown().
+//
+// [[the xCreate() page cache methods]]
+// ^SQLite invokes the xCreate() method to construct a new cache instance.
+// SQLite will typically create one cache instance for each open database file,
+// though this is not guaranteed. ^The
+// first parameter, szPage, is the size in bytes of the pages that must
+// be allocated by the cache. ^szPage will always a power of two. ^The
+// second parameter szExtra is a number of bytes of extra storage
+// associated with each page cache entry. ^The szExtra parameter will
+// a number less than 250. SQLite will use the
+// extra szExtra bytes on each page to store metadata about the underlying
+// database page on disk. The value passed into szExtra depends
+// on the SQLite version, the target platform, and how SQLite was compiled.
+// ^The third argument to xCreate(), bPurgeable, is true if the cache being
+// created will be used to cache database pages of a file stored on disk, or
+// false if it is used for an in-memory database. The cache implementation
+// does not have to do anything special based with the value of bPurgeable;
+// it is purely advisory. ^On a cache where bPurgeable is false, SQLite will
+// never invoke xUnpin() except to deliberately delete a page.
+// ^In other words, calls to xUnpin() on a cache with bPurgeable set to
+// false will always have the "discard" flag set to true.
+// ^Hence, a cache created with bPurgeable false will
+// never contain any unpinned pages.
+//
+// [[the xCachesize() page cache method]]
+// ^(The xCachesize() method may be called at any time by SQLite to set the
+// suggested maximum cache-size (number of pages stored by) the cache
+// instance passed as the first argument. This is the value configured using
+// the SQLite "[PRAGMA cache_size]" command.)^ As with the bPurgeable
+// parameter, the implementation is not required to do anything with this
+// value; it is advisory only.
+//
+// [[the xPagecount() page cache methods]]
+// The xPagecount() method must return the number of pages currently
+// stored in the cache, both pinned and unpinned.
+//
+// [[the xFetch() page cache methods]]
+// The xFetch() method locates a page in the cache and returns a pointer to
+// an sqlite3_pcache_page object associated with that page, or a NULL pointer.
+// The pBuf element of the returned sqlite3_pcache_page object will be a
+// pointer to a buffer of szPage bytes used to store the content of a
+// single database page. The pExtra element of sqlite3_pcache_page will be
+// a pointer to the szExtra bytes of extra storage that SQLite has requested
+// for each entry in the page cache.
+//
+// The page to be fetched is determined by the key. ^The minimum key value
+// is 1. After it has been retrieved using xFetch, the page is considered
+// to be "pinned".
+//
+// If the requested page is already in the page cache, then the page cache
+// implementation must return a pointer to the page buffer with its content
+// intact. If the requested page is not already in the cache, then the
+// cache implementation should use the value of the createFlag
+// parameter to help it determined what action to take:
+//
+// <table border=1 width=85% align=center>
+// <tr><th> createFlag <th> Behavior when page is not already in cache
+// <tr><td> 0 <td> Do not allocate a new page. Return NULL.
+// <tr><td> 1 <td> Allocate a new page if it easy and convenient to do so.
+// Otherwise return NULL.
+// <tr><td> 2 <td> Make every effort to allocate a new page. Only return
+// NULL if allocating a new page is effectively impossible.
+// </table>
+//
+// ^(SQLite will normally invoke xFetch() with a createFlag of 0 or 1. SQLite
+// will only use a createFlag of 2 after a prior call with a createFlag of 1
+// failed.)^ In between the xFetch() calls, SQLite may
+// attempt to unpin one or more cache pages by spilling the content of
+// pinned pages to disk and synching the operating system disk cache.
+//
+// [[the xUnpin() page cache method]]
+// ^xUnpin() is called by SQLite with a pointer to a currently pinned page
+// as its second argument. If the third parameter, discard, is non-zero,
+// then the page must be evicted from the cache.
+// ^If the discard parameter is
+// zero, then the page may be discarded or retained at the discretion of
+// page cache implementation. ^The page cache implementation
+// may choose to evict unpinned pages at any time.
+//
+// The cache must not perform any reference counting. A single
+// call to xUnpin() unpins the page regardless of the number of prior calls
+// to xFetch().
+//
+// [[the xRekey() page cache methods]]
+// The xRekey() method is used to change the key value associated with the
+// page passed as the second argument. If the cache
+// previously contains an entry associated with newKey, it must be
+// discarded. ^Any prior cache entry associated with newKey is guaranteed not
+// to be pinned.
+//
+// When SQLite calls the xTruncate() method, the cache must discard all
+// existing cache entries with page numbers (keys) greater than or equal
+// to the value of the iLimit parameter passed to xTruncate(). If any
+// of these pages are pinned, they are implicitly unpinned, meaning that
+// they can be safely discarded.
+//
+// [[the xDestroy() page cache method]]
+// ^The xDestroy() method is used to delete a cache allocated by xCreate().
+// All resources associated with the specified cache should be freed. ^After
+// calling the xDestroy() method, SQLite considers the [sqlite3_pcache*]
+// handle invalid, and will not use it with any other sqlite3_pcache_methods2
+// functions.
+//
+// [[the xShrink() page cache method]]
+// ^SQLite invokes the xShrink() method when it wants the page cache to
+// free up as much of heap memory as possible. The page cache implementation
+// is not obligated to free any memory, but well-behaved implementations should
+// do their best.
+type sqlite3_pcache_methods2 = sqlite3_pcache_methods21 /* sqlite3.h:8442:40 */
+
+// This is the obsolete pcache_methods object that has now been replaced
+// by sqlite3_pcache_methods2. This object is not used by SQLite. It is
+// retained in the header file for backwards compatibility only.
+type sqlite3_pcache_methods1 = struct {
+ pArg uintptr
+ xInit uintptr
+ xShutdown uintptr
+ xCreate uintptr
+ xCachesize uintptr
+ xPagecount uintptr
+ xFetch uintptr
+ xUnpin uintptr
+ xRekey uintptr
+ xTruncate uintptr
+ xDestroy uintptr
+} /* sqlite3.h:8465:9 */
+
+// This is the obsolete pcache_methods object that has now been replaced
+// by sqlite3_pcache_methods2. This object is not used by SQLite. It is
+// retained in the header file for backwards compatibility only.
+type sqlite3_pcache_methods = sqlite3_pcache_methods1 /* sqlite3.h:8465:39 */
+
+// CAPI3REF: Database Snapshot
+// KEYWORDS: {snapshot} {sqlite3_snapshot}
+//
+// An instance of the snapshot object records the state of a [WAL mode]
+// database for some specific point in history.
+//
+// In [WAL mode], multiple [database connections] that are open on the
+// same database file can each be reading a different historical version
+// of the database file. When a [database connection] begins a read
+// transaction, that connection sees an unchanging copy of the database
+// as it existed for the point in time when the transaction first started.
+// Subsequent changes to the database from other connections are not seen
+// by the reader until a new read transaction is started.
+//
+// The sqlite3_snapshot object records state information about an historical
+// version of the database file so that it is possible to later open a new read
+// transaction that sees that historical version of the database rather than
+// the most recent version.
+type sqlite3_snapshot1 = struct{ hidden [48]uint8 } /* sqlite3.h:9512:9 */
+
+// CAPI3REF: Database Snapshot
+// KEYWORDS: {snapshot} {sqlite3_snapshot}
+//
+// An instance of the snapshot object records the state of a [WAL mode]
+// database for some specific point in history.
+//
+// In [WAL mode], multiple [database connections] that are open on the
+// same database file can each be reading a different historical version
+// of the database file. When a [database connection] begins a read
+// transaction, that connection sees an unchanging copy of the database
+// as it existed for the point in time when the transaction first started.
+// Subsequent changes to the database from other connections are not seen
+// by the reader until a new read transaction is started.
+//
+// The sqlite3_snapshot object records state information about an historical
+// version of the database file so that it is possible to later open a new read
+// transaction that sees that historical version of the database rather than
+// the most recent version.
+type sqlite3_snapshot = sqlite3_snapshot1 /* sqlite3.h:9514:3 */
+
+// CAPI3REF: Flags for sqlite3_deserialize()
+//
+// The following are allowed values for 6th argument (the F argument) to
+// the [sqlite3_deserialize(D,S,P,N,M,F)] interface.
+//
+// The SQLITE_DESERIALIZE_FREEONCLOSE means that the database serialization
+// in the P argument is held in memory obtained from [sqlite3_malloc64()]
+// and that SQLite should take ownership of this memory and automatically
+// free it when it has finished using it. Without this flag, the caller
+// is responsible for freeing any dynamically allocated memory.
+//
+// The SQLITE_DESERIALIZE_RESIZEABLE flag means that SQLite is allowed to
+// grow the size of the database using calls to [sqlite3_realloc64()]. This
+// flag should only be used if SQLITE_DESERIALIZE_FREEONCLOSE is also used.
+// Without this flag, the deserialized database cannot increase in size beyond
+// the number of bytes specified by the M parameter.
+//
+// The SQLITE_DESERIALIZE_READONLY flag means that the deserialized database
+// should be treated as read-only.
+
+// Undo the hack that converts floating point types to integer for
+// builds on processors without floating point support.
+
+//******* Begin file sqlite3rtree.h ********
+// 2010 August 30
+//
+// The author disclaims copyright to this source code. In place of
+// a legal notice, here is a blessing:
+//
+// May you do good and not evil.
+// May you find forgiveness for yourself and forgive others.
+// May you share freely, never taking more than you give.
+//
+//
+
+type sqlite3_rtree_geometry1 = struct {
+ pContext uintptr
+ nParam int32
+ aParam uintptr
+ pUser uintptr
+ xDelUser uintptr
+} /* sqlite3.h:9839:9 */
+
+// CAPI3REF: Flags for sqlite3_deserialize()
+//
+// The following are allowed values for 6th argument (the F argument) to
+// the [sqlite3_deserialize(D,S,P,N,M,F)] interface.
+//
+// The SQLITE_DESERIALIZE_FREEONCLOSE means that the database serialization
+// in the P argument is held in memory obtained from [sqlite3_malloc64()]
+// and that SQLite should take ownership of this memory and automatically
+// free it when it has finished using it. Without this flag, the caller
+// is responsible for freeing any dynamically allocated memory.
+//
+// The SQLITE_DESERIALIZE_RESIZEABLE flag means that SQLite is allowed to
+// grow the size of the database using calls to [sqlite3_realloc64()]. This
+// flag should only be used if SQLITE_DESERIALIZE_FREEONCLOSE is also used.
+// Without this flag, the deserialized database cannot increase in size beyond
+// the number of bytes specified by the M parameter.
+//
+// The SQLITE_DESERIALIZE_READONLY flag means that the deserialized database
+// should be treated as read-only.
+
+// Undo the hack that converts floating point types to integer for
+// builds on processors without floating point support.
+
+//******* Begin file sqlite3rtree.h ********
+// 2010 August 30
+//
+// The author disclaims copyright to this source code. In place of
+// a legal notice, here is a blessing:
+//
+// May you do good and not evil.
+// May you find forgiveness for yourself and forgive others.
+// May you share freely, never taking more than you give.
+//
+//
+
+type sqlite3_rtree_geometry = sqlite3_rtree_geometry1 /* sqlite3.h:9839:39 */
+type sqlite3_rtree_query_info1 = struct {
+ pContext uintptr
+ nParam int32
+ aParam uintptr
+ pUser uintptr
+ xDelUser uintptr
+ aCoord uintptr
+ anQueue uintptr
+ nCoord int32
+ iLevel int32
+ mxLevel int32
+ iRowid sqlite3_int64
+ rParentScore sqlite3_rtree_dbl
+ eParentWithin int32
+ eWithin int32
+ rScore sqlite3_rtree_dbl
+ apSqlParam uintptr
+ _ [4]byte
+} /* sqlite3.h:9840:9 */
+
+type sqlite3_rtree_query_info = sqlite3_rtree_query_info1 /* sqlite3.h:9840:41 */
+
+// The double-precision datatype used by RTree depends on the
+// SQLITE_RTREE_INT_ONLY compile-time option.
+type sqlite3_rtree_dbl = float64 /* sqlite3.h:9848:18 */
+
+// Allowed values for sqlite3_rtree_query.eWithin and .eParentWithin.
+
+//******* End of sqlite3rtree.h ********
+//******* Begin file sqlite3session.h ********
+
+//******* End of sqlite3session.h ********
+//******* Begin file fts5.h ********
+// 2014 May 31
+//
+// The author disclaims copyright to this source code. In place of
+// a legal notice, here is a blessing:
+//
+// May you do good and not evil.
+// May you find forgiveness for yourself and forgive others.
+// May you share freely, never taking more than you give.
+//
+//
+//
+// Interfaces to extend FTS5. Using the interfaces defined in this file,
+// FTS5 may be extended with:
+//
+// * custom tokenizers, and
+// * custom auxiliary functions.
+
+// ************************************************************************
+//
+// CUSTOM AUXILIARY FUNCTIONS
+//
+// Virtual table implementations may overload SQL functions by implementing
+// the sqlite3_module.xFindFunction() method.
+
+type Fts5ExtensionApi1 = struct {
+ iVersion int32
+ xUserData uintptr
+ xColumnCount uintptr
+ xRowCount uintptr
+ xColumnTotalSize uintptr
+ xTokenize uintptr
+ xPhraseCount uintptr
+ xPhraseSize uintptr
+ xInstCount uintptr
+ xInst uintptr
+ xRowid uintptr
+ xColumnText uintptr
+ xColumnSize uintptr
+ xQueryPhrase uintptr
+ xSetAuxdata uintptr
+ xGetAuxdata uintptr
+ xPhraseFirst uintptr
+ xPhraseNext uintptr
+ xPhraseFirstColumn uintptr
+ xPhraseNextColumn uintptr
+} /* sqlite3.h:11634:9 */
+
+// Allowed values for sqlite3_rtree_query.eWithin and .eParentWithin.
+
+//******* End of sqlite3rtree.h ********
+//******* Begin file sqlite3session.h ********
+
+//******* End of sqlite3session.h ********
+//******* Begin file fts5.h ********
+// 2014 May 31
+//
+// The author disclaims copyright to this source code. In place of
+// a legal notice, here is a blessing:
+//
+// May you do good and not evil.
+// May you find forgiveness for yourself and forgive others.
+// May you share freely, never taking more than you give.
+//
+//
+//
+// Interfaces to extend FTS5. Using the interfaces defined in this file,
+// FTS5 may be extended with:
+//
+// * custom tokenizers, and
+// * custom auxiliary functions.
+
+// ************************************************************************
+//
+// CUSTOM AUXILIARY FUNCTIONS
+//
+// Virtual table implementations may overload SQL functions by implementing
+// the sqlite3_module.xFindFunction() method.
+
+type Fts5ExtensionApi = Fts5ExtensionApi1 /* sqlite3.h:11634:33 */
+type Fts5PhraseIter1 = struct {
+ a uintptr
+ b uintptr
+} /* sqlite3.h:11636:9 */
+
+type Fts5PhraseIter = Fts5PhraseIter1 /* sqlite3.h:11636:31 */
+
+type fts5_extension_function = uintptr /* sqlite3.h:11638:14 */
+type fts5_tokenizer1 = struct {
+ xCreate uintptr
+ xDelete uintptr
+ xTokenize uintptr
+} /* sqlite3.h:12097:9 */
+
+type fts5_tokenizer = fts5_tokenizer1 /* sqlite3.h:12097:31 */
+
+// Flags that may be passed as the third argument to xTokenize()
+
+// Flags that may be passed by the tokenizer implementation back to FTS5
+// as the third argument to the supplied xToken callback.
+
+//
+// END OF CUSTOM TOKENIZERS
+//
+
+// ************************************************************************
+//
+// FTS5 EXTENSION REGISTRATION API
+type fts5_api1 = struct {
+ iVersion int32
+ xCreateTokenizer uintptr
+ xFindTokenizer uintptr
+ xCreateFunction uintptr
+} /* sqlite3.h:12133:9 */
+
+// Flags that may be passed as the third argument to xTokenize()
+
+// Flags that may be passed by the tokenizer implementation back to FTS5
+// as the third argument to the supplied xToken callback.
+
+//
+// END OF CUSTOM TOKENIZERS
+//
+
+// ************************************************************************
+//
+// FTS5 EXTENSION REGISTRATION API
+type fts5_api = fts5_api1 /* sqlite3.h:12133:25 */
+
+// The tag name of this struct is _G_fpos_t to preserve historic
+// C++ mangled names for functions taking fpos_t arguments.
+// That name should not be used in new code.
+type _G_fpos_t = struct {
+ __pos int32
+ __state struct {
+ __count int32
+ __value struct{ __wch uint32 }
+ }
+} /* __fpos_t.h:10:9 */
+
+// bits/types.h -- definitions of __*_t types underlying *_t types.
+// Copyright (C) 2002-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Never include this file directly; use <sys/types.h> instead.
+
+// The tag name of this struct is _G_fpos64_t to preserve historic
+// C++ mangled names for functions taking fpos_t and/or fpos64_t
+// arguments. That name should not be used in new code.
+type _G_fpos64_t = struct {
+ __pos int64
+ __state struct {
+ __count int32
+ __value struct{ __wch uint32 }
+ }
+} /* __fpos64_t.h:10:9 */
+
+type _IO_FILE = struct {
+ _flags int32
+ _IO_read_ptr uintptr
+ _IO_read_end uintptr
+ _IO_read_base uintptr
+ _IO_write_base uintptr
+ _IO_write_ptr uintptr
+ _IO_write_end uintptr
+ _IO_buf_base uintptr
+ _IO_buf_end uintptr
+ _IO_save_base uintptr
+ _IO_backup_base uintptr
+ _IO_save_end uintptr
+ _markers uintptr
+ _chain uintptr
+ _fileno int32
+ _flags2 int32
+ _old_offset int32
+ _cur_column uint16
+ _vtable_offset int8
+ _shortbuf [1]int8
+ _lock uintptr
+ _ [4]byte
+ _offset int64
+ _codecvt uintptr
+ _wide_data uintptr
+ _freeres_list uintptr
+ _freeres_buf uintptr
+ __pad5 size_t
+ _mode int32
+ _unused2 [40]int8
+} /* __FILE.h:4:1 */
+
+// The opaque type of streams. This is the definition used elsewhere.
+type FILE = _IO_FILE /* FILE.h:7:25 */
+
+// These macros are used by bits/stdio.h and internal headers.
+
+// Many more flag bits are defined internally.
+
+// Copyright (C) 1989-2018 Free Software Foundation, Inc.
+//
+//This file is part of GCC.
+//
+//GCC is free software; you can redistribute it and/or modify
+//it under the terms of the GNU General Public License as published by
+//the Free Software Foundation; either version 3, or (at your option)
+//any later version.
+//
+//GCC is distributed in the hope that it will be useful,
+//but WITHOUT ANY WARRANTY; without even the implied warranty of
+//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//GNU General Public License for more details.
+//
+//Under Section 7 of GPL version 3, you are granted additional
+//permissions described in the GCC Runtime Library Exception, version
+//3.1, as published by the Free Software Foundation.
+//
+//You should have received a copy of the GNU General Public License and
+//a copy of the GCC Runtime Library Exception along with this program;
+//see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+//<http://www.gnu.org/licenses/>.
+
+// ISO C Standard: 7.15 Variable arguments <stdarg.h>
+
+type off_t = int64 /* stdio.h:65:19 */
+type off64_t = int64 /* stdio.h:70:19 */
+
+type ssize_t = int32 /* stdio.h:77:19 */
+
+// The type of the second argument to `fgetpos' and `fsetpos'.
+type fpos_t = _G_fpos64_t /* stdio.h:86:20 */
+type fpos64_t = _G_fpos64_t /* stdio.h:89:20 */
+
+// If we are compiling with optimizing read this file. It contains
+// several optimizing inline functions and macros.
+
+// Copyright (C) 1991-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// POSIX Standard: 2.10 Symbolic Constants <unistd.h>
+
+// Copyright (C) 1991-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// These may be used to determine what facilities are present at compile time.
+// Their values can be obtained at run time from `sysconf'.
+
+// POSIX Standard approved as ISO/IEC 9945-1 as of September 2008.
+
+// These are not #ifdef __USE_POSIX2 because they are
+// in the theoretically application-owned namespace.
+
+// The utilities on GNU systems also correspond to this version.
+
+// The utilities on GNU systems also correspond to this version.
+
+// This symbol was required until the 2001 edition of POSIX.
+
+// If defined, the implementation supports the
+// C Language Bindings Option.
+
+// If defined, the implementation supports the
+// C Language Development Utilities Option.
+
+// If defined, the implementation supports the
+// Software Development Utilities Option.
+
+// If defined, the implementation supports the
+// creation of locales with the localedef utility.
+
+// X/Open version number to which the library conforms. It is selectable.
+
+// Commands and utilities from XPG4 are available.
+
+// We are compatible with the old published standards as well.
+
+// The X/Open Unix extensions are available.
+
+// The enhanced internationalization capabilities according to XPG4.2
+// are present.
+
+// The legacy interfaces are also available.
+
+// Get values of POSIX options:
+//
+// If these symbols are defined, the corresponding features are
+// always available. If not, they may be available sometimes.
+// The current values can be obtained with `sysconf'.
+//
+// _POSIX_JOB_CONTROL Job control is supported.
+// _POSIX_SAVED_IDS Processes have a saved set-user-ID
+// and a saved set-group-ID.
+// _POSIX_REALTIME_SIGNALS Real-time, queued signals are supported.
+// _POSIX_PRIORITY_SCHEDULING Priority scheduling is supported.
+// _POSIX_TIMERS POSIX.4 clocks and timers are supported.
+// _POSIX_ASYNCHRONOUS_IO Asynchronous I/O is supported.
+// _POSIX_PRIORITIZED_IO Prioritized asynchronous I/O is supported.
+// _POSIX_SYNCHRONIZED_IO Synchronizing file data is supported.
+// _POSIX_FSYNC The fsync function is present.
+// _POSIX_MAPPED_FILES Mapping of files to memory is supported.
+// _POSIX_MEMLOCK Locking of all memory is supported.
+// _POSIX_MEMLOCK_RANGE Locking of ranges of memory is supported.
+// _POSIX_MEMORY_PROTECTION Setting of memory protections is supported.
+// _POSIX_MESSAGE_PASSING POSIX.4 message queues are supported.
+// _POSIX_SEMAPHORES POSIX.4 counting semaphores are supported.
+// _POSIX_SHARED_MEMORY_OBJECTS POSIX.4 shared memory objects are supported.
+// _POSIX_THREADS POSIX.1c pthreads are supported.
+// _POSIX_THREAD_ATTR_STACKADDR Thread stack address attribute option supported.
+// _POSIX_THREAD_ATTR_STACKSIZE Thread stack size attribute option supported.
+// _POSIX_THREAD_SAFE_FUNCTIONS Thread-safe functions are supported.
+// _POSIX_THREAD_PRIORITY_SCHEDULING
+// POSIX.1c thread execution scheduling supported.
+// _POSIX_THREAD_PRIO_INHERIT Thread priority inheritance option supported.
+// _POSIX_THREAD_PRIO_PROTECT Thread priority protection option supported.
+// _POSIX_THREAD_PROCESS_SHARED Process-shared synchronization supported.
+// _POSIX_PII Protocol-independent interfaces are supported.
+// _POSIX_PII_XTI XTI protocol-indep. interfaces are supported.
+// _POSIX_PII_SOCKET Socket protocol-indep. interfaces are supported.
+// _POSIX_PII_INTERNET Internet family of protocols supported.
+// _POSIX_PII_INTERNET_STREAM Connection-mode Internet protocol supported.
+// _POSIX_PII_INTERNET_DGRAM Connectionless Internet protocol supported.
+// _POSIX_PII_OSI ISO/OSI family of protocols supported.
+// _POSIX_PII_OSI_COTS Connection-mode ISO/OSI service supported.
+// _POSIX_PII_OSI_CLTS Connectionless ISO/OSI service supported.
+// _POSIX_POLL Implementation supports `poll' function.
+// _POSIX_SELECT Implementation supports `select' and `pselect'.
+//
+// _XOPEN_REALTIME X/Open realtime support is available.
+// _XOPEN_REALTIME_THREADS X/Open realtime thread support is available.
+// _XOPEN_SHM Shared memory interface according to XPG4.2.
+//
+// _XBS5_ILP32_OFF32 Implementation provides environment with 32-bit
+// int, long, pointer, and off_t types.
+// _XBS5_ILP32_OFFBIG Implementation provides environment with 32-bit
+// int, long, and pointer and off_t with at least
+// 64 bits.
+// _XBS5_LP64_OFF64 Implementation provides environment with 32-bit
+// int, and 64-bit long, pointer, and off_t types.
+// _XBS5_LPBIG_OFFBIG Implementation provides environment with at
+// least 32 bits int and long, pointer, and off_t
+// with at least 64 bits.
+//
+// If any of these symbols is defined as -1, the corresponding option is not
+// true for any file. If any is defined as other than -1, the corresponding
+// option is true for all files. If a symbol is not defined at all, the value
+// for a specific file can be obtained from `pathconf' and `fpathconf'.
+//
+// _POSIX_CHOWN_RESTRICTED Only the super user can use `chown' to change
+// the owner of a file. `chown' can only be used
+// to change the group ID of a file to a group of
+// which the calling process is a member.
+// _POSIX_NO_TRUNC Pathname components longer than
+// NAME_MAX generate an error.
+// _POSIX_VDISABLE If defined, if the value of an element of the
+// `c_cc' member of `struct termios' is
+// _POSIX_VDISABLE, no character will have the
+// effect associated with that element.
+// _POSIX_SYNC_IO Synchronous I/O may be performed.
+// _POSIX_ASYNC_IO Asynchronous I/O may be performed.
+// _POSIX_PRIO_IO Prioritized Asynchronous I/O may be performed.
+//
+// Support for the Large File Support interface is not generally available.
+// If it is available the following constants are defined to one.
+// _LFS64_LARGEFILE Low-level I/O supports large files.
+// _LFS64_STDIO Standard I/O supports large files.
+//
+
+// Define POSIX options for Linux.
+// Copyright (C) 1996-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation; either version 2.1 of the
+// License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; see the file COPYING.LIB. If
+// not, see <http://www.gnu.org/licenses/>.
+
+// Job control is supported.
+
+// Processes have a saved set-user-ID and a saved set-group-ID.
+
+// Priority scheduling is supported.
+
+// Synchronizing file data is supported.
+
+// The fsync function is present.
+
+// Mapping of files to memory is supported.
+
+// Locking of all memory is supported.
+
+// Locking of ranges of memory is supported.
+
+// Setting of memory protections is supported.
+
+// Some filesystems allow all users to change file ownership.
+
+// `c_cc' member of 'struct termios' structure can be disabled by
+// using the value _POSIX_VDISABLE.
+
+// Filenames are not silently truncated.
+
+// X/Open realtime support is available.
+
+// X/Open thread realtime support is available.
+
+// XPG4.2 shared memory is supported.
+
+// Tell we have POSIX threads.
+
+// We have the reentrant functions described in POSIX.
+
+// We provide priority scheduling for threads.
+
+// We support user-defined stack sizes.
+
+// We support user-defined stacks.
+
+// We support priority inheritence.
+
+// We support priority protection, though only for non-robust
+// mutexes.
+
+// We support priority inheritence for robust mutexes.
+
+// We do not support priority protection for robust mutexes.
+
+// We support POSIX.1b semaphores.
+
+// Real-time signals are supported.
+
+// We support asynchronous I/O.
+// Alternative name for Unix98.
+// Support for prioritization is also available.
+
+// The LFS support in asynchronous I/O is also available.
+
+// The rest of the LFS is also available.
+
+// POSIX shared memory objects are implemented.
+
+// CPU-time clocks support needs to be checked at runtime.
+
+// Clock support in threads must be also checked at runtime.
+
+// GNU libc provides regular expression handling.
+
+// Reader/Writer locks are available.
+
+// We have a POSIX shell.
+
+// We support the Timeouts option.
+
+// We support spinlocks.
+
+// The `spawn' function family is supported.
+
+// We have POSIX timers.
+
+// The barrier functions are available.
+
+// POSIX message queues are available.
+
+// Thread process-shared synchronization is supported.
+
+// The monotonic clock might be available.
+
+// The clock selection interfaces are available.
+
+// Advisory information interfaces are available.
+
+// IPv6 support is available.
+
+// Raw socket support is available.
+
+// We have at least one terminal.
+
+// Neither process nor thread sporadic server interfaces is available.
+
+// trace.h is not available.
+
+// Typed memory objects are not available.
+
+// Get the environment definitions from Unix98.
+// Copyright (C) 1999-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Copyright (C) 1999-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// This header should define the following symbols under the described
+// situations. A value `1' means that the model is always supported,
+// `-1' means it is never supported. Undefined means it cannot be
+// statically decided.
+//
+// _POSIX_V7_ILP32_OFF32 32bit int, long, pointers, and off_t type
+// _POSIX_V7_ILP32_OFFBIG 32bit int, long, and pointers and larger off_t type
+//
+// _POSIX_V7_LP64_OFF32 64bit long and pointers and 32bit off_t type
+// _POSIX_V7_LPBIG_OFFBIG 64bit long and pointers and large off_t type
+//
+// The macros _POSIX_V6_ILP32_OFF32, _POSIX_V6_ILP32_OFFBIG,
+// _POSIX_V6_LP64_OFF32, _POSIX_V6_LPBIG_OFFBIG, _XBS5_ILP32_OFF32,
+// _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and _XBS5_LPBIG_OFFBIG were
+// used in previous versions of the Unix standard and are available
+// only for compatibility.
+
+// By default we have 32-bit wide `int', `long int', pointers and `off_t'
+// and all platforms support LFS.
+
+// We optionally provide an environment with the above size but an 64-bit
+// side `off_t'. Therefore we don't define _POSIX_V7_ILP32_OFFBIG.
+
+// We can never provide environments with 64-bit wide pointers.
+
+// CFLAGS.
+
+// Standard file descriptors.
+
+// All functions that are not declared anywhere else.
+
+// bits/types.h -- definitions of __*_t types underlying *_t types.
+// Copyright (C) 2002-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Never include this file directly; use <sys/types.h> instead.
+
+// Copyright (C) 1989-2018 Free Software Foundation, Inc.
+//
+//This file is part of GCC.
+//
+//GCC is free software; you can redistribute it and/or modify
+//it under the terms of the GNU General Public License as published by
+//the Free Software Foundation; either version 3, or (at your option)
+//any later version.
+//
+//GCC is distributed in the hope that it will be useful,
+//but WITHOUT ANY WARRANTY; without even the implied warranty of
+//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//GNU General Public License for more details.
+//
+//Under Section 7 of GPL version 3, you are granted additional
+//permissions described in the GCC Runtime Library Exception, version
+//3.1, as published by the Free Software Foundation.
+//
+//You should have received a copy of the GNU General Public License and
+//a copy of the GCC Runtime Library Exception along with this program;
+//see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+//<http://www.gnu.org/licenses/>.
+
+// ISO C Standard: 7.17 Common definitions <stddef.h>
+
+// Any one of these symbols __need_* means that GNU libc
+// wants us just to define one data type. So don't define
+// the symbols that indicate this file's entire job has been done.
+
+// This avoids lossage on SunOS but only if stdtypes.h comes first.
+// There's no way to win with the other order! Sun lossage.
+
+// On 4.3bsd-net2, make sure ansi.h is included, so we have
+// one less case to deal with in the following.
+// On FreeBSD 5, machine/ansi.h does not exist anymore...
+
+// In 4.3bsd-net2, machine/ansi.h defines these symbols, which are
+// defined if the corresponding type is *not* defined.
+// FreeBSD-2.1 defines _MACHINE_ANSI_H_ instead of _ANSI_H_.
+// NetBSD defines _I386_ANSI_H_ and _X86_64_ANSI_H_ instead of _ANSI_H_
+
+// Sequent's header files use _PTRDIFF_T_ in some conflicting way.
+// Just ignore it.
+
+// On VxWorks, <type/vxTypesBase.h> may have defined macros like
+// _TYPE_size_t which will typedef size_t. fixincludes patched the
+// vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is
+// not defined, and so that defining this macro defines _GCC_SIZE_T.
+// If we find that the macros are still defined at this point, we must
+// invoke them so that the type is defined as expected.
+
+// In case nobody has defined these types, but we aren't running under
+// GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE_TYPE__, and
+// __WCHAR_TYPE__ have reasonable values. This can happen if the
+// parts of GCC is compiled by an older compiler, that actually
+// include gstddef.h, such as collect2.
+
+// Signed type of difference of two pointers.
+
+// Define this type if we are doing the whole job,
+// or if we want this type in particular.
+
+// Unsigned type of `sizeof' something.
+
+// Define this type if we are doing the whole job,
+// or if we want this type in particular.
+
+// Wide character type.
+// Locale-writers should change this as necessary to
+// be big enough to hold unique values not between 0 and 127,
+// and not (wchar_t) -1, for each defined multibyte character.
+
+// Define this type if we are doing the whole job,
+// or if we want this type in particular.
+
+// In 4.3bsd-net2, leave these undefined to indicate that size_t, etc.
+// are already defined.
+// BSD/OS 3.1 and FreeBSD [23].x require the MACHINE_ANSI_H check here.
+// NetBSD 5 requires the I386_ANSI_H and X86_64_ANSI_H checks here.
+
+// A null pointer constant.
+
+// The Single Unix specification says that some more types are
+// available here.
+type gid_t = uint32 /* unistd.h:232:17 */
+
+type uid_t = uint32 /* unistd.h:237:17 */
+
+type useconds_t = uint32 /* unistd.h:255:22 */
+
+type pid_t = int32 /* unistd.h:260:17 */
+
+type intptr_t = int32 /* unistd.h:267:20 */
+
+type socklen_t = uint32 /* unistd.h:274:21 */
+
+// In 4.3bsd-net2, leave these undefined to indicate that size_t, etc.
+// are already defined.
+// BSD/OS 3.1 and FreeBSD [23].x require the MACHINE_ANSI_H check here.
+// NetBSD 5 requires the I386_ANSI_H and X86_64_ANSI_H checks here.
+
+// A null pointer constant.
+
+// XPG requires a few symbols from <sys/wait.h> being defined.
+// Definitions of flag bits for `waitpid' et al.
+// Copyright (C) 1992-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Bits in the third argument to `waitpid'.
+
+// Bits in the fourth argument to `waitid'.
+
+// The following values are used by the `waitid' function.
+
+// The Linux kernel defines these bare, rather than an enum,
+// which causes a conflict if the include order is reversed.
+
+type idtype_t = uint32 /* waitflags.h:57:3 */
+// Definitions of status bits for `wait' et al.
+// Copyright (C) 1992-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Everything extant so far uses these same bits.
+
+// If WIFEXITED(STATUS), the low-order 8 bits of the status.
+
+// If WIFSIGNALED(STATUS), the terminating signal.
+
+// If WIFSTOPPED(STATUS), the signal that stopped the child.
+
+// Nonzero if STATUS indicates normal termination.
+
+// Nonzero if STATUS indicates termination by a signal.
+
+// Nonzero if STATUS indicates the child is stopped.
+
+// Nonzero if STATUS indicates the child continued after a stop. We only
+// define this if <bits/waitflags.h> provides the WCONTINUED flag bit.
+
+// Nonzero if STATUS indicates the child dumped core.
+
+// Macros for constructing status values.
+
+// Define the macros <sys/wait.h> also would define this way.
+
+// _FloatN API tests for enablement.
+// Macros to control TS 18661-3 glibc features.
+// Copyright (C) 2017-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Defined to 1 if the current compiler invocation provides a
+// floating-point type with the IEEE 754 binary128 format, and this glibc
+// includes corresponding *f128 interfaces for it.
+
+// Defined to 1 if __HAVE_FLOAT128 is 1 and the type is ABI-distinct
+// from the default float, double and long double types in this glibc.
+
+// Defined to 1 if the current compiler invocation provides a
+// floating-point type with the right format for _Float64x, and this
+// glibc includes corresponding *f64x interfaces for it.
+
+// Defined to 1 if __HAVE_FLOAT64X is 1 and _Float64x has the format
+// of long double. Otherwise, if __HAVE_FLOAT64X is 1, _Float64x has
+// the format of _Float128, which must be different from that of long
+// double.
+
+// Defined to concatenate the literal suffix to be used with _Float128
+// types, if __HAVE_FLOAT128 is 1.
+// E.g.: #define __f128(x) x##f128.
+
+// Defined to a complex binary128 type if __HAVE_FLOAT128 is 1.
+// E.g.: #define __CFLOAT128 _Complex _Float128.
+
+// Macros to control TS 18661-3 glibc features where the same
+// definitions are appropriate for all platforms.
+// Copyright (C) 2017-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Copyright (C) 1991-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Properties of long double type.
+// Copyright (C) 2016-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// This header is included by <sys/cdefs.h>.
+//
+// If long double is ABI-compatible with double, it should define
+// __NO_LONG_DOUBLE_MATH to 1; otherwise, it should leave
+// __NO_LONG_DOUBLE_MATH undefined.
+//
+// If this build of the GNU C Library supports both long double
+// ABI-compatible with double and some other long double format not
+// ABI-compatible with double, it should define
+// __LONG_DOUBLE_MATH_OPTIONAL to 1; otherwise, it should leave
+// __LONG_DOUBLE_MATH_OPTIONAL undefined.
+//
+// If __NO_LONG_DOUBLE_MATH is already defined, this header must not
+// define anything; this is needed to work with the definition of
+// __NO_LONG_DOUBLE_MATH in nldbl-compat.h.
+
+// In the default version of this header, long double is
+// ABI-compatible with double.
+
+// This header should be included at the bottom of each bits/floatn.h.
+// It defines the following macros for each _FloatN and _FloatNx type,
+// where the same definitions, or definitions based only on the macros
+// in bits/floatn.h, are appropriate for all glibc configurations.
+
+// Defined to 1 if the current compiler invocation provides a
+// floating-point type with the right format for this type, and this
+// glibc includes corresponding *fN or *fNx interfaces for it.
+
+// Defined to 1 if the corresponding __HAVE_<type> macro is 1 and the
+// type is the first with its format in the sequence of (the default
+// choices for) float, double, long double, _Float16, _Float32,
+// _Float64, _Float128, _Float32x, _Float64x, _Float128x for this
+// glibc; that is, if functions present once per floating-point format
+// rather than once per type are present for this type.
+//
+// All configurations supported by glibc have _Float32 the same format
+// as float, _Float64 and _Float32x the same format as double, the
+// _Float64x the same format as either long double or _Float128. No
+// configurations support _Float128x or, as of GCC 7, have compiler
+// support for a type meeting the requirements for _Float128x.
+
+// Defined to 1 if the corresponding _FloatN type is not binary compatible
+// with the corresponding ISO C type in the current compilation unit as
+// opposed to __HAVE_DISTINCT_FLOATN, which indicates the default types built
+// in glibc.
+
+// Defined to 1 if any _FloatN or _FloatNx types that are not
+// ABI-distinct are however distinct types at the C language level (so
+// for the purposes of __builtin_types_compatible_p and _Generic).
+
+// Defined to concatenate the literal suffix to be used with _FloatN
+// or _FloatNx types, if __HAVE_<type> is 1. The corresponding
+// literal suffixes exist since GCC 7, for C only.
+
+// Defined to a complex type if __HAVE_<type> is 1.
+
+// The remaining of this file provides support for older compilers.
+
+type _Float32 = float32 /* floatn-common.h:214:15 */
+
+// If double, long double and _Float64 all have the same set of
+// values, TS 18661-3 requires the usual arithmetic conversions on
+// long double and _Float64 to produce _Float64. For this to be the
+// case when building with a compiler without a distinct _Float64
+// type, _Float64 must be a typedef for long double, not for
+// double.
+
+type _Float64 = float64 /* floatn-common.h:238:21 */
+
+type _Float32x = float64 /* floatn-common.h:268:16 */
+
+// Returned by `div'.
+type div_t = struct {
+ quot int32
+ rem int32
+} /* stdlib.h:62:5 */
+
+// Returned by `ldiv'.
+type ldiv_t = struct {
+ quot int32
+ rem int32
+} /* stdlib.h:70:5 */
+
+// Returned by `lldiv'.
+type lldiv_t = struct {
+ quot int64
+ rem int64
+} /* stdlib.h:80:5 */
+
+// Copyright (C) 1991-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// POSIX Standard: 2.6 Primitive System Data Types <sys/types.h>
+
+// Copyright (C) 1991-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// bits/types.h -- definitions of __*_t types underlying *_t types.
+// Copyright (C) 2002-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Never include this file directly; use <sys/types.h> instead.
+
+type u_char = uint8 /* types.h:33:18 */
+type u_short = uint16 /* types.h:34:19 */
+type u_int = uint32 /* types.h:35:17 */
+type u_long = uint32 /* types.h:36:18 */
+type quad_t = int64 /* types.h:37:18 */
+type u_quad_t = uint64 /* types.h:38:20 */
+type fsid_t = struct{ __val [2]int32 } /* types.h:39:18 */
+type loff_t = int64 /* types.h:42:18 */
+
+type ino_t = uint64 /* types.h:49:19 */
+type ino64_t = uint64 /* types.h:54:19 */
+
+type dev_t = uint64 /* types.h:59:17 */
+
+type mode_t = uint32 /* types.h:69:18 */
+
+type nlink_t = uint32 /* types.h:74:19 */
+
+type id_t = uint32 /* types.h:103:16 */
+
+type daddr_t = int32 /* types.h:114:19 */
+type caddr_t = uintptr /* types.h:115:19 */
+
+type key_t = int32 /* types.h:121:17 */
+
+// bits/types.h -- definitions of __*_t types underlying *_t types.
+// Copyright (C) 2002-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Never include this file directly; use <sys/types.h> instead.
+
+// Returned by `clock'.
+type clock_t = int32 /* clock_t.h:7:19 */
+
+// bits/types.h -- definitions of __*_t types underlying *_t types.
+// Copyright (C) 2002-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Never include this file directly; use <sys/types.h> instead.
+
+// Clock ID used in clock and timer functions.
+type clockid_t = int32 /* clockid_t.h:7:21 */
+
+// bits/types.h -- definitions of __*_t types underlying *_t types.
+// Copyright (C) 2002-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Never include this file directly; use <sys/types.h> instead.
+
+// Returned by `time'.
+type time_t = int32 /* time_t.h:7:18 */
+
+// bits/types.h -- definitions of __*_t types underlying *_t types.
+// Copyright (C) 2002-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Never include this file directly; use <sys/types.h> instead.
+
+// Timer ID returned by `timer_create'.
+type timer_t = uintptr /* timer_t.h:7:19 */
+
+// Copyright (C) 1989-2018 Free Software Foundation, Inc.
+//
+//This file is part of GCC.
+//
+//GCC is free software; you can redistribute it and/or modify
+//it under the terms of the GNU General Public License as published by
+//the Free Software Foundation; either version 3, or (at your option)
+//any later version.
+//
+//GCC is distributed in the hope that it will be useful,
+//but WITHOUT ANY WARRANTY; without even the implied warranty of
+//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//GNU General Public License for more details.
+//
+//Under Section 7 of GPL version 3, you are granted additional
+//permissions described in the GCC Runtime Library Exception, version
+//3.1, as published by the Free Software Foundation.
+//
+//You should have received a copy of the GNU General Public License and
+//a copy of the GCC Runtime Library Exception along with this program;
+//see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+//<http://www.gnu.org/licenses/>.
+
+// ISO C Standard: 7.17 Common definitions <stddef.h>
+
+// Any one of these symbols __need_* means that GNU libc
+// wants us just to define one data type. So don't define
+// the symbols that indicate this file's entire job has been done.
+
+// This avoids lossage on SunOS but only if stdtypes.h comes first.
+// There's no way to win with the other order! Sun lossage.
+
+// On 4.3bsd-net2, make sure ansi.h is included, so we have
+// one less case to deal with in the following.
+// On FreeBSD 5, machine/ansi.h does not exist anymore...
+
+// In 4.3bsd-net2, machine/ansi.h defines these symbols, which are
+// defined if the corresponding type is *not* defined.
+// FreeBSD-2.1 defines _MACHINE_ANSI_H_ instead of _ANSI_H_.
+// NetBSD defines _I386_ANSI_H_ and _X86_64_ANSI_H_ instead of _ANSI_H_
+
+// Sequent's header files use _PTRDIFF_T_ in some conflicting way.
+// Just ignore it.
+
+// On VxWorks, <type/vxTypesBase.h> may have defined macros like
+// _TYPE_size_t which will typedef size_t. fixincludes patched the
+// vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is
+// not defined, and so that defining this macro defines _GCC_SIZE_T.
+// If we find that the macros are still defined at this point, we must
+// invoke them so that the type is defined as expected.
+
+// In case nobody has defined these types, but we aren't running under
+// GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE_TYPE__, and
+// __WCHAR_TYPE__ have reasonable values. This can happen if the
+// parts of GCC is compiled by an older compiler, that actually
+// include gstddef.h, such as collect2.
+
+// Signed type of difference of two pointers.
+
+// Define this type if we are doing the whole job,
+// or if we want this type in particular.
+
+// Unsigned type of `sizeof' something.
+
+// Define this type if we are doing the whole job,
+// or if we want this type in particular.
+
+// Wide character type.
+// Locale-writers should change this as necessary to
+// be big enough to hold unique values not between 0 and 127,
+// and not (wchar_t) -1, for each defined multibyte character.
+
+// Define this type if we are doing the whole job,
+// or if we want this type in particular.
+
+// In 4.3bsd-net2, leave these undefined to indicate that size_t, etc.
+// are already defined.
+// BSD/OS 3.1 and FreeBSD [23].x require the MACHINE_ANSI_H check here.
+// NetBSD 5 requires the I386_ANSI_H and X86_64_ANSI_H checks here.
+
+// A null pointer constant.
+
+// Old compatibility names for C types.
+type ulong = uint32 /* types.h:148:27 */
+type ushort = uint16 /* types.h:149:28 */
+type uint = uint32 /* types.h:150:22 */
+
+// These size-specific names are used by some of the inet code.
+
+// Define intN_t types.
+// Copyright (C) 2017-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// bits/types.h -- definitions of __*_t types underlying *_t types.
+// Copyright (C) 2002-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Never include this file directly; use <sys/types.h> instead.
+
+type int8_t = int8 /* stdint-intn.h:24:18 */
+type int16_t = int16 /* stdint-intn.h:25:19 */
+type int32_t = int32 /* stdint-intn.h:26:19 */
+type int64_t = int64 /* stdint-intn.h:27:19 */
+
+// These were defined by ISO C without the first `_'.
+type u_int8_t = uint8 /* types.h:160:23 */
+type u_int16_t = uint16 /* types.h:161:28 */
+type u_int32_t = uint32 /* types.h:162:22 */
+type u_int64_t = uint64 /* types.h:166:46 */
+
+type register_t = int32 /* types.h:169:13 */
+
+// A set of signals to be blocked, unblocked, or waited for.
+type sigset_t = struct{ __val [32]uint32 } /* sigset_t.h:7:20 */
+
+// Get definition of timer specification structures.
+
+// bits/types.h -- definitions of __*_t types underlying *_t types.
+// Copyright (C) 2002-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Never include this file directly; use <sys/types.h> instead.
+
+// A time value that is accurate to the nearest
+// microsecond but also has a range of years.
+type timeval = struct {
+ tv_sec int32
+ tv_usec int32
+} /* struct_timeval.h:8:1 */
+
+// NB: Include guard matches what <linux/time.h> uses.
+
+// bits/types.h -- definitions of __*_t types underlying *_t types.
+// Copyright (C) 2002-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Never include this file directly; use <sys/types.h> instead.
+
+// POSIX.1b structure for a time value. This is like a `struct timeval' but
+// has nanoseconds instead of microseconds.
+type timespec = struct {
+ tv_sec int32
+ tv_nsec int32
+} /* struct_timespec.h:9:1 */
+
+type suseconds_t = int32 /* select.h:43:23 */
+
+// Some versions of <linux/posix_types.h> define this macros.
+// It's easier to assume 8-bit bytes than to get CHAR_BIT.
+
+// fd_set for select and pselect.
+type fd_set = struct{ __fds_bits [32]int32 } /* select.h:70:5 */
+
+// Maximum number of file descriptors in `fd_set'.
+
+// Sometimes the fd_set member is assumed to have this type.
+type fd_mask = int32 /* select.h:77:19 */
+
+// Define some inlines helping to catch common problems.
+
+type blksize_t = int32 /* types.h:202:21 */
+
+// Types from the Large File Support interface.
+type blkcnt_t = int64 /* types.h:222:22 */ // Type to count number of disk blocks.
+type fsblkcnt_t = uint64 /* types.h:226:24 */ // Type to count file system blocks.
+type fsfilcnt_t = uint64 /* types.h:230:24 */ // Type to count file system inodes.
+
+type blkcnt64_t = int64 /* types.h:236:22 */ // Type to count number of disk blocks.
+type fsblkcnt64_t = uint64 /* types.h:237:24 */ // Type to count file system blocks.
+type fsfilcnt64_t = uint64 /* types.h:238:24 */ // Type to count file system inodes.
+
+// Now add the thread types.
+// Declaration of common pthread types for all architectures.
+// Copyright (C) 2017-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// For internal mutex and condition variable definitions.
+// Common threading primitives definitions for both POSIX and C11.
+// Copyright (C) 2017-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Arch-specific definitions. Each architecture must define the following
+// macros to define the expected sizes of pthread data types:
+//
+// __SIZEOF_PTHREAD_ATTR_T - size of pthread_attr_t.
+// __SIZEOF_PTHREAD_MUTEX_T - size of pthread_mutex_t.
+// __SIZEOF_PTHREAD_MUTEXATTR_T - size of pthread_mutexattr_t.
+// __SIZEOF_PTHREAD_COND_T - size of pthread_cond_t.
+// __SIZEOF_PTHREAD_CONDATTR_T - size of pthread_condattr_t.
+// __SIZEOF_PTHREAD_RWLOCK_T - size of pthread_rwlock_t.
+// __SIZEOF_PTHREAD_RWLOCKATTR_T - size of pthread_rwlockattr_t.
+// __SIZEOF_PTHREAD_BARRIER_T - size of pthread_barrier_t.
+// __SIZEOF_PTHREAD_BARRIERATTR_T - size of pthread_barrierattr_t.
+//
+// Also, the following macros must be define for internal pthread_mutex_t
+// struct definitions (struct __pthread_mutex_s):
+//
+// __PTHREAD_COMPAT_PADDING_MID - any additional members after 'kind'
+// and before '__spin' (for 64 bits) or
+// '__nusers' (for 32 bits).
+// __PTHREAD_COMPAT_PADDING_END - any additional members at the end of
+// the internal structure.
+// __PTHREAD_MUTEX_LOCK_ELISION - 1 if the architecture supports lock
+// elision or 0 otherwise.
+// __PTHREAD_MUTEX_NUSERS_AFTER_KIND - control where to put __nusers. The
+// preferred value for new architectures
+// is 0.
+// __PTHREAD_MUTEX_USE_UNION - control whether internal __spins and
+// __list will be place inside a union for
+// linuxthreads compatibility.
+// The preferred value for new architectures
+// is 0.
+//
+// For a new port the preferred values for the required defines are:
+//
+// #define __PTHREAD_COMPAT_PADDING_MID
+// #define __PTHREAD_COMPAT_PADDING_END
+// #define __PTHREAD_MUTEX_LOCK_ELISION 0
+// #define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 0
+// #define __PTHREAD_MUTEX_USE_UNION 0
+//
+// __PTHREAD_MUTEX_LOCK_ELISION can be set to 1 if the hardware plans to
+// eventually support lock elision using transactional memory.
+//
+// The additional macro defines any constraint for the lock alignment
+// inside the thread structures:
+//
+// __LOCK_ALIGNMENT - for internal lock/futex usage.
+//
+// Same idea but for the once locking primitive:
+//
+// __ONCE_ALIGNMENT - for pthread_once_t/once_flag definition.
+//
+// And finally the internal pthread_rwlock_t (struct __pthread_rwlock_arch_t)
+// must be defined.
+//
+// Copyright (C) 2002-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library. If not, see
+// <http://www.gnu.org/licenses/>.
+
+// Copyright (C) 1992-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Data structure for mutex handling.
+
+type __pthread_rwlock_arch_t = struct {
+ __readers uint32
+ __writers uint32
+ __wrphase_futex uint32
+ __writers_futex uint32
+ __pad3 uint32
+ __pad4 uint32
+ __flags uint8
+ __shared uint8
+ __pad1 uint8
+ __pad2 uint8
+ __cur_writer int32
+} /* pthreadtypes-arch.h:43:1 */
+
+// Common definition of pthread_mutex_t.
+
+type __pthread_internal_slist = struct{ __next uintptr } /* thread-shared-types.h:88:9 */
+
+// Lock elision support.
+// Mutex __spins initializer used by PTHREAD_MUTEX_INITIALIZER.
+
+type __pthread_mutex_s = struct {
+ __lock int32
+ __count uint32
+ __owner int32
+ __kind int32
+ __nusers uint32
+ __20 struct{ __spins int32 }
+} /* thread-shared-types.h:118:1 */
+
+// Common definition of pthread_cond_t.
+
+type __pthread_cond_s = struct {
+ __0 struct{ __wseq uint64 }
+ __8 struct{ __g1_start uint64 }
+ __g_refs [2]uint32
+ __g_size [2]uint32
+ __g1_orig_size uint32
+ __wrefs uint32
+ __g_signals [2]uint32
+} /* thread-shared-types.h:171:1 */
+
+// Thread identifiers. The structure of the attribute type is not
+// exposed on purpose.
+type pthread_t = uint32 /* pthreadtypes.h:27:27 */
+
+// Data structures for mutex handling. The structure of the attribute
+// type is not exposed on purpose.
+type pthread_mutexattr_t = struct {
+ _ [0]uint32
+ __size [4]int8
+} /* pthreadtypes.h:36:3 */
+
+// Data structure for condition variable handling. The structure of
+// the attribute type is not exposed on purpose.
+type pthread_condattr_t = struct {
+ _ [0]uint32
+ __size [4]int8
+} /* pthreadtypes.h:45:3 */
+
+// Keys for thread-specific data
+type pthread_key_t = uint32 /* pthreadtypes.h:49:22 */
+
+// Once-only execution
+type pthread_once_t = int32 /* pthreadtypes.h:53:30 */
+
+type pthread_attr_t1 = struct {
+ _ [0]uint32
+ __size [36]int8
+} /* pthreadtypes.h:56:1 */
+
+type pthread_attr_t = pthread_attr_t1 /* pthreadtypes.h:62:30 */
+
+type pthread_mutex_t = struct{ __data __pthread_mutex_s } /* pthreadtypes.h:72:3 */
+
+type pthread_cond_t = struct{ __data __pthread_cond_s } /* pthreadtypes.h:80:3 */
+
+// Data structure for reader-writer lock variable handling. The
+// structure of the attribute type is deliberately not exposed.
+type pthread_rwlock_t = struct{ __data __pthread_rwlock_arch_t } /* pthreadtypes.h:91:3 */
+
+type pthread_rwlockattr_t = struct {
+ _ [0]uint32
+ __size [8]int8
+} /* pthreadtypes.h:97:3 */
+
+// POSIX spinlock data type.
+type pthread_spinlock_t = int32 /* pthreadtypes.h:103:22 */
+
+// POSIX barriers data type. The structure of the type is
+// deliberately not exposed.
+type pthread_barrier_t = struct {
+ _ [0]uint32
+ __size [20]int8
+} /* pthreadtypes.h:112:3 */
+
+type pthread_barrierattr_t = struct {
+ _ [0]uint32
+ __size [4]int8
+} /* pthreadtypes.h:118:3 */
+
+// Reentrant versions of the `random' family of functions.
+// These functions all use the following data structure to contain
+// state, rather than global state variables.
+
+type random_data = struct {
+ fptr uintptr
+ rptr uintptr
+ state uintptr
+ rand_type int32
+ rand_deg int32
+ rand_sep int32
+ end_ptr uintptr
+} /* stdlib.h:423:1 */
+
+// Data structure for communication with thread safe versions. This
+// type is to be regarded as opaque. It's only exported because users
+// have to allocate objects of this type.
+type drand48_data = struct {
+ __x [3]uint16
+ __old_x [3]uint16
+ __c uint16
+ __init uint16
+ __a uint64
+} /* stdlib.h:490:1 */
+
+// POSIX.1-2008 extended locale interface (see locale.h).
+// Definition of locale_t.
+// Copyright (C) 2017-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// Definition of struct __locale_struct and __locale_t.
+// Copyright (C) 1997-2018 Free Software Foundation, Inc.
+// This file is part of the GNU C Library.
+// Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+//
+// The GNU C Library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// The GNU C Library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with the GNU C Library; if not, see
+// <http://www.gnu.org/licenses/>.
+
+// POSIX.1-2008: the locale_t type, representing a locale context
+// (implementation-namespace version). This type should be treated
+// as opaque by applications; some details are exposed for the sake of
+// efficiency in e.g. ctype functions.
+
+type __locale_struct = struct {
+ __locales [13]uintptr
+ __ctype_b uintptr
+ __ctype_tolower uintptr
+ __ctype_toupper uintptr
+ __names [13]uintptr
+} /* __locale_t.h:28:1 */
+
+type locale_t = uintptr /* locale_t.h:24:20 */
+
+// The suffix to append to the child command lines, if any
+
+// The directory separator character(s)
+
+// Mark a parameter as unused to suppress compiler warnings
+
+// Global data
+type Global = struct {
+ argv0 uintptr
+ zVfs uintptr
+ zDbFile uintptr
+ db uintptr
+ zErrLog uintptr
+ pErrLog uintptr
+ zLog uintptr
+ pLog uintptr
+ zName [32]int8
+ taskId int32
+ iTrace int32
+ bSqlTrace int32
+ bIgnoreSqlErrors int32
+ nError int32
+ nTest int32
+ iTimeout int32
+ bSync int32
+} /* mptest.c:72:8 */
+
+// The suffix to append to the child command lines, if any
+
+// The directory separator character(s)
+
+// Mark a parameter as unused to suppress compiler warnings
+
+// Global data
+var g Global /* mptest.c:90:3: */
+
+// Default timeout
+
+// Print a message adding zPrefix[] to the beginning of every line.
+func printWithPrefix(tls *libc.TLS, pOut uintptr, zPrefix uintptr, zMsg uintptr) { /* mptest.c:98:13: */
+ bp := tls.Alloc(24)
+ defer tls.Free(24)
+
+ for (zMsg != 0) && (*(*int8)(unsafe.Pointer(zMsg + uintptr(0))) != 0) {
+ var i int32
+ for i = 0; ((*(*int8)(unsafe.Pointer(zMsg + uintptr(i))) != 0) && (int32(*(*int8)(unsafe.Pointer(zMsg + uintptr(i)))) != '\n')) && (int32(*(*int8)(unsafe.Pointer(zMsg + uintptr(i)))) != '\r'); i++ {
+ }
+ libc.Xfprintf(tls, pOut, ts /* "%s%.*s\n" */, libc.VaList(bp, zPrefix, i, zMsg))
+ zMsg += uintptr(i)
+ for (int32(*(*int8)(unsafe.Pointer(zMsg + uintptr(0)))) == '\n') || (int32(*(*int8)(unsafe.Pointer(zMsg + uintptr(0)))) == '\r') {
+ zMsg++
+ }
+ }
+}
+
+// Compare two pointers to strings, where the pointers might be NULL.
+func safe_strcmp(tls *libc.TLS, a uintptr, b uintptr) int32 { /* mptest.c:111:12: */
+ if a == b {
+ return 0
+ }
+ if a == uintptr(0) {
+ return -1
+ }
+ if b == uintptr(0) {
+ return 1
+ }
+ return libc.Xstrcmp(tls, a, b)
+}
+
+// Return TRUE if string z[] matches glob pattern zGlob[].
+// Return FALSE if the pattern does not match.
+//
+// Globbing rules:
+//
+// '*' Matches any sequence of zero or more characters.
+//
+// '?' Matches exactly one character.
+//
+// [...] Matches one character from the enclosed list of
+// characters.
+//
+// [^...] Matches one character not in the enclosed list.
+//
+// '#' Matches any sequence of one or more digits with an
+// optional + or - sign in front
+func strglob(tls *libc.TLS, zGlob uintptr, z uintptr) int32 { /* mptest.c:136:5: */
+ var c int32
+ var c2 int32
+ var invert int32
+ var seen int32
+
+ for (libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))))) != 0 {
+ if c == '*' {
+ for ((libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))))) == '*') || (c == '?') {
+ if (c == '?') && ((int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) == 0) {
+ return 0
+ }
+ }
+ if c == 0 {
+ return 1
+ } else if c == '[' {
+ for (*(*int8)(unsafe.Pointer(z)) != 0) && (strglob(tls, (zGlob-uintptr(1)), z) != 0) {
+ z++
+ }
+ return (libc.Bool32((int32(*(*int8)(unsafe.Pointer(z)))) != 0))
+ }
+ for (libc.AssignInt32(&c2, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))))) != 0 {
+ for c2 != c {
+ c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))
+ if c2 == 0 {
+ return 0
+ }
+ }
+ if strglob(tls, zGlob, z) != 0 {
+ return 1
+ }
+ }
+ return 0
+ } else if c == '?' {
+ if (int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) == 0 {
+ return 0
+ }
+ } else if c == '[' {
+ var prior_c int32 = 0
+ seen = 0
+ invert = 0
+ c = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))
+ if c == 0 {
+ return 0
+ }
+ c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))
+ if c2 == '^' {
+ invert = 1
+ c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))
+ }
+ if c2 == ']' {
+ if c == ']' {
+ seen = 1
+ }
+ c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))
+ }
+ for (c2 != 0) && (c2 != ']') {
+ if (((c2 == '-') && (int32(*(*int8)(unsafe.Pointer(zGlob + uintptr(0)))) != ']')) && (int32(*(*int8)(unsafe.Pointer(zGlob + uintptr(0)))) != 0)) && (prior_c > 0) {
+ c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))
+ if (c >= prior_c) && (c <= c2) {
+ seen = 1
+ }
+ prior_c = 0
+ } else {
+ if c == c2 {
+ seen = 1
+ }
+ prior_c = c2
+ }
+ c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))
+ }
+ if (c2 == 0) || ((seen ^ invert) == 0) {
+ return 0
+ }
+ } else if c == '#' {
+ if ((int32(*(*int8)(unsafe.Pointer(z + uintptr(0)))) == '-') || (int32(*(*int8)(unsafe.Pointer(z + uintptr(0)))) == '+')) && ((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(1))))))*2))) & int32(_ISdigit)) != 0) {
+ z++
+ }
+ if !((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(0))))))*2))) & int32(_ISdigit)) != 0) {
+ return 0
+ }
+ z++
+ for (int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(0))))))*2))) & int32(_ISdigit)) != 0 {
+ z++
+ }
+ } else {
+ if c != (int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) {
+ return 0
+ }
+ }
+ }
+ return (libc.Bool32(int32(*(*int8)(unsafe.Pointer(z))) == 0))
+}
+
+// Close output stream pOut if it is not stdout or stderr
+func maybeClose(tls *libc.TLS, pOut uintptr) { /* mptest.c:208:13: */
+ if (pOut != libc.Xstdout) && (pOut != libc.Xstderr) {
+ libc.Xfclose(tls, pOut)
+ }
+}
+
+// Print an error message
+func errorMessage(tls *libc.TLS, zFormat uintptr, va uintptr) { /* mptest.c:215:13: */
+ bp := tls.Alloc(38)
+ defer tls.Free(38)
+
+ var ap va_list
+ _ = ap
+ var zMsg uintptr
+ // var zPrefix [30]int8 at bp+8, 30
+
+ ap = va
+ zMsg = sqlite3.Xsqlite3_vmprintf(tls, zFormat, ap)
+ _ = ap
+ sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+8 /* &zPrefix[0] */, ts+8 /* "%s:ERROR: " */, libc.VaList(bp, uintptr(unsafe.Pointer(&g))+32 /* &.zName */))
+ if g.pLog != 0 {
+ printWithPrefix(tls, g.pLog, bp+8 /* &zPrefix[0] */, zMsg)
+ libc.Xfflush(tls, g.pLog)
+ }
+ if (g.pErrLog != 0) && (safe_strcmp(tls, g.zErrLog, g.zLog) != 0) {
+ printWithPrefix(tls, g.pErrLog, bp+8 /* &zPrefix[0] */, zMsg)
+ libc.Xfflush(tls, g.pErrLog)
+ }
+ sqlite3.Xsqlite3_free(tls, zMsg)
+ g.nError++
+}
+
+// Print an error message and then quit.
+func fatalError(tls *libc.TLS, zFormat uintptr, va uintptr) { /* mptest.c:241:13: */
+ bp := tls.Alloc(38)
+ defer tls.Free(38)
+
+ var ap va_list
+ _ = ap
+ var zMsg uintptr
+ // var zPrefix [30]int8 at bp+8, 30
+
+ ap = va
+ zMsg = sqlite3.Xsqlite3_vmprintf(tls, zFormat, ap)
+ _ = ap
+ sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+8 /* &zPrefix[0] */, ts+19 /* "%s:FATAL: " */, libc.VaList(bp, uintptr(unsafe.Pointer(&g))+32 /* &.zName */))
+ if g.pLog != 0 {
+ printWithPrefix(tls, g.pLog, bp+8 /* &zPrefix[0] */, zMsg)
+ libc.Xfflush(tls, g.pLog)
+ maybeClose(tls, g.pLog)
+ }
+ if (g.pErrLog != 0) && (safe_strcmp(tls, g.zErrLog, g.zLog) != 0) {
+ printWithPrefix(tls, g.pErrLog, bp+8 /* &zPrefix[0] */, zMsg)
+ libc.Xfflush(tls, g.pErrLog)
+ maybeClose(tls, g.pErrLog)
+ }
+ sqlite3.Xsqlite3_free(tls, zMsg)
+ if g.db != 0 {
+ var nTry int32 = 0
+ g.iTimeout = 0
+ for (trySql(tls, ts+30 /* "UPDATE client SE..." */, 0) == 5) &&
+ ((libc.PostIncInt32(&nTry, 1)) < 100) {
+ sqlite3.Xsqlite3_sleep(tls, 10)
+ }
+ }
+ sqlite3.Xsqlite3_close(tls, g.db)
+ libc.Xexit(tls, 1)
+}
+
+// Print a log message
+func logMessage(tls *libc.TLS, zFormat uintptr, va uintptr) { /* mptest.c:276:13: */
+ bp := tls.Alloc(38)
+ defer tls.Free(38)
+
+ var ap va_list
+ _ = ap
+ var zMsg uintptr
+ // var zPrefix [30]int8 at bp+8, 30
+
+ ap = va
+ zMsg = sqlite3.Xsqlite3_vmprintf(tls, zFormat, ap)
+ _ = ap
+ sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+8 /* &zPrefix[0] */, ts+60 /* "%s: " */, libc.VaList(bp, uintptr(unsafe.Pointer(&g))+32 /* &.zName */))
+ if g.pLog != 0 {
+ printWithPrefix(tls, g.pLog, bp+8 /* &zPrefix[0] */, zMsg)
+ libc.Xfflush(tls, g.pLog)
+ }
+ sqlite3.Xsqlite3_free(tls, zMsg)
+}
+
+// Return the length of a string omitting trailing whitespace
+func clipLength(tls *libc.TLS, z uintptr) int32 { /* mptest.c:294:12: */
+ var n int32 = int32(libc.Xstrlen(tls, z))
+ for (n > 0) && ((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr((n - 1)))))))*2))) & int32(_ISspace)) != 0) {
+ n--
+ }
+ return n
+}
+
+// Auxiliary SQL function to return the name of the VFS
+func vfsNameFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { /* mptest.c:303:13: */
+ bp := tls.Alloc(4)
+ defer tls.Free(4)
+
+ var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context)
+ *(*uintptr)(unsafe.Pointer(bp /* zVfs */)) = uintptr(0)
+ _ = argc
+ _ = argv
+ sqlite3.Xsqlite3_file_control(tls, db, ts+65 /* "main" */, 12, bp /* &zVfs */)
+ if *(*uintptr)(unsafe.Pointer(bp /* zVfs */)) != 0 {
+ sqlite3.Xsqlite3_result_text(tls, context, *(*uintptr)(unsafe.Pointer(bp /* zVfs */)), -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})))
+ }
+}
+
+// Busy handler with a g.iTimeout-millisecond timeout
+func busyHandler(tls *libc.TLS, pCD uintptr, count int32) int32 { /* mptest.c:321:12: */
+ bp := tls.Alloc(8)
+ defer tls.Free(8)
+
+ _ = pCD
+ if (count * 10) > g.iTimeout {
+ if g.iTimeout > 0 {
+ errorMessage(tls, ts+70 /* "timeout after %d..." */, libc.VaList(bp, g.iTimeout))
+ }
+ return 0
+ }
+ sqlite3.Xsqlite3_sleep(tls, 10)
+ return 1
+}
+
+// SQL Trace callback
+func sqlTraceCallback(tls *libc.TLS, NotUsed1 uintptr, zSql uintptr) { /* mptest.c:334:13: */
+ bp := tls.Alloc(16)
+ defer tls.Free(16)
+
+ _ = NotUsed1
+ logMessage(tls, ts+89 /* "[%.*s]" */, libc.VaList(bp, clipLength(tls, zSql), zSql))
+}
+
+// SQL error log callback
+func sqlErrorCallback(tls *libc.TLS, pArg uintptr, iErrCode int32, zMsg uintptr) { /* mptest.c:342:13: */
+ bp := tls.Alloc(24)
+ defer tls.Free(24)
+
+ _ = pArg
+ if (iErrCode == 1) && (g.bIgnoreSqlErrors != 0) {
+ return
+ }
+ if ((iErrCode & 0xff) == 17) && (g.iTrace < 3) {
+ return
+ }
+ if ((g.iTimeout == 0) && ((iErrCode & 0xff) == 5)) && (g.iTrace < 3) {
+ return
+ }
+ if (iErrCode & 0xff) == 27 {
+ logMessage(tls, ts+96 /* "(info) %s" */, libc.VaList(bp, zMsg))
+ } else {
+ errorMessage(tls, ts+106 /* "(errcode=%d) %s" */, libc.VaList(bp+8, iErrCode, zMsg))
+ }
+}
+
+// Prepare an SQL statement. Issue a fatal error if unable.
+func prepareSql(tls *libc.TLS, zFormat uintptr, va uintptr) uintptr { /* mptest.c:357:21: */
+ bp := tls.Alloc(20)
+ defer tls.Free(20)
+
+ var ap va_list
+ _ = ap
+ var zSql uintptr
+ var rc int32
+ *(*uintptr)(unsafe.Pointer(bp + 16 /* pStmt */)) = uintptr(0)
+ ap = va
+ zSql = sqlite3.Xsqlite3_vmprintf(tls, zFormat, ap)
+ _ = ap
+ rc = sqlite3.Xsqlite3_prepare_v2(tls, g.db, zSql, -1, bp+16 /* &pStmt */, uintptr(0))
+ if rc != 0 {
+ sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16 /* pStmt */)))
+ fatalError(tls, ts+122 /* "%s\n%s\n" */, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, g.db), zSql))
+ }
+ sqlite3.Xsqlite3_free(tls, zSql)
+ return *(*uintptr)(unsafe.Pointer(bp + 16 /* pStmt */))
+}
+
+// Run arbitrary SQL. Issue a fatal error on failure.
+func runSql(tls *libc.TLS, zFormat uintptr, va uintptr) { /* mptest.c:377:13: */
+ bp := tls.Alloc(16)
+ defer tls.Free(16)
+
+ var ap va_list
+ _ = ap
+ var zSql uintptr
+ var rc int32
+ ap = va
+ zSql = sqlite3.Xsqlite3_vmprintf(tls, zFormat, ap)
+ _ = ap
+ rc = sqlite3.Xsqlite3_exec(tls, g.db, zSql, uintptr(0), uintptr(0), uintptr(0))
+ if rc != 0 {
+ fatalError(tls, ts+122 /* "%s\n%s\n" */, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, g.db), zSql))
+ }
+ sqlite3.Xsqlite3_free(tls, zSql)
+}
+
+// Try to run arbitrary SQL. Return success code.
+func trySql(tls *libc.TLS, zFormat uintptr, va uintptr) int32 { /* mptest.c:394:12: */
+ var ap va_list
+ _ = ap
+ var zSql uintptr
+ var rc int32
+ ap = va
+ zSql = sqlite3.Xsqlite3_vmprintf(tls, zFormat, ap)
+ _ = ap
+ rc = sqlite3.Xsqlite3_exec(tls, g.db, zSql, uintptr(0), uintptr(0), uintptr(0))
+ sqlite3.Xsqlite3_free(tls, zSql)
+ return rc
+}
+
+// Structure for holding an arbitrary length string
+type String1 = struct {
+ z uintptr
+ n int32
+ nAlloc int32
+} /* mptest.c:408:9 */
+
+// Structure for holding an arbitrary length string
+type String = String1 /* mptest.c:408:23 */
+
+// Free a string
+func stringFree(tls *libc.TLS, p uintptr) { /* mptest.c:416:13: */
+ if (*String)(unsafe.Pointer(p)).z != 0 {
+ sqlite3.Xsqlite3_free(tls, (*String)(unsafe.Pointer(p)).z)
+ }
+ libc.Xmemset(tls, p, 0, uint32(unsafe.Sizeof(String{})))
+}
+
+// Append n bytes of text to a string. If n<0 append the entire string.
+func stringAppend(tls *libc.TLS, p uintptr, z uintptr, n int32) { /* mptest.c:422:13: */
+ if n < 0 {
+ n = int32(libc.Xstrlen(tls, z))
+ }
+ if ((*String)(unsafe.Pointer(p)).n + n) >= (*String)(unsafe.Pointer(p)).nAlloc {
+ var nAlloc int32 = ((((*String)(unsafe.Pointer(p)).nAlloc * 2) + n) + 100)
+ var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*String)(unsafe.Pointer(p)).z, nAlloc)
+ if zNew == uintptr(0) {
+ fatalError(tls, ts+129 /* "out of memory" */, 0)
+ }
+ (*String)(unsafe.Pointer(p)).z = zNew
+ (*String)(unsafe.Pointer(p)).nAlloc = nAlloc
+ }
+ libc.Xmemcpy(tls, ((*String)(unsafe.Pointer(p)).z + uintptr((*String)(unsafe.Pointer(p)).n)), z, uint32(n))
+ *(*int32)(unsafe.Pointer(p + 4 /* &.n */)) += (n)
+ *(*int8)(unsafe.Pointer((*String)(unsafe.Pointer(p)).z + uintptr((*String)(unsafe.Pointer(p)).n))) = int8(0)
+}
+
+// Reset a string to an empty string
+func stringReset(tls *libc.TLS, p uintptr) { /* mptest.c:437:13: */
+ if (*String)(unsafe.Pointer(p)).z == uintptr(0) {
+ stringAppend(tls, p, ts+143 /* " " */, 1)
+ }
+ (*String)(unsafe.Pointer(p)).n = 0
+ *(*int8)(unsafe.Pointer((*String)(unsafe.Pointer(p)).z + uintptr(0))) = int8(0)
+}
+
+// Append a new token onto the end of the string
+func stringAppendTerm(tls *libc.TLS, p uintptr, z uintptr) { /* mptest.c:444:13: */
+ var i int32
+ if (*String)(unsafe.Pointer(p)).n != 0 {
+ stringAppend(tls, p, ts+143 /* " " */, 1)
+ }
+ if z == uintptr(0) {
+ stringAppend(tls, p, ts+145 /* "nil" */, 3)
+ return
+ }
+ for i = 0; (*(*int8)(unsafe.Pointer(z + uintptr(i))) != 0) && !((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(i))))))*2))) & int32(_ISspace)) != 0); i++ {
+ }
+ if (i > 0) && (int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == 0) {
+ stringAppend(tls, p, z, i)
+ return
+ }
+ stringAppend(tls, p, ts+149 /* "'" */, 1)
+ for *(*int8)(unsafe.Pointer(z + uintptr(0))) != 0 {
+ for i = 0; (*(*int8)(unsafe.Pointer(z + uintptr(i))) != 0) && (int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) != '\''); i++ {
+ }
+ if *(*int8)(unsafe.Pointer(z + uintptr(i))) != 0 {
+ stringAppend(tls, p, z, (i + 1))
+ stringAppend(tls, p, ts+149 /* "'" */, 1)
+ z += (uintptr(i + 1))
+ } else {
+ stringAppend(tls, p, z, i)
+ break
+ }
+ }
+ stringAppend(tls, p, ts+149 /* "'" */, 1)
+}
+
+// Callback function for evalSql()
+func evalCallback(tls *libc.TLS, pCData uintptr, argc int32, argv uintptr, azCol uintptr) int32 { /* mptest.c:474:12: */
+ var p uintptr = pCData
+ var i int32
+ _ = azCol
+ for i = 0; i < argc; i++ {
+ stringAppendTerm(tls, p, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4)))
+ }
+ return 0
+}
+
+// Run arbitrary SQL and record the results in an output string
+// given by the first parameter.
+func evalSql(tls *libc.TLS, p uintptr, zFormat uintptr, va uintptr) int32 { /* mptest.c:486:12: */
+ bp := tls.Alloc(42)
+ defer tls.Free(42)
+
+ var ap va_list
+ _ = ap
+ var zSql uintptr
+ var rc int32
+ *(*uintptr)(unsafe.Pointer(bp + 8 /* zErrMsg */)) = uintptr(0)
+ ap = va
+ zSql = sqlite3.Xsqlite3_vmprintf(tls, zFormat, ap)
+ _ = ap
+
+ rc = sqlite3.Xsqlite3_exec(tls, g.db, zSql, *(*uintptr)(unsafe.Pointer(&struct {
+ f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32
+ }{evalCallback})), p, bp+8 /* &zErrMsg */)
+ sqlite3.Xsqlite3_free(tls, zSql)
+ if rc != 0 {
+ // var zErr [30]int8 at bp+12, 30
+
+ sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+12 /* &zErr[0] */, ts+151 /* "error(%d)" */, libc.VaList(bp, rc))
+ stringAppendTerm(tls, p, bp+12 /* &zErr[0] */)
+ if *(*uintptr)(unsafe.Pointer(bp + 8 /* zErrMsg */)) != 0 {
+ stringAppendTerm(tls, p, *(*uintptr)(unsafe.Pointer(bp + 8 /* zErrMsg */)))
+ sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 8 /* zErrMsg */)))
+ }
+ }
+ return rc
+}
+
+// Auxiliary SQL function to recursively evaluate SQL.
+func evalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { /* mptest.c:512:13: */
+ bp := tls.Alloc(16)
+ defer tls.Free(16)
+
+ var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context)
+ var zSql uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(0)*4)))
+ // var res String at bp, 12
+
+ *(*uintptr)(unsafe.Pointer(bp + 12 /* zErrMsg */)) = uintptr(0)
+ var rc int32
+ _ = argc
+ libc.Xmemset(tls, bp /* &res */, 0, uint32(unsafe.Sizeof(String{})))
+ rc = sqlite3.Xsqlite3_exec(tls, db, zSql, *(*uintptr)(unsafe.Pointer(&struct {
+ f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32
+ }{evalCallback})), bp /* &res */, bp+12 /* &zErrMsg */)
+ if *(*uintptr)(unsafe.Pointer(bp + 12 /* zErrMsg */)) != 0 {
+ sqlite3.Xsqlite3_result_error(tls, context, *(*uintptr)(unsafe.Pointer(bp + 12 /* zErrMsg */)), -1)
+ sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 12 /* zErrMsg */)))
+ } else if rc != 0 {
+ sqlite3.Xsqlite3_result_error_code(tls, context, rc)
+ } else {
+ sqlite3.Xsqlite3_result_text(tls, context, (*String)(unsafe.Pointer(bp /* &res */)).z, -1, libc.UintptrFromInt32(-1))
+ }
+ stringFree(tls, bp /* &res */)
+}
+
+// Look up the next task for client iClient in the database.
+// Return the task script and the task number and mark that
+// task as being under way.
+func startScript(tls *libc.TLS, iClient int32, pzScript uintptr, pTaskId uintptr, pzTaskName uintptr) int32 { /* mptest.c:541:12: */
+ bp := tls.Alloc(80)
+ defer tls.Free(80)
+
+ var pStmt uintptr = uintptr(0)
+ var taskId int32
+ var rc int32
+ var totalTime int32 = 0
+
+ *(*uintptr)(unsafe.Pointer(pzScript)) = uintptr(0)
+ g.iTimeout = 0
+ for 1 != 0 {
+ rc = trySql(tls, ts+161 /* "BEGIN IMMEDIATE" */, 0)
+ if rc == 5 {
+ sqlite3.Xsqlite3_sleep(tls, 10)
+ totalTime = totalTime + (10)
+ continue
+ }
+ if rc != 0 {
+ fatalError(tls, ts+177 /* "in startScript: ..." */, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, g.db)))
+ }
+ if (g.nError != 0) || (g.nTest != 0) {
+ runSql(tls, ts+196, /* "UPDATE counters ..." */
+ libc.VaList(bp+8, g.nError, g.nTest))
+ g.nError = 0
+ g.nTest = 0
+ }
+ pStmt = prepareSql(tls, ts+249 /* "SELECT 1 FROM cl..." */, libc.VaList(bp+24, iClient))
+ rc = sqlite3.Xsqlite3_step(tls, pStmt)
+ sqlite3.Xsqlite3_finalize(tls, pStmt)
+ if rc == 100 {
+ runSql(tls, ts+295 /* "DELETE FROM clie..." */, libc.VaList(bp+32, iClient))
+ g.iTimeout = 10000
+ runSql(tls, ts+326 /* "COMMIT TRANSACTI..." */, 0)
+ return 101
+ }
+ pStmt = prepareSql(tls,
+
+ ts+346 /* "SELECT script, i..." */, libc.VaList(bp+40, iClient))
+ rc = sqlite3.Xsqlite3_step(tls, pStmt)
+ if rc == 100 {
+ var n int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, 0)
+ *(*uintptr)(unsafe.Pointer(pzScript)) = sqlite3.Xsqlite3_malloc(tls, (n + 1))
+ libc.Xstrcpy(tls, *(*uintptr)(unsafe.Pointer(pzScript)), sqlite3.Xsqlite3_column_text(tls, pStmt, 0))
+ *(*int32)(unsafe.Pointer(pTaskId)) = libc.AssignInt32(&taskId, sqlite3.Xsqlite3_column_int(tls, pStmt, 1))
+ *(*uintptr)(unsafe.Pointer(pzTaskName)) = sqlite3.Xsqlite3_mprintf(tls, ts+438 /* "%s" */, libc.VaList(bp+48, sqlite3.Xsqlite3_column_text(tls, pStmt, 2)))
+ sqlite3.Xsqlite3_finalize(tls, pStmt)
+ runSql(tls,
+
+ ts+441 /* "UPDATE task SE..." */, libc.VaList(bp+56, taskId))
+ g.iTimeout = 10000
+ runSql(tls, ts+326 /* "COMMIT TRANSACTI..." */, 0)
+ return 0
+ }
+ sqlite3.Xsqlite3_finalize(tls, pStmt)
+ if rc == 101 {
+ if totalTime > 30000 {
+ errorMessage(tls, ts+524 /* "Waited over 30 s..." */, 0)
+ runSql(tls, ts+573 /* "DELETE FROM clie..." */, libc.VaList(bp+64, iClient))
+ sqlite3.Xsqlite3_close(tls, g.db)
+ libc.Xexit(tls, 1)
+ }
+ for trySql(tls, ts+613 /* "COMMIT" */, 0) == 5 {
+ sqlite3.Xsqlite3_sleep(tls, 10)
+ totalTime = totalTime + (10)
+ }
+ sqlite3.Xsqlite3_sleep(tls, 100)
+ totalTime = totalTime + (100)
+ continue
+ }
+ fatalError(tls, ts+438 /* "%s" */, libc.VaList(bp+72, sqlite3.Xsqlite3_errmsg(tls, g.db)))
+ }
+ g.iTimeout = 10000
+ return int32(0)
+}
+
+// Mark a script as having finished. Remove the CLIENT table entry
+// if bShutdown is true.
+func finishScript(tls *libc.TLS, iClient int32, taskId int32, bShutdown int32) int32 { /* mptest.c:623:12: */
+ bp := tls.Alloc(16)
+ defer tls.Free(16)
+
+ runSql(tls,
+
+ ts+620 /* "UPDATE task SE..." */, libc.VaList(bp, taskId))
+ if bShutdown != 0 {
+ runSql(tls, ts+295 /* "DELETE FROM clie..." */, libc.VaList(bp+8, iClient))
+ }
+ return 0
+}
+
+// Start up a client process for iClient, if it is not already
+// running. If the client is already running, then this routine
+// is a no-op.
+func startClient(tls *libc.TLS, iClient int32) { /* mptest.c:638:13: */
+ bp := tls.Alloc(96)
+ defer tls.Free(96)
+
+ runSql(tls, ts+701 /* "INSERT OR IGNORE..." */, libc.VaList(bp, iClient))
+ if sqlite3.Xsqlite3_changes(tls, g.db) != 0 {
+ var zSys uintptr
+ var rc int32
+ zSys = sqlite3.Xsqlite3_mprintf(tls, ts+743, /* "%s \"%s\" --client..." */
+ libc.VaList(bp+8, g.argv0, g.zDbFile, iClient, g.iTrace))
+ if g.bSqlTrace != 0 {
+ zSys = sqlite3.Xsqlite3_mprintf(tls, ts+774 /* "%z --sqltrace" */, libc.VaList(bp+40, zSys))
+ }
+ if g.bSync != 0 {
+ zSys = sqlite3.Xsqlite3_mprintf(tls, ts+788 /* "%z --sync" */, libc.VaList(bp+48, zSys))
+ }
+ if g.zVfs != 0 {
+ zSys = sqlite3.Xsqlite3_mprintf(tls, ts+798 /* "%z --vfs \"%s\"" */, libc.VaList(bp+56, zSys, g.zVfs))
+ }
+ if g.iTrace >= 2 {
+ logMessage(tls, ts+812 /* "system('%q')" */, libc.VaList(bp+72, zSys))
+ }
+ zSys = sqlite3.Xsqlite3_mprintf(tls, ts+825 /* "%z &" */, libc.VaList(bp+80, zSys))
+ rc = libc.Xsystem(tls, zSys)
+ if rc != 0 {
+ errorMessage(tls, ts+830 /* "system() fails w..." */, libc.VaList(bp+88, rc))
+ }
+ sqlite3.Xsqlite3_free(tls, zSys)
+ }
+}
+
+// Read the entire content of a file into memory
+func readFile(tls *libc.TLS, zFilename uintptr) uintptr { /* mptest.c:684:13: */
+ bp := tls.Alloc(8)
+ defer tls.Free(8)
+
+ var in uintptr = libc.Xfopen64(tls, zFilename, ts+864 /* "rb" */)
+ var sz int32
+ var z uintptr
+ if in == uintptr(0) {
+ fatalError(tls, ts+867 /* "cannot open \"%s\"..." */, libc.VaList(bp, zFilename))
+ }
+ libc.Xfseek(tls, in, 0, 2)
+ sz = libc.Xftell(tls, in)
+ libc.Xrewind(tls, in)
+ z = sqlite3.Xsqlite3_malloc(tls, (int32(sz + 1)))
+ sz = int32(libc.Xfread(tls, z, uint32(1), uint32(sz), in))
+ *(*int8)(unsafe.Pointer(z + uintptr(sz))) = int8(0)
+ libc.Xfclose(tls, in)
+ return z
+}
+
+// Return the length of the next token.
+func tokenLength(tls *libc.TLS, z uintptr, pnLine uintptr) int32 { /* mptest.c:704:12: */
+ var n int32 = 0
+ if ((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(0))))))*2))) & int32(_ISspace)) != 0) || ((int32(*(*int8)(unsafe.Pointer(z + uintptr(0)))) == '/') && (int32(*(*int8)(unsafe.Pointer(z + uintptr(1)))) == '*')) {
+ var inC int32 = 0
+ var c int32
+ if int32(*(*int8)(unsafe.Pointer(z + uintptr(0)))) == '/' {
+ inC = 1
+ n = 2
+ }
+ for (libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&n, 1))))))) != 0 {
+ if c == '\n' {
+ (*(*int32)(unsafe.Pointer(pnLine)))++
+ }
+ if (int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(c)))*2))) & int32(_ISspace)) != 0 {
+ continue
+ }
+ if ((inC != 0) && (c == '*')) && (int32(*(*int8)(unsafe.Pointer(z + uintptr(n)))) == '/') {
+ n++
+ inC = 0
+ } else if (!(inC != 0) && (c == '/')) && (int32(*(*int8)(unsafe.Pointer(z + uintptr(n)))) == '*') {
+ n++
+ inC = 1
+ } else if !(inC != 0) {
+ break
+ }
+ }
+ n--
+ } else if (int32(*(*int8)(unsafe.Pointer(z + uintptr(0)))) == '-') && (int32(*(*int8)(unsafe.Pointer(z + uintptr(1)))) == '-') {
+ for n = 2; (*(*int8)(unsafe.Pointer(z + uintptr(n))) != 0) && (int32(*(*int8)(unsafe.Pointer(z + uintptr(n)))) != '\n'); n++ {
+ }
+ if *(*int8)(unsafe.Pointer(z + uintptr(n))) != 0 {
+ (*(*int32)(unsafe.Pointer(pnLine)))++
+ n++
+ }
+ } else if (int32(*(*int8)(unsafe.Pointer(z + uintptr(0)))) == '"') || (int32(*(*int8)(unsafe.Pointer(z + uintptr(0)))) == '\'') {
+ var delim int32 = int32(*(*int8)(unsafe.Pointer(z + uintptr(0))))
+ for n = 1; *(*int8)(unsafe.Pointer(z + uintptr(n))) != 0; n++ {
+ if int32(*(*int8)(unsafe.Pointer(z + uintptr(n)))) == '\n' {
+ (*(*int32)(unsafe.Pointer(pnLine)))++
+ }
+ if int32(*(*int8)(unsafe.Pointer(z + uintptr(n)))) == delim {
+ n++
+ if int32(*(*int8)(unsafe.Pointer(z + uintptr((n + 1))))) != delim {
+ break
+ }
+ }
+ }
+ } else {
+ var c int32
+ for n = 1; (((((libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(z + uintptr(n)))))) != 0) && !((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(c)))*2))) & int32(_ISspace)) != 0)) && (c != '"')) && (c != '\'')) && (c != ';'); n++ {
+ }
+ }
+ return n
+}
+
+// Copy a single token into a string buffer.
+func extractToken(tls *libc.TLS, zIn uintptr, nIn int32, zOut uintptr, nOut int32) int32 { /* mptest.c:749:12: */
+ var i int32
+ if nIn <= 0 {
+ *(*int8)(unsafe.Pointer(zOut + uintptr(0))) = int8(0)
+ return 0
+ }
+ for i = 0; ((i < nIn) && (i < (nOut - 1))) && !((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(zIn + uintptr(i))))))*2))) & int32(_ISspace)) != 0); i++ {
+ *(*int8)(unsafe.Pointer(zOut + uintptr(i))) = *(*int8)(unsafe.Pointer(zIn + uintptr(i)))
+ }
+ *(*int8)(unsafe.Pointer(zOut + uintptr(i))) = int8(0)
+ return i
+}
+
+// Find the number of characters up to the start of the next "--end" token.
+func findEnd(tls *libc.TLS, z uintptr, pnLine uintptr) int32 { /* mptest.c:763:12: */
+ var n int32 = 0
+ for (*(*int8)(unsafe.Pointer(z + uintptr(n))) != 0) && ((libc.Xstrncmp(tls, (z+uintptr(n)), ts+896 /* "--end" */, uint32(5)) != 0) || !((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr((n + 5)))))))*2))) & int32(_ISspace)) != 0)) {
+ n = n + (tokenLength(tls, (z + uintptr(n)), pnLine))
+ }
+ return n
+}
+
+// Find the number of characters up to the first character past the
+// of the next "--endif" or "--else" token. Nested --if commands are
+// also skipped.
+func findEndif(tls *libc.TLS, z uintptr, stopAtElse int32, pnLine uintptr) int32 { /* mptest.c:776:12: */
+ var n int32 = 0
+ for *(*int8)(unsafe.Pointer(z + uintptr(n))) != 0 {
+ var len int32 = tokenLength(tls, (z + uintptr(n)), pnLine)
+ if ((libc.Xstrncmp(tls, (z+uintptr(n)), ts+902 /* "--endif" */, uint32(7)) == 0) && ((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr((n + 7)))))))*2))) & int32(_ISspace)) != 0)) ||
+ (((stopAtElse != 0) && (libc.Xstrncmp(tls, (z+uintptr(n)), ts+910 /* "--else" */, uint32(6)) == 0)) && ((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr((n + 6)))))))*2))) & int32(_ISspace)) != 0)) {
+ return (n + len)
+ }
+ if (libc.Xstrncmp(tls, (z+uintptr(n)), ts+917 /* "--if" */, uint32(4)) == 0) && ((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr((n + 4)))))))*2))) & int32(_ISspace)) != 0) {
+ var skip int32 = findEndif(tls, ((z + uintptr(n)) + uintptr(len)), 0, pnLine)
+ n = n + (skip + len)
+ } else {
+ n = n + (len)
+ }
+ }
+ return n
+}
+
+// Wait for a client process to complete all its tasks
+func waitForClient(tls *libc.TLS, iClient int32, iTimeout int32, zErrPrefix uintptr) { /* mptest.c:798:13: */
+ bp := tls.Alloc(32)
+ defer tls.Free(32)
+
+ var pStmt uintptr
+ var rc int32
+ if iClient > 0 {
+ pStmt = prepareSql(tls,
+
+ ts+922, /* "SELECT 1 FROM ta..." */
+ libc.VaList(bp, iClient))
+ } else {
+ pStmt = prepareSql(tls,
+
+ ts+1018 /* "SELECT 1 FROM ta..." */, 0)
+ }
+ g.iTimeout = 0
+ for (((libc.AssignInt32(&rc, sqlite3.Xsqlite3_step(tls, pStmt))) == 5) || (rc == 100)) &&
+ (iTimeout > 0) {
+ sqlite3.Xsqlite3_reset(tls, pStmt)
+ sqlite3.Xsqlite3_sleep(tls, 50)
+ iTimeout = iTimeout - (50)
+ }
+ sqlite3.Xsqlite3_finalize(tls, pStmt)
+ g.iTimeout = 10000
+ if rc != 101 {
+ if zErrPrefix == uintptr(0) {
+ zErrPrefix = ts + 1099 /* "" */
+ }
+ if iClient > 0 {
+ errorMessage(tls, ts+1100 /* "%stimeout waitin..." */, libc.VaList(bp+8, zErrPrefix, iClient))
+ } else {
+ errorMessage(tls, ts+1132 /* "%stimeout waitin..." */, libc.VaList(bp+24, zErrPrefix))
+ }
+ }
+}
+
+// Return a pointer to the tail of a filename
+func filenameTail(tls *libc.TLS, z uintptr) uintptr { /* mptest.c:836:13: */
+ var i int32
+ var j int32
+ for i = libc.AssignInt32(&j, 0); *(*int8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ {
+ if (int32(*(*int8)(unsafe.Pointer(z + uintptr(i))))) == '/' {
+ j = (i + 1)
+ }
+ }
+ return (z + uintptr(j))
+}
+
+// Interpret zArg as a boolean value. Return either 0 or 1.
+func booleanValue(tls *libc.TLS, zArg uintptr) int32 { /* mptest.c:845:12: */
+ bp := tls.Alloc(8)
+ defer tls.Free(8)
+
+ var i int32
+ if zArg == uintptr(0) {
+ return 0
+ }
+ for i = 0; (int32(*(*int8)(unsafe.Pointer(zArg + uintptr(i)))) >= '0') && (int32(*(*int8)(unsafe.Pointer(zArg + uintptr(i)))) <= '9'); i++ {
+ }
+ if (i > 0) && (int32(*(*int8)(unsafe.Pointer(zArg + uintptr(i)))) == 0) {
+ return libc.Xatoi(tls, zArg)
+ }
+ if (sqlite3.Xsqlite3_stricmp(tls, zArg, ts+1166 /* "on" */) == 0) || (sqlite3.Xsqlite3_stricmp(tls, zArg, ts+1169 /* "yes" */) == 0) {
+ return 1
+ }
+ if (sqlite3.Xsqlite3_stricmp(tls, zArg, ts+1173 /* "off" */) == 0) || (sqlite3.Xsqlite3_stricmp(tls, zArg, ts+1177 /* "no" */) == 0) {
+ return 0
+ }
+ errorMessage(tls, ts+1180 /* "unknown boolean:..." */, libc.VaList(bp, zArg))
+ return 0
+}
+
+// This routine exists as a convenient place to set a debugger
+// breakpoint.
+func test_breakpoint(tls *libc.TLS) { /* mptest.c:864:13: */ cnt++ }
+
+var cnt int32 = 0 /* mptest.c:864:56 */
+
+// Maximum number of arguments to a --command
+
+// Run a script.
+func runScript(tls *libc.TLS, iClient int32, taskId int32, zScript uintptr, zFilename uintptr) { /* mptest.c:872:13: */
+ bp := tls.Alloc(1606)
+ defer tls.Free(1606)
+
+ *(*int32)(unsafe.Pointer(bp + 372 /* lineno */)) = 1
+ var prevLine int32 = 1
+ var ii int32 = 0
+ var iBegin int32 = 0
+ var n int32
+ var c int32
+ var j int32
+ var len int32
+ var nArg int32
+ // var sResult String at bp+360, 12
+
+ // var zCmd [30]int8 at bp+376, 30
+
+ // var zError [1000]int8 at bp+606, 1000
+
+ // var azArg [2][100]int8 at bp+406, 200
+
+ libc.Xmemset(tls, bp+360 /* &sResult */, 0, uint32(unsafe.Sizeof(String{})))
+ stringReset(tls, bp+360 /* &sResult */)
+ for (libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(zScript + uintptr(ii)))))) != 0 {
+ prevLine = *(*int32)(unsafe.Pointer(bp + 372 /* lineno */))
+ len = tokenLength(tls, (zScript + uintptr(ii)), bp+372 /* &lineno */)
+ if ((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(c)))*2))) & int32(_ISspace)) != 0) || ((c == '/') && (int32(*(*int8)(unsafe.Pointer(zScript + uintptr((ii + 1))))) == '*')) {
+ ii = ii + (len)
+ continue
+ }
+ if ((c != '-') || (int32(*(*int8)(unsafe.Pointer(zScript + uintptr((ii + 1))))) != '-')) || !((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(*(*int8)(unsafe.Pointer(zScript + uintptr((ii + 2))))))*2))) & int32(_ISalpha)) != 0) {
+ ii = ii + (len)
+ continue
+ }
+
+ // Run any prior SQL before processing the new --command
+ if ii > iBegin {
+ var zSql uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+1202 /* "%.*s" */, libc.VaList(bp, (ii-iBegin), (zScript+uintptr(iBegin))))
+ evalSql(tls, bp+360 /* &sResult */, zSql, 0)
+ sqlite3.Xsqlite3_free(tls, zSql)
+ iBegin = (ii + len)
+ }
+
+ // Parse the --command
+ if g.iTrace >= 2 {
+ logMessage(tls, ts+1202 /* "%.*s" */, libc.VaList(bp+16, len, (zScript+uintptr(ii))))
+ }
+ n = extractToken(tls, ((zScript + uintptr(ii)) + uintptr(2)), (len - 2), bp+376 /* &zCmd[0] */, int32(unsafe.Sizeof([30]int8{})))
+ for nArg = 0; (n < (len - 2)) && (nArg < 2); nArg++ {
+ for (n < (len - 2)) && ((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(zScript + uintptr(((ii + 2) + n)))))))*2))) & int32(_ISspace)) != 0) {
+ n++
+ }
+ if n >= (len - 2) {
+ break
+ }
+ n = n + (extractToken(tls, (((zScript + uintptr(ii)) + uintptr(2)) + uintptr(n)), ((len - 2) - n),
+ (bp + 406 /* &azArg[0] */ + uintptr(nArg)*100), int32(unsafe.Sizeof([100]int8{}))))
+ }
+ for j = nArg; j < 2; j++ {
+ *(*int8)(unsafe.Pointer((bp + 406 /* &azArg[0] */ + uintptr(libc.PostIncInt32(&j, 1))*100) + uintptr(0))) = int8(0)
+ }
+
+ // --sleep N
+ //
+ // Pause for N milliseconds
+ if libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1207 /* "sleep" */) == 0 {
+ sqlite3.Xsqlite3_sleep(tls, libc.Xatoi(tls, (bp+406 /* &azArg[0] */ +uintptr(0)*100)))
+ } else
+
+ // --exit N
+ //
+ // Exit this process. If N>0 then exit without shutting down
+ // SQLite. (In other words, simulate a crash.)
+ if libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1213 /* "exit" */) == 0 {
+ var rc int32 = libc.Xatoi(tls, (bp + 406 /* &azArg[0] */ + uintptr(0)*100))
+ finishScript(tls, iClient, taskId, 1)
+ if rc == 0 {
+ sqlite3.Xsqlite3_close(tls, g.db)
+ }
+ libc.Xexit(tls, rc)
+ } else
+
+ // --testcase NAME
+ //
+ // Begin a new test case. Announce in the log that the test case
+ // has begun.
+ if libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1218 /* "testcase" */) == 0 {
+ if g.iTrace == 1 {
+ logMessage(tls, ts+1202 /* "%.*s" */, libc.VaList(bp+32, (len-1), (zScript+uintptr(ii))))
+ }
+ stringReset(tls, bp+360 /* &sResult */)
+ } else
+
+ // --finish
+ //
+ // Mark the current task as having finished, even if it is not.
+ // This can be used in conjunction with --exit to simulate a crash.
+ if (libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1227 /* "finish" */) == 0) && (iClient > 0) {
+ finishScript(tls, iClient, taskId, 1)
+ } else
+
+ // --reset
+ //
+ // Reset accumulated results back to an empty string
+ if libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1234 /* "reset" */) == 0 {
+ stringReset(tls, bp+360 /* &sResult */)
+ } else
+
+ // --match ANSWER...
+ //
+ // Check to see if output matches ANSWER. Report an error if not.
+ if libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1240 /* "match" */) == 0 {
+ var jj int32
+ var zAns uintptr = (zScript + uintptr(ii))
+ for jj = 7; (jj < (len - 1)) && ((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(zAns + uintptr(jj))))))*2))) & int32(_ISspace)) != 0); jj++ {
+ }
+ zAns += uintptr(jj)
+ if (((len - jj) - 1) != (*String)(unsafe.Pointer(bp+360 /* &sResult */)).n) || (libc.Xstrncmp(tls, (*String)(unsafe.Pointer(bp+360 /* &sResult */)).z, zAns, (uint32((len-jj)-1))) != 0) {
+ errorMessage(tls, ts+1246, /* "line %d of %s:\nE..." */
+ libc.VaList(bp+48, prevLine, zFilename, ((len-jj)-1), zAns, (*String)(unsafe.Pointer(bp+360 /* &sResult */)).z))
+ }
+ g.nTest++
+ stringReset(tls, bp+360 /* &sResult */)
+ } else
+
+ // --glob ANSWER...
+ // --notglob ANSWER....
+ //
+ // Check to see if output does or does not match the glob pattern
+ // ANSWER.
+ if (libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1291 /* "glob" */) == 0) || (libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1296 /* "notglob" */) == 0) {
+ var jj int32
+ var zAns uintptr = (zScript + uintptr(ii))
+ var zCopy uintptr
+ var isGlob int32 = (libc.Bool32(int32(*(*int8)(unsafe.Pointer(bp + 376 /* &zCmd[0] */ + uintptr(0)))) == 'g'))
+ for jj = (9 - (3 * isGlob)); (jj < (len - 1)) && ((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(zAns + uintptr(jj))))))*2))) & int32(_ISspace)) != 0); jj++ {
+ }
+ zAns += uintptr(jj)
+ zCopy = sqlite3.Xsqlite3_mprintf(tls, ts+1202 /* "%.*s" */, libc.VaList(bp+88, ((len-jj)-1), zAns))
+ if ((libc.Bool32(sqlite3.Xsqlite3_strglob(tls, zCopy, (*String)(unsafe.Pointer(bp+360 /* &sResult */)).z) == 0)) ^ isGlob) != 0 {
+ errorMessage(tls, ts+1304, /* "line %d of %s:\nE..." */
+ libc.VaList(bp+104, prevLine, zFilename, zCopy, (*String)(unsafe.Pointer(bp+360 /* &sResult */)).z))
+ }
+ sqlite3.Xsqlite3_free(tls, zCopy)
+ g.nTest++
+ stringReset(tls, bp+360 /* &sResult */)
+ } else
+
+ // --output
+ //
+ // Output the result of the previous SQL.
+ if libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1347 /* "output" */) == 0 {
+ logMessage(tls, ts+438 /* "%s" */, libc.VaList(bp+136, (*String)(unsafe.Pointer(bp+360 /* &sResult */)).z))
+ } else
+
+ // --source FILENAME
+ //
+ // Run a subscript from a separate file.
+ if libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1354 /* "source" */) == 0 {
+ var zNewFile uintptr
+ var zNewScript uintptr
+ var zToDel uintptr = uintptr(0)
+ zNewFile = (bp + 406 /* &azArg[0] */ + uintptr(0)*100)
+ if !((int32(*(*int8)(unsafe.Pointer(zNewFile + uintptr(0))))) == '/') {
+ var k int32
+ for k = (int32(libc.Xstrlen(tls, zFilename)) - 1); (k >= 0) && !((int32(*(*int8)(unsafe.Pointer(zFilename + uintptr(k))))) == '/'); k-- {
+ }
+ if k > 0 {
+ zNewFile = libc.AssignUintptr(&zToDel, sqlite3.Xsqlite3_mprintf(tls, ts+1361 /* "%.*s/%s" */, libc.VaList(bp+144, k, zFilename, zNewFile)))
+ }
+ }
+ zNewScript = readFile(tls, zNewFile)
+ if g.iTrace != 0 {
+ logMessage(tls, ts+1369 /* "begin script [%s..." */, libc.VaList(bp+168, zNewFile))
+ }
+ runScript(tls, 0, 0, zNewScript, zNewFile)
+ sqlite3.Xsqlite3_free(tls, zNewScript)
+ if g.iTrace != 0 {
+ logMessage(tls, ts+1388 /* "end script [%s]\n" */, libc.VaList(bp+176, zNewFile))
+ }
+ sqlite3.Xsqlite3_free(tls, zToDel)
+ } else
+
+ // --print MESSAGE....
+ //
+ // Output the remainder of the line to the log file
+ if libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1405 /* "print" */) == 0 {
+ var jj int32
+ for jj = 7; (jj < len) && ((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(zScript + uintptr((ii + jj)))))))*2))) & int32(_ISspace)) != 0); jj++ {
+ }
+ logMessage(tls, ts+1202 /* "%.*s" */, libc.VaList(bp+184, (len-jj), ((zScript+uintptr(ii))+uintptr(jj))))
+ } else
+
+ // --if EXPR
+ //
+ // Skip forward to the next matching --endif or --else if EXPR is false.
+ if libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1411 /* "if" */) == 0 {
+ var jj int32
+ var rc int32
+ var pStmt uintptr
+ for jj = 4; (jj < len) && ((int32(*(*uint16)(unsafe.Pointer((*(*uintptr)(unsafe.Pointer(libc.X__ctype_b_loc(tls)))) + uintptr(int32(uint8(*(*int8)(unsafe.Pointer(zScript + uintptr((ii + jj)))))))*2))) & int32(_ISspace)) != 0); jj++ {
+ }
+ pStmt = prepareSql(tls, ts+1414 /* "SELECT %.*s" */, libc.VaList(bp+200, (len-jj), ((zScript+uintptr(ii))+uintptr(jj))))
+ rc = sqlite3.Xsqlite3_step(tls, pStmt)
+ if (rc != 100) || (sqlite3.Xsqlite3_column_int(tls, pStmt, 0) == 0) {
+ ii = ii + (findEndif(tls, ((zScript + uintptr(ii)) + uintptr(len)), 1, bp+372 /* &lineno */))
+ }
+ sqlite3.Xsqlite3_finalize(tls, pStmt)
+ } else
+
+ // --else
+ //
+ // This command can only be encountered if currently inside an --if that
+ // is true. Skip forward to the next matching --endif.
+ if libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1426 /* "else" */) == 0 {
+ ii = ii + (findEndif(tls, ((zScript + uintptr(ii)) + uintptr(len)), 0, bp+372 /* &lineno */))
+ } else
+
+ // --endif
+ //
+ // This command can only be encountered if currently inside an --if that
+ // is true or an --else of a false if. This is a no-op.
+ if libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1431 /* "endif" */) == 0 {
+ } else
+
+ // --start CLIENT
+ //
+ // Start up the given client.
+ if (libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1437 /* "start" */) == 0) && (iClient == 0) {
+ var iNewClient int32 = libc.Xatoi(tls, (bp + 406 /* &azArg[0] */ + uintptr(0)*100))
+ if iNewClient > 0 {
+ startClient(tls, iNewClient)
+ }
+ } else
+
+ // --wait CLIENT TIMEOUT
+ //
+ // Wait until all tasks complete for the given client. If CLIENT is
+ // "all" then wait for all clients to complete. Wait no longer than
+ // TIMEOUT milliseconds (default 10,000)
+ if (libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1443 /* "wait" */) == 0) && (iClient == 0) {
+ var iTimeout int32
+ if nArg >= 2 {
+ iTimeout = libc.Xatoi(tls, (bp + 406 /* &azArg[0] */ + uintptr(1)*100))
+ } else {
+ iTimeout = 10000
+ }
+ sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]int8{})), bp+606 /* &zError[0] */, ts+1448, /* "line %d of %s\n" */
+ libc.VaList(bp+216, prevLine, zFilename))
+ waitForClient(tls, libc.Xatoi(tls, (bp+406 /* &azArg[0] */ +uintptr(0)*100)), iTimeout, bp+606 /* &zError[0] */)
+ } else
+
+ // --task CLIENT
+ // <task-content-here>
+ // --end
+ //
+ // Assign work to a client. Start the client if it is not running
+ // already.
+ if (libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1463 /* "task" */) == 0) && (iClient == 0) {
+ var iTarget int32 = libc.Xatoi(tls, (bp + 406 /* &azArg[0] */ + uintptr(0)*100))
+ var iEnd int32
+ var zTask uintptr
+ var zTName uintptr
+ iEnd = findEnd(tls, ((zScript + uintptr(ii)) + uintptr(len)), bp+372 /* &lineno */)
+ if iTarget < 0 {
+ errorMessage(tls, ts+1468, /* "line %d of %s: b..." */
+ libc.VaList(bp+232, prevLine, zFilename, iTarget))
+ } else {
+ zTask = sqlite3.Xsqlite3_mprintf(tls, ts+1202 /* "%.*s" */, libc.VaList(bp+256, iEnd, ((zScript+uintptr(ii))+uintptr(len))))
+ if nArg > 1 {
+ zTName = sqlite3.Xsqlite3_mprintf(tls, ts+438 /* "%s" */, libc.VaList(bp+272, (bp+406 /* &azArg[0] */ +uintptr(1)*100)))
+ } else {
+ zTName = sqlite3.Xsqlite3_mprintf(tls, ts+1505 /* "%s:%d" */, libc.VaList(bp+280, filenameTail(tls, zFilename), prevLine))
+ }
+ startClient(tls, iTarget)
+ runSql(tls,
+ ts+1511 /* "INSERT INTO task..." */, libc.VaList(bp+296, iTarget, zTask, zTName))
+ sqlite3.Xsqlite3_free(tls, zTask)
+ sqlite3.Xsqlite3_free(tls, zTName)
+ }
+ iEnd = iEnd + (tokenLength(tls, (((zScript + uintptr(ii)) + uintptr(len)) + uintptr(iEnd)), bp+372 /* &lineno */))
+ len = len + (iEnd)
+ iBegin = (ii + len)
+ } else
+
+ // --breakpoint
+ //
+ // This command calls "test_breakpoint()" which is a routine provided
+ // as a convenient place to set a debugger breakpoint.
+ if libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1567 /* "breakpoint" */) == 0 {
+ test_breakpoint(tls)
+ } else
+
+ // --show-sql-errors BOOLEAN
+ //
+ // Turn display of SQL errors on and off.
+ if libc.Xstrcmp(tls, bp+376 /* &zCmd[0] */, ts+1578 /* "show-sql-errors" */) == 0 {
+ g.bIgnoreSqlErrors = func() int32 {
+ if nArg >= 1 {
+ return libc.BoolInt32(!(booleanValue(tls, (bp+406 /* &azArg[0] */ +uintptr(0)*100)) != 0))
+ }
+ return 1
+ }()
+ } else {
+ errorMessage(tls, ts+1594, /* "line %d of %s: u..." */
+ libc.VaList(bp+320, prevLine, zFilename, bp+376 /* &zCmd[0] */))
+ }
+ ii = ii + (len)
+ }
+ if iBegin < ii {
+ var zSql uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+1202 /* "%.*s" */, libc.VaList(bp+344, (ii-iBegin), (zScript+uintptr(iBegin))))
+ runSql(tls, zSql, 0)
+ sqlite3.Xsqlite3_free(tls, zSql)
+ }
+ stringFree(tls, bp+360 /* &sResult */)
+}
+
+// Look for a command-line option. If present, return a pointer.
+// Return NULL if missing.
+//
+// hasArg==0 means the option is a flag. It is either present or not.
+// hasArg==1 means the option has an argument. Return a pointer to the
+// argument.
+func findOption(tls *libc.TLS, azArg uintptr, pnArg uintptr, zOption uintptr, hasArg int32) uintptr { /* mptest.c:1201:13: */
+ bp := tls.Alloc(8)
+ defer tls.Free(8)
+
+ var i int32
+ var j int32
+ var zReturn uintptr = uintptr(0)
+ var nArg int32 = *(*int32)(unsafe.Pointer(pnArg))
+
+ for i = 0; i < nArg; i++ {
+ var z uintptr
+ if (i + hasArg) >= nArg {
+ break
+ }
+ z = *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*4))
+ if int32(*(*int8)(unsafe.Pointer(z + uintptr(0)))) != '-' {
+ continue
+ }
+ z++
+ if int32(*(*int8)(unsafe.Pointer(z + uintptr(0)))) == '-' {
+ if int32(*(*int8)(unsafe.Pointer(z + uintptr(1)))) == 0 {
+ break
+ }
+ z++
+ }
+ if libc.Xstrcmp(tls, z, zOption) == 0 {
+ if (hasArg != 0) && (i == (nArg - 1)) {
+ fatalError(tls, ts+1630 /* "command-line opt..." */, libc.VaList(bp, z))
+ }
+ if hasArg != 0 {
+ zReturn = *(*uintptr)(unsafe.Pointer(azArg + uintptr((i+1))*4))
+ } else {
+ zReturn = *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*4))
+ }
+ j = ((i + 1) + (libc.Bool32(hasArg != 0)))
+ for j < nArg {
+ *(*uintptr)(unsafe.Pointer(azArg + uintptr(libc.PostIncInt32(&i, 1))*4)) = *(*uintptr)(unsafe.Pointer(azArg + uintptr(libc.PostIncInt32(&j, 1))*4))
+ }
+ *(*int32)(unsafe.Pointer(pnArg)) = i
+ return zReturn
+ }
+ }
+ return zReturn
+}
+
+// Print a usage message for the program and exit
+func usage(tls *libc.TLS, argv0 uintptr) { /* mptest.c:1241:13: */
+ bp := tls.Alloc(8)
+ defer tls.Free(8)
+
+ var i int32
+ var zTail uintptr = argv0
+ for i = 0; *(*int8)(unsafe.Pointer(argv0 + uintptr(i))) != 0; i++ {
+ if (int32(*(*int8)(unsafe.Pointer(argv0 + uintptr(i))))) == '/' {
+ zTail = ((argv0 + uintptr(i)) + uintptr(1))
+ }
+ }
+ libc.Xfprintf(tls, libc.Xstderr, ts+1678 /* "Usage: %s DATABA..." */, libc.VaList(bp, zTail))
+ libc.Xfprintf(tls, libc.Xstderr,
+
+ ts+1717 /* "Options:\n --er..." */, 0)
+ libc.Xexit(tls, 1)
+}
+
+// Report on unrecognized arguments
+func unrecognizedArguments(tls *libc.TLS, argv0 uintptr, nArg int32, azArg uintptr) { /* mptest.c:1265:13: */
+ bp := tls.Alloc(16)
+ defer tls.Free(16)
+
+ var i int32
+ libc.Xfprintf(tls, libc.Xstderr, ts+2289 /* "%s: unrecognized..." */, libc.VaList(bp, argv0))
+ for i = 0; i < nArg; i++ {
+ libc.Xfprintf(tls, libc.Xstderr, ts+2317 /* " %s" */, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*4))))
+ }
+ libc.Xfprintf(tls, libc.Xstderr, ts+2321 /* "\n" */, 0)
+ libc.Xexit(tls, 1)
+}
+
+func main1(tls *libc.TLS, argc int32, argv uintptr) int32 { /* mptest.c:1279:18: */
+ bp := tls.Alloc(248)
+ defer tls.Free(248)
+
+ var zClient uintptr
+ var iClient int32
+ // var n int32 at bp+232, 4
+
+ var i int32
+ var openFlags int32 = 0x00000002
+ var rc int32
+ // var zScript uintptr at bp+236, 4
+
+ // var taskId int32 at bp+240, 4
+
+ var zTrace uintptr
+ var zCOption uintptr
+ var zJMode uintptr
+ var zNRep uintptr
+ var nRep int32 = 1
+ var iRep int32
+ var iTmout int32 = 0 // Default: no timeout
+ var zTmout uintptr
+
+ g.argv0 = *(*uintptr)(unsafe.Pointer(argv + uintptr(0)*4))
+ g.iTrace = 1
+ if argc < 2 {
+ usage(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(0)*4)))
+ }
+ g.zDbFile = *(*uintptr)(unsafe.Pointer(argv + uintptr(1)*4))
+ if strglob(tls, ts+2323 /* "*.test" */, g.zDbFile) != 0 {
+ usage(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(0)*4)))
+ }
+ if libc.Xstrcmp(tls, sqlite3.Xsqlite3_sourceid(tls), ts+2330 /* "2020-08-14 13:23..." */) != 0 {
+ libc.Xfprintf(tls, libc.Xstderr,
+
+ ts+2415, /* "SQLite library a..." */
+ libc.VaList(bp, sqlite3.Xsqlite3_sourceid(tls), ts+2330 /* "2020-08-14 13:23..." */))
+ libc.Xexit(tls, 1)
+ }
+ *(*int32)(unsafe.Pointer(bp + 232 /* n */)) = (argc - 2)
+ sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([32]int8{})), uintptr(unsafe.Pointer(&g))+32 /* &.zName */, ts+2475 /* "%05d.mptest" */, libc.VaList(bp+16, libc.Xgetpid(tls)))
+ zJMode = findOption(tls, (argv + uintptr(2)*4), bp+232 /* &n */, ts+2487 /* "journalmode" */, 1)
+ zNRep = findOption(tls, (argv + uintptr(2)*4), bp+232 /* &n */, ts+2499 /* "repeat" */, 1)
+ if zNRep != 0 {
+ nRep = libc.Xatoi(tls, zNRep)
+ }
+ if nRep < 1 {
+ nRep = 1
+ }
+ g.zVfs = findOption(tls, (argv + uintptr(2)*4), bp+232 /* &n */, ts+2506 /* "vfs" */, 1)
+ zClient = findOption(tls, (argv + uintptr(2)*4), bp+232 /* &n */, ts+2510 /* "client" */, 1)
+ g.zErrLog = findOption(tls, (argv + uintptr(2)*4), bp+232 /* &n */, ts+2517 /* "errlog" */, 1)
+ g.zLog = findOption(tls, (argv + uintptr(2)*4), bp+232 /* &n */, ts+2524 /* "log" */, 1)
+ zTrace = findOption(tls, (argv + uintptr(2)*4), bp+232 /* &n */, ts+2528 /* "trace" */, 1)
+ if zTrace != 0 {
+ g.iTrace = libc.Xatoi(tls, zTrace)
+ }
+ if findOption(tls, (argv+uintptr(2)*4), bp+232 /* &n */, ts+2534 /* "quiet" */, 0) != uintptr(0) {
+ g.iTrace = 0
+ }
+ zTmout = findOption(tls, (argv + uintptr(2)*4), bp+232 /* &n */, ts+2540 /* "timeout" */, 1)
+ if zTmout != 0 {
+ iTmout = libc.Xatoi(tls, zTmout)
+ }
+ g.bSqlTrace = (libc.Bool32(findOption(tls, (argv+uintptr(2)*4), bp+232 /* &n */, ts+2548 /* "sqltrace" */, 0) != uintptr(0)))
+ g.bSync = (libc.Bool32(findOption(tls, (argv+uintptr(2)*4), bp+232 /* &n */, ts+2557 /* "sync" */, 0) != uintptr(0)))
+ if g.zErrLog != 0 {
+ g.pErrLog = libc.Xfopen64(tls, g.zErrLog, ts+2562 /* "a" */)
+ } else {
+ g.pErrLog = libc.Xstderr
+ }
+ if g.zLog != 0 {
+ g.pLog = libc.Xfopen64(tls, g.zLog, ts+2562 /* "a" */)
+ } else {
+ g.pLog = libc.Xstdout
+ }
+
+ sqlite3.Xsqlite3_config(tls, 16, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(&struct {
+ f func(*libc.TLS, uintptr, int32, uintptr)
+ }{sqlErrorCallback})), 0))
+ if zClient != 0 {
+ iClient = libc.Xatoi(tls, zClient)
+ if iClient < 1 {
+ fatalError(tls, ts+2564 /* "illegal client n..." */, libc.VaList(bp+40, iClient))
+ }
+ sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([32]int8{})), uintptr(unsafe.Pointer(&g))+32 /* &.zName */, ts+2591, /* "%05d.client%02d" */
+ libc.VaList(bp+48, libc.Xgetpid(tls), iClient))
+ } else {
+ var nTry int32 = 0
+ if g.iTrace > 0 {
+ libc.Xprintf(tls, ts+2607 /* "BEGIN: %s" */, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + uintptr(0)*4))))
+ for i = 1; i < argc; i++ {
+ libc.Xprintf(tls, ts+2317 /* " %s" */, libc.VaList(bp+72, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))))
+ }
+ libc.Xprintf(tls, ts+2321 /* "\n" */, 0)
+ libc.Xprintf(tls, ts+2617 /* "With SQLite 3.33..." */, 0)
+ for i = 0; (libc.AssignUintptr(&zCOption, sqlite3.Xsqlite3_compileoption_get(tls, i))) != uintptr(0); i++ {
+ libc.Xprintf(tls, ts+2722 /* "-DSQLITE_%s\n" */, libc.VaList(bp+80, zCOption))
+ }
+ libc.Xfflush(tls, libc.Xstdout)
+ }
+ iClient = 0
+ for ok := true; ok; ok = (((rc != 0) && ((libc.PreIncInt32(&nTry, 1)) < 60)) && (sqlite3.Xsqlite3_sleep(tls, 1000) > 0)) {
+ if (nTry % 5) == 4 {
+ libc.Xprintf(tls, ts+2735, /* "... %strying to ..." */
+ libc.VaList(bp+88, func() uintptr {
+ if nTry > 5 {
+ return ts + 2764 /* "still " */
+ }
+ return ts + 1099 /* "" */
+ }(), g.zDbFile))
+ }
+ rc = libc.Xunlink(tls, g.zDbFile)
+ if (rc != 0) && ((*(*int32)(unsafe.Pointer(libc.X__errno_location(tls)))) == 2) {
+ rc = 0
+ }
+ }
+ if rc != 0 {
+ fatalError(tls, ts+2771, /* "unable to unlink..." */
+ libc.VaList(bp+104, g.zDbFile, nTry))
+ }
+ openFlags = openFlags | (0x00000004)
+ }
+ rc = sqlite3.Xsqlite3_open_v2(tls, g.zDbFile, (uintptr(unsafe.Pointer(&g)) + 12 /* &.db */), openFlags, g.zVfs)
+ if rc != 0 {
+ fatalError(tls, ts+2812 /* "cannot open [%s]" */, libc.VaList(bp+120, g.zDbFile))
+ }
+ if iTmout > 0 {
+ sqlite3.Xsqlite3_busy_timeout(tls, g.db, iTmout)
+ }
+
+ if zJMode != 0 {
+ runSql(tls, ts+2829 /* "PRAGMA journal_m..." */, libc.VaList(bp+128, zJMode))
+ }
+ if !(g.bSync != 0) {
+ trySql(tls, ts+2853 /* "PRAGMA synchrono..." */, 0)
+ }
+ sqlite3.Xsqlite3_enable_load_extension(tls, g.db, 1)
+ sqlite3.Xsqlite3_busy_handler(tls, g.db, *(*uintptr)(unsafe.Pointer(&struct {
+ f func(*libc.TLS, uintptr, int32) int32
+ }{busyHandler})), uintptr(0))
+ sqlite3.Xsqlite3_create_function(tls, g.db, ts+2876 /* "vfsname" */, 0, 1, uintptr(0),
+ *(*uintptr)(unsafe.Pointer(&struct {
+ f func(*libc.TLS, uintptr, int32, uintptr)
+ }{vfsNameFunc})), uintptr(0), uintptr(0))
+ sqlite3.Xsqlite3_create_function(tls, g.db, ts+2884 /* "eval" */, 1, 1, uintptr(0),
+ *(*uintptr)(unsafe.Pointer(&struct {
+ f func(*libc.TLS, uintptr, int32, uintptr)
+ }{evalFunc})), uintptr(0), uintptr(0))
+ g.iTimeout = 10000
+ if g.bSqlTrace != 0 {
+ sqlite3.Xsqlite3_trace(tls, g.db, *(*uintptr)(unsafe.Pointer(&struct {
+ f func(*libc.TLS, uintptr, uintptr)
+ }{sqlTraceCallback})), uintptr(0))
+ }
+ if iClient > 0 {
+ if *(*int32)(unsafe.Pointer(bp + 232 /* n */)) > 0 {
+ unrecognizedArguments(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(0)*4)), *(*int32)(unsafe.Pointer(bp + 232 /* n */)), (argv + uintptr(2)*4))
+ }
+ if g.iTrace != 0 {
+ logMessage(tls, ts+2889 /* "start-client" */, 0)
+ }
+ for 1 != 0 {
+ *(*uintptr)(unsafe.Pointer(bp + 244 /* zTaskName */)) = uintptr(0)
+ rc = startScript(tls, iClient, bp+236 /* &zScript */, bp+240 /* &taskId */, bp+244 /* &zTaskName */)
+ if rc == 101 {
+ break
+ }
+ if g.iTrace != 0 {
+ logMessage(tls, ts+2902 /* "begin %s (%d)" */, libc.VaList(bp+136, *(*uintptr)(unsafe.Pointer(bp + 244 /* zTaskName */)), *(*int32)(unsafe.Pointer(bp + 240 /* taskId */))))
+ }
+ runScript(tls, iClient, *(*int32)(unsafe.Pointer(bp + 240 /* taskId */)), *(*uintptr)(unsafe.Pointer(bp + 236 /* zScript */)), *(*uintptr)(unsafe.Pointer(bp + 244 /* zTaskName */)))
+ if g.iTrace != 0 {
+ logMessage(tls, ts+2916 /* "end %s (%d)" */, libc.VaList(bp+152, *(*uintptr)(unsafe.Pointer(bp + 244 /* zTaskName */)), *(*int32)(unsafe.Pointer(bp + 240 /* taskId */))))
+ }
+ finishScript(tls, iClient, *(*int32)(unsafe.Pointer(bp + 240 /* taskId */)), 0)
+ sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 244 /* zTaskName */)))
+ sqlite3.Xsqlite3_sleep(tls, 10)
+ }
+ if g.iTrace != 0 {
+ logMessage(tls, ts+2928 /* "end-client" */, 0)
+ }
+ } else {
+ var pStmt uintptr
+ var iTimeout int32
+ if *(*int32)(unsafe.Pointer(bp + 232 /* n */)) == 0 {
+ fatalError(tls, ts+2939 /* "missing script f..." */, 0)
+ }
+ if *(*int32)(unsafe.Pointer(bp + 232 /* n */)) > 1 {
+ unrecognizedArguments(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(0)*4)), *(*int32)(unsafe.Pointer(bp + 232 /* n */)), (argv + uintptr(2)*4))
+ }
+ runSql(tls,
+
+ ts+2963 /* "DROP TABLE IF EX..." */, 0)
+ *(*uintptr)(unsafe.Pointer(bp + 236 /* zScript */)) = readFile(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(2)*4)))
+ for iRep = 1; iRep <= nRep; iRep++ {
+ if g.iTrace != 0 {
+ logMessage(tls, ts+3399 /* "begin script [%s..." */, libc.VaList(bp+168, *(*uintptr)(unsafe.Pointer(argv + uintptr(2)*4)), iRep))
+ }
+ runScript(tls, 0, 0, *(*uintptr)(unsafe.Pointer(bp + 236 /* zScript */)), *(*uintptr)(unsafe.Pointer(argv + uintptr(2)*4)))
+ if g.iTrace != 0 {
+ logMessage(tls, ts+3427 /* "end script [%s] ..." */, libc.VaList(bp+184, *(*uintptr)(unsafe.Pointer(argv + uintptr(2)*4)), iRep))
+ }
+ }
+ sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 236 /* zScript */)))
+ waitForClient(tls, 0, 2000, ts+3453 /* "during shutdown...." */)
+ trySql(tls, ts+3473 /* "UPDATE client SE..." */, 0)
+ sqlite3.Xsqlite3_sleep(tls, 10)
+ g.iTimeout = 0
+ iTimeout = 1000
+ for (((libc.AssignInt32(&rc, trySql(tls, ts+3502 /* "SELECT 1 FROM cl..." */, 0))) == 5) ||
+ (rc == 100)) && (iTimeout > 0) {
+ sqlite3.Xsqlite3_sleep(tls, 10)
+ iTimeout = iTimeout - (10)
+ }
+ sqlite3.Xsqlite3_sleep(tls, 100)
+ pStmt = prepareSql(tls, ts+3523 /* "SELECT nError, n..." */, 0)
+ iTimeout = 1000
+ for ((libc.AssignInt32(&rc, sqlite3.Xsqlite3_step(tls, pStmt))) == 5) && (iTimeout > 0) {
+ sqlite3.Xsqlite3_sleep(tls, 10)
+ iTimeout = iTimeout - (10)
+ }
+ if rc == 100 {
+ *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g)) + 80 /* &.nError */)) += (sqlite3.Xsqlite3_column_int(tls, pStmt, 0))
+ *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g)) + 84 /* &.nTest */)) += (sqlite3.Xsqlite3_column_int(tls, pStmt, 1))
+ }
+ sqlite3.Xsqlite3_finalize(tls, pStmt)
+ }
+ sqlite3.Xsqlite3_close(tls, g.db)
+ maybeClose(tls, g.pLog)
+ maybeClose(tls, g.pErrLog)
+ if iClient == 0 {
+ libc.Xprintf(tls, ts+3558 /* "Summary: %d erro..." */, libc.VaList(bp+200, g.nError, g.nTest))
+ libc.Xprintf(tls, ts+3594 /* "END: %s" */, libc.VaList(bp+216, *(*uintptr)(unsafe.Pointer(argv + uintptr(0)*4))))
+ for i = 1; i < argc; i++ {
+ libc.Xprintf(tls, ts+2317 /* " %s" */, libc.VaList(bp+224, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*4))))
+ }
+ libc.Xprintf(tls, ts+2321 /* "\n" */, 0)
+ }
+ return (libc.Bool32(g.nError > 0))
+}
+
+var ts1 = "%s%.*s\n\x00%s:ERROR: \x00%s:FATAL: \x00UPDATE client SET wantHalt=1;\x00%s: \x00main\x00timeout after %dms\x00[%.*s]\x00(info) %s\x00(errcode=%d) %s\x00%s\n%s\n\x00out of memory\x00 \x00nil\x00'\x00error(%d)\x00BEGIN IMMEDIATE\x00in startScript: %s\x00UPDATE counters SET nError=nError+%d, nTest=nTest+%d\x00SELECT 1 FROM client WHERE id=%d AND wantHalt\x00DELETE FROM client WHERE id=%d\x00COMMIT TRANSACTION;\x00SELECT script, id, name FROM task WHERE client=%d AND starttime IS NULL ORDER BY id LIMIT 1\x00%s\x00UPDATE task SET starttime=strftime('%%Y-%%m-%%d %%H:%%M:%%f','now') WHERE id=%d;\x00Waited over 30 seconds with no work. Giving up.\x00DELETE FROM client WHERE id=%d; COMMIT;\x00COMMIT\x00UPDATE task SET endtime=strftime('%%Y-%%m-%%d %%H:%%M:%%f','now') WHERE id=%d;\x00INSERT OR IGNORE INTO client VALUES(%d,0)\x00%s \"%s\" --client %d --trace %d\x00%z --sqltrace\x00%z --sync\x00%z --vfs \"%s\"\x00system('%q')\x00%z &\x00system() fails with error code %d\x00rb\x00cannot open \"%s\" for reading\x00--end\x00--endif\x00--else\x00--if\x00SELECT 1 FROM task WHERE client=%d AND client IN (SELECT id FROM client) AND endtime IS NULL\x00SELECT 1 FROM task WHERE client IN (SELECT id FROM client) AND endtime IS NULL\x00\x00%stimeout waiting for client %d\x00%stimeout waiting for all clients\x00on\x00yes\x00off\x00no\x00unknown boolean: [%s]\x00%.*s\x00sleep\x00exit\x00testcase\x00finish\x00reset\x00match\x00line %d of %s:\nExpected [%.*s]\n Got [%s]\x00glob\x00notglob\x00line %d of %s:\nExpected [%s]\n Got [%s]\x00output\x00source\x00%.*s/%s\x00begin script [%s]\n\x00end script [%s]\n\x00print\x00if\x00SELECT %.*s\x00else\x00endif\x00start\x00wait\x00line %d of %s\n\x00task\x00line %d of %s: bad client number: %d\x00%s:%d\x00INSERT INTO task(client,script,name) VALUES(%d,'%q',%Q)\x00breakpoint\x00show-sql-errors\x00line %d of %s: unknown command --%s\x00command-line option \"--%s\" requires an argument\x00Usage: %s DATABASE ?OPTIONS? ?SCRIPT?\n\x00Options:\n --errlog FILENAME Write errors to FILENAME\n --journalmode MODE Use MODE as the journal_mode\n --log FILENAME Log messages to FILENAME\n --quiet Suppress unnecessary output\n --vfs NAME Use NAME as the VFS\n --repeat N Repeat the test N times\n --sqltrace Enable SQL tracing\n --sync Enable synchronous disk writes\n --timeout MILLISEC Busy timeout is MILLISEC\n --trace BOOLEAN Enable or disable tracing\n\x00%s: unrecognized arguments:\x00 %s\x00\n\x00*.test\x002020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f\x00SQLite library and header mismatch\nLibrary: %s\nHeader: %s\n\x00%05d.mptest\x00journalmode\x00repeat\x00vfs\x00client\x00errlog\x00log\x00trace\x00quiet\x00timeout\x00sqltrace\x00sync\x00a\x00illegal client number: %d\n\x00%05d.client%02d\x00BEGIN: %s\x00With SQLite 3.33.0 2020-08-14 13:23:32 fca8dc8b578f215a969cd899336378966156154710873e68b3d9ac5881b0ff3f\n\x00-DSQLITE_%s\n\x00... %strying to unlink '%s'\n\x00still \x00unable to unlink '%s' after %d attempts\n\x00cannot open [%s]\x00PRAGMA journal_mode=%Q;\x00PRAGMA synchronous=OFF\x00vfsname\x00eval\x00start-client\x00begin %s (%d)\x00end %s (%d)\x00end-client\x00missing script filename\x00DROP TABLE IF EXISTS task;\nDROP TABLE IF EXISTS counters;\nDROP TABLE IF EXISTS client;\nCREATE TABLE task(\n id INTEGER PRIMARY KEY,\n name TEXT,\n client INTEGER,\n starttime DATE,\n endtime DATE,\n script TEXT\n);CREATE INDEX task_i1 ON task(client, starttime);\nCREATE INDEX task_i2 ON task(client, endtime);\nCREATE TABLE counters(nError,nTest);\nINSERT INTO counters VALUES(0,0);\nCREATE TABLE client(id INTEGER PRIMARY KEY, wantHalt);\n\x00begin script [%s] cycle %d\n\x00end script [%s] cycle %d\n\x00during shutdown...\n\x00UPDATE client SET wantHalt=1\x00SELECT 1 FROM client\x00SELECT nError, nTest FROM counters\x00Summary: %d errors out of %d tests\n\x00END: %s\x00"
+var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data