gitlab.com/CoiaPrant/sqlite3@v1.19.1/internal/testfixture/testfixture_darwin_amd64.go (about) 1 // Code generated by 'ccgo -DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_SERIES_CONSTRAINT_VERIFY=1 -DSQLITE_SERVER=1 -DTCLSH_INIT_PROC=sqlite3TestInit -D_HAVE_SQLITE_CONFIG_H -export-defines "" -export-fields F -ignore-unsupported-alignment -trace-translation-units -volatile=sqlite3_io_error_pending,sqlite3_open_file_count,sqlite3_pager_readdb_count,sqlite3_pager_writedb_count,sqlite3_pager_writej_count,sqlite3_search_count,sqlite3_sort_count,saved_cnt -lgitlab.com/CoiaPrant/sqlite3/libtest -lmodernc.org/tcl/lib -lmodernc.org/z/lib -o internal/testfixture/testfixture_darwin_amd64.go -Itestdata/sqlite-src-3390300/ext/async -Itestdata/sqlite-src-3390300/ext/fts3 -Itestdata/sqlite-src-3390300/ext/icu -Itestdata/sqlite-src-3390300/ext/rtree -Itestdata/sqlite-src-3390300/ext/session -Itestdata/sqlite-src-3390300/ext/userauth -Itestdata/sqlite-src-3390300/src -Itestdata/sqlite-amalgamation-3390300 -Itestdata/sqlite-src-3390300 -full-path-comments testdata/sqlite-src-3390300/ext/expert/sqlite3expert.c testdata/sqlite-src-3390300/ext/expert/test_expert.c testdata/sqlite-src-3390300/ext/fts3/fts3_term.c testdata/sqlite-src-3390300/ext/fts3/fts3_test.c testdata/sqlite-src-3390300/ext/fts5/fts5_tcl.c testdata/sqlite-src-3390300/ext/fts5/fts5_test_mi.c testdata/sqlite-src-3390300/ext/fts5/fts5_test_tok.c testdata/sqlite-src-3390300/ext/misc/appendvfs.c testdata/sqlite-src-3390300/ext/misc/amatch.c testdata/sqlite-src-3390300/ext/misc/carray.c testdata/sqlite-src-3390300/ext/misc/cksumvfs.c testdata/sqlite-src-3390300/ext/misc/closure.c testdata/sqlite-src-3390300/ext/misc/csv.c testdata/sqlite-src-3390300/ext/misc/decimal.c testdata/sqlite-src-3390300/ext/misc/eval.c testdata/sqlite-src-3390300/ext/misc/explain.c testdata/sqlite-src-3390300/ext/misc/fileio.c testdata/sqlite-src-3390300/ext/misc/fuzzer.c testdata/sqlite-src-3390300/ext/misc/ieee754.c testdata/sqlite-src-3390300/ext/misc/mmapwarm.c testdata/sqlite-src-3390300/ext/misc/nextchar.c testdata/sqlite-src-3390300/ext/misc/normalize.c testdata/sqlite-src-3390300/ext/misc/percentile.c testdata/sqlite-src-3390300/ext/misc/prefixes.c testdata/sqlite-src-3390300/ext/misc/qpvtab.c testdata/sqlite-src-3390300/ext/misc/regexp.c testdata/sqlite-src-3390300/ext/misc/remember.c testdata/sqlite-src-3390300/ext/misc/series.c testdata/sqlite-src-3390300/ext/misc/spellfix.c testdata/sqlite-src-3390300/ext/misc/totype.c testdata/sqlite-src-3390300/ext/misc/unionvtab.c testdata/sqlite-src-3390300/ext/misc/wholenumber.c testdata/sqlite-src-3390300/ext/rbu/test_rbu.c testdata/sqlite-src-3390300/ext/rtree/test_rtreedoc.c testdata/sqlite-src-3390300/ext/session/test_session.c testdata/sqlite-src-3390300/ext/userauth/userauth.c testdata/sqlite-src-3390300/src/tclsqlite.c testdata/sqlite-src-3390300/src/test1.c testdata/sqlite-src-3390300/src/test2.c testdata/sqlite-src-3390300/src/test3.c testdata/sqlite-src-3390300/src/test4.c testdata/sqlite-src-3390300/src/test5.c testdata/sqlite-src-3390300/src/test6.c testdata/sqlite-src-3390300/src/test7.c testdata/sqlite-src-3390300/src/test8.c testdata/sqlite-src-3390300/src/test9.c testdata/sqlite-src-3390300/src/test_async.c testdata/sqlite-src-3390300/src/test_autoext.c testdata/sqlite-src-3390300/src/test_backup.c testdata/sqlite-src-3390300/src/test_bestindex.c testdata/sqlite-src-3390300/src/test_blob.c testdata/sqlite-src-3390300/src/test_btree.c testdata/sqlite-src-3390300/src/test_config.c testdata/sqlite-src-3390300/src/test_delete.c testdata/sqlite-src-3390300/src/test_demovfs.c testdata/sqlite-src-3390300/src/test_devsym.c testdata/sqlite-src-3390300/src/test_fs.c testdata/sqlite-src-3390300/src/test_func.c testdata/sqlite-src-3390300/src/test_hexio.c testdata/sqlite-src-3390300/src/test_init.c testdata/sqlite-src-3390300/src/test_intarray.c testdata/sqlite-src-3390300/src/test_journal.c testdata/sqlite-src-3390300/src/test_malloc.c testdata/sqlite-src-3390300/src/test_md5.c testdata/sqlite-src-3390300/src/test_multiplex.c testdata/sqlite-src-3390300/src/test_mutex.c testdata/sqlite-src-3390300/src/test_onefile.c testdata/sqlite-src-3390300/src/test_osinst.c testdata/sqlite-src-3390300/src/test_pcache.c testdata/sqlite-src-3390300/src/test_quota.c testdata/sqlite-src-3390300/src/test_rtree.c testdata/sqlite-src-3390300/src/test_schema.c testdata/sqlite-src-3390300/src/test_server.c testdata/sqlite-src-3390300/src/test_superlock.c testdata/sqlite-src-3390300/src/test_syscall.c testdata/sqlite-src-3390300/src/test_tclsh.c testdata/sqlite-src-3390300/src/test_tclvar.c testdata/sqlite-src-3390300/src/test_thread.c testdata/sqlite-src-3390300/src/test_vdbecov.c testdata/sqlite-src-3390300/src/test_vfs.c testdata/sqlite-src-3390300/src/test_windirent.c testdata/sqlite-src-3390300/src/test_window.c testdata/sqlite-src-3390300/src/test_wsd.c -DNDEBUG -DHAVE_USLEEP -DLONGDOUBLE_TYPE=double -DSQLITE_CKSUMVFS_STATIC -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_MATH_FUNCTIONS -DSQLITE_ENABLE_MEMORY_MANAGEMENT -DSQLITE_ENABLE_OFFSET_SQL_FUNC -DSQLITE_ENABLE_PREUPDATE_HOOK -DSQLITE_ENABLE_RBU -DSQLITE_ENABLE_RTREE -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_SNAPSHOT -DSQLITE_ENABLE_STAT4 -DSQLITE_ENABLE_STMTVTAB -DSQLITE_ENABLE_UNLOCK_NOTIFY -DSQLITE_LIKE_DOESNT_MATCH_BLOBS -DSQLITE_MUTEX_APPDEF=1 -DSQLITE_MUTEX_NOOP -DSQLITE_SOUNDEX -DSQLITE_TEMP_STORE=1 -DSQLITE_TEST -DSQLITE_THREADSAFE=1 -DSQLITE_OS_UNIX=1 -DSQLITE_WITHOUT_ZONEMALLOC', DO NOT EDIT. 2 3 package main 4 5 import ( 6 "math" 7 "reflect" 8 "sync/atomic" 9 "unsafe" 10 11 "modernc.org/libc" 12 "modernc.org/libc/sys/types" 13 "gitlab.com/CoiaPrant/sqlite3/libtest" 14 "modernc.org/tcl/lib" 15 ) 16 17 var _ = math.Pi 18 var _ reflect.Kind 19 var _ atomic.Value 20 var _ unsafe.Pointer 21 var _ *libc.TLS 22 var _ types.Size_t 23 24 func main() { libc.Start(main1) } 25 26 const ( 27 BUFSIZ = 1024 28 EOF = -1 29 EXPERT_CONFIG_SAMPLE = 1 30 EXPERT_REPORT_CANDIDATES = 4 31 EXPERT_REPORT_INDEXES = 2 32 EXPERT_REPORT_PLAN = 3 33 EXPERT_REPORT_SQL = 1 34 FILENAME_MAX = 1024 35 FOPEN_MAX = 20 36 FTS5_TOKENIZE_AUX = 0x0008 37 FTS5_TOKENIZE_DOCUMENT = 0x0004 38 FTS5_TOKENIZE_PREFIX = 0x0002 39 FTS5_TOKENIZE_QUERY = 0x0001 40 FTS5_TOKEN_COLOCATED = 0x0001 41 FULLY_WITHIN = 2 42 HAVE_USLEEP = 1 43 IDX_HASH_SIZE = 1023 44 L_ctermid = 1024 45 L_tmpnam = 1024 46 NDEBUG = 1 47 NOT_WITHIN = 0 48 PARTLY_WITHIN = 1 49 P_tmpdir = "/var/tmp/" 50 RENAME_EXCL = 0x00000004 51 RENAME_SECLUDE = 0x00000001 52 RENAME_SWAP = 0x00000002 53 SEEK_CUR = 1 54 SEEK_END = 2 55 SEEK_SET = 0 56 SQLITE3_H = 0 57 SQLITE3_TEXT = 3 58 SQLITEEXPERT_H = 1 59 SQLITE_ABORT = 4 60 SQLITE_ABORT_ROLLBACK = 516 61 SQLITE_ACCESS_EXISTS = 0 62 SQLITE_ACCESS_READ = 2 63 SQLITE_ACCESS_READWRITE = 1 64 SQLITE_ALTER_TABLE = 26 65 SQLITE_ANALYZE = 28 66 SQLITE_ANY = 5 67 SQLITE_API = 0 68 SQLITE_APICALL = 0 69 SQLITE_ATTACH = 24 70 SQLITE_AUTH = 23 71 SQLITE_AUTH_USER = 279 72 SQLITE_BLOB = 4 73 SQLITE_BUSY = 5 74 SQLITE_BUSY_RECOVERY = 261 75 SQLITE_BUSY_SNAPSHOT = 517 76 SQLITE_BUSY_TIMEOUT = 773 77 SQLITE_CALLBACK = 0 78 SQLITE_CANTOPEN = 14 79 SQLITE_CANTOPEN_CONVPATH = 1038 80 SQLITE_CANTOPEN_DIRTYWAL = 1294 81 SQLITE_CANTOPEN_FULLPATH = 782 82 SQLITE_CANTOPEN_ISDIR = 526 83 SQLITE_CANTOPEN_NOTEMPDIR = 270 84 SQLITE_CANTOPEN_SYMLINK = 1550 85 SQLITE_CDECL = 0 86 SQLITE_CHANGESETAPPLY_INVERT = 0x0002 87 SQLITE_CHANGESETAPPLY_NOSAVEPOINT = 0x0001 88 SQLITE_CHANGESETSTART_INVERT = 0x0002 89 SQLITE_CHANGESET_ABORT = 2 90 SQLITE_CHANGESET_CONFLICT = 3 91 SQLITE_CHANGESET_CONSTRAINT = 4 92 SQLITE_CHANGESET_DATA = 1 93 SQLITE_CHANGESET_FOREIGN_KEY = 5 94 SQLITE_CHANGESET_NOTFOUND = 2 95 SQLITE_CHANGESET_OMIT = 0 96 SQLITE_CHANGESET_REPLACE = 1 97 SQLITE_CHECKPOINT_FULL = 1 98 SQLITE_CHECKPOINT_PASSIVE = 0 99 SQLITE_CHECKPOINT_RESTART = 2 100 SQLITE_CHECKPOINT_TRUNCATE = 3 101 SQLITE_CKSUMVFS_STATIC = 1 102 SQLITE_CONFIG_COVERING_INDEX_SCAN = 20 103 SQLITE_CONFIG_GETMALLOC = 5 104 SQLITE_CONFIG_GETMUTEX = 11 105 SQLITE_CONFIG_GETPCACHE = 15 106 SQLITE_CONFIG_GETPCACHE2 = 19 107 SQLITE_CONFIG_HEAP = 8 108 SQLITE_CONFIG_LOG = 16 109 SQLITE_CONFIG_LOOKASIDE = 13 110 SQLITE_CONFIG_MALLOC = 4 111 SQLITE_CONFIG_MEMDB_MAXSIZE = 29 112 SQLITE_CONFIG_MEMSTATUS = 9 113 SQLITE_CONFIG_MMAP_SIZE = 22 114 SQLITE_CONFIG_MULTITHREAD = 2 115 SQLITE_CONFIG_MUTEX = 10 116 SQLITE_CONFIG_PAGECACHE = 7 117 SQLITE_CONFIG_PCACHE = 14 118 SQLITE_CONFIG_PCACHE2 = 18 119 SQLITE_CONFIG_PCACHE_HDRSZ = 24 120 SQLITE_CONFIG_PMASZ = 25 121 SQLITE_CONFIG_SCRATCH = 6 122 SQLITE_CONFIG_SERIALIZED = 3 123 SQLITE_CONFIG_SINGLETHREAD = 1 124 SQLITE_CONFIG_SMALL_MALLOC = 27 125 SQLITE_CONFIG_SORTERREF_SIZE = 28 126 SQLITE_CONFIG_SQLLOG = 21 127 SQLITE_CONFIG_STMTJRNL_SPILL = 26 128 SQLITE_CONFIG_URI = 17 129 SQLITE_CONFIG_WIN32_HEAPSIZE = 23 130 SQLITE_CONSTRAINT = 19 131 SQLITE_CONSTRAINT_CHECK = 275 132 SQLITE_CONSTRAINT_COMMITHOOK = 531 133 SQLITE_CONSTRAINT_DATATYPE = 3091 134 SQLITE_CONSTRAINT_FOREIGNKEY = 787 135 SQLITE_CONSTRAINT_FUNCTION = 1043 136 SQLITE_CONSTRAINT_NOTNULL = 1299 137 SQLITE_CONSTRAINT_PINNED = 2835 138 SQLITE_CONSTRAINT_PRIMARYKEY = 1555 139 SQLITE_CONSTRAINT_ROWID = 2579 140 SQLITE_CONSTRAINT_TRIGGER = 1811 141 SQLITE_CONSTRAINT_UNIQUE = 2067 142 SQLITE_CONSTRAINT_VTAB = 2323 143 SQLITE_COPY = 0 144 SQLITE_CORE = 1 145 SQLITE_CORRUPT = 11 146 SQLITE_CORRUPT_INDEX = 779 147 SQLITE_CORRUPT_SEQUENCE = 523 148 SQLITE_CORRUPT_VTAB = 267 149 SQLITE_CREATE_INDEX = 1 150 SQLITE_CREATE_TABLE = 2 151 SQLITE_CREATE_TEMP_INDEX = 3 152 SQLITE_CREATE_TEMP_TABLE = 4 153 SQLITE_CREATE_TEMP_TRIGGER = 5 154 SQLITE_CREATE_TEMP_VIEW = 6 155 SQLITE_CREATE_TRIGGER = 7 156 SQLITE_CREATE_VIEW = 8 157 SQLITE_CREATE_VTABLE = 29 158 SQLITE_DBCONFIG_DEFENSIVE = 1010 159 SQLITE_DBCONFIG_DQS_DDL = 1014 160 SQLITE_DBCONFIG_DQS_DML = 1013 161 SQLITE_DBCONFIG_ENABLE_FKEY = 1002 162 SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER = 1004 163 SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION = 1005 164 SQLITE_DBCONFIG_ENABLE_QPSG = 1007 165 SQLITE_DBCONFIG_ENABLE_TRIGGER = 1003 166 SQLITE_DBCONFIG_ENABLE_VIEW = 1015 167 SQLITE_DBCONFIG_LEGACY_ALTER_TABLE = 1012 168 SQLITE_DBCONFIG_LEGACY_FILE_FORMAT = 1016 169 SQLITE_DBCONFIG_LOOKASIDE = 1001 170 SQLITE_DBCONFIG_MAINDBNAME = 1000 171 SQLITE_DBCONFIG_MAX = 1017 172 SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE = 1006 173 SQLITE_DBCONFIG_RESET_DATABASE = 1009 174 SQLITE_DBCONFIG_TRIGGER_EQP = 1008 175 SQLITE_DBCONFIG_TRUSTED_SCHEMA = 1017 176 SQLITE_DBCONFIG_WRITABLE_SCHEMA = 1011 177 SQLITE_DBSTATUS_CACHE_HIT = 7 178 SQLITE_DBSTATUS_CACHE_MISS = 8 179 SQLITE_DBSTATUS_CACHE_SPILL = 12 180 SQLITE_DBSTATUS_CACHE_USED = 1 181 SQLITE_DBSTATUS_CACHE_USED_SHARED = 11 182 SQLITE_DBSTATUS_CACHE_WRITE = 9 183 SQLITE_DBSTATUS_DEFERRED_FKS = 10 184 SQLITE_DBSTATUS_LOOKASIDE_HIT = 4 185 SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL = 6 186 SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE = 5 187 SQLITE_DBSTATUS_LOOKASIDE_USED = 0 188 SQLITE_DBSTATUS_MAX = 12 189 SQLITE_DBSTATUS_SCHEMA_USED = 2 190 SQLITE_DBSTATUS_STMT_USED = 3 191 SQLITE_DEFAULT_MEMSTATUS = 0 192 SQLITE_DEFAULT_PAGE_SIZE = 1024 193 SQLITE_DELETE = 9 194 SQLITE_DENY = 1 195 SQLITE_DEPRECATED = 0 196 SQLITE_DESERIALIZE_FREEONCLOSE = 1 197 SQLITE_DESERIALIZE_READONLY = 4 198 SQLITE_DESERIALIZE_RESIZEABLE = 2 199 SQLITE_DETACH = 25 200 SQLITE_DETERMINISTIC = 0x000000800 201 SQLITE_DIRECTONLY = 0x000080000 202 SQLITE_DONE = 101 203 SQLITE_DROP_INDEX = 10 204 SQLITE_DROP_TABLE = 11 205 SQLITE_DROP_TEMP_INDEX = 12 206 SQLITE_DROP_TEMP_TABLE = 13 207 SQLITE_DROP_TEMP_TRIGGER = 14 208 SQLITE_DROP_TEMP_VIEW = 15 209 SQLITE_DROP_TRIGGER = 16 210 SQLITE_DROP_VIEW = 17 211 SQLITE_DROP_VTABLE = 30 212 SQLITE_EMPTY = 16 213 SQLITE_ENABLE_BYTECODE_VTAB = 1 214 SQLITE_ENABLE_COLUMN_METADATA = 1 215 SQLITE_ENABLE_DBPAGE_VTAB = 1 216 SQLITE_ENABLE_DBSTAT_VTAB = 1 217 SQLITE_ENABLE_DESERIALIZE = 1 218 SQLITE_ENABLE_EXPLAIN_COMMENTS = 1 219 SQLITE_ENABLE_FTS5 = 1 220 SQLITE_ENABLE_GEOPOLY = 1 221 SQLITE_ENABLE_MATH_FUNCTIONS = 1 222 SQLITE_ENABLE_MEMORY_MANAGEMENT = 1 223 SQLITE_ENABLE_OFFSET_SQL_FUNC = 1 224 SQLITE_ENABLE_PREUPDATE_HOOK = 1 225 SQLITE_ENABLE_RBU = 1 226 SQLITE_ENABLE_RTREE = 1 227 SQLITE_ENABLE_SESSION = 1 228 SQLITE_ENABLE_SNAPSHOT = 1 229 SQLITE_ENABLE_STAT4 = 1 230 SQLITE_ENABLE_STMTVTAB = 1 231 SQLITE_ENABLE_UNLOCK_NOTIFY = 1 232 SQLITE_ERROR = 1 233 SQLITE_ERROR_MISSING_COLLSEQ = 257 234 SQLITE_ERROR_RETRY = 513 235 SQLITE_ERROR_SNAPSHOT = 769 236 SQLITE_EXPERIMENTAL = 0 237 SQLITE_FAIL = 3 238 SQLITE_FCNTL_BEGIN_ATOMIC_WRITE = 31 239 SQLITE_FCNTL_BUSYHANDLER = 15 240 SQLITE_FCNTL_CHUNK_SIZE = 6 241 SQLITE_FCNTL_CKPT_DONE = 37 242 SQLITE_FCNTL_CKPT_START = 39 243 SQLITE_FCNTL_CKSM_FILE = 41 244 SQLITE_FCNTL_COMMIT_ATOMIC_WRITE = 32 245 SQLITE_FCNTL_COMMIT_PHASETWO = 22 246 SQLITE_FCNTL_DATA_VERSION = 35 247 SQLITE_FCNTL_EXTERNAL_READER = 40 248 SQLITE_FCNTL_FILE_POINTER = 7 249 SQLITE_FCNTL_GET_LOCKPROXYFILE = 2 250 SQLITE_FCNTL_HAS_MOVED = 20 251 SQLITE_FCNTL_JOURNAL_POINTER = 28 252 SQLITE_FCNTL_LAST_ERRNO = 4 253 SQLITE_FCNTL_LOCKSTATE = 1 254 SQLITE_FCNTL_LOCK_TIMEOUT = 34 255 SQLITE_FCNTL_MMAP_SIZE = 18 256 SQLITE_FCNTL_OVERWRITE = 11 257 SQLITE_FCNTL_PDB = 30 258 SQLITE_FCNTL_PERSIST_WAL = 10 259 SQLITE_FCNTL_POWERSAFE_OVERWRITE = 13 260 SQLITE_FCNTL_PRAGMA = 14 261 SQLITE_FCNTL_RBU = 26 262 SQLITE_FCNTL_RESERVE_BYTES = 38 263 SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE = 33 264 SQLITE_FCNTL_SET_LOCKPROXYFILE = 3 265 SQLITE_FCNTL_SIZE_HINT = 5 266 SQLITE_FCNTL_SIZE_LIMIT = 36 267 SQLITE_FCNTL_SYNC = 21 268 SQLITE_FCNTL_SYNC_OMITTED = 8 269 SQLITE_FCNTL_TEMPFILENAME = 16 270 SQLITE_FCNTL_TRACE = 19 271 SQLITE_FCNTL_VFSNAME = 12 272 SQLITE_FCNTL_VFS_POINTER = 27 273 SQLITE_FCNTL_WAL_BLOCK = 24 274 SQLITE_FCNTL_WIN32_AV_RETRY = 9 275 SQLITE_FCNTL_WIN32_GET_HANDLE = 29 276 SQLITE_FCNTL_WIN32_SET_HANDLE = 23 277 SQLITE_FCNTL_ZIPVFS = 25 278 SQLITE_FLOAT = 2 279 SQLITE_FORMAT = 24 280 SQLITE_FULL = 13 281 SQLITE_FUNCTION = 31 282 SQLITE_GET_LOCKPROXYFILE = 2 283 SQLITE_IGNORE = 2 284 SQLITE_INDEX_CONSTRAINT_EQ = 2 285 SQLITE_INDEX_CONSTRAINT_FUNCTION = 150 286 SQLITE_INDEX_CONSTRAINT_GE = 32 287 SQLITE_INDEX_CONSTRAINT_GLOB = 66 288 SQLITE_INDEX_CONSTRAINT_GT = 4 289 SQLITE_INDEX_CONSTRAINT_IS = 72 290 SQLITE_INDEX_CONSTRAINT_ISNOT = 69 291 SQLITE_INDEX_CONSTRAINT_ISNOTNULL = 70 292 SQLITE_INDEX_CONSTRAINT_ISNULL = 71 293 SQLITE_INDEX_CONSTRAINT_LE = 8 294 SQLITE_INDEX_CONSTRAINT_LIKE = 65 295 SQLITE_INDEX_CONSTRAINT_LIMIT = 73 296 SQLITE_INDEX_CONSTRAINT_LT = 16 297 SQLITE_INDEX_CONSTRAINT_MATCH = 64 298 SQLITE_INDEX_CONSTRAINT_NE = 68 299 SQLITE_INDEX_CONSTRAINT_OFFSET = 74 300 SQLITE_INDEX_CONSTRAINT_REGEXP = 67 301 SQLITE_INDEX_SCAN_UNIQUE = 1 302 SQLITE_INNOCUOUS = 0x000200000 303 SQLITE_INSERT = 18 304 SQLITE_INTEGER = 1 305 SQLITE_INTERNAL = 2 306 SQLITE_INTERRUPT = 9 307 SQLITE_IOCAP_ATOMIC = 0x00000001 308 SQLITE_IOCAP_ATOMIC16K = 0x00000040 309 SQLITE_IOCAP_ATOMIC1K = 0x00000004 310 SQLITE_IOCAP_ATOMIC2K = 0x00000008 311 SQLITE_IOCAP_ATOMIC32K = 0x00000080 312 SQLITE_IOCAP_ATOMIC4K = 0x00000010 313 SQLITE_IOCAP_ATOMIC512 = 0x00000002 314 SQLITE_IOCAP_ATOMIC64K = 0x00000100 315 SQLITE_IOCAP_ATOMIC8K = 0x00000020 316 SQLITE_IOCAP_BATCH_ATOMIC = 0x00004000 317 SQLITE_IOCAP_IMMUTABLE = 0x00002000 318 SQLITE_IOCAP_POWERSAFE_OVERWRITE = 0x00001000 319 SQLITE_IOCAP_SAFE_APPEND = 0x00000200 320 SQLITE_IOCAP_SEQUENTIAL = 0x00000400 321 SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN = 0x00000800 322 SQLITE_IOERR = 10 323 SQLITE_IOERR_ACCESS = 3338 324 SQLITE_IOERR_AUTH = 7178 325 SQLITE_IOERR_BEGIN_ATOMIC = 7434 326 SQLITE_IOERR_BLOCKED = 2826 327 SQLITE_IOERR_CHECKRESERVEDLOCK = 3594 328 SQLITE_IOERR_CLOSE = 4106 329 SQLITE_IOERR_COMMIT_ATOMIC = 7690 330 SQLITE_IOERR_CONVPATH = 6666 331 SQLITE_IOERR_CORRUPTFS = 8458 332 SQLITE_IOERR_DATA = 8202 333 SQLITE_IOERR_DELETE = 2570 334 SQLITE_IOERR_DELETE_NOENT = 5898 335 SQLITE_IOERR_DIR_CLOSE = 4362 336 SQLITE_IOERR_DIR_FSYNC = 1290 337 SQLITE_IOERR_FSTAT = 1802 338 SQLITE_IOERR_FSYNC = 1034 339 SQLITE_IOERR_GETTEMPPATH = 6410 340 SQLITE_IOERR_LOCK = 3850 341 SQLITE_IOERR_MMAP = 6154 342 SQLITE_IOERR_NOMEM = 3082 343 SQLITE_IOERR_RDLOCK = 2314 344 SQLITE_IOERR_READ = 266 345 SQLITE_IOERR_ROLLBACK_ATOMIC = 7946 346 SQLITE_IOERR_SEEK = 5642 347 SQLITE_IOERR_SHMLOCK = 5130 348 SQLITE_IOERR_SHMMAP = 5386 349 SQLITE_IOERR_SHMOPEN = 4618 350 SQLITE_IOERR_SHMSIZE = 4874 351 SQLITE_IOERR_SHORT_READ = 522 352 SQLITE_IOERR_TRUNCATE = 1546 353 SQLITE_IOERR_UNLOCK = 2058 354 SQLITE_IOERR_VNODE = 6922 355 SQLITE_IOERR_WRITE = 778 356 SQLITE_LAST_ERRNO = 4 357 SQLITE_LIKE_DOESNT_MATCH_BLOBS = 1 358 SQLITE_LIMIT_ATTACHED = 7 359 SQLITE_LIMIT_COLUMN = 2 360 SQLITE_LIMIT_COMPOUND_SELECT = 4 361 SQLITE_LIMIT_EXPR_DEPTH = 3 362 SQLITE_LIMIT_FUNCTION_ARG = 6 363 SQLITE_LIMIT_LENGTH = 0 364 SQLITE_LIMIT_LIKE_PATTERN_LENGTH = 8 365 SQLITE_LIMIT_SQL_LENGTH = 1 366 SQLITE_LIMIT_TRIGGER_DEPTH = 10 367 SQLITE_LIMIT_VARIABLE_NUMBER = 9 368 SQLITE_LIMIT_VDBE_OP = 5 369 SQLITE_LIMIT_WORKER_THREADS = 11 370 SQLITE_LOCKED = 6 371 SQLITE_LOCKED_SHAREDCACHE = 262 372 SQLITE_LOCKED_VTAB = 518 373 SQLITE_LOCK_EXCLUSIVE = 4 374 SQLITE_LOCK_NONE = 0 375 SQLITE_LOCK_PENDING = 3 376 SQLITE_LOCK_RESERVED = 2 377 SQLITE_LOCK_SHARED = 1 378 SQLITE_MISMATCH = 20 379 SQLITE_MISUSE = 21 380 SQLITE_MUTEX_APPDEF = 1 381 SQLITE_MUTEX_FAST = 0 382 SQLITE_MUTEX_NOOP = 1 383 SQLITE_MUTEX_RECURSIVE = 1 384 SQLITE_MUTEX_STATIC_APP1 = 8 385 SQLITE_MUTEX_STATIC_APP2 = 9 386 SQLITE_MUTEX_STATIC_APP3 = 10 387 SQLITE_MUTEX_STATIC_LRU = 6 388 SQLITE_MUTEX_STATIC_LRU2 = 7 389 SQLITE_MUTEX_STATIC_MAIN = 2 390 SQLITE_MUTEX_STATIC_MASTER = 2 391 SQLITE_MUTEX_STATIC_MEM = 3 392 SQLITE_MUTEX_STATIC_MEM2 = 4 393 SQLITE_MUTEX_STATIC_OPEN = 4 394 SQLITE_MUTEX_STATIC_PMEM = 7 395 SQLITE_MUTEX_STATIC_PRNG = 5 396 SQLITE_MUTEX_STATIC_VFS1 = 11 397 SQLITE_MUTEX_STATIC_VFS2 = 12 398 SQLITE_MUTEX_STATIC_VFS3 = 13 399 SQLITE_NOLFS = 22 400 SQLITE_NOMEM = 7 401 SQLITE_NOTADB = 26 402 SQLITE_NOTFOUND = 12 403 SQLITE_NOTICE = 27 404 SQLITE_NOTICE_RECOVER_ROLLBACK = 539 405 SQLITE_NOTICE_RECOVER_WAL = 283 406 SQLITE_NULL = 5 407 SQLITE_OK = 0 408 SQLITE_OK_LOAD_PERMANENTLY = 256 409 SQLITE_OK_SYMLINK = 512 410 SQLITE_OMIT_LOAD_EXTENSION = 1 411 SQLITE_OPEN_AUTOPROXY = 0x00000020 412 SQLITE_OPEN_CREATE = 0x00000004 413 SQLITE_OPEN_DELETEONCLOSE = 0x00000008 414 SQLITE_OPEN_EXCLUSIVE = 0x00000010 415 SQLITE_OPEN_EXRESCODE = 0x02000000 416 SQLITE_OPEN_FULLMUTEX = 0x00010000 417 SQLITE_OPEN_MAIN_DB = 0x00000100 418 SQLITE_OPEN_MAIN_JOURNAL = 0x00000800 419 SQLITE_OPEN_MASTER_JOURNAL = 0x00004000 420 SQLITE_OPEN_MEMORY = 0x00000080 421 SQLITE_OPEN_NOFOLLOW = 0x01000000 422 SQLITE_OPEN_NOMUTEX = 0x00008000 423 SQLITE_OPEN_PRIVATECACHE = 0x00040000 424 SQLITE_OPEN_READONLY = 0x00000001 425 SQLITE_OPEN_READWRITE = 0x00000002 426 SQLITE_OPEN_SHAREDCACHE = 0x00020000 427 SQLITE_OPEN_SUBJOURNAL = 0x00002000 428 SQLITE_OPEN_SUPER_JOURNAL = 0x00004000 429 SQLITE_OPEN_TEMP_DB = 0x00000200 430 SQLITE_OPEN_TEMP_JOURNAL = 0x00001000 431 SQLITE_OPEN_TRANSIENT_DB = 0x00000400 432 SQLITE_OPEN_URI = 0x00000040 433 SQLITE_OPEN_WAL = 0x00080000 434 SQLITE_OS_UNIX = 1 435 SQLITE_PERM = 3 436 SQLITE_PRAGMA = 19 437 SQLITE_PREPARE_NORMALIZE = 0x02 438 SQLITE_PREPARE_NO_VTAB = 0x04 439 SQLITE_PREPARE_PERSISTENT = 0x01 440 SQLITE_PROTOCOL = 15 441 SQLITE_RANGE = 25 442 SQLITE_READ = 20 443 SQLITE_READONLY = 8 444 SQLITE_READONLY_CANTINIT = 1288 445 SQLITE_READONLY_CANTLOCK = 520 446 SQLITE_READONLY_DBMOVED = 1032 447 SQLITE_READONLY_DIRECTORY = 1544 448 SQLITE_READONLY_RECOVERY = 264 449 SQLITE_READONLY_ROLLBACK = 776 450 SQLITE_RECURSIVE = 33 451 SQLITE_REINDEX = 27 452 SQLITE_REPLACE = 5 453 SQLITE_ROLLBACK = 1 454 SQLITE_ROW = 100 455 SQLITE_SAVEPOINT = 32 456 SQLITE_SCANSTAT_EST = 2 457 SQLITE_SCANSTAT_EXPLAIN = 4 458 SQLITE_SCANSTAT_NAME = 3 459 SQLITE_SCANSTAT_NLOOP = 0 460 SQLITE_SCANSTAT_NVISIT = 1 461 SQLITE_SCANSTAT_SELECTID = 5 462 SQLITE_SCHEMA = 17 463 SQLITE_SELECT = 21 464 SQLITE_SERIALIZE_NOCOPY = 0x001 465 SQLITE_SERIES_CONSTRAINT_VERIFY = 1 466 SQLITE_SERVER = 1 467 SQLITE_SESSION_CONFIG_STRMSIZE = 1 468 SQLITE_SESSION_OBJCONFIG_SIZE = 1 469 SQLITE_SET_LOCKPROXYFILE = 3 470 SQLITE_SHM_EXCLUSIVE = 8 471 SQLITE_SHM_LOCK = 2 472 SQLITE_SHM_NLOCK = 8 473 SQLITE_SHM_SHARED = 4 474 SQLITE_SHM_UNLOCK = 1 475 SQLITE_SOUNDEX = 1 476 SQLITE_SOURCE_ID = "2022-09-05 11:02:23 4635f4a69c8c2a8df242b384a992aea71224e39a2ccab42d8c0b0602f1e826e8" 477 SQLITE_STATUS_MALLOC_COUNT = 9 478 SQLITE_STATUS_MALLOC_SIZE = 5 479 SQLITE_STATUS_MEMORY_USED = 0 480 SQLITE_STATUS_PAGECACHE_OVERFLOW = 2 481 SQLITE_STATUS_PAGECACHE_SIZE = 7 482 SQLITE_STATUS_PAGECACHE_USED = 1 483 SQLITE_STATUS_PARSER_STACK = 6 484 SQLITE_STATUS_SCRATCH_OVERFLOW = 4 485 SQLITE_STATUS_SCRATCH_SIZE = 8 486 SQLITE_STATUS_SCRATCH_USED = 3 487 SQLITE_STDCALL = 0 488 SQLITE_STMTSTATUS_AUTOINDEX = 3 489 SQLITE_STMTSTATUS_FILTER_HIT = 8 490 SQLITE_STMTSTATUS_FILTER_MISS = 7 491 SQLITE_STMTSTATUS_FULLSCAN_STEP = 1 492 SQLITE_STMTSTATUS_MEMUSED = 99 493 SQLITE_STMTSTATUS_REPREPARE = 5 494 SQLITE_STMTSTATUS_RUN = 6 495 SQLITE_STMTSTATUS_SORT = 2 496 SQLITE_STMTSTATUS_VM_STEP = 4 497 SQLITE_SUBTYPE = 0x000100000 498 SQLITE_SYNC_DATAONLY = 0x00010 499 SQLITE_SYNC_FULL = 0x00003 500 SQLITE_SYNC_NORMAL = 0x00002 501 SQLITE_SYSAPI = 0 502 SQLITE_TEMP_STORE = 1 503 SQLITE_TEST = 1 504 SQLITE_TESTCTRL_ALWAYS = 13 505 SQLITE_TESTCTRL_ASSERT = 12 506 SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS = 10 507 SQLITE_TESTCTRL_BITVEC_TEST = 8 508 SQLITE_TESTCTRL_BYTEORDER = 22 509 SQLITE_TESTCTRL_EXPLAIN_STMT = 19 510 SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS = 29 511 SQLITE_TESTCTRL_FAULT_INSTALL = 9 512 SQLITE_TESTCTRL_FIRST = 5 513 SQLITE_TESTCTRL_IMPOSTER = 25 514 SQLITE_TESTCTRL_INTERNAL_FUNCTIONS = 17 515 SQLITE_TESTCTRL_ISINIT = 23 516 SQLITE_TESTCTRL_ISKEYWORD = 16 517 SQLITE_TESTCTRL_LAST = 33 518 SQLITE_TESTCTRL_LOCALTIME_FAULT = 18 519 SQLITE_TESTCTRL_LOGEST = 33 520 SQLITE_TESTCTRL_NEVER_CORRUPT = 20 521 SQLITE_TESTCTRL_ONCE_RESET_THRESHOLD = 19 522 SQLITE_TESTCTRL_OPTIMIZATIONS = 15 523 SQLITE_TESTCTRL_PARSER_COVERAGE = 26 524 SQLITE_TESTCTRL_PENDING_BYTE = 11 525 SQLITE_TESTCTRL_PRNG_RESET = 7 526 SQLITE_TESTCTRL_PRNG_RESTORE = 6 527 SQLITE_TESTCTRL_PRNG_SAVE = 5 528 SQLITE_TESTCTRL_PRNG_SEED = 28 529 SQLITE_TESTCTRL_RESERVE = 14 530 SQLITE_TESTCTRL_RESULT_INTREAL = 27 531 SQLITE_TESTCTRL_SCRATCHMALLOC = 17 532 SQLITE_TESTCTRL_SEEK_COUNT = 30 533 SQLITE_TESTCTRL_SORTER_MMAP = 24 534 SQLITE_TESTCTRL_TRACEFLAGS = 31 535 SQLITE_TESTCTRL_TUNE = 32 536 SQLITE_TESTCTRL_VDBE_COVERAGE = 21 537 SQLITE_TEXT = 3 538 SQLITE_THREADSAFE = 1 539 SQLITE_TOOBIG = 18 540 SQLITE_TRACE_CLOSE = 0x08 541 SQLITE_TRACE_PROFILE = 0x02 542 SQLITE_TRACE_ROW = 0x04 543 SQLITE_TRACE_STMT = 0x01 544 SQLITE_TRANSACTION = 22 545 SQLITE_TXN_NONE = 0 546 SQLITE_TXN_READ = 1 547 SQLITE_TXN_WRITE = 2 548 SQLITE_UPDATE = 23 549 SQLITE_UTF16 = 4 550 SQLITE_UTF16BE = 3 551 SQLITE_UTF16LE = 2 552 SQLITE_UTF16_ALIGNED = 8 553 SQLITE_UTF8 = 1 554 SQLITE_VERSION = "3.39.3" 555 SQLITE_VERSION_NUMBER = 3039003 556 SQLITE_VTAB_CONSTRAINT_SUPPORT = 1 557 SQLITE_VTAB_DIRECTONLY = 3 558 SQLITE_VTAB_INNOCUOUS = 2 559 SQLITE_WARNING = 28 560 SQLITE_WARNING_AUTOINDEX = 284 561 SQLITE_WIN32_DATA_DIRECTORY_TYPE = 1 562 SQLITE_WIN32_TEMP_DIRECTORY_TYPE = 2 563 SQLITE_WITHOUT_ZONEMALLOC = 1 564 TMP_MAX = 308915776 565 UNIQUE_TABLE_NAME = "t592690916721053953805701627921227776" 566 X_ASSERT_H_ = 0 567 X_BSD_I386__TYPES_H_ = 0 568 X_BSD_MACHINE_TYPES_H_ = 0 569 X_BSD_MACHINE__TYPES_H_ = 0 570 X_CDEFS_H_ = 0 571 X_CTERMID_H_ = 0 572 X_DARWIN_FEATURE_64_BIT_INODE = 1 573 X_DARWIN_FEATURE_ONLY_UNIX_CONFORMANCE = 1 574 X_DARWIN_FEATURE_UNIX_CONFORMANCE = 3 575 X_ERRNO_T = 0 576 X_FILE_OFFSET_BITS = 64 577 X_FORTIFY_SOURCE = 2 578 X_FSTDIO = 0 579 X_FTS5_H = 0 580 X_HAVE_SQLITE_CONFIG_H = 1 581 X_INT16_T = 0 582 X_INT32_T = 0 583 X_INT64_T = 0 584 X_INT8_T = 0 585 X_INTPTR_T = 0 586 X_IOFBF = 0 587 X_IOLBF = 1 588 X_IONBF = 2 589 X_LP64 = 1 590 X_MACHTYPES_H_ = 0 591 X_Nonnull = 0 592 X_Null_unspecified = 0 593 X_Nullable = 0 594 X_OFF_T = 0 595 X_RSIZE_T = 0 596 X_SECURE__COMMON_H_ = 0 597 X_SECURE__STDIO_H_ = 0 598 X_SECURE__STRINGS_H_ = 0 599 X_SECURE__STRING_H_ = 0 600 X_SIZE_T = 0 601 X_SQLITE3RTREE_H_ = 0 602 X_SSIZE_T = 0 603 X_STDIO_H_ = 0 604 X_STRINGS_H_ = 0 605 X_STRING_H_ = 0 606 X_SYS_STDIO_H_ = 0 607 X_SYS__PTHREAD_TYPES_H_ = 0 608 X_SYS__TYPES_H_ = 0 609 X_UINTPTR_T = 0 610 X_USE_FORTIFY_LEVEL = 2 611 X_U_INT16_T = 0 612 X_U_INT32_T = 0 613 X_U_INT64_T = 0 614 X_U_INT8_T = 0 615 X_VA_LIST = 0 616 X_VA_LIST_T = 0 617 CRTIMPORT = 0 618 DLLIMPORT = 0 619 INLINE = 0 620 MP_DIGIT_DECLARED = 0 621 MP_INT_DECLARED = 0 622 NUM_STATIC_TOKENS = 20 623 SQLITE_TCLAPI = 0 624 TCL_ALLOW_INLINE_COMPILATION = 0x20000 625 TCL_ALL_EVENTS = -3 626 TCL_ALPHA_RELEASE = 0 627 TCL_APPEND_VALUE = 4 628 TCL_BETA_RELEASE = 1 629 TCL_BREAK = 3 630 TCL_CFG_DO64BIT = 1 631 TCL_CHANNEL_THREAD_INSERT = 0 632 TCL_CHANNEL_THREAD_REMOVE = 1 633 TCL_CLOSE_READ = 2 634 TCL_CLOSE_WRITE = 4 635 TCL_CONTINUE = 4 636 TCL_CONVERT_MULTIBYTE = -1 637 TCL_CONVERT_NOSPACE = -4 638 TCL_CONVERT_SYNTAX = -2 639 TCL_CONVERT_UNKNOWN = -3 640 TCL_CREATE_HARD_LINK = 0x02 641 TCL_CREATE_SYMBOLIC_LINK = 0x01 642 TCL_CUSTOM_PTR_KEYS = -1 643 TCL_CUSTOM_TYPE_KEYS = -2 644 TCL_DONT_QUOTE_HASH = 8 645 TCL_DONT_USE_BRACES = 1 646 TCL_DONT_WAIT = 2 647 TCL_DOUBLE_SPACE = 27 648 TCL_DSTRING_STATIC_SIZE = 200 649 TCL_ENCODING_END = 0x02 650 TCL_ENCODING_START = 0x01 651 TCL_ENCODING_STOPONERROR = 0x04 652 TCL_ENFORCE_MODE = 16 653 TCL_ENSEMBLE_PREFIX = 0x02 654 TCL_ERROR = 1 655 TCL_EVAL_DIRECT = 0x40000 656 TCL_EVAL_GLOBAL = 0x20000 657 TCL_EVAL_INVOKE = 0x80000 658 TCL_EXACT = 1 659 TCL_EXCEPTION = 8 660 TCL_FILE_EVENTS = 8 661 TCL_FINAL_RELEASE = 2 662 TCL_GLOBAL_ONLY = 1 663 TCL_GLOB_PERM_HIDDEN = 2 664 TCL_GLOB_PERM_R = 4 665 TCL_GLOB_PERM_RONLY = 1 666 TCL_GLOB_PERM_W = 8 667 TCL_GLOB_PERM_X = 16 668 TCL_GLOB_TYPE_BLOCK = 1 669 TCL_GLOB_TYPE_CHAR = 2 670 TCL_GLOB_TYPE_DIR = 4 671 TCL_GLOB_TYPE_FILE = 16 672 TCL_GLOB_TYPE_LINK = 32 673 TCL_GLOB_TYPE_MOUNT = 128 674 TCL_GLOB_TYPE_PIPE = 8 675 TCL_GLOB_TYPE_SOCK = 64 676 TCL_HASH_KEY_RANDOMIZE_HASH = 0x1 677 TCL_HASH_KEY_STORE_HASH = 1 678 TCL_HASH_KEY_SYSTEM_HASH = 0x2 679 TCL_HASH_KEY_TYPE_VERSION = 1 680 TCL_IDLE_EVENTS = 32 681 TCL_INTEGER_SPACE = 24 682 TCL_INTERP_DESTROYED = 0x100 683 TCL_LEAVE_ERR_MSG = 0x200 684 TCL_LIMIT_COMMANDS = 0x01 685 TCL_LIMIT_TIME = 0x02 686 TCL_LINK_BOOLEAN = 3 687 TCL_LINK_CHAR = 6 688 TCL_LINK_DOUBLE = 2 689 TCL_LINK_FLOAT = 13 690 TCL_LINK_INT = 1 691 TCL_LINK_LONG = 11 692 TCL_LINK_READ_ONLY = 0x80 693 TCL_LINK_SHORT = 8 694 TCL_LINK_STRING = 4 695 TCL_LINK_UCHAR = 7 696 TCL_LINK_UINT = 10 697 TCL_LINK_ULONG = 12 698 TCL_LINK_USHORT = 9 699 TCL_LINK_WIDE_INT = 5 700 TCL_LINK_WIDE_UINT = 14 701 TCL_LIST_ELEMENT = 8 702 TCL_LL_MODIFIER = "l" 703 TCL_MAJOR_VERSION = 8 704 TCL_MATCH_NOCASE = 1 705 TCL_MAX_PREC = 17 706 TCL_MINOR_VERSION = 5 707 TCL_MODE_BLOCKING = 0 708 TCL_MODE_NONBLOCKING = 1 709 TCL_NAMESPACE_ONLY = 2 710 TCL_NO_EVAL = 0x10000 711 TCL_OK = 0 712 TCL_ONE_WORD_KEYS = 1 713 TCL_PARSE_BAD_NUMBER = 9 714 TCL_PARSE_BRACE_EXTRA = 2 715 TCL_PARSE_MISSING_BRACE = 3 716 TCL_PARSE_MISSING_BRACKET = 4 717 TCL_PARSE_MISSING_PAREN = 5 718 TCL_PARSE_MISSING_QUOTE = 6 719 TCL_PARSE_MISSING_VAR_BRACE = 7 720 TCL_PARSE_PART1 = 0x400 721 TCL_PARSE_QUOTE_EXTRA = 1 722 TCL_PARSE_SUCCESS = 0 723 TCL_PARSE_SYNTAX = 8 724 TCL_PATCH_LEVEL = "8.5.9" 725 TCL_READABLE = 2 726 TCL_REG_ADVANCED = 000003 727 TCL_REG_ADVF = 000002 728 TCL_REG_BASIC = 000000 729 TCL_REG_CANMATCH = 001000 730 TCL_REG_EXPANDED = 000040 731 TCL_REG_EXTENDED = 000001 732 TCL_REG_NEWLINE = 000300 733 TCL_REG_NLANCH = 000200 734 TCL_REG_NLSTOP = 000100 735 TCL_REG_NOCASE = 000010 736 TCL_REG_NOSUB = 000020 737 TCL_REG_NOTBOL = 0001 738 TCL_REG_NOTEOL = 0002 739 TCL_REG_QUOTE = 000004 740 TCL_RELEASE_LEVEL = 2 741 TCL_RELEASE_SERIAL = 9 742 TCL_RESULT_SIZE = 200 743 TCL_RETURN = 2 744 TCL_SERVICE_ALL = 1 745 TCL_SERVICE_NONE = 0 746 TCL_SMALL_HASH_TABLE = 4 747 TCL_STDERR = 8 748 TCL_STDIN = 2 749 TCL_STDOUT = 4 750 TCL_STORAGE_CLASS = 0 751 TCL_STRING_KEYS = 0 752 TCL_SUBST_ALL = 007 753 TCL_SUBST_BACKSLASHES = 004 754 TCL_SUBST_COMMANDS = 001 755 TCL_SUBST_VARIABLES = 002 756 TCL_THREAD_CREATE_RETURN = 0 757 TCL_THREAD_JOINABLE = 1 758 TCL_THREAD_NOFLAGS = 0 759 TCL_THREAD_STACK_DEFAULT = 0 760 TCL_TIMER_EVENTS = 16 761 TCL_TOKEN_BS = 8 762 TCL_TOKEN_COMMAND = 16 763 TCL_TOKEN_EXPAND_WORD = 256 764 TCL_TOKEN_OPERATOR = 128 765 TCL_TOKEN_SIMPLE_WORD = 2 766 TCL_TOKEN_SUB_EXPR = 64 767 TCL_TOKEN_TEXT = 4 768 TCL_TOKEN_VARIABLE = 32 769 TCL_TOKEN_WORD = 1 770 TCL_TRACE_ARRAY = 0x800 771 TCL_TRACE_DELETE = 0x4000 772 TCL_TRACE_DESTROYED = 0x80 773 TCL_TRACE_OLD_STYLE = 0x1000 774 TCL_TRACE_READS = 0x10 775 TCL_TRACE_RENAME = 0x2000 776 TCL_TRACE_RESULT_DYNAMIC = 0x8000 777 TCL_TRACE_RESULT_OBJECT = 0x10000 778 TCL_TRACE_UNSETS = 0x40 779 TCL_TRACE_WRITES = 0x20 780 TCL_UNLOAD_DETACH_FROM_INTERPRETER = 1 781 TCL_UNLOAD_DETACH_FROM_PROCESS = 2 782 TCL_UTF_MAX = 3 783 TCL_VERSION = "8.5" 784 TCL_WIDE_INT_IS_LONG = 1 785 TCL_WINDOW_EVENTS = 4 786 TCL_WRITABLE = 4 787 TclFreeObj_TCL_DECLARED = 0 788 Tcl_Access_TCL_DECLARED = 0 789 Tcl_AddErrorInfo_TCL_DECLARED = 0 790 Tcl_AddObjErrorInfo_TCL_DECLARED = 0 791 Tcl_AlertNotifier_TCL_DECLARED = 0 792 Tcl_AllocStatBuf_TCL_DECLARED = 0 793 Tcl_Alloc_TCL_DECLARED = 0 794 Tcl_AllowExceptions_TCL_DECLARED = 0 795 Tcl_AppendAllObjTypes_TCL_DECLARED = 0 796 Tcl_AppendElement_TCL_DECLARED = 0 797 Tcl_AppendExportList_TCL_DECLARED = 0 798 Tcl_AppendFormatToObj_TCL_DECLARED = 0 799 Tcl_AppendLimitedToObj_TCL_DECLARED = 0 800 Tcl_AppendObjToErrorInfo_TCL_DECLARED = 0 801 Tcl_AppendObjToObj_TCL_DECLARED = 0 802 Tcl_AppendPrintfToObj_TCL_DECLARED = 0 803 Tcl_AppendResultVA_TCL_DECLARED = 0 804 Tcl_AppendResult_TCL_DECLARED = 0 805 Tcl_AppendStringsToObjVA_TCL_DECLARED = 0 806 Tcl_AppendStringsToObj_TCL_DECLARED = 0 807 Tcl_AppendToObj_TCL_DECLARED = 0 808 Tcl_AppendUnicodeToObj_TCL_DECLARED = 0 809 Tcl_AsyncCreate_TCL_DECLARED = 0 810 Tcl_AsyncDelete_TCL_DECLARED = 0 811 Tcl_AsyncInvoke_TCL_DECLARED = 0 812 Tcl_AsyncMark_TCL_DECLARED = 0 813 Tcl_AsyncReady_TCL_DECLARED = 0 814 Tcl_AttemptAlloc_TCL_DECLARED = 0 815 Tcl_AttemptDbCkalloc_TCL_DECLARED = 0 816 Tcl_AttemptDbCkrealloc_TCL_DECLARED = 0 817 Tcl_AttemptRealloc_TCL_DECLARED = 0 818 Tcl_AttemptSetObjLength_TCL_DECLARED = 0 819 Tcl_BackgroundError_TCL_DECLARED = 0 820 Tcl_Backslash_TCL_DECLARED = 0 821 Tcl_BadChannelOption_TCL_DECLARED = 0 822 Tcl_CallWhenDeleted_TCL_DECLARED = 0 823 Tcl_CancelIdleCall_TCL_DECLARED = 0 824 Tcl_ChannelBlockModeProc_TCL_DECLARED = 0 825 Tcl_ChannelBuffered_TCL_DECLARED = 0 826 Tcl_ChannelClose2Proc_TCL_DECLARED = 0 827 Tcl_ChannelCloseProc_TCL_DECLARED = 0 828 Tcl_ChannelFlushProc_TCL_DECLARED = 0 829 Tcl_ChannelGetHandleProc_TCL_DECLARED = 0 830 Tcl_ChannelGetOptionProc_TCL_DECLARED = 0 831 Tcl_ChannelHandlerProc_TCL_DECLARED = 0 832 Tcl_ChannelInputProc_TCL_DECLARED = 0 833 Tcl_ChannelName_TCL_DECLARED = 0 834 Tcl_ChannelOutputProc_TCL_DECLARED = 0 835 Tcl_ChannelSeekProc_TCL_DECLARED = 0 836 Tcl_ChannelSetOptionProc_TCL_DECLARED = 0 837 Tcl_ChannelThreadActionProc_TCL_DECLARED = 0 838 Tcl_ChannelTruncateProc_TCL_DECLARED = 0 839 Tcl_ChannelVersion_TCL_DECLARED = 0 840 Tcl_ChannelWatchProc_TCL_DECLARED = 0 841 Tcl_ChannelWideSeekProc_TCL_DECLARED = 0 842 Tcl_Chdir_TCL_DECLARED = 0 843 Tcl_ClearChannelHandlers_TCL_DECLARED = 0 844 Tcl_Close_TCL_DECLARED = 0 845 Tcl_CommandComplete_TCL_DECLARED = 0 846 Tcl_CommandTraceInfo_TCL_DECLARED = 0 847 Tcl_ConcatObj_TCL_DECLARED = 0 848 Tcl_Concat_TCL_DECLARED = 0 849 Tcl_ConditionFinalize_TCL_DECLARED = 0 850 Tcl_ConditionNotify_TCL_DECLARED = 0 851 Tcl_ConditionWait_TCL_DECLARED = 0 852 Tcl_ConvertCountedElement_TCL_DECLARED = 0 853 Tcl_ConvertElement_TCL_DECLARED = 0 854 Tcl_ConvertToType_TCL_DECLARED = 0 855 Tcl_CreateAliasObj_TCL_DECLARED = 0 856 Tcl_CreateAlias_TCL_DECLARED = 0 857 Tcl_CreateChannelHandler_TCL_DECLARED = 0 858 Tcl_CreateChannel_TCL_DECLARED = 0 859 Tcl_CreateCloseHandler_TCL_DECLARED = 0 860 Tcl_CreateCommand_TCL_DECLARED = 0 861 Tcl_CreateEncoding_TCL_DECLARED = 0 862 Tcl_CreateEnsemble_TCL_DECLARED = 0 863 Tcl_CreateEventSource_TCL_DECLARED = 0 864 Tcl_CreateExitHandler_TCL_DECLARED = 0 865 Tcl_CreateFileHandler_TCL_DECLARED = 0 866 Tcl_CreateHashEntry_TCL_DECLARED = 0 867 Tcl_CreateInterp_TCL_DECLARED = 0 868 Tcl_CreateMathFunc_TCL_DECLARED = 0 869 Tcl_CreateNamespace_TCL_DECLARED = 0 870 Tcl_CreateObjCommand_TCL_DECLARED = 0 871 Tcl_CreateObjTrace_TCL_DECLARED = 0 872 Tcl_CreateSlave_TCL_DECLARED = 0 873 Tcl_CreateThreadExitHandler_TCL_DECLARED = 0 874 Tcl_CreateThread_TCL_DECLARED = 0 875 Tcl_CreateTimerHandler_TCL_DECLARED = 0 876 Tcl_CreateTrace_TCL_DECLARED = 0 877 Tcl_CutChannel_TCL_DECLARED = 0 878 Tcl_DStringAppendElement_TCL_DECLARED = 0 879 Tcl_DStringAppend_TCL_DECLARED = 0 880 Tcl_DStringEndSublist_TCL_DECLARED = 0 881 Tcl_DStringFree_TCL_DECLARED = 0 882 Tcl_DStringGetResult_TCL_DECLARED = 0 883 Tcl_DStringInit_TCL_DECLARED = 0 884 Tcl_DStringResult_TCL_DECLARED = 0 885 Tcl_DStringSetLength_TCL_DECLARED = 0 886 Tcl_DStringStartSublist_TCL_DECLARED = 0 887 Tcl_DbCkalloc_TCL_DECLARED = 0 888 Tcl_DbCkfree_TCL_DECLARED = 0 889 Tcl_DbCkrealloc_TCL_DECLARED = 0 890 Tcl_DbDecrRefCount_TCL_DECLARED = 0 891 Tcl_DbIncrRefCount_TCL_DECLARED = 0 892 Tcl_DbIsShared_TCL_DECLARED = 0 893 Tcl_DbNewBignumObj_TCL_DECLARED = 0 894 Tcl_DbNewBooleanObj_TCL_DECLARED = 0 895 Tcl_DbNewByteArrayObj_TCL_DECLARED = 0 896 Tcl_DbNewDictObj_TCL_DECLARED = 0 897 Tcl_DbNewDoubleObj_TCL_DECLARED = 0 898 Tcl_DbNewListObj_TCL_DECLARED = 0 899 Tcl_DbNewLongObj_TCL_DECLARED = 0 900 Tcl_DbNewObj_TCL_DECLARED = 0 901 Tcl_DbNewStringObj_TCL_DECLARED = 0 902 Tcl_DbNewWideIntObj_TCL_DECLARED = 0 903 Tcl_DeleteAssocData_TCL_DECLARED = 0 904 Tcl_DeleteChannelHandler_TCL_DECLARED = 0 905 Tcl_DeleteCloseHandler_TCL_DECLARED = 0 906 Tcl_DeleteCommandFromToken_TCL_DECLARED = 0 907 Tcl_DeleteCommand_TCL_DECLARED = 0 908 Tcl_DeleteEventSource_TCL_DECLARED = 0 909 Tcl_DeleteEvents_TCL_DECLARED = 0 910 Tcl_DeleteExitHandler_TCL_DECLARED = 0 911 Tcl_DeleteFileHandler_TCL_DECLARED = 0 912 Tcl_DeleteHashEntry_TCL_DECLARED = 0 913 Tcl_DeleteHashTable_TCL_DECLARED = 0 914 Tcl_DeleteInterp_TCL_DECLARED = 0 915 Tcl_DeleteNamespace_TCL_DECLARED = 0 916 Tcl_DeleteThreadExitHandler_TCL_DECLARED = 0 917 Tcl_DeleteTimerHandler_TCL_DECLARED = 0 918 Tcl_DeleteTrace_TCL_DECLARED = 0 919 Tcl_DetachChannel_TCL_DECLARED = 0 920 Tcl_DetachPids_TCL_DECLARED = 0 921 Tcl_DictObjDone_TCL_DECLARED = 0 922 Tcl_DictObjFirst_TCL_DECLARED = 0 923 Tcl_DictObjGet_TCL_DECLARED = 0 924 Tcl_DictObjNext_TCL_DECLARED = 0 925 Tcl_DictObjPutKeyList_TCL_DECLARED = 0 926 Tcl_DictObjPut_TCL_DECLARED = 0 927 Tcl_DictObjRemoveKeyList_TCL_DECLARED = 0 928 Tcl_DictObjRemove_TCL_DECLARED = 0 929 Tcl_DictObjSize_TCL_DECLARED = 0 930 Tcl_DiscardInterpState_TCL_DECLARED = 0 931 Tcl_DiscardResult_TCL_DECLARED = 0 932 Tcl_DoOneEvent_TCL_DECLARED = 0 933 Tcl_DoWhenIdle_TCL_DECLARED = 0 934 Tcl_DontCallWhenDeleted_TCL_DECLARED = 0 935 Tcl_DumpActiveMemory_TCL_DECLARED = 0 936 Tcl_DuplicateObj_TCL_DECLARED = 0 937 Tcl_Eof_TCL_DECLARED = 0 938 Tcl_ErrnoId_TCL_DECLARED = 0 939 Tcl_ErrnoMsg_TCL_DECLARED = 0 940 Tcl_EvalEx_TCL_DECLARED = 0 941 Tcl_EvalFile_TCL_DECLARED = 0 942 Tcl_EvalObjEx_TCL_DECLARED = 0 943 Tcl_EvalObj_TCL_DECLARED = 0 944 Tcl_EvalObjv_TCL_DECLARED = 0 945 Tcl_EvalTokensStandard_TCL_DECLARED = 0 946 Tcl_EvalTokens_TCL_DECLARED = 0 947 Tcl_Eval_TCL_DECLARED = 0 948 Tcl_EventuallyFree_TCL_DECLARED = 0 949 Tcl_ExitThread_TCL_DECLARED = 0 950 Tcl_Exit_TCL_DECLARED = 0 951 Tcl_Export_TCL_DECLARED = 0 952 Tcl_ExposeCommand_TCL_DECLARED = 0 953 Tcl_ExprBooleanObj_TCL_DECLARED = 0 954 Tcl_ExprBoolean_TCL_DECLARED = 0 955 Tcl_ExprDoubleObj_TCL_DECLARED = 0 956 Tcl_ExprDouble_TCL_DECLARED = 0 957 Tcl_ExprLongObj_TCL_DECLARED = 0 958 Tcl_ExprLong_TCL_DECLARED = 0 959 Tcl_ExprObj_TCL_DECLARED = 0 960 Tcl_ExprString_TCL_DECLARED = 0 961 Tcl_ExternalToUtfDString_TCL_DECLARED = 0 962 Tcl_ExternalToUtf_TCL_DECLARED = 0 963 Tcl_FSAccess_TCL_DECLARED = 0 964 Tcl_FSChdir_TCL_DECLARED = 0 965 Tcl_FSConvertToPathType_TCL_DECLARED = 0 966 Tcl_FSCopyDirectory_TCL_DECLARED = 0 967 Tcl_FSCopyFile_TCL_DECLARED = 0 968 Tcl_FSCreateDirectory_TCL_DECLARED = 0 969 Tcl_FSData_TCL_DECLARED = 0 970 Tcl_FSDeleteFile_TCL_DECLARED = 0 971 Tcl_FSEqualPaths_TCL_DECLARED = 0 972 Tcl_FSEvalFileEx_TCL_DECLARED = 0 973 Tcl_FSEvalFile_TCL_DECLARED = 0 974 Tcl_FSFileAttrStrings_TCL_DECLARED = 0 975 Tcl_FSFileAttrsGet_TCL_DECLARED = 0 976 Tcl_FSFileAttrsSet_TCL_DECLARED = 0 977 Tcl_FSFileSystemInfo_TCL_DECLARED = 0 978 Tcl_FSGetCwd_TCL_DECLARED = 0 979 Tcl_FSGetFileSystemForPath_TCL_DECLARED = 0 980 Tcl_FSGetInternalRep_TCL_DECLARED = 0 981 Tcl_FSGetNativePath_TCL_DECLARED = 0 982 Tcl_FSGetNormalizedPath_TCL_DECLARED = 0 983 Tcl_FSGetPathType_TCL_DECLARED = 0 984 Tcl_FSGetTranslatedPath_TCL_DECLARED = 0 985 Tcl_FSGetTranslatedStringPath_TCL_DECLARED = 0 986 Tcl_FSJoinPath_TCL_DECLARED = 0 987 Tcl_FSJoinToPath_TCL_DECLARED = 0 988 Tcl_FSLink_TCL_DECLARED = 0 989 Tcl_FSListVolumes_TCL_DECLARED = 0 990 Tcl_FSLoadFile_TCL_DECLARED = 0 991 Tcl_FSLstat_TCL_DECLARED = 0 992 Tcl_FSMatchInDirectory_TCL_DECLARED = 0 993 Tcl_FSMountsChanged_TCL_DECLARED = 0 994 Tcl_FSNewNativePath_TCL_DECLARED = 0 995 Tcl_FSOpenFileChannel_TCL_DECLARED = 0 996 Tcl_FSPathSeparator_TCL_DECLARED = 0 997 Tcl_FSRegister_TCL_DECLARED = 0 998 Tcl_FSRemoveDirectory_TCL_DECLARED = 0 999 Tcl_FSRenameFile_TCL_DECLARED = 0 1000 Tcl_FSSplitPath_TCL_DECLARED = 0 1001 Tcl_FSStat_TCL_DECLARED = 0 1002 Tcl_FSUnregister_TCL_DECLARED = 0 1003 Tcl_FSUtime_TCL_DECLARED = 0 1004 Tcl_FinalizeNotifier_TCL_DECLARED = 0 1005 Tcl_FinalizeThread_TCL_DECLARED = 0 1006 Tcl_Finalize_TCL_DECLARED = 0 1007 Tcl_FindCommand_TCL_DECLARED = 0 1008 Tcl_FindEnsemble_TCL_DECLARED = 0 1009 Tcl_FindExecutable_TCL_DECLARED = 0 1010 Tcl_FindHashEntry_TCL_DECLARED = 0 1011 Tcl_FindNamespace_TCL_DECLARED = 0 1012 Tcl_FirstHashEntry_TCL_DECLARED = 0 1013 Tcl_Flush_TCL_DECLARED = 0 1014 Tcl_ForgetImport_TCL_DECLARED = 0 1015 Tcl_Format_TCL_DECLARED = 0 1016 Tcl_FreeEncoding_TCL_DECLARED = 0 1017 Tcl_FreeParse_TCL_DECLARED = 0 1018 Tcl_FreeResult_TCL_DECLARED = 0 1019 Tcl_Free_TCL_DECLARED = 0 1020 Tcl_GetAliasObj_TCL_DECLARED = 0 1021 Tcl_GetAlias_TCL_DECLARED = 0 1022 Tcl_GetAllocMutex_TCL_DECLARED = 0 1023 Tcl_GetAssocData_TCL_DECLARED = 0 1024 Tcl_GetBignumFromObj_TCL_DECLARED = 0 1025 Tcl_GetBooleanFromObj_TCL_DECLARED = 0 1026 Tcl_GetBoolean_TCL_DECLARED = 0 1027 Tcl_GetByteArrayFromObj_TCL_DECLARED = 0 1028 Tcl_GetChannelBufferSize_TCL_DECLARED = 0 1029 Tcl_GetChannelErrorInterp_TCL_DECLARED = 0 1030 Tcl_GetChannelError_TCL_DECLARED = 0 1031 Tcl_GetChannelHandle_TCL_DECLARED = 0 1032 Tcl_GetChannelInstanceData_TCL_DECLARED = 0 1033 Tcl_GetChannelMode_TCL_DECLARED = 0 1034 Tcl_GetChannelName_TCL_DECLARED = 0 1035 Tcl_GetChannelNamesEx_TCL_DECLARED = 0 1036 Tcl_GetChannelNames_TCL_DECLARED = 0 1037 Tcl_GetChannelOption_TCL_DECLARED = 0 1038 Tcl_GetChannelThread_TCL_DECLARED = 0 1039 Tcl_GetChannelType_TCL_DECLARED = 0 1040 Tcl_GetChannel_TCL_DECLARED = 0 1041 Tcl_GetCharLength_TCL_DECLARED = 0 1042 Tcl_GetCommandFromObj_TCL_DECLARED = 0 1043 Tcl_GetCommandFullName_TCL_DECLARED = 0 1044 Tcl_GetCommandInfoFromToken_TCL_DECLARED = 0 1045 Tcl_GetCommandInfo_TCL_DECLARED = 0 1046 Tcl_GetCommandName_TCL_DECLARED = 0 1047 Tcl_GetCurrentNamespace_TCL_DECLARED = 0 1048 Tcl_GetCurrentThread_TCL_DECLARED = 0 1049 Tcl_GetCwd_TCL_DECLARED = 0 1050 Tcl_GetDefaultEncodingDir_TCL_DECLARED = 0 1051 Tcl_GetDoubleFromObj_TCL_DECLARED = 0 1052 Tcl_GetDouble_TCL_DECLARED = 0 1053 Tcl_GetEncodingFromObj_TCL_DECLARED = 0 1054 Tcl_GetEncodingNameFromEnvironment_TCL_DECLARED = 0 1055 Tcl_GetEncodingName_TCL_DECLARED = 0 1056 Tcl_GetEncodingNames_TCL_DECLARED = 0 1057 Tcl_GetEncodingSearchPath_TCL_DECLARED = 0 1058 Tcl_GetEncoding_TCL_DECLARED = 0 1059 Tcl_GetEnsembleFlags_TCL_DECLARED = 0 1060 Tcl_GetEnsembleMappingDict_TCL_DECLARED = 0 1061 Tcl_GetEnsembleNamespace_TCL_DECLARED = 0 1062 Tcl_GetEnsembleSubcommandList_TCL_DECLARED = 0 1063 Tcl_GetEnsembleUnknownHandler_TCL_DECLARED = 0 1064 Tcl_GetErrno_TCL_DECLARED = 0 1065 Tcl_GetGlobalNamespace_TCL_DECLARED = 0 1066 Tcl_GetHostName_TCL_DECLARED = 0 1067 Tcl_GetIndexFromObjStruct_TCL_DECLARED = 0 1068 Tcl_GetIndexFromObj_TCL_DECLARED = 0 1069 Tcl_GetIntFromObj_TCL_DECLARED = 0 1070 Tcl_GetInt_TCL_DECLARED = 0 1071 Tcl_GetInterpPath_TCL_DECLARED = 0 1072 Tcl_GetLongFromObj_TCL_DECLARED = 0 1073 Tcl_GetMaster_TCL_DECLARED = 0 1074 Tcl_GetMathFuncInfo_TCL_DECLARED = 0 1075 Tcl_GetNameOfExecutable_TCL_DECLARED = 0 1076 Tcl_GetNamespaceUnknownHandler_TCL_DECLARED = 0 1077 Tcl_GetObjResult_TCL_DECLARED = 0 1078 Tcl_GetObjType_TCL_DECLARED = 0 1079 Tcl_GetOpenFile_TCL_DECLARED = 0 1080 Tcl_GetPathType_TCL_DECLARED = 0 1081 Tcl_GetRange_TCL_DECLARED = 0 1082 Tcl_GetRegExpFromObj_TCL_DECLARED = 0 1083 Tcl_GetReturnOptions_TCL_DECLARED = 0 1084 Tcl_GetServiceMode_TCL_DECLARED = 0 1085 Tcl_GetSlave_TCL_DECLARED = 0 1086 Tcl_GetStackedChannel_TCL_DECLARED = 0 1087 Tcl_GetStdChannel_TCL_DECLARED = 0 1088 Tcl_GetStringFromObj_TCL_DECLARED = 0 1089 Tcl_GetStringResult_TCL_DECLARED = 0 1090 Tcl_GetString_TCL_DECLARED = 0 1091 Tcl_GetThreadData_TCL_DECLARED = 0 1092 Tcl_GetTime_TCL_DECLARED = 0 1093 Tcl_GetTopChannel_TCL_DECLARED = 0 1094 Tcl_GetUniChar_TCL_DECLARED = 0 1095 Tcl_GetUnicodeFromObj_TCL_DECLARED = 0 1096 Tcl_GetUnicode_TCL_DECLARED = 0 1097 Tcl_GetVar2Ex_TCL_DECLARED = 0 1098 Tcl_GetVar2_TCL_DECLARED = 0 1099 Tcl_GetVar_TCL_DECLARED = 0 1100 Tcl_GetVersion_TCL_DECLARED = 0 1101 Tcl_GetWideIntFromObj_TCL_DECLARED = 0 1102 Tcl_GetsObj_TCL_DECLARED = 0 1103 Tcl_Gets_TCL_DECLARED = 0 1104 Tcl_GlobalEvalObj_TCL_DECLARED = 0 1105 Tcl_GlobalEval_TCL_DECLARED = 0 1106 Tcl_HashStats_TCL_DECLARED = 0 1107 Tcl_HideCommand_TCL_DECLARED = 0 1108 Tcl_Import_TCL_DECLARED = 0 1109 Tcl_InitBignumFromDouble_TCL_DECLARED = 0 1110 Tcl_InitCustomHashTable_TCL_DECLARED = 0 1111 Tcl_InitHashTable_TCL_DECLARED = 0 1112 Tcl_InitMemory_TCL_DECLARED = 0 1113 Tcl_InitNotifier_TCL_DECLARED = 0 1114 Tcl_InitObjHashTable_TCL_DECLARED = 0 1115 Tcl_Init_TCL_DECLARED = 0 1116 Tcl_InputBlocked_TCL_DECLARED = 0 1117 Tcl_InputBuffered_TCL_DECLARED = 0 1118 Tcl_InterpDeleted_TCL_DECLARED = 0 1119 Tcl_InvalidateStringRep_TCL_DECLARED = 0 1120 Tcl_IsChannelExisting_TCL_DECLARED = 0 1121 Tcl_IsChannelRegistered_TCL_DECLARED = 0 1122 Tcl_IsChannelShared_TCL_DECLARED = 0 1123 Tcl_IsEnsemble_TCL_DECLARED = 0 1124 Tcl_IsSafe_TCL_DECLARED = 0 1125 Tcl_IsStandardChannel_TCL_DECLARED = 0 1126 Tcl_JoinPath_TCL_DECLARED = 0 1127 Tcl_JoinThread_TCL_DECLARED = 0 1128 Tcl_LimitAddHandler_TCL_DECLARED = 0 1129 Tcl_LimitCheck_TCL_DECLARED = 0 1130 Tcl_LimitExceeded_TCL_DECLARED = 0 1131 Tcl_LimitGetCommands_TCL_DECLARED = 0 1132 Tcl_LimitGetGranularity_TCL_DECLARED = 0 1133 Tcl_LimitGetTime_TCL_DECLARED = 0 1134 Tcl_LimitReady_TCL_DECLARED = 0 1135 Tcl_LimitRemoveHandler_TCL_DECLARED = 0 1136 Tcl_LimitSetCommands_TCL_DECLARED = 0 1137 Tcl_LimitSetGranularity_TCL_DECLARED = 0 1138 Tcl_LimitSetTime_TCL_DECLARED = 0 1139 Tcl_LimitTypeEnabled_TCL_DECLARED = 0 1140 Tcl_LimitTypeExceeded_TCL_DECLARED = 0 1141 Tcl_LimitTypeReset_TCL_DECLARED = 0 1142 Tcl_LimitTypeSet_TCL_DECLARED = 0 1143 Tcl_LinkVar_TCL_DECLARED = 0 1144 Tcl_ListMathFuncs_TCL_DECLARED = 0 1145 Tcl_ListObjAppendElement_TCL_DECLARED = 0 1146 Tcl_ListObjAppendList_TCL_DECLARED = 0 1147 Tcl_ListObjGetElements_TCL_DECLARED = 0 1148 Tcl_ListObjIndex_TCL_DECLARED = 0 1149 Tcl_ListObjLength_TCL_DECLARED = 0 1150 Tcl_ListObjReplace_TCL_DECLARED = 0 1151 Tcl_LogCommandInfo_TCL_DECLARED = 0 1152 Tcl_MakeFileChannel_TCL_DECLARED = 0 1153 Tcl_MakeSafe_TCL_DECLARED = 0 1154 Tcl_MakeTcpClientChannel_TCL_DECLARED = 0 1155 Tcl_Merge_TCL_DECLARED = 0 1156 Tcl_MutexFinalize_TCL_DECLARED = 0 1157 Tcl_MutexLock_TCL_DECLARED = 0 1158 Tcl_MutexUnlock_TCL_DECLARED = 0 1159 Tcl_NewBignumObj_TCL_DECLARED = 0 1160 Tcl_NewBooleanObj_TCL_DECLARED = 0 1161 Tcl_NewByteArrayObj_TCL_DECLARED = 0 1162 Tcl_NewDictObj_TCL_DECLARED = 0 1163 Tcl_NewDoubleObj_TCL_DECLARED = 0 1164 Tcl_NewIntObj_TCL_DECLARED = 0 1165 Tcl_NewListObj_TCL_DECLARED = 0 1166 Tcl_NewLongObj_TCL_DECLARED = 0 1167 Tcl_NewObj_TCL_DECLARED = 0 1168 Tcl_NewStringObj_TCL_DECLARED = 0 1169 Tcl_NewUnicodeObj_TCL_DECLARED = 0 1170 Tcl_NewWideIntObj_TCL_DECLARED = 0 1171 Tcl_NextHashEntry_TCL_DECLARED = 0 1172 Tcl_NotifyChannel_TCL_DECLARED = 0 1173 Tcl_NumUtfChars_TCL_DECLARED = 0 1174 Tcl_ObjGetVar2_TCL_DECLARED = 0 1175 Tcl_ObjPrintf_TCL_DECLARED = 0 1176 Tcl_ObjSetVar2_TCL_DECLARED = 0 1177 Tcl_OpenCommandChannel_TCL_DECLARED = 0 1178 Tcl_OpenFileChannel_TCL_DECLARED = 0 1179 Tcl_OpenTcpClient_TCL_DECLARED = 0 1180 Tcl_OpenTcpServer_TCL_DECLARED = 0 1181 Tcl_OutputBuffered_TCL_DECLARED = 0 1182 Tcl_PanicVA_TCL_DECLARED = 0 1183 Tcl_Panic_TCL_DECLARED = 0 1184 Tcl_ParseBraces_TCL_DECLARED = 0 1185 Tcl_ParseCommand_TCL_DECLARED = 0 1186 Tcl_ParseExpr_TCL_DECLARED = 0 1187 Tcl_ParseQuotedString_TCL_DECLARED = 0 1188 Tcl_ParseVarName_TCL_DECLARED = 0 1189 Tcl_ParseVar_TCL_DECLARED = 0 1190 Tcl_PkgPresentEx_TCL_DECLARED = 0 1191 Tcl_PkgPresent_TCL_DECLARED = 0 1192 Tcl_PkgProvideEx_TCL_DECLARED = 0 1193 Tcl_PkgProvide_TCL_DECLARED = 0 1194 Tcl_PkgRequireEx_TCL_DECLARED = 0 1195 Tcl_PkgRequireProc_TCL_DECLARED = 0 1196 Tcl_PkgRequire_TCL_DECLARED = 0 1197 Tcl_PosixError_TCL_DECLARED = 0 1198 Tcl_Preserve_TCL_DECLARED = 0 1199 Tcl_PrintDouble_TCL_DECLARED = 0 1200 Tcl_ProcObjCmd_TCL_DECLARED = 0 1201 Tcl_PutEnv_TCL_DECLARED = 0 1202 Tcl_QueryTimeProc_TCL_DECLARED = 0 1203 Tcl_QueueEvent_TCL_DECLARED = 0 1204 Tcl_ReadChars_TCL_DECLARED = 0 1205 Tcl_ReadRaw_TCL_DECLARED = 0 1206 Tcl_Read_TCL_DECLARED = 0 1207 Tcl_Realloc_TCL_DECLARED = 0 1208 Tcl_ReapDetachedProcs_TCL_DECLARED = 0 1209 Tcl_RecordAndEvalObj_TCL_DECLARED = 0 1210 Tcl_RecordAndEval_TCL_DECLARED = 0 1211 Tcl_RegExpCompile_TCL_DECLARED = 0 1212 Tcl_RegExpExecObj_TCL_DECLARED = 0 1213 Tcl_RegExpExec_TCL_DECLARED = 0 1214 Tcl_RegExpGetInfo_TCL_DECLARED = 0 1215 Tcl_RegExpMatchObj_TCL_DECLARED = 0 1216 Tcl_RegExpMatch_TCL_DECLARED = 0 1217 Tcl_RegExpRange_TCL_DECLARED = 0 1218 Tcl_RegisterChannel_TCL_DECLARED = 0 1219 Tcl_RegisterConfig_TCL_DECLARED = 0 1220 Tcl_RegisterObjType_TCL_DECLARED = 0 1221 Tcl_Release_TCL_DECLARED = 0 1222 Tcl_ResetResult_TCL_DECLARED = 0 1223 Tcl_RestoreInterpState_TCL_DECLARED = 0 1224 Tcl_RestoreResult_TCL_DECLARED = 0 1225 Tcl_SaveInterpState_TCL_DECLARED = 0 1226 Tcl_SaveResult_TCL_DECLARED = 0 1227 Tcl_ScanCountedElement_TCL_DECLARED = 0 1228 Tcl_ScanElement_TCL_DECLARED = 0 1229 Tcl_SeekOld_TCL_DECLARED = 0 1230 Tcl_Seek_TCL_DECLARED = 0 1231 Tcl_ServiceAll_TCL_DECLARED = 0 1232 Tcl_ServiceEvent_TCL_DECLARED = 0 1233 Tcl_ServiceModeHook_TCL_DECLARED = 0 1234 Tcl_SetAssocData_TCL_DECLARED = 0 1235 Tcl_SetBignumObj_TCL_DECLARED = 0 1236 Tcl_SetBooleanObj_TCL_DECLARED = 0 1237 Tcl_SetByteArrayLength_TCL_DECLARED = 0 1238 Tcl_SetByteArrayObj_TCL_DECLARED = 0 1239 Tcl_SetChannelBufferSize_TCL_DECLARED = 0 1240 Tcl_SetChannelErrorInterp_TCL_DECLARED = 0 1241 Tcl_SetChannelError_TCL_DECLARED = 0 1242 Tcl_SetChannelOption_TCL_DECLARED = 0 1243 Tcl_SetCommandInfoFromToken_TCL_DECLARED = 0 1244 Tcl_SetCommandInfo_TCL_DECLARED = 0 1245 Tcl_SetDefaultEncodingDir_TCL_DECLARED = 0 1246 Tcl_SetDoubleObj_TCL_DECLARED = 0 1247 Tcl_SetEncodingSearchPath_TCL_DECLARED = 0 1248 Tcl_SetEnsembleFlags_TCL_DECLARED = 0 1249 Tcl_SetEnsembleMappingDict_TCL_DECLARED = 0 1250 Tcl_SetEnsembleSubcommandList_TCL_DECLARED = 0 1251 Tcl_SetEnsembleUnknownHandler_TCL_DECLARED = 0 1252 Tcl_SetErrno_TCL_DECLARED = 0 1253 Tcl_SetErrorCodeVA_TCL_DECLARED = 0 1254 Tcl_SetErrorCode_TCL_DECLARED = 0 1255 Tcl_SetExitProc_TCL_DECLARED = 0 1256 Tcl_SetIntObj_TCL_DECLARED = 0 1257 Tcl_SetListObj_TCL_DECLARED = 0 1258 Tcl_SetLongObj_TCL_DECLARED = 0 1259 Tcl_SetMainLoop_TCL_DECLARED = 0 1260 Tcl_SetMaxBlockTime_TCL_DECLARED = 0 1261 Tcl_SetNamespaceUnknownHandler_TCL_DECLARED = 0 1262 Tcl_SetNotifier_TCL_DECLARED = 0 1263 Tcl_SetObjErrorCode_TCL_DECLARED = 0 1264 Tcl_SetObjLength_TCL_DECLARED = 0 1265 Tcl_SetObjResult_TCL_DECLARED = 0 1266 Tcl_SetPanicProc_TCL_DECLARED = 0 1267 Tcl_SetRecursionLimit_TCL_DECLARED = 0 1268 Tcl_SetResult_TCL_DECLARED = 0 1269 Tcl_SetReturnOptions_TCL_DECLARED = 0 1270 Tcl_SetServiceMode_TCL_DECLARED = 0 1271 Tcl_SetStdChannel_TCL_DECLARED = 0 1272 Tcl_SetStringObj_TCL_DECLARED = 0 1273 Tcl_SetSystemEncoding_TCL_DECLARED = 0 1274 Tcl_SetTimeProc_TCL_DECLARED = 0 1275 Tcl_SetTimer_TCL_DECLARED = 0 1276 Tcl_SetUnicodeObj_TCL_DECLARED = 0 1277 Tcl_SetVar2Ex_TCL_DECLARED = 0 1278 Tcl_SetVar2_TCL_DECLARED = 0 1279 Tcl_SetVar_TCL_DECLARED = 0 1280 Tcl_SetWideIntObj_TCL_DECLARED = 0 1281 Tcl_SignalId_TCL_DECLARED = 0 1282 Tcl_SignalMsg_TCL_DECLARED = 0 1283 Tcl_Sleep_TCL_DECLARED = 0 1284 Tcl_SourceRCFile_TCL_DECLARED = 0 1285 Tcl_SpliceChannel_TCL_DECLARED = 0 1286 Tcl_SplitList_TCL_DECLARED = 0 1287 Tcl_SplitPath_TCL_DECLARED = 0 1288 Tcl_StackChannel_TCL_DECLARED = 0 1289 Tcl_Stat_TCL_DECLARED = 0 1290 Tcl_StaticPackage_TCL_DECLARED = 0 1291 Tcl_StringCaseMatch_TCL_DECLARED = 0 1292 Tcl_StringMatch_TCL_DECLARED = 0 1293 Tcl_SubstObj_TCL_DECLARED = 0 1294 Tcl_TakeBignumFromObj_TCL_DECLARED = 0 1295 Tcl_TellOld_TCL_DECLARED = 0 1296 Tcl_Tell_TCL_DECLARED = 0 1297 Tcl_ThreadAlert_TCL_DECLARED = 0 1298 Tcl_ThreadQueueEvent_TCL_DECLARED = 0 1299 Tcl_TraceCommand_TCL_DECLARED = 0 1300 Tcl_TraceVar2_TCL_DECLARED = 0 1301 Tcl_TraceVar_TCL_DECLARED = 0 1302 Tcl_TranslateFileName_TCL_DECLARED = 0 1303 Tcl_TruncateChannel_TCL_DECLARED = 0 1304 Tcl_Ungets_TCL_DECLARED = 0 1305 Tcl_UniCharAtIndex_TCL_DECLARED = 0 1306 Tcl_UniCharCaseMatch_TCL_DECLARED = 0 1307 Tcl_UniCharIsAlnum_TCL_DECLARED = 0 1308 Tcl_UniCharIsAlpha_TCL_DECLARED = 0 1309 Tcl_UniCharIsControl_TCL_DECLARED = 0 1310 Tcl_UniCharIsDigit_TCL_DECLARED = 0 1311 Tcl_UniCharIsGraph_TCL_DECLARED = 0 1312 Tcl_UniCharIsLower_TCL_DECLARED = 0 1313 Tcl_UniCharIsPrint_TCL_DECLARED = 0 1314 Tcl_UniCharIsPunct_TCL_DECLARED = 0 1315 Tcl_UniCharIsSpace_TCL_DECLARED = 0 1316 Tcl_UniCharIsUpper_TCL_DECLARED = 0 1317 Tcl_UniCharIsWordChar_TCL_DECLARED = 0 1318 Tcl_UniCharLen_TCL_DECLARED = 0 1319 Tcl_UniCharNcasecmp_TCL_DECLARED = 0 1320 Tcl_UniCharNcmp_TCL_DECLARED = 0 1321 Tcl_UniCharToLower_TCL_DECLARED = 0 1322 Tcl_UniCharToTitle_TCL_DECLARED = 0 1323 Tcl_UniCharToUpper_TCL_DECLARED = 0 1324 Tcl_UniCharToUtfDString_TCL_DECLARED = 0 1325 Tcl_UniCharToUtf_TCL_DECLARED = 0 1326 Tcl_UnlinkVar_TCL_DECLARED = 0 1327 Tcl_UnregisterChannel_TCL_DECLARED = 0 1328 Tcl_UnsetVar2_TCL_DECLARED = 0 1329 Tcl_UnsetVar_TCL_DECLARED = 0 1330 Tcl_UnstackChannel_TCL_DECLARED = 0 1331 Tcl_UntraceCommand_TCL_DECLARED = 0 1332 Tcl_UntraceVar2_TCL_DECLARED = 0 1333 Tcl_UntraceVar_TCL_DECLARED = 0 1334 Tcl_UpVar2_TCL_DECLARED = 0 1335 Tcl_UpVar_TCL_DECLARED = 0 1336 Tcl_UpdateLinkedVar_TCL_DECLARED = 0 1337 Tcl_UtfAtIndex_TCL_DECLARED = 0 1338 Tcl_UtfBackslash_TCL_DECLARED = 0 1339 Tcl_UtfCharComplete_TCL_DECLARED = 0 1340 Tcl_UtfFindFirst_TCL_DECLARED = 0 1341 Tcl_UtfFindLast_TCL_DECLARED = 0 1342 Tcl_UtfNcasecmp_TCL_DECLARED = 0 1343 Tcl_UtfNcmp_TCL_DECLARED = 0 1344 Tcl_UtfNext_TCL_DECLARED = 0 1345 Tcl_UtfPrev_TCL_DECLARED = 0 1346 Tcl_UtfToExternalDString_TCL_DECLARED = 0 1347 Tcl_UtfToExternal_TCL_DECLARED = 0 1348 Tcl_UtfToLower_TCL_DECLARED = 0 1349 Tcl_UtfToTitle_TCL_DECLARED = 0 1350 Tcl_UtfToUniCharDString_TCL_DECLARED = 0 1351 Tcl_UtfToUniChar_TCL_DECLARED = 0 1352 Tcl_UtfToUpper_TCL_DECLARED = 0 1353 Tcl_ValidateAllMemory_TCL_DECLARED = 0 1354 Tcl_VarEvalVA_TCL_DECLARED = 0 1355 Tcl_VarEval_TCL_DECLARED = 0 1356 Tcl_VarTraceInfo2_TCL_DECLARED = 0 1357 Tcl_VarTraceInfo_TCL_DECLARED = 0 1358 Tcl_WaitForEvent_TCL_DECLARED = 0 1359 Tcl_WaitPid_TCL_DECLARED = 0 1360 Tcl_WriteChars_TCL_DECLARED = 0 1361 Tcl_WriteObj_TCL_DECLARED = 0 1362 Tcl_WriteRaw_TCL_DECLARED = 0 1363 Tcl_Write_TCL_DECLARED = 0 1364 Tcl_WrongNumArgs_TCL_DECLARED = 0 1365 X_CLIENTDATA = 0 1366 X_TCL = 0 1367 X_TCLDECLS = 0 1368 X_TCLPLATDECLS = 0 1369 X_FTSINT_H = 0 1370 FTS3_TOK_SCHEMA = "CREATE TABLE x(input HIDDEN, token, start, end, position)" 1371 APND_MARK_FOS_SZ = 8 1372 APND_MARK_PREFIX = "Start-Of-SQLite3-" 1373 APND_MARK_PREFIX_SZ = 17 1374 APND_MARK_SIZE = 25 1375 APND_MAX_SIZE = 1073741824 1376 APND_ROUNDUP = 4096 1377 SQLITE3EXT_H = 0 1378 SQLITE_EXTENSION_INIT1 = 0 1379 SQLITE_EXTENSION_INIT3 = 0 1380 AMATCH_COL_COMMAND = 3 1381 AMATCH_COL_DISTANCE = 1 1382 AMATCH_COL_LANGUAGE = 2 1383 AMATCH_COL_NWORD = 4 1384 AMATCH_COL_WORD = 0 1385 AMATCH_MX_COST = 1000 1386 AMATCH_MX_LANGID = 2147483647 1387 AMATCH_MX_LENGTH = 50 1388 BIG_ENDIAN = 4321 1389 BUS_ADRALN = 1 1390 BUS_ADRERR = 2 1391 BUS_NOOP = 0 1392 BUS_OBJERR = 3 1393 BYTE_ORDER = 1234 1394 CLD_CONTINUED = 6 1395 CLD_DUMPED = 3 1396 CLD_EXITED = 1 1397 CLD_KILLED = 2 1398 CLD_NOOP = 0 1399 CLD_STOPPED = 5 1400 CLD_TRAPPED = 4 1401 CPUMON_MAKE_FATAL = 0x1000 1402 EXIT_FAILURE = 1 1403 EXIT_SUCCESS = 0 1404 FOOTPRINT_INTERVAL_RESET = 0x1 1405 FPE_FLTDIV = 1 1406 FPE_FLTINV = 5 1407 FPE_FLTOVF = 2 1408 FPE_FLTRES = 4 1409 FPE_FLTSUB = 6 1410 FPE_FLTUND = 3 1411 FPE_INTDIV = 7 1412 FPE_INTOVF = 8 1413 FPE_NOOP = 0 1414 FP_CHOP = 3 1415 FP_PREC_24B = 0 1416 FP_PREC_53B = 2 1417 FP_PREC_64B = 3 1418 FP_RND_DOWN = 1 1419 FP_RND_NEAR = 0 1420 FP_RND_UP = 2 1421 FP_STATE_BYTES = 512 1422 ILL_BADSTK = 8 1423 ILL_COPROC = 7 1424 ILL_ILLADR = 5 1425 ILL_ILLOPC = 1 1426 ILL_ILLOPN = 4 1427 ILL_ILLTRP = 2 1428 ILL_NOOP = 0 1429 ILL_PRVOPC = 3 1430 ILL_PRVREG = 6 1431 INT16_MAX = 32767 1432 INT16_MIN = -32768 1433 INT32_MAX = 2147483647 1434 INT32_MIN = -2147483648 1435 INT64_MAX = 9223372036854775807 1436 INT64_MIN = -9223372036854775808 1437 INT8_MAX = 127 1438 INT8_MIN = -128 1439 INTMAX_MAX = 9223372036854775807 1440 INTMAX_MIN = -9223372036854775808 1441 INTPTR_MAX = 9223372036854775807 1442 INTPTR_MIN = -9223372036854775808 1443 INT_FAST16_MAX = 32767 1444 INT_FAST16_MIN = -32768 1445 INT_FAST32_MAX = 2147483647 1446 INT_FAST32_MIN = -2147483648 1447 INT_FAST64_MAX = 9223372036854775807 1448 INT_FAST64_MIN = -9223372036854775808 1449 INT_FAST8_MAX = 127 1450 INT_FAST8_MIN = -128 1451 INT_LEAST16_MAX = 32767 1452 INT_LEAST16_MIN = -32768 1453 INT_LEAST32_MAX = 2147483647 1454 INT_LEAST32_MIN = -2147483648 1455 INT_LEAST64_MAX = 9223372036854775807 1456 INT_LEAST64_MIN = -9223372036854775808 1457 INT_LEAST8_MAX = 127 1458 INT_LEAST8_MIN = -128 1459 IOPOL_APPLICATION = 5 1460 IOPOL_ATIME_UPDATES_DEFAULT = 0 1461 IOPOL_ATIME_UPDATES_OFF = 1 1462 IOPOL_DEFAULT = 0 1463 IOPOL_IMPORTANT = 1 1464 IOPOL_MATERIALIZE_DATALESS_FILES_DEFAULT = 0 1465 IOPOL_MATERIALIZE_DATALESS_FILES_OFF = 1 1466 IOPOL_MATERIALIZE_DATALESS_FILES_ON = 2 1467 IOPOL_NORMAL = 1 1468 IOPOL_PASSIVE = 2 1469 IOPOL_SCOPE_DARWIN_BG = 2 1470 IOPOL_SCOPE_PROCESS = 0 1471 IOPOL_SCOPE_THREAD = 1 1472 IOPOL_STANDARD = 5 1473 IOPOL_THROTTLE = 3 1474 IOPOL_TYPE_DISK = 0 1475 IOPOL_TYPE_VFS_ATIME_UPDATES = 2 1476 IOPOL_TYPE_VFS_MATERIALIZE_DATALESS_FILES = 3 1477 IOPOL_TYPE_VFS_STATFS_NO_DATA_VOLUME = 4 1478 IOPOL_UTILITY = 4 1479 IOPOL_VFS_STATFS_FORCE_NO_DATA_VOLUME = 1 1480 IOPOL_VFS_STATFS_NO_DATA_VOLUME_DEFAULT = 0 1481 LITTLE_ENDIAN = 1234 1482 MINSIGSTKSZ = 32768 1483 NSIG = 32 1484 PDP_ENDIAN = 3412 1485 POLL_ERR = 4 1486 POLL_HUP = 6 1487 POLL_IN = 1 1488 POLL_MSG = 3 1489 POLL_OUT = 2 1490 POLL_PRI = 5 1491 PRIO_DARWIN_BG = 0x1000 1492 PRIO_DARWIN_NONUI = 0x1001 1493 PRIO_DARWIN_PROCESS = 4 1494 PRIO_DARWIN_THREAD = 3 1495 PRIO_MAX = 20 1496 PRIO_MIN = -20 1497 PRIO_PGRP = 1 1498 PRIO_PROCESS = 0 1499 PRIO_USER = 2 1500 PTRDIFF_MAX = 9223372036854775807 1501 PTRDIFF_MIN = -9223372036854775808 1502 RAND_MAX = 0x7fffffff 1503 RLIMIT_AS = 5 1504 RLIMIT_CORE = 4 1505 RLIMIT_CPU = 0 1506 RLIMIT_CPU_USAGE_MONITOR = 0x2 1507 RLIMIT_DATA = 2 1508 RLIMIT_FOOTPRINT_INTERVAL = 0x4 1509 RLIMIT_FSIZE = 1 1510 RLIMIT_MEMLOCK = 6 1511 RLIMIT_NOFILE = 8 1512 RLIMIT_NPROC = 7 1513 RLIMIT_RSS = 5 1514 RLIMIT_STACK = 3 1515 RLIMIT_THREAD_CPULIMITS = 0x3 1516 RLIMIT_WAKEUPS_MONITOR = 0x1 1517 RLIM_NLIMITS = 9 1518 RSIZE_MAX = 9223372036854775807 1519 RUSAGE_CHILDREN = -1 1520 RUSAGE_INFO_CURRENT = 4 1521 RUSAGE_INFO_V0 = 0 1522 RUSAGE_INFO_V1 = 1 1523 RUSAGE_INFO_V2 = 2 1524 RUSAGE_INFO_V3 = 3 1525 RUSAGE_INFO_V4 = 4 1526 RUSAGE_SELF = 0 1527 SA_64REGSET = 0x0200 1528 SA_NOCLDSTOP = 0x0008 1529 SA_NOCLDWAIT = 0x0020 1530 SA_NODEFER = 0x0010 1531 SA_ONSTACK = 0x0001 1532 SA_RESETHAND = 0x0004 1533 SA_RESTART = 0x0002 1534 SA_SIGINFO = 0x0040 1535 SA_USERSPACE_MASK = 127 1536 SA_USERTRAMP = 0x0100 1537 SEGV_ACCERR = 2 1538 SEGV_MAPERR = 1 1539 SEGV_NOOP = 0 1540 SIGABRT = 6 1541 SIGALRM = 14 1542 SIGBUS = 10 1543 SIGCHLD = 20 1544 SIGCONT = 19 1545 SIGEMT = 7 1546 SIGEV_NONE = 0 1547 SIGEV_SIGNAL = 1 1548 SIGEV_THREAD = 3 1549 SIGFPE = 8 1550 SIGHUP = 1 1551 SIGILL = 4 1552 SIGINFO = 29 1553 SIGINT = 2 1554 SIGIO = 23 1555 SIGIOT = 6 1556 SIGKILL = 9 1557 SIGPIPE = 13 1558 SIGPROF = 27 1559 SIGQUIT = 3 1560 SIGSEGV = 11 1561 SIGSTKSZ = 131072 1562 SIGSTOP = 17 1563 SIGSYS = 12 1564 SIGTERM = 15 1565 SIGTRAP = 5 1566 SIGTSTP = 18 1567 SIGTTIN = 21 1568 SIGTTOU = 22 1569 SIGURG = 16 1570 SIGUSR1 = 30 1571 SIGUSR2 = 31 1572 SIGVTALRM = 26 1573 SIGWINCH = 28 1574 SIGXCPU = 24 1575 SIGXFSZ = 25 1576 SIG_ATOMIC_MAX = 2147483647 1577 SIG_ATOMIC_MIN = -2147483648 1578 SIG_BLOCK = 1 1579 SIG_SETMASK = 3 1580 SIG_UNBLOCK = 2 1581 SIZE_MAX = 18446744073709551615 1582 SI_ASYNCIO = 0x10004 1583 SI_MESGQ = 0x10005 1584 SI_QUEUE = 0x10002 1585 SI_TIMER = 0x10003 1586 SI_USER = 0x10001 1587 SS_DISABLE = 0x0004 1588 SS_ONSTACK = 0x0001 1589 SV_INTERRUPT = 2 1590 SV_NOCLDSTOP = 8 1591 SV_NODEFER = 16 1592 SV_ONSTACK = 1 1593 SV_RESETHAND = 4 1594 SV_SIGINFO = 64 1595 TRAP_BRKPT = 1 1596 TRAP_TRACE = 2 1597 UINT16_MAX = 65535 1598 UINT32_MAX = 4294967295 1599 UINT64_MAX = 18446744073709551615 1600 UINT8_MAX = 255 1601 UINTMAX_MAX = 18446744073709551615 1602 UINTPTR_MAX = 18446744073709551615 1603 UINT_FAST16_MAX = 65535 1604 UINT_FAST32_MAX = 4294967295 1605 UINT_FAST64_MAX = 18446744073709551615 1606 UINT_FAST8_MAX = 255 1607 UINT_LEAST16_MAX = 65535 1608 UINT_LEAST32_MAX = 4294967295 1609 UINT_LEAST64_MAX = 18446744073709551615 1610 UINT_LEAST8_MAX = 255 1611 WAIT_ANY = -1 1612 WAIT_MYPGRP = 0 1613 WAKEMON_DISABLE = 0x02 1614 WAKEMON_ENABLE = 0x01 1615 WAKEMON_GET_PARAMS = 0x04 1616 WAKEMON_MAKE_FATAL = 0x10 1617 WAKEMON_SET_DEFAULTS = 0x08 1618 WCHAR_MAX = 2147483647 1619 WCHAR_MIN = -2147483648 1620 WCONTINUED = 0x00000010 1621 WCOREFLAG = 0200 1622 WEXITED = 0x00000004 1623 WINT_MAX = 2147483647 1624 WINT_MIN = -2147483648 1625 WNOHANG = 0x00000001 1626 WNOWAIT = 0x00000020 1627 WSTOPPED = 0x00000008 1628 WUNTRACED = 0x00000002 1629 X_ALLOCA_H_ = 0 1630 X_BSD_MACHINE_ENDIAN_H_ = 0 1631 X_BSD_MACHINE_SIGNAL_H_ = 0 1632 X_CACHED_RUNES = 256 1633 X_CRMASK = -256 1634 X_CTYPE_A = 0x00000100 1635 X_CTYPE_B = 0x00020000 1636 X_CTYPE_C = 0x00000200 1637 X_CTYPE_D = 0x00000400 1638 X_CTYPE_G = 0x00000800 1639 X_CTYPE_H_ = 0 1640 X_CTYPE_I = 0x00080000 1641 X_CTYPE_L = 0x00001000 1642 X_CTYPE_P = 0x00002000 1643 X_CTYPE_Q = 0x00200000 1644 X_CTYPE_R = 0x00040000 1645 X_CTYPE_S = 0x00004000 1646 X_CTYPE_SW0 = 0x20000000 1647 X_CTYPE_SW1 = 0x40000000 1648 X_CTYPE_SW2 = 0x80000000 1649 X_CTYPE_SW3 = 0xc0000000 1650 X_CTYPE_SWM = 0xe0000000 1651 X_CTYPE_SWS = 30 1652 X_CTYPE_T = 0x00100000 1653 X_CTYPE_U = 0x00008000 1654 X_CTYPE_X = 0x00010000 1655 X_CT_RUNE_T = 0 1656 X_DEV_T = 0 1657 X_I386_SIGNAL_H_ = 1 1658 X_I386__ENDIAN_H_ = 0 1659 X_ID_T = 0 1660 X_MACH_I386__STRUCTS_H_ = 0 1661 X_MACH_MACHINE__STRUCTS_H_ = 0 1662 X_MALLOC_UNDERSCORE_MALLOC_H_ = 0 1663 X_MCONTEXT_T = 0 1664 X_MODE_T = 0 1665 X_OS__OSBYTEORDERI386_H = 0 1666 X_OS__OSBYTEORDER_H = 0 1667 X_PID_T = 0 1668 X_PTHREAD_ATTR_T = 0 1669 X_QUAD_HIGHWORD = 1 1670 X_QUAD_LOWWORD = 0 1671 X_RLIMIT_POSIX_FLAG = 0x1000 1672 X_RUNETYPE_H_ = 0 1673 X_RUNE_MAGIC_A = "RuneMagA" 1674 X_RUNE_T = 0 1675 X_SIGSET_T = 0 1676 X_STDLIB_H_ = 0 1677 X_SYS_RESOURCE_H_ = 0 1678 X_SYS_SIGNAL_H_ = 0 1679 X_SYS_WAIT_H_ = 0 1680 X_SYS__ENDIAN_H_ = 0 1681 X_UID_T = 0 1682 X_UINT32_T = 0 1683 X_WCHAR_T = 0 1684 X_WINT_T = 0 1685 X_WSTOPPED = 0177 1686 CARRAY_COLUMN_COUNT = 2 1687 CARRAY_COLUMN_CTYPE = 3 1688 CARRAY_COLUMN_POINTER = 1 1689 CARRAY_COLUMN_VALUE = 0 1690 CARRAY_DOUBLE = 2 1691 CARRAY_INT32 = 0 1692 CARRAY_INT64 = 1 1693 CARRAY_TEXT = 3 1694 CLOSURE_COL_DEPTH = 1 1695 CLOSURE_COL_ID = 0 1696 CLOSURE_COL_IDCOLUMN = 4 1697 CLOSURE_COL_PARENTCOLUMN = 5 1698 CLOSURE_COL_ROOT = 2 1699 CLOSURE_COL_TABLENAME = 3 1700 CSVTEST_FIDX = 0x0001 1701 CSV_INBUFSZ = 1024 1702 CSV_MXERR = 200 1703 EXPLN_COLUMN_ADDR = 0 1704 EXPLN_COLUMN_COMMENT = 7 1705 EXPLN_COLUMN_OPCODE = 1 1706 EXPLN_COLUMN_P1 = 2 1707 EXPLN_COLUMN_P2 = 3 1708 EXPLN_COLUMN_P3 = 4 1709 EXPLN_COLUMN_P4 = 5 1710 EXPLN_COLUMN_P5 = 6 1711 EXPLN_COLUMN_SQL = 8 1712 ACCESSPERMS = 511 1713 ACCESSX_MAX_DESCRIPTORS = 100 1714 ACCESSX_MAX_TABLESIZE = 16384 1715 ALLPERMS = 4095 1716 AT_EACCESS = 0x0010 1717 AT_FDCWD = -2 1718 AT_FDONLY = 0x0400 1719 AT_REALDEV = 0x0200 1720 AT_REMOVEDIR = 0x0080 1721 AT_SYMLINK_FOLLOW = 0x0040 1722 AT_SYMLINK_NOFOLLOW = 0x0020 1723 CLOCKS_PER_SEC = 1000000 1724 CPF_IGNORE_MODE = 0x0002 1725 CPF_MASK = 3 1726 CPF_OVERWRITE = 0x0001 1727 DEFFILEMODE = 438 1728 DIRBLKSIZ = 1024 1729 DST_AUST = 2 1730 DST_CAN = 6 1731 DST_EET = 5 1732 DST_MET = 4 1733 DST_NONE = 0 1734 DST_USA = 1 1735 DST_WET = 3 1736 DTF_HIDEW = 0x0001 1737 DTF_NODUP = 0x0002 1738 DTF_REWIND = 0x0004 1739 DT_BLK = 6 1740 DT_CHR = 2 1741 DT_DIR = 4 1742 DT_FIFO = 1 1743 DT_LNK = 10 1744 DT_REG = 8 1745 DT_SOCK = 12 1746 DT_UNKNOWN = 0 1747 DT_WHT = 14 1748 E2BIG = 7 1749 EACCES = 13 1750 EADDRINUSE = 48 1751 EADDRNOTAVAIL = 49 1752 EAFNOSUPPORT = 47 1753 EAGAIN = 35 1754 EALREADY = 37 1755 EAUTH = 80 1756 EBADARCH = 86 1757 EBADEXEC = 85 1758 EBADF = 9 1759 EBADMACHO = 88 1760 EBADMSG = 94 1761 EBADRPC = 72 1762 EBUSY = 16 1763 ECANCELED = 89 1764 ECHILD = 10 1765 ECONNABORTED = 53 1766 ECONNREFUSED = 61 1767 ECONNRESET = 54 1768 EDEADLK = 11 1769 EDESTADDRREQ = 39 1770 EDEVERR = 83 1771 EDOM = 33 1772 EDQUOT = 69 1773 EEXIST = 17 1774 EFAULT = 14 1775 EFBIG = 27 1776 EFTYPE = 79 1777 EF_IS_PURGEABLE = 0x00000008 1778 EF_IS_SPARSE = 0x00000010 1779 EF_IS_SYNC_ROOT = 0x00000004 1780 EF_MAY_SHARE_BLOCKS = 0x00000001 1781 EF_NO_XATTRS = 0x00000002 1782 EHOSTDOWN = 64 1783 EHOSTUNREACH = 65 1784 EIDRM = 90 1785 EILSEQ = 92 1786 EINPROGRESS = 36 1787 EINTR = 4 1788 EINVAL = 22 1789 EIO = 5 1790 EISCONN = 56 1791 EISDIR = 21 1792 ELAST = 106 1793 ELOOP = 62 1794 EMFILE = 24 1795 EMLINK = 31 1796 EMSGSIZE = 40 1797 EMULTIHOP = 95 1798 ENAMETOOLONG = 63 1799 ENEEDAUTH = 81 1800 ENETDOWN = 50 1801 ENETRESET = 52 1802 ENETUNREACH = 51 1803 ENFILE = 23 1804 ENOATTR = 93 1805 ENOBUFS = 55 1806 ENODATA = 96 1807 ENODEV = 19 1808 ENOENT = 2 1809 ENOEXEC = 8 1810 ENOLCK = 77 1811 ENOLINK = 97 1812 ENOMEM = 12 1813 ENOMSG = 91 1814 ENOPOLICY = 103 1815 ENOPROTOOPT = 42 1816 ENOSPC = 28 1817 ENOSR = 98 1818 ENOSTR = 99 1819 ENOSYS = 78 1820 ENOTBLK = 15 1821 ENOTCONN = 57 1822 ENOTDIR = 20 1823 ENOTEMPTY = 66 1824 ENOTRECOVERABLE = 104 1825 ENOTSOCK = 38 1826 ENOTSUP = 45 1827 ENOTTY = 25 1828 ENXIO = 6 1829 EOPNOTSUPP = 102 1830 EOVERFLOW = 84 1831 EOWNERDEAD = 105 1832 EPERM = 1 1833 EPFNOSUPPORT = 46 1834 EPIPE = 32 1835 EPROCLIM = 67 1836 EPROCUNAVAIL = 76 1837 EPROGMISMATCH = 75 1838 EPROGUNAVAIL = 74 1839 EPROTO = 100 1840 EPROTONOSUPPORT = 43 1841 EPROTOTYPE = 41 1842 EPWROFF = 82 1843 EQFULL = 106 1844 ERANGE = 34 1845 EREMOTE = 71 1846 EROFS = 30 1847 ERPCMISMATCH = 73 1848 ESHLIBVERS = 87 1849 ESHUTDOWN = 58 1850 ESOCKTNOSUPPORT = 44 1851 ESPIPE = 29 1852 ESRCH = 3 1853 ESTALE = 70 1854 ETIME = 101 1855 ETIMEDOUT = 60 1856 ETOOMANYREFS = 59 1857 ETXTBSY = 26 1858 EUSERS = 68 1859 EWOULDBLOCK = 35 1860 EXDEV = 18 1861 FAPPEND = 8 1862 FASYNC = 64 1863 FCNTL_FS_SPECIFIC_BASE = 0x00010000 1864 FD_CLOEXEC = 1 1865 FD_SETSIZE = 1024 1866 FFDSYNC = 4194304 1867 FFSYNC = 128 1868 FNDELAY = 4 1869 FNONBLOCK = 4 1870 FREAD = 0x0001 1871 FSDIR_COLUMN_DATA = 3 1872 FSDIR_COLUMN_DIR = 5 1873 FSDIR_COLUMN_MODE = 1 1874 FSDIR_COLUMN_MTIME = 2 1875 FSDIR_COLUMN_NAME = 0 1876 FSDIR_COLUMN_PATH = 4 1877 FSDIR_SCHEMA = "(name,mode,mtime,data,path HIDDEN,dir HIDDEN)" 1878 FWRITE = 0x0002 1879 F_ADDFILESIGS = 61 1880 F_ADDFILESIGS_FOR_DYLD_SIM = 83 1881 F_ADDFILESIGS_RETURN = 97 1882 F_ADDSIGS = 59 1883 F_ALLOCATEALL = 0x00000004 1884 F_ALLOCATECONTIG = 0x00000002 1885 F_BARRIERFSYNC = 85 1886 F_CHECK_LV = 98 1887 F_CHKCLEAN = 41 1888 F_DUPFD = 0 1889 F_DUPFD_CLOEXEC = 67 1890 F_FINDSIGS = 78 1891 F_FLUSH_DATA = 40 1892 F_FREEZE_FS = 53 1893 F_FULLFSYNC = 51 1894 F_GETCODEDIR = 72 1895 F_GETFD = 1 1896 F_GETFL = 3 1897 F_GETLK = 7 1898 F_GETLKPID = 66 1899 F_GETNOSIGPIPE = 74 1900 F_GETOWN = 5 1901 F_GETPATH = 50 1902 F_GETPATH_MTMINFO = 71 1903 F_GETPATH_NOFIRMLINK = 102 1904 F_GETPROTECTIONCLASS = 63 1905 F_GETPROTECTIONLEVEL = 77 1906 F_GLOBAL_NOCACHE = 55 1907 F_LOCK = 1 1908 F_LOG2PHYS = 49 1909 F_LOG2PHYS_EXT = 65 1910 F_NOCACHE = 48 1911 F_NODIRECT = 62 1912 F_OK = 0 1913 F_PATHPKG_CHECK = 52 1914 F_PEOFPOSMODE = 3 1915 F_PREALLOCATE = 42 1916 F_PUNCHHOLE = 99 1917 F_RDADVISE = 44 1918 F_RDAHEAD = 45 1919 F_RDLCK = 1 1920 F_SETBACKINGSTORE = 70 1921 F_SETFD = 2 1922 F_SETFL = 4 1923 F_SETLK = 8 1924 F_SETLKW = 9 1925 F_SETLKWTIMEOUT = 10 1926 F_SETNOSIGPIPE = 73 1927 F_SETOWN = 6 1928 F_SETPROTECTIONCLASS = 64 1929 F_SETSIZE = 43 1930 F_SINGLE_WRITER = 76 1931 F_SPECULATIVE_READ = 101 1932 F_TEST = 3 1933 F_THAW_FS = 54 1934 F_TLOCK = 2 1935 F_TRANSCODEKEY = 75 1936 F_TRIM_ACTIVE_FILE = 100 1937 F_ULOCK = 0 1938 F_UNLCK = 2 1939 F_VOLPOSMODE = 4 1940 F_WRLCK = 3 1941 ITIMER_PROF = 2 1942 ITIMER_REAL = 0 1943 ITIMER_VIRTUAL = 1 1944 LOCK_EX = 0x02 1945 LOCK_NB = 0x04 1946 LOCK_SH = 0x01 1947 LOCK_UN = 0x08 1948 L_INCR = 1 1949 L_SET = 0 1950 L_XTND = 2 1951 MAXNAMLEN = 255 1952 NBBY = 8 1953 O_ACCMODE = 0x0003 1954 O_ALERT = 0x20000000 1955 O_APPEND = 0x0008 1956 O_ASYNC = 0x0040 1957 O_CLOEXEC = 0x1000000 1958 O_CREAT = 0x0200 1959 O_DIRECTORY = 0x100000 1960 O_DP_GETRAWENCRYPTED = 0x0001 1961 O_DP_GETRAWUNENCRYPTED = 0x0002 1962 O_DSYNC = 0x400000 1963 O_EVTONLY = 0x8000 1964 O_EXCL = 0x0800 1965 O_EXLOCK = 0x0020 1966 O_FSYNC = 128 1967 O_NDELAY = 4 1968 O_NOCTTY = 0x20000 1969 O_NOFOLLOW = 0x0100 1970 O_NONBLOCK = 0x0004 1971 O_POPUP = 0x80000000 1972 O_RDONLY = 0x0000 1973 O_RDWR = 0x0002 1974 O_SHLOCK = 0x0010 1975 O_SYMLINK = 0x200000 1976 O_SYNC = 0x0080 1977 O_TRUNC = 0x0400 1978 O_WRONLY = 0x0001 1979 R_OK = 4 1980 SEEK_DATA = 4 1981 SEEK_HOLE = 3 1982 SF_APPEND = 0x00040000 1983 SF_ARCHIVED = 0x00010000 1984 SF_DATALESS = 0x40000000 1985 SF_FIRMLINK = 0x00800000 1986 SF_IMMUTABLE = 0x00020000 1987 SF_NOUNLINK = 0x00100000 1988 SF_RESTRICTED = 0x00080000 1989 SF_SETTABLE = 0x3fff0000 1990 SF_SUPPORTED = 0x009f0000 1991 SF_SYNTHETIC = 0xc0000000 1992 STDERR_FILENO = 2 1993 STDIN_FILENO = 0 1994 STDOUT_FILENO = 1 1995 SYNC_VOLUME_FULLSYNC = 0x01 1996 SYNC_VOLUME_WAIT = 0x02 1997 S_BLKSIZE = 512 1998 S_IEXEC = 64 1999 S_IFBLK = 0060000 2000 S_IFCHR = 0020000 2001 S_IFDIR = 0040000 2002 S_IFIFO = 0010000 2003 S_IFLNK = 0120000 2004 S_IFMT = 0170000 2005 S_IFREG = 0100000 2006 S_IFSOCK = 0140000 2007 S_IFWHT = 0160000 2008 S_IREAD = 256 2009 S_IRGRP = 0000040 2010 S_IROTH = 0000004 2011 S_IRUSR = 0000400 2012 S_IRWXG = 0000070 2013 S_IRWXO = 0000007 2014 S_IRWXU = 0000700 2015 S_ISGID = 0002000 2016 S_ISTXT = 512 2017 S_ISUID = 0004000 2018 S_ISVTX = 0001000 2019 S_IWGRP = 0000020 2020 S_IWOTH = 0000002 2021 S_IWRITE = 128 2022 S_IWUSR = 0000200 2023 S_IXGRP = 0000010 2024 S_IXOTH = 0000001 2025 S_IXUSR = 0000100 2026 TIME_UTC = 1 2027 UF_APPEND = 0x00000004 2028 UF_COMPRESSED = 0x00000020 2029 UF_DATAVAULT = 0x00000080 2030 UF_HIDDEN = 0x00008000 2031 UF_IMMUTABLE = 0x00000002 2032 UF_NODUMP = 0x00000001 2033 UF_OPAQUE = 0x00000008 2034 UF_SETTABLE = 0x0000ffff 2035 UF_TRACKED = 0x00000040 2036 UTIME_NOW = -1 2037 UTIME_OMIT = -2 2038 W_OK = 2 2039 X_OK = 1 2040 X_ACCESS_EXTENDED_MASK = 4193792 2041 X_APPEND_OK = 8192 2042 X_BLKCNT_T = 0 2043 X_BLKSIZE_T = 0 2044 X_CADDR_T = 0 2045 X_CHOWN_OK = 2097152 2046 X_CLOCK_T = 0 2047 X_CS_DARWIN_USER_CACHE_DIR = 65538 2048 X_CS_DARWIN_USER_DIR = 65536 2049 X_CS_DARWIN_USER_TEMP_DIR = 65537 2050 X_CS_PATH = 1 2051 X_CS_POSIX_V6_ILP32_OFF32_CFLAGS = 2 2052 X_CS_POSIX_V6_ILP32_OFF32_LDFLAGS = 3 2053 X_CS_POSIX_V6_ILP32_OFF32_LIBS = 4 2054 X_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS = 5 2055 X_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS = 6 2056 X_CS_POSIX_V6_ILP32_OFFBIG_LIBS = 7 2057 X_CS_POSIX_V6_LP64_OFF64_CFLAGS = 8 2058 X_CS_POSIX_V6_LP64_OFF64_LDFLAGS = 9 2059 X_CS_POSIX_V6_LP64_OFF64_LIBS = 10 2060 X_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS = 11 2061 X_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS = 12 2062 X_CS_POSIX_V6_LPBIG_OFFBIG_LIBS = 13 2063 X_CS_POSIX_V6_WIDTH_RESTRICTED_ENVS = 14 2064 X_CS_XBS5_ILP32_OFF32_CFLAGS = 20 2065 X_CS_XBS5_ILP32_OFF32_LDFLAGS = 21 2066 X_CS_XBS5_ILP32_OFF32_LIBS = 22 2067 X_CS_XBS5_ILP32_OFF32_LINTFLAGS = 23 2068 X_CS_XBS5_ILP32_OFFBIG_CFLAGS = 24 2069 X_CS_XBS5_ILP32_OFFBIG_LDFLAGS = 25 2070 X_CS_XBS5_ILP32_OFFBIG_LIBS = 26 2071 X_CS_XBS5_ILP32_OFFBIG_LINTFLAGS = 27 2072 X_CS_XBS5_LP64_OFF64_CFLAGS = 28 2073 X_CS_XBS5_LP64_OFF64_LDFLAGS = 29 2074 X_CS_XBS5_LP64_OFF64_LIBS = 30 2075 X_CS_XBS5_LP64_OFF64_LINTFLAGS = 31 2076 X_CS_XBS5_LPBIG_OFFBIG_CFLAGS = 32 2077 X_CS_XBS5_LPBIG_OFFBIG_LDFLAGS = 33 2078 X_CS_XBS5_LPBIG_OFFBIG_LIBS = 34 2079 X_CS_XBS5_LPBIG_OFFBIG_LINTFLAGS = 35 2080 X_DELETE_OK = 4096 2081 X_DIRENT_H_ = 0 2082 X_EXECUTE_OK = 2048 2083 X_FD_SET = 0 2084 X_FILESEC_T = 0 2085 X_FSBLKCNT_T = 0 2086 X_FSFILCNT_T = 0 2087 X_GID_T = 0 2088 X_INO64_T = 0 2089 X_INO_T = 0 2090 X_IN_ADDR_T = 0 2091 X_IN_PORT_T = 0 2092 X_KEY_T = 0 2093 X_NLINK_T = 0 2094 X_PC_2_SYMLINKS = 15 2095 X_PC_ALLOC_SIZE_MIN = 16 2096 X_PC_ASYNC_IO = 17 2097 X_PC_AUTH_OPAQUE_NP = 14 2098 X_PC_CASE_PRESERVING = 12 2099 X_PC_CASE_SENSITIVE = 11 2100 X_PC_CHOWN_RESTRICTED = 7 2101 X_PC_EXTENDED_SECURITY_NP = 13 2102 X_PC_FILESIZEBITS = 18 2103 X_PC_LINK_MAX = 1 2104 X_PC_MAX_CANON = 2 2105 X_PC_MAX_INPUT = 3 2106 X_PC_MIN_HOLE_SIZE = 27 2107 X_PC_NAME_CHARS_MAX = 10 2108 X_PC_NAME_MAX = 4 2109 X_PC_NO_TRUNC = 8 2110 X_PC_PATH_MAX = 5 2111 X_PC_PIPE_BUF = 6 2112 X_PC_PRIO_IO = 19 2113 X_PC_REC_INCR_XFER_SIZE = 20 2114 X_PC_REC_MAX_XFER_SIZE = 21 2115 X_PC_REC_MIN_XFER_SIZE = 22 2116 X_PC_REC_XFER_ALIGN = 23 2117 X_PC_SYMLINK_MAX = 24 2118 X_PC_SYNC_IO = 25 2119 X_PC_VDISABLE = 9 2120 X_PC_XATTR_SIZE_BITS = 26 2121 X_POSIX2_CHAR_TERM = 200112 2122 X_POSIX2_C_BIND = 200112 2123 X_POSIX2_C_DEV = 200112 2124 X_POSIX2_FORT_DEV = -1 2125 X_POSIX2_FORT_RUN = 200112 2126 X_POSIX2_LOCALEDEF = 200112 2127 X_POSIX2_PBS = -1 2128 X_POSIX2_PBS_ACCOUNTING = -1 2129 X_POSIX2_PBS_CHECKPOINT = -1 2130 X_POSIX2_PBS_LOCATE = -1 2131 X_POSIX2_PBS_MESSAGE = -1 2132 X_POSIX2_PBS_TRACK = -1 2133 X_POSIX2_SW_DEV = 200112 2134 X_POSIX2_UPE = 200112 2135 X_POSIX2_VERSION = 200112 2136 X_POSIX_ADVISORY_INFO = -1 2137 X_POSIX_ASYNCHRONOUS_IO = -1 2138 X_POSIX_BARRIERS = -1 2139 X_POSIX_CHOWN_RESTRICTED = 200112 2140 X_POSIX_CLOCK_SELECTION = -1 2141 X_POSIX_CPUTIME = -1 2142 X_POSIX_FSYNC = 200112 2143 X_POSIX_IPV6 = 200112 2144 X_POSIX_JOB_CONTROL = 200112 2145 X_POSIX_MAPPED_FILES = 200112 2146 X_POSIX_MEMLOCK = -1 2147 X_POSIX_MEMLOCK_RANGE = -1 2148 X_POSIX_MEMORY_PROTECTION = 200112 2149 X_POSIX_MESSAGE_PASSING = -1 2150 X_POSIX_MONOTONIC_CLOCK = -1 2151 X_POSIX_NO_TRUNC = 200112 2152 X_POSIX_PRIORITIZED_IO = -1 2153 X_POSIX_PRIORITY_SCHEDULING = -1 2154 X_POSIX_RAW_SOCKETS = -1 2155 X_POSIX_READER_WRITER_LOCKS = 200112 2156 X_POSIX_REALTIME_SIGNALS = -1 2157 X_POSIX_REGEXP = 200112 2158 X_POSIX_SAVED_IDS = 200112 2159 X_POSIX_SEMAPHORES = -1 2160 X_POSIX_SHARED_MEMORY_OBJECTS = -1 2161 X_POSIX_SHELL = 200112 2162 X_POSIX_SPAWN = -1 2163 X_POSIX_SPIN_LOCKS = -1 2164 X_POSIX_SPORADIC_SERVER = -1 2165 X_POSIX_SYNCHRONIZED_IO = -1 2166 X_POSIX_THREADS = 200112 2167 X_POSIX_THREAD_ATTR_STACKADDR = 200112 2168 X_POSIX_THREAD_ATTR_STACKSIZE = 200112 2169 X_POSIX_THREAD_CPUTIME = -1 2170 X_POSIX_THREAD_KEYS_MAX = 128 2171 X_POSIX_THREAD_PRIORITY_SCHEDULING = -1 2172 X_POSIX_THREAD_PRIO_INHERIT = -1 2173 X_POSIX_THREAD_PRIO_PROTECT = -1 2174 X_POSIX_THREAD_PROCESS_SHARED = 200112 2175 X_POSIX_THREAD_SAFE_FUNCTIONS = 200112 2176 X_POSIX_THREAD_SPORADIC_SERVER = -1 2177 X_POSIX_TIMEOUTS = -1 2178 X_POSIX_TIMERS = -1 2179 X_POSIX_TRACE = -1 2180 X_POSIX_TRACE_EVENT_FILTER = -1 2181 X_POSIX_TRACE_INHERIT = -1 2182 X_POSIX_TRACE_LOG = -1 2183 X_POSIX_TYPED_MEMORY_OBJECTS = -1 2184 X_POSIX_V6_ILP32_OFF32 = -1 2185 X_POSIX_V6_ILP32_OFFBIG = -1 2186 X_POSIX_V6_LP64_OFF64 = 1 2187 X_POSIX_V6_LPBIG_OFFBIG = 1 2188 X_POSIX_V7_ILP32_OFF32 = -1 2189 X_POSIX_V7_ILP32_OFFBIG = -1 2190 X_POSIX_V7_LP64_OFF64 = 1 2191 X_POSIX_V7_LPBIG_OFFBIG = 1 2192 X_POSIX_VERSION = 200112 2193 X_PTHREAD_CONDATTR_T = 0 2194 X_PTHREAD_COND_T = 0 2195 X_PTHREAD_KEY_T = 0 2196 X_PTHREAD_MUTEXATTR_T = 0 2197 X_PTHREAD_MUTEX_T = 0 2198 X_PTHREAD_ONCE_T = 0 2199 X_PTHREAD_RWLOCKATTR_T = 0 2200 X_PTHREAD_RWLOCK_T = 0 2201 X_PTHREAD_T = 0 2202 X_RATTR_OK = 32768 2203 X_READ_OK = 512 2204 X_REXT_OK = 131072 2205 X_RMFILE_OK = 16384 2206 X_RPERM_OK = 524288 2207 X_SC_2_CHAR_TERM = 20 2208 X_SC_2_C_BIND = 18 2209 X_SC_2_C_DEV = 19 2210 X_SC_2_FORT_DEV = 21 2211 X_SC_2_FORT_RUN = 22 2212 X_SC_2_LOCALEDEF = 23 2213 X_SC_2_PBS = 59 2214 X_SC_2_PBS_ACCOUNTING = 60 2215 X_SC_2_PBS_CHECKPOINT = 61 2216 X_SC_2_PBS_LOCATE = 62 2217 X_SC_2_PBS_MESSAGE = 63 2218 X_SC_2_PBS_TRACK = 64 2219 X_SC_2_SW_DEV = 24 2220 X_SC_2_UPE = 25 2221 X_SC_2_VERSION = 17 2222 X_SC_ADVISORY_INFO = 65 2223 X_SC_AIO_LISTIO_MAX = 42 2224 X_SC_AIO_MAX = 43 2225 X_SC_AIO_PRIO_DELTA_MAX = 44 2226 X_SC_ARG_MAX = 1 2227 X_SC_ASYNCHRONOUS_IO = 28 2228 X_SC_ATEXIT_MAX = 107 2229 X_SC_BARRIERS = 66 2230 X_SC_BC_BASE_MAX = 9 2231 X_SC_BC_DIM_MAX = 10 2232 X_SC_BC_SCALE_MAX = 11 2233 X_SC_BC_STRING_MAX = 12 2234 X_SC_CHILD_MAX = 2 2235 X_SC_CLK_TCK = 3 2236 X_SC_CLOCK_SELECTION = 67 2237 X_SC_COLL_WEIGHTS_MAX = 13 2238 X_SC_CPUTIME = 68 2239 X_SC_DELAYTIMER_MAX = 45 2240 X_SC_EXPR_NEST_MAX = 14 2241 X_SC_FILE_LOCKING = 69 2242 X_SC_FSYNC = 38 2243 X_SC_GETGR_R_SIZE_MAX = 70 2244 X_SC_GETPW_R_SIZE_MAX = 71 2245 X_SC_HOST_NAME_MAX = 72 2246 X_SC_IOV_MAX = 56 2247 X_SC_IPV6 = 118 2248 X_SC_JOB_CONTROL = 6 2249 X_SC_LINE_MAX = 15 2250 X_SC_LOGIN_NAME_MAX = 73 2251 X_SC_MAPPED_FILES = 47 2252 X_SC_MEMLOCK = 30 2253 X_SC_MEMLOCK_RANGE = 31 2254 X_SC_MEMORY_PROTECTION = 32 2255 X_SC_MESSAGE_PASSING = 33 2256 X_SC_MONOTONIC_CLOCK = 74 2257 X_SC_MQ_OPEN_MAX = 46 2258 X_SC_MQ_PRIO_MAX = 75 2259 X_SC_NGROUPS_MAX = 4 2260 X_SC_NPROCESSORS_CONF = 57 2261 X_SC_NPROCESSORS_ONLN = 58 2262 X_SC_OPEN_MAX = 5 2263 X_SC_PAGESIZE = 29 2264 X_SC_PAGE_SIZE = 29 2265 X_SC_PASS_MAX = 131 2266 X_SC_PHYS_PAGES = 200 2267 X_SC_PRIORITIZED_IO = 34 2268 X_SC_PRIORITY_SCHEDULING = 35 2269 X_SC_RAW_SOCKETS = 119 2270 X_SC_READER_WRITER_LOCKS = 76 2271 X_SC_REALTIME_SIGNALS = 36 2272 X_SC_REGEXP = 77 2273 X_SC_RE_DUP_MAX = 16 2274 X_SC_RTSIG_MAX = 48 2275 X_SC_SAVED_IDS = 7 2276 X_SC_SEMAPHORES = 37 2277 X_SC_SEM_NSEMS_MAX = 49 2278 X_SC_SEM_VALUE_MAX = 50 2279 X_SC_SHARED_MEMORY_OBJECTS = 39 2280 X_SC_SHELL = 78 2281 X_SC_SIGQUEUE_MAX = 51 2282 X_SC_SPAWN = 79 2283 X_SC_SPIN_LOCKS = 80 2284 X_SC_SPORADIC_SERVER = 81 2285 X_SC_SS_REPL_MAX = 126 2286 X_SC_STREAM_MAX = 26 2287 X_SC_SYMLOOP_MAX = 120 2288 X_SC_SYNCHRONIZED_IO = 40 2289 X_SC_THREADS = 96 2290 X_SC_THREAD_ATTR_STACKADDR = 82 2291 X_SC_THREAD_ATTR_STACKSIZE = 83 2292 X_SC_THREAD_CPUTIME = 84 2293 X_SC_THREAD_DESTRUCTOR_ITERATIONS = 85 2294 X_SC_THREAD_KEYS_MAX = 86 2295 X_SC_THREAD_PRIORITY_SCHEDULING = 89 2296 X_SC_THREAD_PRIO_INHERIT = 87 2297 X_SC_THREAD_PRIO_PROTECT = 88 2298 X_SC_THREAD_PROCESS_SHARED = 90 2299 X_SC_THREAD_SAFE_FUNCTIONS = 91 2300 X_SC_THREAD_SPORADIC_SERVER = 92 2301 X_SC_THREAD_STACK_MIN = 93 2302 X_SC_THREAD_THREADS_MAX = 94 2303 X_SC_TIMEOUTS = 95 2304 X_SC_TIMERS = 41 2305 X_SC_TIMER_MAX = 52 2306 X_SC_TRACE = 97 2307 X_SC_TRACE_EVENT_FILTER = 98 2308 X_SC_TRACE_EVENT_NAME_MAX = 127 2309 X_SC_TRACE_INHERIT = 99 2310 X_SC_TRACE_LOG = 100 2311 X_SC_TRACE_NAME_MAX = 128 2312 X_SC_TRACE_SYS_MAX = 129 2313 X_SC_TRACE_USER_EVENT_MAX = 130 2314 X_SC_TTY_NAME_MAX = 101 2315 X_SC_TYPED_MEMORY_OBJECTS = 102 2316 X_SC_TZNAME_MAX = 27 2317 X_SC_V6_ILP32_OFF32 = 103 2318 X_SC_V6_ILP32_OFFBIG = 104 2319 X_SC_V6_LP64_OFF64 = 105 2320 X_SC_V6_LPBIG_OFFBIG = 106 2321 X_SC_VERSION = 8 2322 X_SC_XBS5_ILP32_OFF32 = 122 2323 X_SC_XBS5_ILP32_OFFBIG = 123 2324 X_SC_XBS5_LP64_OFF64 = 124 2325 X_SC_XBS5_LPBIG_OFFBIG = 125 2326 X_SC_XOPEN_CRYPT = 108 2327 X_SC_XOPEN_ENH_I18N = 109 2328 X_SC_XOPEN_LEGACY = 110 2329 X_SC_XOPEN_REALTIME = 111 2330 X_SC_XOPEN_REALTIME_THREADS = 112 2331 X_SC_XOPEN_SHM = 113 2332 X_SC_XOPEN_STREAMS = 114 2333 X_SC_XOPEN_UNIX = 115 2334 X_SC_XOPEN_VERSION = 116 2335 X_SC_XOPEN_XCU_VERSION = 121 2336 X_STRUCT_TIMEVAL64 = 0 2337 X_SUSECONDS_T = 0 2338 X_SYS_DIRENT_H = 0 2339 X_SYS_ERRNO_H_ = 0 2340 X_SYS_FCNTL_H_ = 0 2341 X_SYS_SELECT_H_ = 0 2342 X_SYS_STAT_H_ = 0 2343 X_SYS_TIME_H_ = 0 2344 X_SYS_TYPES_H_ = 0 2345 X_SYS_UNISTD_H_ = 0 2346 X_SYS__SELECT_H_ = 0 2347 X_TIME_H_ = 0 2348 X_TIME_T = 0 2349 X_UINT64_T = 0 2350 X_UNISTD_H_ = 0 2351 X_USECONDS_T = 0 2352 X_UTIME_H_ = 0 2353 X_UUID_T = 0 2354 X_U_CHAR = 0 2355 X_U_INT = 0 2356 X_U_LONG = 0 2357 X_U_SHORT = 0 2358 X_V6_ILP32_OFF32 = -1 2359 X_V6_ILP32_OFFBIG = -1 2360 X_V6_LP64_OFF64 = 1 2361 X_V6_LPBIG_OFFBIG = 1 2362 X_WATTR_OK = 65536 2363 X_WEXT_OK = 262144 2364 X_WPERM_OK = 1048576 2365 X_WRITE_OK = 1024 2366 X_XBS5_ILP32_OFF32 = -1 2367 X_XBS5_ILP32_OFFBIG = -1 2368 X_XBS5_LP64_OFF64 = 1 2369 X_XBS5_LPBIG_OFFBIG = 1 2370 X_XOPEN_CRYPT = 1 2371 X_XOPEN_ENH_I18N = 1 2372 X_XOPEN_LEGACY = -1 2373 X_XOPEN_REALTIME = -1 2374 X_XOPEN_REALTIME_THREADS = -1 2375 X_XOPEN_SHM = 1 2376 X_XOPEN_STREAMS = -1 2377 X_XOPEN_UNIX = 1 2378 X_XOPEN_VERSION = 600 2379 X_XOPEN_XCU_VERSION = 4 2380 FUZZER_HASH = 4001 2381 FUZZER_MX_COST = 1000 2382 FUZZER_MX_LENGTH = 50 2383 FUZZER_MX_OUTPUT_LENGTH = 100 2384 FUZZER_MX_RULEID = 2147483647 2385 FUZZER_NQUEUE = 20 2386 CC_AND = 24 2387 CC_BANG = 15 2388 CC_COMMA = 23 2389 CC_DIGIT = 3 2390 CC_DOLLAR = 4 2391 CC_DOT = 26 2392 CC_EQ = 14 2393 CC_GT = 13 2394 CC_ID = 2 2395 CC_ILLEGAL = 27 2396 CC_KYWD = 1 2397 CC_LP = 17 2398 CC_LT = 12 2399 CC_MINUS = 11 2400 CC_PERCENT = 22 2401 CC_PIPE = 10 2402 CC_PLUS = 20 2403 CC_QUOTE = 8 2404 CC_QUOTE2 = 9 2405 CC_RP = 18 2406 CC_SEMI = 19 2407 CC_SLASH = 16 2408 CC_SPACE = 7 2409 CC_STAR = 21 2410 CC_TILDA = 25 2411 CC_VARALPHA = 5 2412 CC_VARNUM = 6 2413 CC_X = 0 2414 TK_BITAND = 3 2415 TK_BITNOT = 3 2416 TK_BITOR = 3 2417 TK_BLOB = 2 2418 TK_COMMA = 3 2419 TK_CONCAT = 3 2420 TK_DOT = 3 2421 TK_EQ = 3 2422 TK_ERROR = 4 2423 TK_FLOAT = 2 2424 TK_GE = 3 2425 TK_GT = 3 2426 TK_ID = 1 2427 TK_ILLEGAL = 4 2428 TK_INTEGER = 2 2429 TK_LE = 3 2430 TK_LITERAL = 2 2431 TK_LP = 3 2432 TK_LSHIFT = 3 2433 TK_LT = 3 2434 TK_MINUS = 3 2435 TK_NAME = 1 2436 TK_NE = 3 2437 TK_PLUS = 3 2438 TK_PUNCT = 3 2439 TK_REM = 3 2440 TK_RP = 3 2441 TK_RSHIFT = 3 2442 TK_SEMI = 3 2443 TK_SLASH = 3 2444 TK_SPACE = 0 2445 TK_STAR = 3 2446 TK_STRING = 2 2447 TK_VARIABLE = 2 2448 Deliberate_fall_through = 0 2449 QPVTAB_A = 6 2450 QPVTAB_B = 7 2451 QPVTAB_C = 8 2452 QPVTAB_CN = 2 2453 QPVTAB_D = 9 2454 QPVTAB_E = 10 2455 QPVTAB_FLAGS = 11 2456 QPVTAB_IX = 1 2457 QPVTAB_NONE = 12 2458 QPVTAB_OP = 3 2459 QPVTAB_RHS = 5 2460 QPVTAB_UX = 4 2461 QPVTAB_VN = 0 2462 RE_EOF = 0 2463 RE_OP_ACCEPT = 6 2464 RE_OP_ANY = 2 2465 RE_OP_ANYSTAR = 3 2466 RE_OP_BOUNDARY = 17 2467 RE_OP_CC_EXC = 8 2468 RE_OP_CC_INC = 7 2469 RE_OP_CC_RANGE = 10 2470 RE_OP_CC_VALUE = 9 2471 RE_OP_DIGIT = 13 2472 RE_OP_FORK = 4 2473 RE_OP_GOTO = 5 2474 RE_OP_MATCH = 1 2475 RE_OP_NOTDIGIT = 14 2476 RE_OP_NOTSPACE = 16 2477 RE_OP_NOTWORD = 12 2478 RE_OP_SPACE = 15 2479 RE_OP_WORD = 11 2480 SERIES_COLUMN_START = 1 2481 SERIES_COLUMN_STEP = 3 2482 SERIES_COLUMN_STOP = 2 2483 SERIES_COLUMN_VALUE = 0 2484 CCLASS_B = 2 2485 CCLASS_C = 3 2486 CCLASS_D = 4 2487 CCLASS_DIGIT = 10 2488 CCLASS_H = 5 2489 CCLASS_L = 6 2490 CCLASS_M = 8 2491 CCLASS_OTHER = 12 2492 CCLASS_R = 7 2493 CCLASS_SILENT = 0 2494 CCLASS_SPACE = 11 2495 CCLASS_VOWEL = 1 2496 CCLASS_Y = 9 2497 FINAL_INS_COST_DIV = 4 2498 SCRIPT_ARABIC = 0x0010 2499 SCRIPT_CYRILLIC = 0x0002 2500 SCRIPT_GREEK = 0x0004 2501 SCRIPT_HEBREW = 0x0008 2502 SCRIPT_LATIN = 0x0001 2503 SPELLFIX_COL_COMMAND = 11 2504 SPELLFIX_COL_DISTANCE = 2 2505 SPELLFIX_COL_LANGID = 3 2506 SPELLFIX_COL_MATCHLEN = 5 2507 SPELLFIX_COL_PHONEHASH = 6 2508 SPELLFIX_COL_RANK = 1 2509 SPELLFIX_COL_SCOPE = 8 2510 SPELLFIX_COL_SCORE = 4 2511 SPELLFIX_COL_SOUNDSLIKE = 10 2512 SPELLFIX_COL_SRCHCNT = 9 2513 SPELLFIX_COL_TOP = 7 2514 SPELLFIX_COL_WORD = 0 2515 SPELLFIX_IDXNUM_DIST = 48 2516 SPELLFIX_IDXNUM_DISTLE = 0x20 2517 SPELLFIX_IDXNUM_DISTLT = 0x10 2518 SPELLFIX_IDXNUM_LANGID = 0x02 2519 SPELLFIX_IDXNUM_MATCH = 0x01 2520 SPELLFIX_IDXNUM_ROWID = 0x40 2521 SPELLFIX_IDXNUM_SCOPE = 0x08 2522 SPELLFIX_IDXNUM_TOP = 0x04 2523 SPELLFIX_MX_HASH = 32 2524 SPELLFIX_MX_RUN = 1 2525 SQLITE_SPELLFIX_STACKALLOC_SZ = 1024 2526 TOTYPE_BIGENDIAN = 0 2527 TOTYPE_LITTLEENDIAN = 1 2528 SWARMVTAB_MAX_OPEN = 9 2529 SQLITE_RBU_STATE_CHECKPOINT = 3 2530 SQLITE_RBU_STATE_DONE = 4 2531 SQLITE_RBU_STATE_ERROR = 5 2532 SQLITE_RBU_STATE_MOVE = 2 2533 SQLITE_RBU_STATE_OAL = 1 2534 X_SQLITE3RBU_H = 0 2535 BTREE_APPEND = 0x08 2536 BTREE_APPLICATION_ID = 8 2537 BTREE_AUTOVACUUM_FULL = 1 2538 BTREE_AUTOVACUUM_INCR = 2 2539 BTREE_AUTOVACUUM_NONE = 0 2540 BTREE_AUXDELETE = 0x04 2541 BTREE_BLOBKEY = 2 2542 BTREE_BULKLOAD = 0x00000001 2543 BTREE_DATA_VERSION = 15 2544 BTREE_DEFAULT_CACHE_SIZE = 3 2545 BTREE_FILE_FORMAT = 2 2546 BTREE_FORDELETE = 0x00000008 2547 BTREE_FREE_PAGE_COUNT = 0 2548 BTREE_HINT_RANGE = 0 2549 BTREE_INCR_VACUUM = 7 2550 BTREE_INTKEY = 1 2551 BTREE_LARGEST_ROOT_PAGE = 4 2552 BTREE_MEMORY = 2 2553 BTREE_OMIT_JOURNAL = 1 2554 BTREE_PREFORMAT = 0x80 2555 BTREE_SAVEPOSITION = 0x02 2556 BTREE_SCHEMA_VERSION = 1 2557 BTREE_SEEK_EQ = 0x00000002 2558 BTREE_SINGLE = 4 2559 BTREE_TEXT_ENCODING = 5 2560 BTREE_UNORDERED = 8 2561 BTREE_USER_VERSION = 6 2562 BTREE_WRCSR = 0x00000004 2563 COLFLAG_BUSY = 0x0100 2564 COLFLAG_GENERATED = 0x0060 2565 COLFLAG_HASCOLL = 0x0200 2566 COLFLAG_HASTYPE = 0x0004 2567 COLFLAG_HIDDEN = 0x0002 2568 COLFLAG_NOEXPAND = 0x0400 2569 COLFLAG_NOINSERT = 0x0062 2570 COLFLAG_NOTAVAIL = 0x0080 2571 COLFLAG_PRIMKEY = 0x0001 2572 COLFLAG_SORTERREF = 0x0010 2573 COLFLAG_STORED = 0x0040 2574 COLFLAG_UNIQUE = 0x0008 2575 COLFLAG_VIRTUAL = 0x0020 2576 COLNAME_COLUMN = 4 2577 COLNAME_DATABASE = 2 2578 COLNAME_DECLTYPE = 1 2579 COLNAME_N = 5 2580 COLNAME_NAME = 0 2581 COLNAME_TABLE = 3 2582 COLTYPE_ANY = 1 2583 COLTYPE_BLOB = 2 2584 COLTYPE_CUSTOM = 0 2585 COLTYPE_INT = 3 2586 COLTYPE_INTEGER = 4 2587 COLTYPE_REAL = 5 2588 COLTYPE_TEXT = 6 2589 DBFLAG_EncodingFixed = 0x0040 2590 DBFLAG_InternalFunc = 0x0020 2591 DBFLAG_PreferBuiltin = 0x0002 2592 DBFLAG_SchemaChange = 0x0001 2593 DBFLAG_SchemaKnownOk = 0x0010 2594 DBFLAG_Vacuum = 0x0004 2595 DBFLAG_VacuumInto = 0x0008 2596 DB_ResetWanted = 0x0008 2597 DB_SchemaLoaded = 0x0001 2598 DB_UnresetViews = 0x0002 2599 DYNAMIC_TARGETS_ENABLED = 0 2600 ENAME_NAME = 0 2601 ENAME_SPAN = 1 2602 ENAME_TAB = 2 2603 EP_Agg = 0x000010 2604 EP_CanBeNull = 0x200000 2605 EP_Collate = 0x000200 2606 EP_Commuted = 0x000400 2607 EP_ConstFunc = 0x100000 2608 EP_DblQuoted = 0x000080 2609 EP_Distinct = 0x000004 2610 EP_FixedCol = 0x000020 2611 EP_FromDDL = 0x40000000 2612 EP_HasFunc = 0x000008 2613 EP_IfNullRow = 0x040000 2614 EP_Immutable = 0x02 2615 EP_InfixFunc = 0x000100 2616 EP_InnerON = 0x000002 2617 EP_IntValue = 0x000800 2618 EP_IsFalse = 0x20000000 2619 EP_IsTrue = 0x10000000 2620 EP_Leaf = 0x800000 2621 EP_MemToken = 0x020000 2622 EP_NoReduce = 0x01 2623 EP_OuterON = 0x000001 2624 EP_Propagate = 4194824 2625 EP_Quoted = 0x4000000 2626 EP_Reduced = 0x004000 2627 EP_Skip = 0x002000 2628 EP_Static = 0x8000000 2629 EP_Subquery = 0x400000 2630 EP_Subrtn = 0x2000000 2631 EP_TokenOnly = 0x010000 2632 EP_Unlikely = 0x080000 2633 EP_VarSelect = 0x000040 2634 EP_Win = 0x008000 2635 EP_WinFunc = 0x1000000 2636 EP_xIsSelect = 0x001000 2637 EU4_EXPR = 2 2638 EU4_IDX = 1 2639 EU4_NONE = 0 2640 EXCLUSIVE_LOCK = 4 2641 EXPRDUP_REDUCE = 0x0001 2642 GCC_VERSION = 4002001 2643 HAVE_DLFCN_H = 1 2644 HAVE_FCHOWN = 1 2645 HAVE_FDATASYNC = 1 2646 HAVE_GMTIME_R = 1 2647 HAVE_INT16_T = 1 2648 HAVE_INT32_T = 1 2649 HAVE_INT64_T = 1 2650 HAVE_INT8_T = 1 2651 HAVE_INTPTR_T = 1 2652 HAVE_INTTYPES_H = 1 2653 HAVE_ISNAN = 1 2654 HAVE_LOCALTIME_R = 1 2655 HAVE_LSTAT = 1 2656 HAVE_MEMORY_H = 1 2657 HAVE_PREAD = 1 2658 HAVE_PWRITE = 1 2659 HAVE_READLINK = 1 2660 HAVE_STDINT_H = 1 2661 HAVE_STDLIB_H = 1 2662 HAVE_STRINGS_H = 1 2663 HAVE_STRING_H = 1 2664 HAVE_SYS_STAT_H = 1 2665 HAVE_SYS_TYPES_H = 1 2666 HAVE_UINT16_T = 1 2667 HAVE_UINT32_T = 1 2668 HAVE_UINT64_T = 1 2669 HAVE_UINT8_T = 1 2670 HAVE_UINTPTR_T = 1 2671 HAVE_UNISTD_H = 1 2672 HAVE_UTIME = 1 2673 INITFLAG_AlterAdd = 0x0003 2674 INITFLAG_AlterDrop = 0x0002 2675 INITFLAG_AlterMask = 0x0003 2676 INITFLAG_AlterRename = 0x0001 2677 INLINEFUNC_affinity = 4 2678 INLINEFUNC_coalesce = 0 2679 INLINEFUNC_expr_compare = 3 2680 INLINEFUNC_expr_implies_expr = 2 2681 INLINEFUNC_iif = 5 2682 INLINEFUNC_implies_nonnull_row = 1 2683 INLINEFUNC_sqlite_offset = 6 2684 INLINEFUNC_unlikely = 99 2685 IN_INDEX_EPH = 2 2686 IN_INDEX_INDEX_ASC = 3 2687 IN_INDEX_INDEX_DESC = 4 2688 IN_INDEX_LOOP = 0x0004 2689 IN_INDEX_MEMBERSHIP = 0x0002 2690 IN_INDEX_NOOP = 5 2691 IN_INDEX_NOOP_OK = 0x0001 2692 IN_INDEX_ROWID = 1 2693 JT_CROSS = 0x02 2694 JT_ERROR = 0x80 2695 JT_INNER = 0x01 2696 JT_LEFT = 0x08 2697 JT_LTORJ = 0x40 2698 JT_NATURAL = 0x04 2699 JT_OUTER = 0x20 2700 JT_RIGHT = 0x10 2701 KEYINFO_ORDER_BIGNULL = 0x02 2702 KEYINFO_ORDER_DESC = 0x01 2703 LEGACY_SCHEMA_TABLE = "sqlite_master" 2704 LEGACY_TEMP_SCHEMA_TABLE = "sqlite_temp_master" 2705 LOCATE_NOERR = 0x02 2706 LOCATE_VIEW = 0x01 2707 LOOKASIDE_SMALL = 128 2708 LT_OBJDIR = ".libs/" 2709 M10d_Any = 1 2710 M10d_No = 2 2711 M10d_Yes = 0 2712 MEMTYPE_HEAP = 0x01 2713 MEMTYPE_LOOKASIDE = 0x02 2714 MEMTYPE_PCACHE = 0x04 2715 MSVC_VERSION = 0 2716 NC_AllowAgg = 0x000001 2717 NC_AllowWin = 0x004000 2718 NC_Complex = 0x002000 2719 NC_FromDDL = 0x040000 2720 NC_GenCol = 0x000008 2721 NC_HasAgg = 0x000010 2722 NC_HasWin = 0x008000 2723 NC_IdxExpr = 0x000020 2724 NC_InAggFunc = 0x020000 2725 NC_IsCheck = 0x000004 2726 NC_IsDDL = 0x010000 2727 NC_MinMaxAgg = 0x001000 2728 NC_NoSelect = 0x080000 2729 NC_OrderAgg = 0x8000000 2730 NC_PartIdx = 0x000002 2731 NC_SelfRef = 0x00002e 2732 NC_UAggInfo = 0x000100 2733 NC_UBaseReg = 0x000400 2734 NC_UEList = 0x000080 2735 NC_UUpsert = 0x000200 2736 NC_VarSelect = 0x000040 2737 NO_LOCK = 0 2738 OE_Abort = 2 2739 OE_Cascade = 10 2740 OE_Default = 11 2741 OE_Fail = 3 2742 OE_Ignore = 4 2743 OE_None = 0 2744 OE_Replace = 5 2745 OE_Restrict = 7 2746 OE_Rollback = 1 2747 OE_SetDflt = 9 2748 OE_SetNull = 8 2749 OE_Update = 6 2750 OMIT_TEMPDB = 0 2751 ONEPASS_MULTI = 2 2752 ONEPASS_OFF = 0 2753 ONEPASS_SINGLE = 1 2754 OPFLAG_APPEND = 0x08 2755 OPFLAG_AUXDELETE = 0x04 2756 OPFLAG_BULKCSR = 0x01 2757 OPFLAG_EPHEM = 0x01 2758 OPFLAG_FORDELETE = 0x08 2759 OPFLAG_ISNOOP = 0x40 2760 OPFLAG_ISUPDATE = 0x04 2761 OPFLAG_LASTROWID = 0x20 2762 OPFLAG_LENGTHARG = 0x40 2763 OPFLAG_NCHANGE = 0x01 2764 OPFLAG_NOCHNG = 0x01 2765 OPFLAG_NOCHNG_MAGIC = 0x6d 2766 OPFLAG_P2ISREG = 0x10 2767 OPFLAG_PERMUTE = 0x01 2768 OPFLAG_PREFORMAT = 0x80 2769 OPFLAG_SAVEPOSITION = 0x02 2770 OPFLAG_SEEKEQ = 0x02 2771 OPFLAG_TYPEOFARG = 0x80 2772 OPFLAG_USESEEKRESULT = 0x10 2773 OPFLG_IN1 = 0x02 2774 OPFLG_IN2 = 0x04 2775 OPFLG_IN3 = 0x08 2776 OPFLG_JUMP = 0x01 2777 OPFLG_OUT2 = 0x10 2778 OPFLG_OUT3 = 0x20 2779 OP_Abortable = 186 2780 OP_Add = 106 2781 OP_AddImm = 86 2782 OP_Affinity = 96 2783 OP_AggFinal = 165 2784 OP_AggInverse = 161 2785 OP_AggStep = 162 2786 OP_AggStep1 = 163 2787 OP_AggValue = 164 2788 OP_And = 44 2789 OP_AutoCommit = 1 2790 OP_BeginSubrtn = 74 2791 OP_BitAnd = 102 2792 OP_BitNot = 114 2793 OP_BitOr = 103 2794 OP_Blob = 77 2795 OP_Cast = 88 2796 OP_Checkpoint = 3 2797 OP_Clear = 145 2798 OP_Close = 122 2799 OP_ClrSubtype = 179 2800 OP_CollSeq = 85 2801 OP_Column = 94 2802 OP_ColumnsUsed = 123 2803 OP_Compare = 90 2804 OP_Concat = 111 2805 OP_Copy = 80 2806 OP_Count = 98 2807 OP_CreateBtree = 147 2808 OP_CursorHint = 182 2809 OP_CursorLock = 167 2810 OP_CursorUnlock = 168 2811 OP_DecrJumpZero = 60 2812 OP_DeferredSeek = 141 2813 OP_Delete = 130 2814 OP_Destroy = 144 2815 OP_Divide = 109 2816 OP_DropIndex = 152 2817 OP_DropTable = 151 2818 OP_DropTrigger = 154 2819 OP_ElseEq = 58 2820 OP_EndCoroutine = 68 2821 OP_Eq = 53 2822 OP_Expire = 166 2823 OP_Explain = 185 2824 OP_Filter = 63 2825 OP_FilterAdd = 180 2826 OP_FinishSeek = 143 2827 OP_FkCheck = 83 2828 OP_FkCounter = 158 2829 OP_FkIfZero = 48 2830 OP_Found = 28 2831 OP_Function = 66 2832 OP_Ge = 57 2833 OP_Gosub = 9 2834 OP_Goto = 8 2835 OP_Gt = 54 2836 OP_Halt = 70 2837 OP_HaltIfNull = 69 2838 OP_IdxDelete = 140 2839 OP_IdxGE = 42 2840 OP_IdxGT = 40 2841 OP_IdxInsert = 138 2842 OP_IdxLE = 39 2843 OP_IdxLT = 41 2844 OP_IdxRowid = 142 2845 OP_If = 15 2846 OP_IfNoHope = 25 2847 OP_IfNot = 16 2848 OP_IfNotOpen = 24 2849 OP_IfNotZero = 59 2850 OP_IfNullRow = 18 2851 OP_IfPos = 49 2852 OP_IfSmaller = 32 2853 OP_IncrVacuum = 61 2854 OP_Init = 64 2855 OP_InitCoroutine = 10 2856 OP_Insert = 128 2857 OP_Int64 = 72 2858 OP_IntCopy = 82 2859 OP_Integer = 71 2860 OP_IntegrityCk = 155 2861 OP_IsNull = 50 2862 OP_IsNullOrType = 17 2863 OP_IsTrue = 91 2864 OP_JournalMode = 4 2865 OP_Jump = 13 2866 OP_Last = 31 2867 OP_Le = 55 2868 OP_LoadAnalysis = 150 2869 OP_Lt = 56 2870 OP_MakeRecord = 97 2871 OP_MaxPgcnt = 178 2872 OP_MemMax = 159 2873 OP_Move = 79 2874 OP_Multiply = 108 2875 OP_MustBeInt = 12 2876 OP_Ne = 52 2877 OP_NewRowid = 127 2878 OP_Next = 38 2879 OP_NoConflict = 26 2880 OP_Noop = 184 2881 OP_Not = 19 2882 OP_NotExists = 30 2883 OP_NotFound = 27 2884 OP_NotNull = 51 2885 OP_Null = 75 2886 OP_NullRow = 136 2887 OP_Offset = 93 2888 OP_OffsetLimit = 160 2889 OP_Once = 14 2890 OP_OpenAutoindex = 116 2891 OP_OpenDup = 115 2892 OP_OpenEphemeral = 118 2893 OP_OpenPseudo = 121 2894 OP_OpenRead = 112 2895 OP_OpenWrite = 113 2896 OP_Or = 43 2897 OP_Pagecount = 177 2898 OP_Param = 157 2899 OP_ParseSchema = 149 2900 OP_Permutation = 89 2901 OP_Prev = 37 2902 OP_Program = 47 2903 OP_PureFunc = 65 2904 OP_ReadCookie = 99 2905 OP_Real = 153 2906 OP_RealAffinity = 87 2907 OP_ReleaseReg = 183 2908 OP_Remainder = 110 2909 OP_ReopenIdx = 101 2910 OP_ResetCount = 131 2911 OP_ResetSorter = 146 2912 OP_ResultRow = 84 2913 OP_Return = 67 2914 OP_Rewind = 35 2915 OP_RowCell = 129 2916 OP_RowData = 134 2917 OP_RowSetAdd = 156 2918 OP_RowSetRead = 45 2919 OP_RowSetTest = 46 2920 OP_Rowid = 135 2921 OP_SCopy = 81 2922 OP_Savepoint = 0 2923 OP_SeekEnd = 137 2924 OP_SeekGE = 22 2925 OP_SeekGT = 23 2926 OP_SeekHit = 125 2927 OP_SeekLE = 21 2928 OP_SeekLT = 20 2929 OP_SeekRowid = 29 2930 OP_SeekScan = 124 2931 OP_Sequence = 126 2932 OP_SequenceTest = 120 2933 OP_SetCookie = 100 2934 OP_ShiftLeft = 104 2935 OP_ShiftRight = 105 2936 OP_SoftNull = 76 2937 OP_Sort = 34 2938 OP_SorterCompare = 132 2939 OP_SorterData = 133 2940 OP_SorterInsert = 139 2941 OP_SorterNext = 36 2942 OP_SorterOpen = 119 2943 OP_SorterSort = 33 2944 OP_SqlExec = 148 2945 OP_String = 73 2946 OP_String8 = 117 2947 OP_Subtract = 107 2948 OP_TableLock = 169 2949 OP_Trace = 181 2950 OP_Transaction = 2 2951 OP_TypeCheck = 95 2952 OP_VBegin = 170 2953 OP_VColumn = 175 2954 OP_VCreate = 171 2955 OP_VDestroy = 172 2956 OP_VFilter = 6 2957 OP_VInitIn = 174 2958 OP_VNext = 62 2959 OP_VOpen = 173 2960 OP_VRename = 176 2961 OP_VUpdate = 7 2962 OP_Vacuum = 5 2963 OP_Variable = 78 2964 OP_Yield = 11 2965 OP_ZeroOrNull = 92 2966 OS_VXWORKS = 0 2967 P4_COLLSEQ = -2 2968 P4_DYNAMIC = -6 2969 P4_EXPR = -9 2970 P4_FREE_IF_LE = -6 2971 P4_FUNCCTX = -15 2972 P4_FUNCDEF = -7 2973 P4_INT32 = -3 2974 P4_INT64 = -13 2975 P4_INTARRAY = -14 2976 P4_KEYINFO = -8 2977 P4_MEM = -10 2978 P4_NOTUSED = 0 2979 P4_REAL = -12 2980 P4_STATIC = -1 2981 P4_SUBPROGRAM = -4 2982 P4_TABLE = -5 2983 P4_TRANSIENT = 0 2984 P4_VTAB = -11 2985 P5_ConstraintCheck = 3 2986 P5_ConstraintFK = 4 2987 P5_ConstraintNotNull = 1 2988 P5_ConstraintUnique = 2 2989 PACKAGE_BUGREPORT = "" 2990 PACKAGE_NAME = "sqlite" 2991 PACKAGE_STRING = "sqlite 3.39.3" 2992 PACKAGE_TARNAME = "sqlite" 2993 PACKAGE_VERSION = "3.39.3" 2994 PAGER_CACHESPILL = 0x20 2995 PAGER_CKPT_FULLFSYNC = 0x10 2996 PAGER_FLAGS_MASK = 0x38 2997 PAGER_FULLFSYNC = 0x08 2998 PAGER_GET_NOCONTENT = 0x01 2999 PAGER_GET_READONLY = 0x02 3000 PAGER_JOURNALMODE_DELETE = 0 3001 PAGER_JOURNALMODE_MEMORY = 4 3002 PAGER_JOURNALMODE_OFF = 2 3003 PAGER_JOURNALMODE_PERSIST = 1 3004 PAGER_JOURNALMODE_QUERY = -1 3005 PAGER_JOURNALMODE_TRUNCATE = 3 3006 PAGER_JOURNALMODE_WAL = 5 3007 PAGER_LOCKINGMODE_EXCLUSIVE = 1 3008 PAGER_LOCKINGMODE_NORMAL = 0 3009 PAGER_LOCKINGMODE_QUERY = -1 3010 PAGER_MEMORY = 0x0002 3011 PAGER_OMIT_JOURNAL = 0x0001 3012 PAGER_SYNCHRONOUS_EXTRA = 0x04 3013 PAGER_SYNCHRONOUS_FULL = 0x03 3014 PAGER_SYNCHRONOUS_MASK = 0x07 3015 PAGER_SYNCHRONOUS_NORMAL = 0x02 3016 PAGER_SYNCHRONOUS_OFF = 0x01 3017 PARSE_MODE_DECLARE_VTAB = 1 3018 PARSE_MODE_NORMAL = 0 3019 PARSE_MODE_RENAME = 2 3020 PARSE_MODE_UNMAP = 3 3021 PENDING_LOCK = 3 3022 PGHDR_CLEAN = 0x001 3023 PGHDR_DIRTY = 0x002 3024 PGHDR_DONT_WRITE = 0x010 3025 PGHDR_MMAP = 0x020 3026 PGHDR_NEED_SYNC = 0x008 3027 PGHDR_WAL_APPEND = 0x040 3028 PGHDR_WRITEABLE = 0x004 3029 PREFERRED_SCHEMA_TABLE = "sqlite_schema" 3030 PREFERRED_TEMP_SCHEMA_TABLE = "sqlite_temp_schema" 3031 PRIX16 = "hX" 3032 PRIX32 = "X" 3033 PRIXPTR = "lX" 3034 PRId16 = "hd" 3035 PRId32 = "d" 3036 PRIdPTR = "ld" 3037 PRIi16 = "hi" 3038 PRIi32 = "i" 3039 PRIiPTR = "li" 3040 PRIo16 = "ho" 3041 PRIo32 = "o" 3042 PRIoPTR = "lo" 3043 PRIu16 = "hu" 3044 PRIu32 = "u" 3045 PRIuPTR = "lu" 3046 PRIx16 = "hx" 3047 PRIx32 = "x" 3048 PRIxPTR = "lx" 3049 RESERVED_LOCK = 2 3050 SAVEPOINT_BEGIN = 0 3051 SAVEPOINT_RELEASE = 1 3052 SAVEPOINT_ROLLBACK = 2 3053 SCHEMA_ROOT = 1 3054 SCNd16 = "hd" 3055 SCNd32 = "d" 3056 SCNdPTR = "ld" 3057 SCNi16 = "hi" 3058 SCNi32 = "i" 3059 SCNiPTR = "li" 3060 SCNo16 = "ho" 3061 SCNo32 = "o" 3062 SCNoPTR = "lo" 3063 SCNu16 = "hu" 3064 SCNu32 = "u" 3065 SCNuPTR = "lu" 3066 SCNx16 = "hx" 3067 SCNx32 = "x" 3068 SCNxPTR = "lx" 3069 SF_Aggregate = 0x0000008 3070 SF_All = 0x0000002 3071 SF_ComplexResult = 0x0040000 3072 SF_Compound = 0x0000100 3073 SF_Converted = 0x0010000 3074 SF_CopyCte = 0x4000000 3075 SF_Distinct = 0x0000001 3076 SF_Expanded = 0x0000040 3077 SF_FixedLimit = 0x0004000 3078 SF_HasAgg = 0x0000010 3079 SF_HasTypeInfo = 0x0000080 3080 SF_IncludeHidden = 0x0020000 3081 SF_MaybeConvert = 0x0008000 3082 SF_MinMaxAgg = 0x0001000 3083 SF_MultiPart = 0x2000000 3084 SF_MultiValue = 0x0000400 3085 SF_NestedFrom = 0x0000800 3086 SF_NoopOrderBy = 0x0400000 3087 SF_OrderByReqd = 0x8000000 3088 SF_PushDown = 0x1000000 3089 SF_Recursive = 0x0002000 3090 SF_Resolved = 0x0000004 3091 SF_UFSrcCheck = 0x0800000 3092 SF_UsesEphemeral = 0x0000020 3093 SF_Values = 0x0000200 3094 SF_View = 0x0200000 3095 SF_WhereBegin = 0x0080000 3096 SF_WinRewrite = 0x0100000 3097 SHARED_LOCK = 1 3098 SHARED_SIZE = 510 3099 SQLITECONFIG_H = 1 3100 SQLITEINT_H = 0 3101 SQLITE_AFF_BLOB = 0x41 3102 SQLITE_AFF_INTEGER = 0x44 3103 SQLITE_AFF_MASK = 0x47 3104 SQLITE_AFF_NONE = 0x40 3105 SQLITE_AFF_NUMERIC = 0x43 3106 SQLITE_AFF_REAL = 0x45 3107 SQLITE_AFF_TEXT = 0x42 3108 SQLITE_ASCII = 1 3109 SQLITE_ATOMIC_INTRINSICS = 0 3110 SQLITE_AllOpts = 0xffffffff 3111 SQLITE_AutoIndex = 0x00008000 3112 SQLITE_BIGENDIAN = 0 3113 SQLITE_BTREE_H = 0 3114 SQLITE_BYTEORDER = 1234 3115 SQLITE_BalancedMerge = 0x00200000 3116 SQLITE_BloomFilter = 0x00080000 3117 SQLITE_BloomPulldown = 0x00100000 3118 SQLITE_CacheSpill = 0x00000020 3119 SQLITE_CellSizeCk = 0x00200000 3120 SQLITE_CkptFullFSync = 0x00000010 3121 SQLITE_CountOfView = 0x00000200 3122 SQLITE_CoverIdxScan = 0x00000020 3123 SQLITE_CursorHints = 0x00000400 3124 SQLITE_DEFAULT_AUTOVACUUM = 0 3125 SQLITE_DEFAULT_CACHE_SIZE = -2000 3126 SQLITE_DEFAULT_FILE_FORMAT = 4 3127 SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT = -1 3128 SQLITE_DEFAULT_MMAP_SIZE = 0 3129 SQLITE_DEFAULT_PCACHE_INITSZ = 20 3130 SQLITE_DEFAULT_RECURSIVE_TRIGGERS = 0 3131 SQLITE_DEFAULT_SECTOR_SIZE = 4096 3132 SQLITE_DEFAULT_SORTERREF_SIZE = 0x7fffffff 3133 SQLITE_DEFAULT_SYNCHRONOUS = 2 3134 SQLITE_DEFAULT_WAL_AUTOCHECKPOINT = 1000 3135 SQLITE_DEFAULT_WAL_SYNCHRONOUS = 2 3136 SQLITE_DEFAULT_WORKER_THREADS = 0 3137 SQLITE_Defensive = 0x10000000 3138 SQLITE_DeferFKs = 0x00080000 3139 SQLITE_DistinctOpt = 0x00000010 3140 SQLITE_DqsDDL = 0x20000000 3141 SQLITE_DqsDML = 0x40000000 3142 SQLITE_ECEL_DUP = 0x01 3143 SQLITE_ECEL_FACTOR = 0x02 3144 SQLITE_ECEL_OMITREF = 0x08 3145 SQLITE_ECEL_REF = 0x04 3146 SQLITE_EnableQPSG = 0x00800000 3147 SQLITE_EnableTrigger = 0x00040000 3148 SQLITE_EnableView = 0x80000000 3149 SQLITE_FAULTINJECTOR_COUNT = 1 3150 SQLITE_FAULTINJECTOR_MALLOC = 0 3151 SQLITE_FCNTL_DB_UNCHANGED = 0xca093fa0 3152 SQLITE_FUNC_ANYORDER = 0x08000000 3153 SQLITE_FUNC_BUILTIN = 0x00800000 3154 SQLITE_FUNC_CASE = 0x0008 3155 SQLITE_FUNC_CONSTANT = 0x0800 3156 SQLITE_FUNC_COUNT = 0x0100 3157 SQLITE_FUNC_DIRECT = 0x00080000 3158 SQLITE_FUNC_ENCMASK = 0x0003 3159 SQLITE_FUNC_EPHEM = 0x0010 3160 SQLITE_FUNC_HASH_SZ = 23 3161 SQLITE_FUNC_INLINE = 0x00400000 3162 SQLITE_FUNC_INTERNAL = 0x00040000 3163 SQLITE_FUNC_LENGTH = 0x0040 3164 SQLITE_FUNC_LIKE = 0x0004 3165 SQLITE_FUNC_MINMAX = 0x1000 3166 SQLITE_FUNC_NEEDCOLL = 0x0020 3167 SQLITE_FUNC_SLOCHNG = 0x2000 3168 SQLITE_FUNC_SUBTYPE = 0x00100000 3169 SQLITE_FUNC_TEST = 0x4000 3170 SQLITE_FUNC_TYPEOF = 0x0080 3171 SQLITE_FUNC_UNLIKELY = 0x0400 3172 SQLITE_FUNC_UNSAFE = 0x00200000 3173 SQLITE_FUNC_WINDOW = 0x00010000 3174 SQLITE_FactorOutConst = 0x00000008 3175 SQLITE_FlttnUnionAll = 0x00800000 3176 SQLITE_ForeignKeys = 0x00004000 3177 SQLITE_Fts3Tokenizer = 0x00400000 3178 SQLITE_FullColNames = 0x00000004 3179 SQLITE_FullFSync = 0x00000008 3180 SQLITE_GroupByOrder = 0x00000004 3181 SQLITE_HASH_H = 0 3182 SQLITE_HAVE_C99_MATH_FUNCS = 1 3183 SQLITE_HAVE_OS_TRACE = 0 3184 SQLITE_IDXTYPE_APPDEF = 0 3185 SQLITE_IDXTYPE_IPK = 3 3186 SQLITE_IDXTYPE_PRIMARYKEY = 2 3187 SQLITE_IDXTYPE_UNIQUE = 1 3188 SQLITE_IOERR_NOMEM_BKPT = 3082 3189 SQLITE_IgnoreChecks = 0x00000200 3190 SQLITE_JUMPIFNULL = 0x10 3191 SQLITE_LITTLEENDIAN = 1 3192 SQLITE_LegacyAlter = 0x04000000 3193 SQLITE_LegacyFileFmt = 0x00000002 3194 SQLITE_LoadExtFunc = 0x00020000 3195 SQLITE_LoadExtension = 0x00010000 3196 SQLITE_MALLOC_SOFT_LIMIT = 1024 3197 SQLITE_MAX_ATTACHED = 10 3198 SQLITE_MAX_COLUMN = 2000 3199 SQLITE_MAX_COMPOUND_SELECT = 500 3200 SQLITE_MAX_DB = 12 3201 SQLITE_MAX_DEFAULT_PAGE_SIZE = 8192 3202 SQLITE_MAX_EXPR_DEPTH = 1000 3203 SQLITE_MAX_FILE_FORMAT = 4 3204 SQLITE_MAX_FUNCTION_ARG = 127 3205 SQLITE_MAX_LENGTH = 1000000000 3206 SQLITE_MAX_LIKE_PATTERN_LENGTH = 50000 3207 SQLITE_MAX_MMAP_SIZE = 0x7fff0000 3208 SQLITE_MAX_PAGE_COUNT = 1073741823 3209 SQLITE_MAX_PAGE_SIZE = 65536 3210 SQLITE_MAX_PATHLEN = 1024 3211 SQLITE_MAX_SQL_LENGTH = 1000000000 3212 SQLITE_MAX_SYMLINK = 200 3213 SQLITE_MAX_TRIGGER_DEPTH = 1000 3214 SQLITE_MAX_VARIABLE_NUMBER = 32766 3215 SQLITE_MAX_VDBE_OP = 250000000 3216 SQLITE_MAX_WORKER_THREADS = 8 3217 SQLITE_MSVC_H = 0 3218 SQLITE_MUTEX_STATIC_TEMPDIR = 11 3219 SQLITE_MX_JUMP_OPCODE = 64 3220 SQLITE_MinMaxOpt = 0x00010000 3221 SQLITE_NEED_ERR_NAME = 0 3222 SQLITE_NOMEM_BKPT = 7 3223 SQLITE_NOTNULL = 0x90 3224 SQLITE_NTUNE = 6 3225 SQLITE_NULLEQ = 0x80 3226 SQLITE_N_BTREE_META = 16 3227 SQLITE_N_LIMIT = 12 3228 SQLITE_N_STDTYPE = 6 3229 SQLITE_NoCkptOnClose = 0x00000800 3230 SQLITE_NoSchemaError = 0x08000000 3231 SQLITE_NullCallback = 0x00000100 3232 SQLITE_OS_SETUP_H = 0 3233 SQLITE_OS_WIN = 0 3234 SQLITE_OmitNoopJoin = 0x00000100 3235 SQLITE_OmitOrderBy = 0x00040000 3236 SQLITE_OrderByIdxJoin = 0x00000040 3237 SQLITE_PAGER_H = 0 3238 SQLITE_POWERSAFE_OVERWRITE = 1 3239 SQLITE_PREPARE_MASK = 0x0f 3240 SQLITE_PREPARE_SAVESQL = 0x80 3241 SQLITE_PRINTF_INTERNAL = 0x01 3242 SQLITE_PRINTF_MALLOCED = 0x04 3243 SQLITE_PRINTF_SQLFUNC = 0x02 3244 SQLITE_PTRSIZE = 8 3245 SQLITE_PropagateConst = 0x00008000 3246 SQLITE_PushDown = 0x00001000 3247 SQLITE_QueryFlattener = 0x00000001 3248 SQLITE_QueryOnly = 0x00100000 3249 SQLITE_ReadUncommit = 0x00000400 3250 SQLITE_RecTriggers = 0x00002000 3251 SQLITE_ReleaseReg = 0x00400000 3252 SQLITE_ResetDatabase = 0x02000000 3253 SQLITE_ReverseOrder = 0x00001000 3254 SQLITE_SO_ASC = 0 3255 SQLITE_SO_DESC = 1 3256 SQLITE_SO_UNDEFINED = -1 3257 SQLITE_STATE_BUSY = 0x6d 3258 SQLITE_STATE_CLOSED = 0xce 3259 SQLITE_STATE_ERROR = 0xd5 3260 SQLITE_STATE_OPEN = 0x76 3261 SQLITE_STATE_SICK = 0xba 3262 SQLITE_STATE_ZOMBIE = 0xa7 3263 SQLITE_SYSTEM_MALLOC = 1 3264 SQLITE_SeekScan = 0x00020000 3265 SQLITE_ShortColNames = 0x00000040 3266 SQLITE_SimplifyJoin = 0x00002000 3267 SQLITE_SkipScan = 0x00004000 3268 SQLITE_Stat4 = 0x00000800 3269 SQLITE_TEMP_FILE_PREFIX = "etilqs_" 3270 SQLITE_TOKEN_KEYWORD = 0x2 3271 SQLITE_TOKEN_QUOTED = 0x1 3272 SQLITE_TRACE_LEGACY = 0x40 3273 SQLITE_TRACE_NONLEGACY_MASK = 0x0f 3274 SQLITE_TRACE_XPROFILE = 0x80 3275 SQLITE_Transitive = 0x00000080 3276 SQLITE_TriggerEQP = 0x01000000 3277 SQLITE_TrustedSchema = 0x00000080 3278 SQLITE_UTF16NATIVE = 2 3279 SQLITE_VDBE_H = 0 3280 SQLITE_VTABRISK_High = 2 3281 SQLITE_VTABRISK_Low = 0 3282 SQLITE_VTABRISK_Normal = 1 3283 SQLITE_WSD = 0 3284 SQLITE_WindowFunc = 0x00000002 3285 SQLITE_WriteSchema = 0x00000001 3286 SRT_Coroutine = 13 3287 SRT_Discard = 4 3288 SRT_DistFifo = 5 3289 SRT_DistQueue = 6 3290 SRT_EphemTab = 12 3291 SRT_Except = 2 3292 SRT_Exists = 3 3293 SRT_Fifo = 8 3294 SRT_Mem = 10 3295 SRT_Output = 9 3296 SRT_Queue = 7 3297 SRT_Set = 11 3298 SRT_Table = 14 3299 SRT_Union = 1 3300 SRT_Upfrom = 15 3301 STDC_HEADERS = 1 3302 TABTYP_NORM = 0 3303 TABTYP_VIEW = 2 3304 TABTYP_VTAB = 1 3305 TARGET_ABI_USES_IOS_VALUES = 0 3306 TARGET_CPU_68K = 0 3307 TARGET_CPU_ALPHA = 0 3308 TARGET_CPU_ARM = 0 3309 TARGET_CPU_ARM64 = 0 3310 TARGET_CPU_MIPS = 0 3311 TARGET_CPU_PPC = 0 3312 TARGET_CPU_PPC64 = 0 3313 TARGET_CPU_SPARC = 0 3314 TARGET_CPU_X86 = 0 3315 TARGET_CPU_X86_64 = 1 3316 TARGET_IPHONE_SIMULATOR = 0 3317 TARGET_OS_DRIVERKIT = 0 3318 TARGET_OS_EMBEDDED = 0 3319 TARGET_OS_IOS = 0 3320 TARGET_OS_IPHONE = 0 3321 TARGET_OS_MAC = 1 3322 TARGET_OS_MACCATALYST = 0 3323 TARGET_OS_NANO = 0 3324 TARGET_OS_OSX = 1 3325 TARGET_OS_RTKIT = 0 3326 TARGET_OS_SIMULATOR = 0 3327 TARGET_OS_TV = 0 3328 TARGET_OS_UIKITFORMAC = 0 3329 TARGET_OS_UNIX = 0 3330 TARGET_OS_WATCH = 0 3331 TARGET_OS_WIN32 = 0 3332 TARGET_RT_64_BIT = 1 3333 TARGET_RT_BIG_ENDIAN = 0 3334 TARGET_RT_LITTLE_ENDIAN = 1 3335 TARGET_RT_MAC_CFM = 0 3336 TARGET_RT_MAC_MACHO = 1 3337 TF_Autoincrement = 0x00000008 3338 TF_Ephemeral = 0x00004000 3339 TF_Eponymous = 0x00008000 3340 TF_HasGenerated = 0x00000060 3341 TF_HasHidden = 0x00000002 3342 TF_HasNotNull = 0x00000800 3343 TF_HasPrimaryKey = 0x00000004 3344 TF_HasStat1 = 0x00000010 3345 TF_HasStat4 = 0x00002000 3346 TF_HasStored = 0x00000040 3347 TF_HasVirtual = 0x00000020 3348 TF_NoVisibleRowid = 0x00000200 3349 TF_OOOHidden = 0x00000400 3350 TF_Readonly = 0x00000001 3351 TF_Shadow = 0x00001000 3352 TF_StatsUsed = 0x00000100 3353 TF_Strict = 0x00010000 3354 TF_WithoutRowid = 0x00000080 3355 TK_ABORT = 27 3356 TK_ACTION = 28 3357 TK_ADD = 163 3358 TK_AFTER = 29 3359 TK_AGG_COLUMN = 169 3360 TK_AGG_FUNCTION = 168 3361 TK_ALL = 135 3362 TK_ALTER = 162 3363 TK_ALWAYS = 96 3364 TK_ANALYZE = 30 3365 TK_AND = 44 3366 TK_ANY = 101 3367 TK_AS = 24 3368 TK_ASC = 31 3369 TK_ASTERISK = 180 3370 TK_ATTACH = 32 3371 TK_AUTOINCR = 126 3372 TK_BEFORE = 33 3373 TK_BEGIN = 5 3374 TK_BETWEEN = 48 3375 TK_BY = 34 3376 TK_CASCADE = 35 3377 TK_CASE = 157 3378 TK_CAST = 36 3379 TK_CHECK = 124 3380 TK_COLLATE = 113 3381 TK_COLUMN = 167 3382 TK_COLUMNKW = 60 3383 TK_COMMIT = 10 3384 TK_CONFLICT = 37 3385 TK_CONSTRAINT = 119 3386 TK_CREATE = 17 3387 TK_CTIME_KW = 100 3388 TK_CURRENT = 85 3389 TK_DATABASE = 38 3390 TK_DEFAULT = 120 3391 TK_DEFERRABLE = 131 3392 TK_DEFERRED = 7 3393 TK_DELETE = 128 3394 TK_DESC = 39 3395 TK_DETACH = 40 3396 TK_DISTINCT = 140 3397 TK_DO = 61 3398 TK_DROP = 133 3399 TK_EACH = 41 3400 TK_ELSE = 160 3401 TK_END = 11 3402 TK_ESCAPE = 58 3403 TK_EXCEPT = 136 3404 TK_EXCLUDE = 91 3405 TK_EXCLUSIVE = 9 3406 TK_EXISTS = 20 3407 TK_EXPLAIN = 2 3408 TK_FAIL = 42 3409 TK_FILTER = 166 3410 TK_FIRST = 83 3411 TK_FOLLOWING = 86 3412 TK_FOR = 62 3413 TK_FOREIGN = 132 3414 TK_FROM = 142 3415 TK_FUNCTION = 172 3416 TK_GENERATED = 95 3417 TK_GROUP = 146 3418 TK_GROUPS = 92 3419 TK_HAVING = 147 3420 TK_IF = 18 3421 TK_IF_NULL_ROW = 179 3422 TK_IGNORE = 63 3423 TK_IMMEDIATE = 8 3424 TK_IN = 49 3425 TK_INDEX = 161 3426 TK_INDEXED = 116 3427 TK_INITIALLY = 64 3428 TK_INSERT = 127 3429 TK_INSTEAD = 65 3430 TK_INTERSECT = 137 3431 TK_INTO = 151 3432 TK_IS = 45 3433 TK_ISNOT = 171 3434 TK_ISNULL = 50 3435 TK_JOIN = 143 3436 TK_JOIN_KW = 118 3437 TK_KEY = 67 3438 TK_LAST = 84 3439 TK_LIKE_KW = 47 3440 TK_LIMIT = 148 3441 TK_MATCH = 46 3442 TK_MATERIALIZED = 97 3443 TK_NO = 66 3444 TK_NOT = 19 3445 TK_NOTHING = 152 3446 TK_NOTNULL = 51 3447 TK_NULL = 121 3448 TK_NULLS = 82 3449 TK_OF = 68 3450 TK_OFFSET = 69 3451 TK_ON = 115 3452 TK_OR = 43 3453 TK_ORDER = 145 3454 TK_OTHERS = 93 3455 TK_OVER = 165 3456 TK_PARTITION = 87 3457 TK_PLAN = 4 3458 TK_PRAGMA = 70 3459 TK_PRECEDING = 88 3460 TK_PRIMARY = 122 3461 TK_PTR = 112 3462 TK_QUERY = 3 3463 TK_RAISE = 71 3464 TK_RANGE = 89 3465 TK_RECURSIVE = 72 3466 TK_REFERENCES = 125 3467 TK_REGISTER = 176 3468 TK_REINDEX = 98 3469 TK_RELEASE = 14 3470 TK_RENAME = 99 3471 TK_REPLACE = 73 3472 TK_RESTRICT = 74 3473 TK_RETURNING = 150 3474 TK_ROLLBACK = 12 3475 TK_ROW = 75 3476 TK_ROWS = 76 3477 TK_SAVEPOINT = 13 3478 TK_SELECT = 138 3479 TK_SELECT_COLUMN = 178 3480 TK_SET = 130 3481 TK_SPAN = 181 3482 TK_TABLE = 16 3483 TK_TEMP = 21 3484 TK_THEN = 159 3485 TK_TIES = 94 3486 TK_TO = 15 3487 TK_TRANSACTION = 6 3488 TK_TRIGGER = 77 3489 TK_TRUEFALSE = 170 3490 TK_TRUTH = 175 3491 TK_UMINUS = 173 3492 TK_UNBOUNDED = 90 3493 TK_UNION = 134 3494 TK_UNIQUE = 123 3495 TK_UPDATE = 129 3496 TK_UPLUS = 174 3497 TK_USING = 144 3498 TK_VACUUM = 78 3499 TK_VALUES = 139 3500 TK_VECTOR = 177 3501 TK_VIEW = 79 3502 TK_VIRTUAL = 80 3503 TK_WHEN = 158 3504 TK_WHERE = 149 3505 TK_WINDOW = 164 3506 TK_WITH = 81 3507 TK_WITHOUT = 26 3508 TREETRACE_ENABLED = 0 3509 TRIGGER_AFTER = 2 3510 TRIGGER_BEFORE = 1 3511 WHERE_AGG_DISTINCT = 0x0400 3512 WHERE_DISTINCTBY = 0x0080 3513 WHERE_DISTINCT_NOOP = 0 3514 WHERE_DISTINCT_ORDERED = 2 3515 WHERE_DISTINCT_UNIQUE = 1 3516 WHERE_DISTINCT_UNORDERED = 3 3517 WHERE_DUPLICATES_OK = 0x0010 3518 WHERE_GROUPBY = 0x0040 3519 WHERE_ONEPASS_DESIRED = 0x0004 3520 WHERE_ONEPASS_MULTIROW = 0x0008 3521 WHERE_ORDERBY_LIMIT = 0x0800 3522 WHERE_ORDERBY_MAX = 0x0002 3523 WHERE_ORDERBY_MIN = 0x0001 3524 WHERE_ORDERBY_NORMAL = 0x0000 3525 WHERE_OR_SUBCLAUSE = 0x0020 3526 WHERE_RIGHT_JOIN = 0x1000 3527 WHERE_SORTBYGROUP = 0x0200 3528 WHERE_USE_LIMIT = 0x4000 3529 WHERE_WANT_DISTINCT = 0x0100 3530 WRC_Abort = 2 3531 WRC_Continue = 0 3532 WRC_Prune = 1 3533 XN_EXPR = -2 3534 XN_ROWID = -1 3535 X_GNU_SOURCE = 0 3536 X_INTTYPES_H_ = 0 3537 X_LARGEFILE_SOURCE = 1 3538 X_LARGE_FILE = 1 3539 X_PTRDIFF_T = 0 3540 X_SQLITE_OS_H_ = 0 3541 SESSION_STREAM_TCL_VAR = "sqlite3session_streams" 3542 MAX_PREPARED_STMTS = 100 3543 NUM_PREPARED_STMTS = 10 3544 SQLITE_EVAL_WITHOUTNULLS = 0x00001 3545 SQLITE_TCL_NRE = 0 3546 TCLSH = 1 3547 X_USER_SIGNAL_H = 0 3548 CACHE_STALE = 0 3549 CURTYPE_BTREE = 0 3550 CURTYPE_PSEUDO = 3 3551 CURTYPE_SORTER = 1 3552 CURTYPE_VTAB = 2 3553 MEM_AffMask = 0x003f 3554 MEM_Agg = 0x8000 3555 MEM_Blob = 0x0010 3556 MEM_Cleared = 0x0100 3557 MEM_Dyn = 0x1000 3558 MEM_Ephem = 0x4000 3559 MEM_FromBind = 0x0040 3560 MEM_Int = 0x0004 3561 MEM_IntReal = 0x0020 3562 MEM_Null = 0x0001 3563 MEM_Real = 0x0008 3564 MEM_Static = 0x2000 3565 MEM_Str = 0x0002 3566 MEM_Subtype = 0x0800 3567 MEM_Term = 0x0200 3568 MEM_TypeMask = 0x0dbf 3569 MEM_Undefined = 0x0000 3570 MEM_Zero = 0x0400 3571 SQLITE_ENABLE_LOCKING_STYLE = 1 3572 SQLITE_FRAME_MAGIC = 0x879fb71e 3573 SQLITE_MAX_SCHEMA_RETRY = 50 3574 SQLITE_VDBEINT_H = 0 3575 VDBE_DISPLAY_P4 = 1 3576 VDBE_HALT_STATE = 3 3577 VDBE_INIT_STATE = 0 3578 VDBE_READY_STATE = 1 3579 VDBE_RUN_STATE = 2 3580 BTCF_AtLast = 0x08 3581 BTCF_Incrblob = 0x10 3582 BTCF_Multiple = 0x20 3583 BTCF_Pinned = 0x40 3584 BTCF_ValidNKey = 0x02 3585 BTCF_ValidOvfl = 0x04 3586 BTCF_WriteFlag = 0x01 3587 BTCURSOR_MAX_DEPTH = 20 3588 BTS_EXCLUSIVE = 0x0040 3589 BTS_FAST_SECURE = 0x000c 3590 BTS_INITIALLY_EMPTY = 0x0010 3591 BTS_NO_WAL = 0x0020 3592 BTS_OVERWRITE = 0x0008 3593 BTS_PAGESIZE_FIXED = 0x0002 3594 BTS_PENDING = 0x0080 3595 BTS_READ_ONLY = 0x0001 3596 BTS_SECURE_DELETE = 0x0004 3597 CURSOR_FAULT = 4 3598 CURSOR_INVALID = 1 3599 CURSOR_REQUIRESEEK = 3 3600 CURSOR_SKIPNEXT = 2 3601 CURSOR_VALID = 0 3602 PTF_INTKEY = 0x01 3603 PTF_LEAF = 0x08 3604 PTF_LEAFDATA = 0x04 3605 PTF_ZERODATA = 0x02 3606 PTRMAP_BTREE = 5 3607 PTRMAP_FREEPAGE = 2 3608 PTRMAP_OVERFLOW1 = 3 3609 PTRMAP_OVERFLOW2 = 4 3610 PTRMAP_ROOTPAGE = 1 3611 READ_LOCK = 1 3612 SQLITE_FILE_HEADER = "SQLite format 3" 3613 TRANS_NONE = 0 3614 TRANS_READ = 1 3615 TRANS_WRITE = 2 3616 WRITE_LOCK = 2 3617 N_THREAD = 26 3618 PTHREAD_CANCEL_ASYNCHRONOUS = 0x00 3619 PTHREAD_CANCEL_DEFERRED = 0x02 3620 PTHREAD_CANCEL_DISABLE = 0x00 3621 PTHREAD_CANCEL_ENABLE = 0x01 3622 PTHREAD_CREATE_DETACHED = 2 3623 PTHREAD_CREATE_JOINABLE = 1 3624 PTHREAD_EXPLICIT_SCHED = 2 3625 PTHREAD_INHERIT_SCHED = 1 3626 PTHREAD_MUTEX_DEFAULT = 0 3627 PTHREAD_MUTEX_ERRORCHECK = 1 3628 PTHREAD_MUTEX_NORMAL = 0 3629 PTHREAD_MUTEX_POLICY_FAIRSHARE_NP = 1 3630 PTHREAD_MUTEX_POLICY_FIRSTFIT_NP = 3 3631 PTHREAD_MUTEX_RECURSIVE = 2 3632 PTHREAD_PRIO_INHERIT = 1 3633 PTHREAD_PRIO_NONE = 0 3634 PTHREAD_PRIO_PROTECT = 2 3635 PTHREAD_PROCESS_PRIVATE = 2 3636 PTHREAD_PROCESS_SHARED = 1 3637 PTHREAD_SCOPE_PROCESS = 2 3638 PTHREAD_SCOPE_SYSTEM = 1 3639 QOS_MIN_RELATIVE_PRIORITY = -15 3640 SCHED_FIFO = 4 3641 SCHED_OTHER = 1 3642 SCHED_RR = 2 3643 X_MACH_PORT_T = 0 3644 X_PTHREAD_COND_SIG_init = 0x3CB0B1BB 3645 X_PTHREAD_ERRORCHECK_MUTEX_SIG_init = 0x32AAABA1 3646 X_PTHREAD_FIRSTFIT_MUTEX_SIG_init = 0x32AAABA3 3647 X_PTHREAD_H = 0 3648 X_PTHREAD_IMPL_H_ = 0 3649 X_PTHREAD_MUTEX_SIG_init = 0x32AAABA7 3650 X_PTHREAD_ONCE_SIG_init = 0x30B1BCBA 3651 X_PTHREAD_QOS_H = 0 3652 X_PTHREAD_RECURSIVE_MUTEX_SIG_init = 0x32AAABA2 3653 X_PTHREAD_RWLOCK_SIG_init = 0x2DA8B3B4 3654 X_SCHED_H_ = 0 3655 X_SYS_QOS_H = 0 3656 TCL_THREADS = 0 3657 MX_CHUNK_NUMBER = 299 3658 SQLITE_MULTIPLEX_JOURNAL_8_3_OFFSET = 400 3659 SQLITE_MULTIPLEX_WAL_8_3_OFFSET = 700 3660 ARG_MAX = 262144 3661 BC_BASE_MAX = 99 3662 BC_DIM_MAX = 2048 3663 BC_SCALE_MAX = 99 3664 BC_STRING_MAX = 1000 3665 BLKDEV_IOSIZE = 2048 3666 BSD = 199506 3667 BSD4_3 = 1 3668 BSD4_4 = 1 3669 CBLOCK = 64 3670 CBQSIZE = 8 3671 CHARCLASS_NAME_MAX = 14 3672 CHAR_BIT = 8 3673 CHAR_MAX = 127 3674 CHAR_MIN = -128 3675 CHILD_MAX = 266 3676 CLBYTES = 4096 3677 CLOFF = 4095 3678 CLOFSET = 4095 3679 CLSHIFT = 12 3680 CLSIZE = 1 3681 CLSIZELOG2 = 0 3682 CMASK = 022 3683 COLL_WEIGHTS_MAX = 2 3684 CROUND = 63 3685 DEV_BSHIFT = 9 3686 DEV_BSIZE = 512 3687 EQUIV_CLASS_MAX = 2 3688 EXPR_NEST_MAX = 32 3689 FSCALE = 2048 3690 FSHIFT = 11 3691 GID_MAX = 2147483647 3692 INT_MAX = 2147483647 3693 INT_MIN = -2147483648 3694 LINE_MAX = 2048 3695 LINK_MAX = 32767 3696 LLONG_MAX = 9223372036854775807 3697 LLONG_MIN = -9223372036854775808 3698 LONG_LONG_MAX = 9223372036854775807 3699 LONG_LONG_MIN = -9223372036854775808 3700 LONG_MAX = 9223372036854775807 3701 LONG_MIN = -9223372036854775808 3702 M16KCLBYTES = 16384 3703 M16KCLSHIFT = 14 3704 MAXALLOCSAVE = 8192 3705 MAXBSIZE = 1048576 3706 MAXCOMLEN = 16 3707 MAXDOMNAMELEN = 256 3708 MAXFRAG = 8 3709 MAXHOSTNAMELEN = 256 3710 MAXINTERP = 64 3711 MAXLOGNAME = 255 3712 MAXPATHLEN = 1024 3713 MAXPATHNAME = 512 3714 MAXPHYS = 131072 3715 MAXPHYSIO = 131072 3716 MAXPHYSIO_WIRED = 16777216 3717 MAXPRI = 127 3718 MAXSYMLINKS = 32 3719 MAXUPRC = 266 3720 MAX_CANON = 1024 3721 MAX_INPUT = 1024 3722 MBIGCLBYTES = 4096 3723 MBIGCLSHIFT = 12 3724 MB_LEN_MAX = 1 3725 MCLBYTES = 2048 3726 MCLOFSET = 2047 3727 MCLSHIFT = 11 3728 MINBUCKET = 4 3729 MSIZE = 256 3730 MSIZESHIFT = 8 3731 NAME_MAX = 255 3732 NBPG = 4096 3733 NCARGS = 262144 3734 NGROUPS = 16 3735 NGROUPS_MAX = 16 3736 NMBCLUSTERS = 512 3737 NOFILE = 256 3738 NOGROUP = 65535 3739 NZERO = 20 3740 NeXTBSD = 1995064 3741 NeXTBSD4_0 = 0 3742 OPEN_MAX = 10240 3743 PATH_MAX = 1024 3744 PCATCH = 0x100 3745 PDROP = 0x400 3746 PGOFSET = 4095 3747 PGSHIFT = 12 3748 PINOD = 8 3749 PIPE_BUF = 512 3750 PLOCK = 36 3751 PPAUSE = 40 3752 PRIBIO = 16 3753 PRIMASK = 0x0ff 3754 PSOCK = 24 3755 PSPIN = 0x800 3756 PSWP = 0 3757 PTTYBLOCK = 0x200 3758 PUSER = 50 3759 PVFS = 20 3760 PVM = 4 3761 PWAIT = 32 3762 PZERO = 22 3763 RE_DUP_MAX = 255 3764 SCHAR_MAX = 127 3765 SCHAR_MIN = -128 3766 SHRT_MAX = 32767 3767 SHRT_MIN = -32768 3768 SQLITE_DEMOVFS_BUFFERSZ = 8192 3769 TRACEBUF = 0 3770 UCHAR_MAX = 255 3771 UID_MAX = 2147483647 3772 UINT_MAX = 4294967295 3773 ULLONG_MAX = 18446744073709551615 3774 ULONG_LONG_MAX = 18446744073709551615 3775 ULONG_MAX = 18446744073709551615 3776 USHRT_MAX = 65535 3777 X_BSD_MACHINE_PARAM_H_ = 0 3778 X_GCC_LIMITS_H_ = 0 3779 X_I386_PARAM_H_ = 0 3780 X_I386__PARAM_H_ = 0 3781 X_KAUTH_CRED_T = 0 3782 X_SYS_FILE_H_ = 0 3783 X_SYS_PARAM_H_ = 0 3784 X_SYS_QUEUE_H_ = 0 3785 X_SYS_SYSLIMITS_H_ = 0 3786 DEVSYM_MAX_PATHNAME = 512 3787 DEVSYM_VFS_NAME = "devsym" 3788 WRITECRASH_NAME = "writecrash" 3789 SQLITE_INTARRAY_H = 0 3790 JT_MAX_PATHNAME = 512 3791 JT_VFS_NAME = "jt" 3792 MALLOC_LOG_FRAMES = 10 3793 DEFAULT_SECTOR_SIZE = 0x1000 3794 MAX_PAGE_SIZE = 0x10000 3795 MULTIPLEX_CTRL_ENABLE = 214014 3796 MULTIPLEX_CTRL_SET_CHUNK_SIZE = 214015 3797 MULTIPLEX_CTRL_SET_MAX_CHUNKS = 214016 3798 SQLITE_MULTIPLEX_CHUNK_SIZE = 2147418112 3799 SQLITE_MULTIPLEX_MAX_CHUNKS = 12 3800 SQLITE_MULTIPLEX_VFS_NAME = "multiplex" 3801 SQLITE_TEST_MULTIPLEX_H = 0 3802 MAX_MUTEXES = 14 3803 STATIC_MUTEXES = 12 3804 BLOBSIZE = 10485760 3805 BLOCKSIZE = 512 3806 DATABASE_FILE = 1 3807 FS_VFS_NAME = "fs" 3808 JOURNAL_FILE = 2 3809 INST_MAX_PATHNAME = 512 3810 OS_ACCESS = 1 3811 OS_ANNOTATE = 28 3812 OS_CHECKRESERVEDLOCK = 2 3813 OS_CLOSE = 3 3814 OS_CURRENTTIME = 4 3815 OS_DELETE = 5 3816 OS_DEVCHAR = 6 3817 OS_FILECONTROL = 7 3818 OS_FILESIZE = 8 3819 OS_FULLPATHNAME = 9 3820 OS_LOCK = 11 3821 OS_NUMEVENTS = 29 3822 OS_OPEN = 12 3823 OS_RANDOMNESS = 13 3824 OS_READ = 14 3825 OS_SECTORSIZE = 15 3826 OS_SHMBARRIER = 26 3827 OS_SHMLOCK = 25 3828 OS_SHMMAP = 23 3829 OS_SHMUNMAP = 22 3830 OS_SLEEP = 16 3831 OS_SYNC = 17 3832 OS_TRUNCATE = 18 3833 OS_UNLOCK = 19 3834 OS_WRITE = 20 3835 VFSLOG_BUFFERSIZE = 8192 3836 TESTPCACHE_CLEAR = 0xd42670d4 3837 TESTPCACHE_NPAGE = 217 3838 TESTPCACHE_RESERVE = 17 3839 TESTPCACHE_VALID = 0x364585fd 3840 MSG_Close = 6 3841 MSG_Done = 7 3842 MSG_Finalize = 5 3843 MSG_Open = 1 3844 MSG_Prepare = 2 3845 MSG_Reset = 4 3846 MSG_Step = 3 3847 MADV_CAN_REUSE = 9 3848 MADV_DONTNEED = 4 3849 MADV_FREE = 5 3850 MADV_FREE_REUSABLE = 7 3851 MADV_FREE_REUSE = 8 3852 MADV_NORMAL = 0 3853 MADV_PAGEOUT = 10 3854 MADV_RANDOM = 1 3855 MADV_SEQUENTIAL = 2 3856 MADV_WILLNEED = 3 3857 MADV_ZERO_WIRED_PAGES = 6 3858 MAP_32BIT = 0x8000 3859 MAP_ANON = 0x1000 3860 MAP_ANONYMOUS = 4096 3861 MAP_COPY = 2 3862 MAP_FILE = 0x0000 3863 MAP_FIXED = 0x0010 3864 MAP_HASSEMAPHORE = 0x0200 3865 MAP_JIT = 0x0800 3866 MAP_NOCACHE = 0x0400 3867 MAP_NOEXTEND = 0x0100 3868 MAP_NORESERVE = 0x0040 3869 MAP_PRIVATE = 0x0002 3870 MAP_RENAME = 0x0020 3871 MAP_RESERVED0080 = 0x0080 3872 MAP_RESILIENT_CODESIGN = 0x2000 3873 MAP_RESILIENT_MEDIA = 0x4000 3874 MAP_SHARED = 0x0001 3875 MCL_CURRENT = 0x0001 3876 MCL_FUTURE = 0x0002 3877 MINCORE_ANONYMOUS = 0x80 3878 MINCORE_COPIED = 0x40 3879 MINCORE_INCORE = 0x1 3880 MINCORE_MODIFIED = 0x4 3881 MINCORE_MODIFIED_OTHER = 0x10 3882 MINCORE_PAGED_OUT = 0x20 3883 MINCORE_REFERENCED = 0x2 3884 MINCORE_REFERENCED_OTHER = 0x8 3885 MS_ASYNC = 0x0001 3886 MS_DEACTIVATE = 0x0008 3887 MS_INVALIDATE = 0x0002 3888 MS_KILLPAGES = 0x0004 3889 MS_SYNC = 0x0010 3890 POSIX_MADV_DONTNEED = 4 3891 POSIX_MADV_NORMAL = 0 3892 POSIX_MADV_RANDOM = 1 3893 POSIX_MADV_SEQUENTIAL = 2 3894 POSIX_MADV_WILLNEED = 3 3895 PROT_EXEC = 0x04 3896 PROT_NONE = 0x00 3897 PROT_READ = 0x01 3898 PROT_WRITE = 0x02 3899 X_MMAP = 0 3900 X_SYS_MMAN_H_ = 0 3901 TCLVAR_NAME_EQ = 101 3902 TCLVAR_NAME_MATCH = 109 3903 TCLVAR_VALUE_GLOB = 103 3904 TCLVAR_VALUE_LIKE = 108 3905 TCLVAR_VALUE_REGEXP = 114 3906 FAULT_INJECT_NONE = 0 3907 FAULT_INJECT_PERSISTENT = 2 3908 FAULT_INJECT_TRANSIENT = 1 3909 TESTVFS_ACCESS_MASK = 0x00004000 3910 TESTVFS_ALL_MASK = 0x001FFFFF 3911 TESTVFS_CKLOCK_MASK = 0x00080000 3912 TESTVFS_CLOSE_MASK = 0x00000800 3913 TESTVFS_DELETE_MASK = 0x00000400 3914 TESTVFS_FCNTL_MASK = 0x00100000 3915 TESTVFS_FULLPATHNAME_MASK = 0x00008000 3916 TESTVFS_LOCK_MASK = 0x00040000 3917 TESTVFS_MAX_ARGS = 12 3918 TESTVFS_MAX_PAGES = 1024 3919 TESTVFS_OPEN_MASK = 0x00000100 3920 TESTVFS_READ_MASK = 0x00010000 3921 TESTVFS_SHMBARRIER_MASK = 0x00000040 3922 TESTVFS_SHMCLOSE_MASK = 0x00000080 3923 TESTVFS_SHMLOCK_MASK = 0x00000010 3924 TESTVFS_SHMMAP_MASK = 0x00000020 3925 TESTVFS_SHMOPEN_MASK = 0x00000001 3926 TESTVFS_SYNC_MASK = 0x00000200 3927 TESTVFS_TRUNCATE_MASK = 0x00002000 3928 TESTVFS_UNLOCK_MASK = 0x00020000 3929 TESTVFS_WRITE_MASK = 0x00001000 3930 ) 3931 3932 const ( 3933 FILESEC_OWNER = 1 3934 FILESEC_GROUP = 2 3935 FILESEC_UUID = 3 3936 FILESEC_MODE = 4 3937 FILESEC_ACL = 5 3938 FILESEC_GRPUUID = 6 3939 3940 FILESEC_ACL_RAW = 100 3941 FILESEC_ACL_ALLOCSIZE = 101 3942 ) 3943 3944 const ( 3945 QOS_CLASS_USER_INTERACTIVE = 33 3946 QOS_CLASS_USER_INITIATED = 25 3947 QOS_CLASS_DEFAULT = 21 3948 QOS_CLASS_UTILITY = 17 3949 QOS_CLASS_BACKGROUND = 9 3950 QOS_CLASS_UNSPECIFIED = 0 3951 ) 3952 3953 const ( 3954 P_ALL = 0 3955 P_PID = 1 3956 P_PGID = 2 3957 ) 3958 3959 const ( 3960 TCL_QUEUE_TAIL = 0 3961 TCL_QUEUE_HEAD = 1 3962 TCL_QUEUE_MARK = 2 3963 ) 3964 3965 const ( 3966 TCL_PATH_ABSOLUTE = 0 3967 TCL_PATH_RELATIVE = 1 3968 TCL_PATH_VOLUME_RELATIVE = 2 3969 ) 3970 3971 const ( 3972 TCL_INT = 0 3973 TCL_DOUBLE = 1 3974 TCL_EITHER = 2 3975 TCL_WIDE_INT = 3 3976 ) 3977 3978 const ( 3979 _CLOCK_REALTIME = 0 3980 _CLOCK_MONOTONIC = 6 3981 _CLOCK_MONOTONIC_RAW = 4 3982 _CLOCK_MONOTONIC_RAW_APPROX = 5 3983 _CLOCK_UPTIME_RAW = 8 3984 _CLOCK_UPTIME_RAW_APPROX = 9 3985 _CLOCK_PROCESS_CPUTIME_ID = 12 3986 _CLOCK_THREAD_CPUTIME_ID = 16 3987 ) 3988 3989 type ptrdiff_t = int64 3990 3991 type size_t = uint64 3992 3993 type wchar_t = int32 3994 3995 var __darwin_check_fd_set_overflow uintptr 3996 3997 type va_list = uintptr 3998 3999 type sqlite32 = struct { 4000 FpVfs uintptr 4001 FpVdbe uintptr 4002 FpDfltColl uintptr 4003 Fmutex uintptr 4004 FaDb uintptr 4005 FnDb int32 4006 FmDbFlags u32 4007 Fflags u64 4008 FlastRowid i64 4009 FszMmap i64 4010 FnSchemaLock u32 4011 FopenFlags uint32 4012 FerrCode int32 4013 FerrByteOffset int32 4014 FerrMask int32 4015 FiSysErrno int32 4016 FdbOptFlags u32 4017 Fenc u8 4018 FautoCommit u8 4019 Ftemp_store u8 4020 FmallocFailed u8 4021 FbBenignMalloc u8 4022 FdfltLockMode u8 4023 FnextAutovac int8 4024 FsuppressErr u8 4025 FvtabOnConflict u8 4026 FisTransactionSavepoint u8 4027 FmTrace u8 4028 FnoSharedCache u8 4029 FnSqlExec u8 4030 FeOpenState u8 4031 F__ccgo_pad1 [2]byte 4032 FnextPagesize int32 4033 FnChange i64 4034 FnTotalChange i64 4035 FaLimit [12]int32 4036 FnMaxSorterMmap int32 4037 F__ccgo_pad2 [4]byte 4038 Finit struct { 4039 FnewTnum Pgno 4040 FiDb u8 4041 Fbusy u8 4042 F__ccgo_pad1 [2]byte 4043 ForphanTrigger uint8 4044 F__ccgo_pad2 [7]byte 4045 FazInit uintptr 4046 } 4047 FnVdbeActive int32 4048 FnVdbeRead int32 4049 FnVdbeWrite int32 4050 FnVdbeExec int32 4051 FnVDestroy int32 4052 FnExtension int32 4053 FaExtension uintptr 4054 Ftrace struct{ FxLegacy uintptr } 4055 FpTraceArg uintptr 4056 FxProfile uintptr 4057 FpProfileArg uintptr 4058 FpCommitArg uintptr 4059 FxCommitCallback uintptr 4060 FpRollbackArg uintptr 4061 FxRollbackCallback uintptr 4062 FpUpdateArg uintptr 4063 FxUpdateCallback uintptr 4064 FpAutovacPagesArg uintptr 4065 FxAutovacDestr uintptr 4066 FxAutovacPages uintptr 4067 FpParse uintptr 4068 FpPreUpdateArg uintptr 4069 FxPreUpdateCallback uintptr 4070 FpPreUpdate uintptr 4071 FxWalCallback uintptr 4072 FpWalArg uintptr 4073 FxCollNeeded uintptr 4074 FxCollNeeded16 uintptr 4075 FpCollNeededArg uintptr 4076 FpErr uintptr 4077 Fu1 struct { 4078 F__ccgo_pad1 [0]uint64 4079 FisInterrupted int32 4080 F__ccgo_pad2 [4]byte 4081 } 4082 Flookaside Lookaside 4083 FxAuth sqlite3_xauth 4084 FpAuthArg uintptr 4085 FxProgress uintptr 4086 FpProgressArg uintptr 4087 FnProgressOps uint32 4088 FnVTrans int32 4089 FaModule Hash 4090 FpVtabCtx uintptr 4091 FaVTrans uintptr 4092 FpDisconnect uintptr 4093 FaFunc Hash 4094 FaCollSeq Hash 4095 FbusyHandler BusyHandler 4096 FaDbStatic [2]Db 4097 FpSavepoint uintptr 4098 FnAnalysisLimit int32 4099 FbusyTimeout int32 4100 FnSavepoint int32 4101 FnStatement int32 4102 FnDeferredCons i64 4103 FnDeferredImmCons i64 4104 FpnBytesFreed uintptr 4105 FpBlockingConnection uintptr 4106 FpUnlockConnection uintptr 4107 FpUnlockArg uintptr 4108 FxUnlockNotify uintptr 4109 FpNextBlocked uintptr 4110 } 4111 4112 type sqlite_int64 = int64 4113 type sqlite_uint64 = uint64 4114 type sqlite3_int64 = sqlite_int64 4115 type sqlite3_uint64 = sqlite_uint64 4116 4117 type sqlite3_callback = uintptr 4118 4119 type sqlite3_file1 = struct{ FpMethods uintptr } 4120 4121 type sqlite3_file = sqlite3_file1 4122 type sqlite3_io_methods1 = struct { 4123 FiVersion int32 4124 F__ccgo_pad1 [4]byte 4125 FxClose uintptr 4126 FxRead uintptr 4127 FxWrite uintptr 4128 FxTruncate uintptr 4129 FxSync uintptr 4130 FxFileSize uintptr 4131 FxLock uintptr 4132 FxUnlock uintptr 4133 FxCheckReservedLock uintptr 4134 FxFileControl uintptr 4135 FxSectorSize uintptr 4136 FxDeviceCharacteristics uintptr 4137 FxShmMap uintptr 4138 FxShmLock uintptr 4139 FxShmBarrier uintptr 4140 FxShmUnmap uintptr 4141 FxFetch uintptr 4142 FxUnfetch uintptr 4143 } 4144 4145 type sqlite3_io_methods = sqlite3_io_methods1 4146 4147 type sqlite3_mutex1 = struct { 4148 FpReal uintptr 4149 FeType int32 4150 F__ccgo_pad1 [4]byte 4151 } 4152 4153 type sqlite3_api_routines1 = struct { 4154 Faggregate_context uintptr 4155 Faggregate_count uintptr 4156 Fbind_blob uintptr 4157 Fbind_double uintptr 4158 Fbind_int uintptr 4159 Fbind_int64 uintptr 4160 Fbind_null uintptr 4161 Fbind_parameter_count uintptr 4162 Fbind_parameter_index uintptr 4163 Fbind_parameter_name uintptr 4164 Fbind_text uintptr 4165 Fbind_text16 uintptr 4166 Fbind_value uintptr 4167 Fbusy_handler uintptr 4168 Fbusy_timeout uintptr 4169 Fchanges uintptr 4170 Fclose uintptr 4171 Fcollation_needed uintptr 4172 Fcollation_needed16 uintptr 4173 Fcolumn_blob uintptr 4174 Fcolumn_bytes uintptr 4175 Fcolumn_bytes16 uintptr 4176 Fcolumn_count uintptr 4177 Fcolumn_database_name uintptr 4178 Fcolumn_database_name16 uintptr 4179 Fcolumn_decltype uintptr 4180 Fcolumn_decltype16 uintptr 4181 Fcolumn_double uintptr 4182 Fcolumn_int uintptr 4183 Fcolumn_int64 uintptr 4184 Fcolumn_name uintptr 4185 Fcolumn_name16 uintptr 4186 Fcolumn_origin_name uintptr 4187 Fcolumn_origin_name16 uintptr 4188 Fcolumn_table_name uintptr 4189 Fcolumn_table_name16 uintptr 4190 Fcolumn_text uintptr 4191 Fcolumn_text16 uintptr 4192 Fcolumn_type uintptr 4193 Fcolumn_value uintptr 4194 Fcommit_hook uintptr 4195 Fcomplete uintptr 4196 Fcomplete16 uintptr 4197 Fcreate_collation uintptr 4198 Fcreate_collation16 uintptr 4199 Fcreate_function uintptr 4200 Fcreate_function16 uintptr 4201 Fcreate_module uintptr 4202 Fdata_count uintptr 4203 Fdb_handle uintptr 4204 Fdeclare_vtab uintptr 4205 Fenable_shared_cache uintptr 4206 Ferrcode uintptr 4207 Ferrmsg uintptr 4208 Ferrmsg16 uintptr 4209 Fexec uintptr 4210 Fexpired uintptr 4211 Ffinalize uintptr 4212 Ffree uintptr 4213 Ffree_table uintptr 4214 Fget_autocommit uintptr 4215 Fget_auxdata uintptr 4216 Fget_table uintptr 4217 Fglobal_recover uintptr 4218 Finterruptx uintptr 4219 Flast_insert_rowid uintptr 4220 Flibversion uintptr 4221 Flibversion_number uintptr 4222 Fmalloc uintptr 4223 Fmprintf uintptr 4224 Fopen uintptr 4225 Fopen16 uintptr 4226 Fprepare uintptr 4227 Fprepare16 uintptr 4228 Fprofile uintptr 4229 Fprogress_handler uintptr 4230 Frealloc uintptr 4231 Freset uintptr 4232 Fresult_blob uintptr 4233 Fresult_double uintptr 4234 Fresult_error uintptr 4235 Fresult_error16 uintptr 4236 Fresult_int uintptr 4237 Fresult_int64 uintptr 4238 Fresult_null uintptr 4239 Fresult_text uintptr 4240 Fresult_text16 uintptr 4241 Fresult_text16be uintptr 4242 Fresult_text16le uintptr 4243 Fresult_value uintptr 4244 Frollback_hook uintptr 4245 Fset_authorizer uintptr 4246 Fset_auxdata uintptr 4247 Fxsnprintf uintptr 4248 Fstep uintptr 4249 Ftable_column_metadata uintptr 4250 Fthread_cleanup uintptr 4251 Ftotal_changes uintptr 4252 Ftrace uintptr 4253 Ftransfer_bindings uintptr 4254 Fupdate_hook uintptr 4255 Fuser_data uintptr 4256 Fvalue_blob uintptr 4257 Fvalue_bytes uintptr 4258 Fvalue_bytes16 uintptr 4259 Fvalue_double uintptr 4260 Fvalue_int uintptr 4261 Fvalue_int64 uintptr 4262 Fvalue_numeric_type uintptr 4263 Fvalue_text uintptr 4264 Fvalue_text16 uintptr 4265 Fvalue_text16be uintptr 4266 Fvalue_text16le uintptr 4267 Fvalue_type uintptr 4268 Fvmprintf uintptr 4269 Foverload_function uintptr 4270 Fprepare_v2 uintptr 4271 Fprepare16_v2 uintptr 4272 Fclear_bindings uintptr 4273 Fcreate_module_v2 uintptr 4274 Fbind_zeroblob uintptr 4275 Fblob_bytes uintptr 4276 Fblob_close uintptr 4277 Fblob_open uintptr 4278 Fblob_read uintptr 4279 Fblob_write uintptr 4280 Fcreate_collation_v2 uintptr 4281 Ffile_control uintptr 4282 Fmemory_highwater uintptr 4283 Fmemory_used uintptr 4284 Fmutex_alloc uintptr 4285 Fmutex_enter uintptr 4286 Fmutex_free uintptr 4287 Fmutex_leave uintptr 4288 Fmutex_try uintptr 4289 Fopen_v2 uintptr 4290 Frelease_memory uintptr 4291 Fresult_error_nomem uintptr 4292 Fresult_error_toobig uintptr 4293 Fsleep uintptr 4294 Fsoft_heap_limit uintptr 4295 Fvfs_find uintptr 4296 Fvfs_register uintptr 4297 Fvfs_unregister uintptr 4298 Fxthreadsafe uintptr 4299 Fresult_zeroblob uintptr 4300 Fresult_error_code uintptr 4301 Ftest_control uintptr 4302 Frandomness uintptr 4303 Fcontext_db_handle uintptr 4304 Fextended_result_codes uintptr 4305 Flimit uintptr 4306 Fnext_stmt uintptr 4307 Fsql uintptr 4308 Fstatus uintptr 4309 Fbackup_finish uintptr 4310 Fbackup_init uintptr 4311 Fbackup_pagecount uintptr 4312 Fbackup_remaining uintptr 4313 Fbackup_step uintptr 4314 Fcompileoption_get uintptr 4315 Fcompileoption_used uintptr 4316 Fcreate_function_v2 uintptr 4317 Fdb_config uintptr 4318 Fdb_mutex uintptr 4319 Fdb_status uintptr 4320 Fextended_errcode uintptr 4321 Flog uintptr 4322 Fsoft_heap_limit64 uintptr 4323 Fsourceid uintptr 4324 Fstmt_status uintptr 4325 Fstrnicmp uintptr 4326 Funlock_notify uintptr 4327 Fwal_autocheckpoint uintptr 4328 Fwal_checkpoint uintptr 4329 Fwal_hook uintptr 4330 Fblob_reopen uintptr 4331 Fvtab_config uintptr 4332 Fvtab_on_conflict uintptr 4333 Fclose_v2 uintptr 4334 Fdb_filename uintptr 4335 Fdb_readonly uintptr 4336 Fdb_release_memory uintptr 4337 Ferrstr uintptr 4338 Fstmt_busy uintptr 4339 Fstmt_readonly uintptr 4340 Fstricmp uintptr 4341 Furi_boolean uintptr 4342 Furi_int64 uintptr 4343 Furi_parameter uintptr 4344 Fxvsnprintf uintptr 4345 Fwal_checkpoint_v2 uintptr 4346 Fauto_extension uintptr 4347 Fbind_blob64 uintptr 4348 Fbind_text64 uintptr 4349 Fcancel_auto_extension uintptr 4350 Fload_extension uintptr 4351 Fmalloc64 uintptr 4352 Fmsize uintptr 4353 Frealloc64 uintptr 4354 Freset_auto_extension uintptr 4355 Fresult_blob64 uintptr 4356 Fresult_text64 uintptr 4357 Fstrglob uintptr 4358 Fvalue_dup uintptr 4359 Fvalue_free uintptr 4360 Fresult_zeroblob64 uintptr 4361 Fbind_zeroblob64 uintptr 4362 Fvalue_subtype uintptr 4363 Fresult_subtype uintptr 4364 Fstatus64 uintptr 4365 Fstrlike uintptr 4366 Fdb_cacheflush uintptr 4367 Fsystem_errno uintptr 4368 Ftrace_v2 uintptr 4369 Fexpanded_sql uintptr 4370 Fset_last_insert_rowid uintptr 4371 Fprepare_v3 uintptr 4372 Fprepare16_v3 uintptr 4373 Fbind_pointer uintptr 4374 Fresult_pointer uintptr 4375 Fvalue_pointer uintptr 4376 Fvtab_nochange uintptr 4377 Fvalue_nochange uintptr 4378 Fvtab_collation uintptr 4379 Fkeyword_count uintptr 4380 Fkeyword_name uintptr 4381 Fkeyword_check uintptr 4382 Fstr_new uintptr 4383 Fstr_finish uintptr 4384 Fstr_appendf uintptr 4385 Fstr_vappendf uintptr 4386 Fstr_append uintptr 4387 Fstr_appendall uintptr 4388 Fstr_appendchar uintptr 4389 Fstr_reset uintptr 4390 Fstr_errcode uintptr 4391 Fstr_length uintptr 4392 Fstr_value uintptr 4393 Fcreate_window_function uintptr 4394 Fnormalized_sql uintptr 4395 Fstmt_isexplain uintptr 4396 Fvalue_frombind uintptr 4397 Fdrop_modules uintptr 4398 Fhard_heap_limit64 uintptr 4399 Furi_key uintptr 4400 Ffilename_database uintptr 4401 Ffilename_journal uintptr 4402 Ffilename_wal uintptr 4403 Fcreate_filename uintptr 4404 Ffree_filename uintptr 4405 Fdatabase_file_object uintptr 4406 Ftxn_state uintptr 4407 Fchanges64 uintptr 4408 Ftotal_changes64 uintptr 4409 Fautovacuum_pages uintptr 4410 Ferror_offset uintptr 4411 Fvtab_rhs_value uintptr 4412 Fvtab_distinct uintptr 4413 Fvtab_in uintptr 4414 Fvtab_in_first uintptr 4415 Fvtab_in_next uintptr 4416 Fdeserialize uintptr 4417 Fserialize uintptr 4418 Fdb_name uintptr 4419 } 4420 4421 type sqlite3_vfs1 = struct { 4422 FiVersion int32 4423 FszOsFile int32 4424 FmxPathname int32 4425 F__ccgo_pad1 [4]byte 4426 FpNext uintptr 4427 FzName uintptr 4428 FpAppData uintptr 4429 FxOpen uintptr 4430 FxDelete uintptr 4431 FxAccess uintptr 4432 FxFullPathname uintptr 4433 FxDlOpen uintptr 4434 FxDlError uintptr 4435 FxDlSym uintptr 4436 FxDlClose uintptr 4437 FxRandomness uintptr 4438 FxSleep uintptr 4439 FxCurrentTime uintptr 4440 FxGetLastError uintptr 4441 FxCurrentTimeInt64 uintptr 4442 FxSetSystemCall uintptr 4443 FxGetSystemCall uintptr 4444 FxNextSystemCall uintptr 4445 } 4446 4447 type sqlite3_vfs = sqlite3_vfs1 4448 type sqlite3_syscall_ptr = uintptr 4449 4450 type sqlite3_mem_methods1 = struct { 4451 FxMalloc uintptr 4452 FxFree uintptr 4453 FxRealloc uintptr 4454 FxSize uintptr 4455 FxRoundup uintptr 4456 FxInit uintptr 4457 FxShutdown uintptr 4458 FpAppData uintptr 4459 } 4460 4461 type sqlite3_mem_methods = sqlite3_mem_methods1 4462 4463 type sqlite3_value1 = struct { 4464 Fu struct{ Fr float64 } 4465 Fz uintptr 4466 Fn int32 4467 Fflags u16 4468 Fenc u8 4469 FeSubtype u8 4470 Fdb uintptr 4471 FszMalloc int32 4472 FuTemp u32 4473 FzMalloc uintptr 4474 FxDel uintptr 4475 } 4476 4477 type sqlite3_context1 = struct { 4478 FpOut uintptr 4479 FpFunc uintptr 4480 FpMem uintptr 4481 FpVdbe uintptr 4482 FiOp int32 4483 FisError int32 4484 Fenc u8 4485 FskipFlag u8 4486 Fargc u8 4487 F__ccgo_pad1 [5]byte 4488 Fargv [1]uintptr 4489 } 4490 4491 type sqlite3_destructor_type = uintptr 4492 4493 type sqlite3_vtab1 = struct { 4494 FpModule uintptr 4495 FnRef int32 4496 F__ccgo_pad1 [4]byte 4497 FzErrMsg uintptr 4498 } 4499 4500 type sqlite3_vtab = sqlite3_vtab1 4501 type sqlite3_index_info1 = struct { 4502 FnConstraint int32 4503 F__ccgo_pad1 [4]byte 4504 FaConstraint uintptr 4505 FnOrderBy int32 4506 F__ccgo_pad2 [4]byte 4507 FaOrderBy uintptr 4508 FaConstraintUsage uintptr 4509 FidxNum int32 4510 F__ccgo_pad3 [4]byte 4511 FidxStr uintptr 4512 FneedToFreeIdxStr int32 4513 ForderByConsumed int32 4514 FestimatedCost float64 4515 FestimatedRows sqlite3_int64 4516 FidxFlags int32 4517 F__ccgo_pad4 [4]byte 4518 FcolUsed sqlite3_uint64 4519 } 4520 4521 type sqlite3_index_info = sqlite3_index_info1 4522 type sqlite3_vtab_cursor1 = struct{ FpVtab uintptr } 4523 4524 type sqlite3_vtab_cursor = sqlite3_vtab_cursor1 4525 type sqlite3_module1 = struct { 4526 FiVersion int32 4527 F__ccgo_pad1 [4]byte 4528 FxCreate uintptr 4529 FxConnect uintptr 4530 FxBestIndex uintptr 4531 FxDisconnect uintptr 4532 FxDestroy uintptr 4533 FxOpen uintptr 4534 FxClose uintptr 4535 FxFilter uintptr 4536 FxNext uintptr 4537 FxEof uintptr 4538 FxColumn uintptr 4539 FxRowid uintptr 4540 FxUpdate uintptr 4541 FxBegin uintptr 4542 FxSync uintptr 4543 FxCommit uintptr 4544 FxRollback uintptr 4545 FxFindFunction uintptr 4546 FxRename uintptr 4547 FxSavepoint uintptr 4548 FxRelease uintptr 4549 FxRollbackTo uintptr 4550 FxShadowName uintptr 4551 } 4552 4553 type sqlite3_module = sqlite3_module1 4554 4555 type sqlite3_index_constraint = struct { 4556 FiColumn int32 4557 Fop uint8 4558 Fusable uint8 4559 F__ccgo_pad1 [2]byte 4560 FiTermOffset int32 4561 } 4562 4563 type sqlite3_index_orderby = struct { 4564 FiColumn int32 4565 Fdesc uint8 4566 F__ccgo_pad1 [3]byte 4567 } 4568 4569 type sqlite3_index_constraint_usage = struct { 4570 FargvIndex int32 4571 Fomit uint8 4572 F__ccgo_pad1 [3]byte 4573 } 4574 4575 type sqlite3_mutex_methods1 = struct { 4576 FxMutexInit uintptr 4577 FxMutexEnd uintptr 4578 FxMutexAlloc uintptr 4579 FxMutexFree uintptr 4580 FxMutexEnter uintptr 4581 FxMutexTry uintptr 4582 FxMutexLeave uintptr 4583 FxMutexHeld uintptr 4584 FxMutexNotheld uintptr 4585 } 4586 4587 type sqlite3_mutex_methods = sqlite3_mutex_methods1 4588 4589 type sqlite3_str1 = struct { 4590 Fdb uintptr 4591 FzText uintptr 4592 FnAlloc u32 4593 FmxAlloc u32 4594 FnChar u32 4595 FaccError u8 4596 FprintfFlags u8 4597 F__ccgo_pad1 [2]byte 4598 } 4599 4600 type sqlite3_pcache_page1 = struct { 4601 FpBuf uintptr 4602 FpExtra uintptr 4603 } 4604 4605 type sqlite3_pcache_page = sqlite3_pcache_page1 4606 4607 type sqlite3_pcache_methods21 = struct { 4608 FiVersion int32 4609 F__ccgo_pad1 [4]byte 4610 FpArg uintptr 4611 FxInit uintptr 4612 FxShutdown uintptr 4613 FxCreate uintptr 4614 FxCachesize uintptr 4615 FxPagecount uintptr 4616 FxFetch uintptr 4617 FxUnpin uintptr 4618 FxRekey uintptr 4619 FxTruncate uintptr 4620 FxDestroy uintptr 4621 FxShrink uintptr 4622 } 4623 4624 type sqlite3_pcache_methods2 = sqlite3_pcache_methods21 4625 4626 type sqlite3_pcache_methods1 = struct { 4627 FpArg uintptr 4628 FxInit uintptr 4629 FxShutdown uintptr 4630 FxCreate uintptr 4631 FxCachesize uintptr 4632 FxPagecount uintptr 4633 FxFetch uintptr 4634 FxUnpin uintptr 4635 FxRekey uintptr 4636 FxTruncate uintptr 4637 FxDestroy uintptr 4638 } 4639 4640 type sqlite3_pcache_methods = sqlite3_pcache_methods1 4641 4642 type sqlite3_snapshot1 = struct{ Fhidden [48]uint8 } 4643 4644 type sqlite3_snapshot = sqlite3_snapshot1 4645 4646 type sqlite3_rtree_geometry1 = struct { 4647 FpContext uintptr 4648 FnParam int32 4649 F__ccgo_pad1 [4]byte 4650 FaParam uintptr 4651 FpUser uintptr 4652 FxDelUser uintptr 4653 } 4654 4655 type sqlite3_rtree_geometry = sqlite3_rtree_geometry1 4656 type sqlite3_rtree_query_info1 = struct { 4657 FpContext uintptr 4658 FnParam int32 4659 F__ccgo_pad1 [4]byte 4660 FaParam uintptr 4661 FpUser uintptr 4662 FxDelUser uintptr 4663 FaCoord uintptr 4664 FanQueue uintptr 4665 FnCoord int32 4666 FiLevel int32 4667 FmxLevel int32 4668 F__ccgo_pad2 [4]byte 4669 FiRowid sqlite3_int64 4670 FrParentScore sqlite3_rtree_dbl 4671 FeParentWithin int32 4672 FeWithin int32 4673 FrScore sqlite3_rtree_dbl 4674 FapSqlParam uintptr 4675 } 4676 4677 type sqlite3_rtree_query_info = sqlite3_rtree_query_info1 4678 4679 type sqlite3_rtree_dbl = float64 4680 4681 type Fts5ExtensionApi1 = struct { 4682 FiVersion int32 4683 F__ccgo_pad1 [4]byte 4684 FxUserData uintptr 4685 FxColumnCount uintptr 4686 FxRowCount uintptr 4687 FxColumnTotalSize uintptr 4688 FxTokenize uintptr 4689 FxPhraseCount uintptr 4690 FxPhraseSize uintptr 4691 FxInstCount uintptr 4692 FxInst uintptr 4693 FxRowid uintptr 4694 FxColumnText uintptr 4695 FxColumnSize uintptr 4696 FxQueryPhrase uintptr 4697 FxSetAuxdata uintptr 4698 FxGetAuxdata uintptr 4699 FxPhraseFirst uintptr 4700 FxPhraseNext uintptr 4701 FxPhraseFirstColumn uintptr 4702 FxPhraseNextColumn uintptr 4703 } 4704 4705 type Fts5ExtensionApi = Fts5ExtensionApi1 4706 type Fts5PhraseIter1 = struct { 4707 Fa uintptr 4708 Fb uintptr 4709 } 4710 4711 type Fts5PhraseIter = Fts5PhraseIter1 4712 4713 type fts5_extension_function = uintptr 4714 type fts5_tokenizer1 = struct { 4715 FxCreate uintptr 4716 FxDelete uintptr 4717 FxTokenize uintptr 4718 } 4719 4720 type fts5_tokenizer = fts5_tokenizer1 4721 4722 type fts5_api1 = struct { 4723 FiVersion int32 4724 F__ccgo_pad1 [4]byte 4725 FxCreateTokenizer uintptr 4726 FxFindTokenizer uintptr 4727 FxCreateFunction uintptr 4728 } 4729 4730 type fts5_api = fts5_api1 4731 4732 type sqlite3expert1 = struct { 4733 FiSample int32 4734 F__ccgo_pad1 [4]byte 4735 Fdb uintptr 4736 Fdbm uintptr 4737 Fdbv uintptr 4738 FpTable uintptr 4739 FpScan uintptr 4740 FpWrite uintptr 4741 FpStatement uintptr 4742 FbRun int32 4743 F__ccgo_pad2 [4]byte 4744 FpzErrmsg uintptr 4745 Frc int32 4746 F__ccgo_pad3 [4]byte 4747 FhIdx IdxHash 4748 FzCandidates uintptr 4749 } 4750 4751 type sqlite3expert = sqlite3expert1 4752 4753 type __darwin_pthread_handler_rec = struct { 4754 F__routine uintptr 4755 F__arg uintptr 4756 F__next uintptr 4757 } 4758 4759 type _opaque_pthread_attr_t = struct { 4760 F__sig int64 4761 F__opaque [56]int8 4762 } 4763 4764 type _opaque_pthread_cond_t = struct { 4765 F__sig int64 4766 F__opaque [40]int8 4767 } 4768 4769 type _opaque_pthread_condattr_t = struct { 4770 F__sig int64 4771 F__opaque [8]int8 4772 } 4773 4774 type _opaque_pthread_mutex_t = struct { 4775 F__sig int64 4776 F__opaque [56]int8 4777 } 4778 4779 type _opaque_pthread_mutexattr_t = struct { 4780 F__sig int64 4781 F__opaque [8]int8 4782 } 4783 4784 type _opaque_pthread_once_t = struct { 4785 F__sig int64 4786 F__opaque [8]int8 4787 } 4788 4789 type _opaque_pthread_rwlock_t = struct { 4790 F__sig int64 4791 F__opaque [192]int8 4792 } 4793 4794 type _opaque_pthread_rwlockattr_t = struct { 4795 F__sig int64 4796 F__opaque [16]int8 4797 } 4798 4799 type _opaque_pthread_t = struct { 4800 F__sig int64 4801 F__cleanup_stack uintptr 4802 F__opaque [8176]int8 4803 } 4804 4805 type int8_t = int8 4806 4807 type int16_t = int16 4808 4809 type int32_t = int32 4810 4811 type int64_t = int64 4812 4813 type u_int8_t = uint8 4814 4815 type u_int16_t = uint16 4816 4817 type u_int32_t = uint32 4818 4819 type u_int64_t = uint64 4820 4821 type register_t = int64_t 4822 4823 type intptr_t = int64 4824 4825 type uintptr_t = uint64 4826 4827 type user_addr_t = u_int64_t 4828 type user_size_t = u_int64_t 4829 type user_ssize_t = int64_t 4830 type user_long_t = int64_t 4831 type user_ulong_t = u_int64_t 4832 type user_time_t = int64_t 4833 type user_off_t = int64_t 4834 4835 type syscall_arg_t = u_int64_t 4836 4837 type rsize_t = uint64 4838 4839 type errno_t = int32 4840 4841 type ssize_t = int64 4842 4843 type fpos_t = int64 4844 4845 type __sbuf = struct { 4846 F_base uintptr 4847 F_size int32 4848 F__ccgo_pad1 [4]byte 4849 } 4850 4851 type __sFILE = struct { 4852 F_p uintptr 4853 F_r int32 4854 F_w int32 4855 F_flags int16 4856 F_file int16 4857 F__ccgo_pad1 [4]byte 4858 F_bf struct { 4859 F_base uintptr 4860 F_size int32 4861 F__ccgo_pad1 [4]byte 4862 } 4863 F_lbfsize int32 4864 F__ccgo_pad2 [4]byte 4865 F_cookie uintptr 4866 F_close uintptr 4867 F_read uintptr 4868 F_seek uintptr 4869 F_write uintptr 4870 F_ub struct { 4871 F_base uintptr 4872 F_size int32 4873 F__ccgo_pad1 [4]byte 4874 } 4875 F_extra uintptr 4876 F_ur int32 4877 F_ubuf [3]uint8 4878 F_nbuf [1]uint8 4879 F_lb struct { 4880 F_base uintptr 4881 F_size int32 4882 F__ccgo_pad1 [4]byte 4883 } 4884 F_blksize int32 4885 F__ccgo_pad3 [4]byte 4886 F_offset fpos_t 4887 } 4888 4889 type FILE = __sFILE 4890 4891 type off_t = int64 4892 4893 type i64 = sqlite3_int64 4894 type u64 = sqlite3_uint64 4895 4896 type IdxColumn1 = struct { 4897 FzName uintptr 4898 FzColl uintptr 4899 FiPk int32 4900 F__ccgo_pad1 [4]byte 4901 } 4902 4903 type IdxColumn = IdxColumn1 4904 type IdxConstraint1 = struct { 4905 FzColl uintptr 4906 FbRange int32 4907 FiCol int32 4908 FbFlag int32 4909 FbDesc int32 4910 FpNext uintptr 4911 FpLink uintptr 4912 } 4913 4914 type IdxConstraint = IdxConstraint1 4915 type IdxScan1 = struct { 4916 FpTab uintptr 4917 FiDb int32 4918 F__ccgo_pad1 [4]byte 4919 Fcovering i64 4920 FpOrder uintptr 4921 FpEq uintptr 4922 FpRange uintptr 4923 FpNextScan uintptr 4924 } 4925 4926 type IdxScan = IdxScan1 4927 type IdxStatement1 = struct { 4928 FiId int32 4929 F__ccgo_pad1 [4]byte 4930 FzSql uintptr 4931 FzIdx uintptr 4932 FzEQP uintptr 4933 FpNext uintptr 4934 } 4935 4936 type IdxStatement = IdxStatement1 4937 type IdxTable1 = struct { 4938 FnCol int32 4939 F__ccgo_pad1 [4]byte 4940 FzName uintptr 4941 FaCol uintptr 4942 FpNext uintptr 4943 } 4944 4945 type IdxTable = IdxTable1 4946 type IdxWrite1 = struct { 4947 FpTab uintptr 4948 FeOp int32 4949 F__ccgo_pad1 [4]byte 4950 FpNext uintptr 4951 } 4952 4953 type IdxWrite = IdxWrite1 4954 4955 type IdxHashEntry1 = struct { 4956 FzKey uintptr 4957 FzVal uintptr 4958 FzVal2 uintptr 4959 FpHashNext uintptr 4960 FpNext uintptr 4961 } 4962 4963 type IdxHashEntry = IdxHashEntry1 4964 type IdxHash1 = struct { 4965 FpFirst uintptr 4966 FaHash [1023]uintptr 4967 } 4968 4969 type IdxHash = IdxHash1 4970 4971 func idxMalloc(tls *libc.TLS, pRc uintptr, nByte int32) uintptr { 4972 var pRet uintptr 4973 4974 pRet = sqlite3.Xsqlite3_malloc(tls, nByte) 4975 if pRet != 0 { 4976 libc.X__builtin___memset_chk(tls, pRet, 0, uint64(nByte), libc.X__builtin_object_size(tls, pRet, 0)) 4977 } else { 4978 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 4979 } 4980 return pRet 4981 } 4982 4983 func idxHashInit(tls *libc.TLS, pHash uintptr) { 4984 libc.X__builtin___memset_chk(tls, pHash, 0, uint64(unsafe.Sizeof(IdxHash{})), libc.X__builtin_object_size(tls, pHash, 0)) 4985 } 4986 4987 func idxHashClear(tls *libc.TLS, pHash uintptr) { 4988 var i int32 4989 for i = 0; i < IDX_HASH_SIZE; i++ { 4990 var pEntry uintptr 4991 var pNext uintptr 4992 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(i)*8)); pEntry != 0; pEntry = pNext { 4993 pNext = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext 4994 sqlite3.Xsqlite3_free(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2) 4995 sqlite3.Xsqlite3_free(tls, pEntry) 4996 } 4997 } 4998 libc.X__builtin___memset_chk(tls, pHash, 0, uint64(unsafe.Sizeof(IdxHash{})), libc.X__builtin_object_size(tls, pHash, 0)) 4999 } 5000 5001 func idxHashString(tls *libc.TLS, z uintptr, n int32) int32 { 5002 var ret uint32 = uint32(0) 5003 var i int32 5004 for i = 0; i < n; i++ { 5005 ret = ret + (ret<<3 + uint32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(i)))))) 5006 } 5007 return int32(ret % uint32(IDX_HASH_SIZE)) 5008 } 5009 5010 func idxHashAdd(tls *libc.TLS, pRc uintptr, pHash uintptr, zKey uintptr, zVal uintptr) int32 { 5011 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 5012 var iHash int32 = idxHashString(tls, zKey, nKey) 5013 var nVal int32 = func() int32 { 5014 if zVal != 0 { 5015 return int32(libc.Xstrlen(tls, zVal)) 5016 } 5017 return 0 5018 }() 5019 var pEntry uintptr 5020 5021 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)); pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext { 5022 if int32(libc.Xstrlen(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) == nKey && 0 == libc.Xmemcmp(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) { 5023 return 1 5024 } 5025 } 5026 pEntry = idxMalloc(tls, pRc, int32(uint64(unsafe.Sizeof(IdxHashEntry{}))+uint64(nKey)+uint64(1)+uint64(nVal)+uint64(1))) 5027 if pEntry != 0 { 5028 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey = pEntry + 1*40 5029 libc.X__builtin___memcpy_chk(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey), libc.X__builtin_object_size(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, 0)) 5030 if zVal != 0 { 5031 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey + uintptr(nKey+1) 5032 libc.X__builtin___memcpy_chk(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, zVal, uint64(nVal), libc.X__builtin_object_size(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, 0)) 5033 } 5034 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)) 5035 *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)) = pEntry 5036 5037 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext = (*IdxHash)(unsafe.Pointer(pHash)).FpFirst 5038 (*IdxHash)(unsafe.Pointer(pHash)).FpFirst = pEntry 5039 } 5040 return 0 5041 } 5042 5043 func idxHashFind(tls *libc.TLS, pHash uintptr, zKey uintptr, nKey int32) uintptr { 5044 var iHash int32 5045 var pEntry uintptr 5046 if nKey < 0 { 5047 nKey = int32(libc.Xstrlen(tls, zKey)) 5048 } 5049 iHash = idxHashString(tls, zKey, nKey) 5050 5051 for pEntry = *(*uintptr)(unsafe.Pointer(pHash + 8 + uintptr(iHash)*8)); pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpHashNext { 5052 if int32(libc.Xstrlen(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) == nKey && 0 == libc.Xmemcmp(tls, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey, zKey, uint64(nKey)) { 5053 return pEntry 5054 } 5055 } 5056 return uintptr(0) 5057 } 5058 5059 func idxHashSearch(tls *libc.TLS, pHash uintptr, zKey uintptr, nKey int32) uintptr { 5060 var pEntry uintptr = idxHashFind(tls, pHash, zKey, nKey) 5061 if pEntry != 0 { 5062 return (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal 5063 } 5064 return uintptr(0) 5065 } 5066 5067 func idxNewConstraint(tls *libc.TLS, pRc uintptr, zColl uintptr) uintptr { 5068 var pNew uintptr 5069 var nColl int32 = int32(libc.Xstrlen(tls, zColl)) 5070 5071 pNew = idxMalloc(tls, pRc, int32(uint64(unsafe.Sizeof(IdxConstraint{}))*uint64(nColl)+uint64(1))) 5072 if pNew != 0 { 5073 (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl = pNew + 1*40 5074 libc.X__builtin___memcpy_chk(tls, (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl, zColl, uint64(nColl+1), libc.X__builtin_object_size(tls, (*IdxConstraint)(unsafe.Pointer(pNew)).FzColl, 0)) 5075 } 5076 return pNew 5077 } 5078 5079 func idxDatabaseError(tls *libc.TLS, db uintptr, pzErrmsg uintptr) { 5080 bp := tls.Alloc(8) 5081 defer tls.Free(8) 5082 5083 *(*uintptr)(unsafe.Pointer(pzErrmsg)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 5084 } 5085 5086 func idxPrepareStmt(tls *libc.TLS, db uintptr, ppStmt uintptr, pzErrmsg uintptr, zSql uintptr) int32 { 5087 var rc int32 = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, ppStmt, uintptr(0)) 5088 if rc != SQLITE_OK { 5089 *(*uintptr)(unsafe.Pointer(ppStmt)) = uintptr(0) 5090 idxDatabaseError(tls, db, pzErrmsg) 5091 } 5092 return rc 5093 } 5094 5095 func idxPrintfPrepareStmt(tls *libc.TLS, db uintptr, ppStmt uintptr, pzErrmsg uintptr, zFmt uintptr, va uintptr) int32 { 5096 var ap va_list 5097 _ = ap 5098 var rc int32 5099 var zSql uintptr 5100 ap = va 5101 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 5102 if zSql == uintptr(0) { 5103 rc = SQLITE_NOMEM 5104 } else { 5105 rc = idxPrepareStmt(tls, db, ppStmt, pzErrmsg, zSql) 5106 sqlite3.Xsqlite3_free(tls, zSql) 5107 } 5108 _ = ap 5109 return rc 5110 } 5111 5112 type ExpertVtab1 = struct { 5113 Fbase sqlite3_vtab 5114 FpTab uintptr 5115 FpExpert uintptr 5116 } 5117 5118 type ExpertVtab = ExpertVtab1 5119 5120 type ExpertCsr1 = struct { 5121 Fbase sqlite3_vtab_cursor 5122 FpData uintptr 5123 } 5124 5125 type ExpertCsr = ExpertCsr1 5126 5127 func expertDequote(tls *libc.TLS, zIn uintptr) uintptr { 5128 var n int32 = int32(libc.Xstrlen(tls, zIn)) 5129 var zRet uintptr = sqlite3.Xsqlite3_malloc(tls, n) 5130 5131 if zRet != 0 { 5132 var iOut int32 = 0 5133 var iIn int32 = 0 5134 for iIn = 1; iIn < n-1; iIn++ { 5135 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == '\'' { 5136 iIn++ 5137 } 5138 *(*int8)(unsafe.Pointer(zRet + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 5139 } 5140 *(*int8)(unsafe.Pointer(zRet + uintptr(iOut))) = int8(0) 5141 } 5142 5143 return zRet 5144 } 5145 5146 func expertConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 5147 bp := tls.Alloc(4) 5148 defer tls.Free(4) 5149 5150 var pExpert uintptr = pAux 5151 var p uintptr = uintptr(0) 5152 5153 if argc != 4 { 5154 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3, 0) 5155 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 5156 } else { 5157 var zCreateTable uintptr = expertDequote(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 5158 if zCreateTable != 0 { 5159 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_declare_vtab(tls, db, zCreateTable) 5160 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 5161 p = idxMalloc(tls, bp, int32(unsafe.Sizeof(ExpertVtab{}))) 5162 } 5163 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 5164 (*ExpertVtab)(unsafe.Pointer(p)).FpExpert = pExpert 5165 (*ExpertVtab)(unsafe.Pointer(p)).FpTab = (*sqlite3expert)(unsafe.Pointer(pExpert)).FpTable 5166 5167 } 5168 sqlite3.Xsqlite3_free(tls, zCreateTable) 5169 } else { 5170 *(*int32)(unsafe.Pointer(bp)) = SQLITE_NOMEM 5171 } 5172 } 5173 5174 *(*uintptr)(unsafe.Pointer(ppVtab)) = p 5175 return *(*int32)(unsafe.Pointer(bp)) 5176 } 5177 5178 func expertDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 5179 var p uintptr = pVtab 5180 sqlite3.Xsqlite3_free(tls, p) 5181 return SQLITE_OK 5182 } 5183 5184 func expertBestIndex(tls *libc.TLS, pVtab uintptr, pIdxInfo uintptr) int32 { 5185 bp := tls.Alloc(4) 5186 defer tls.Free(4) 5187 5188 var p uintptr = pVtab 5189 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 5190 var n int32 = 0 5191 var pScan uintptr 5192 var opmask int32 = SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_GT | SQLITE_INDEX_CONSTRAINT_LT | SQLITE_INDEX_CONSTRAINT_GE | SQLITE_INDEX_CONSTRAINT_LE 5193 5194 pScan = idxMalloc(tls, bp, int32(unsafe.Sizeof(IdxScan{}))) 5195 if pScan != 0 { 5196 var i int32 5197 5198 (*IdxScan)(unsafe.Pointer(pScan)).FpTab = (*ExpertVtab)(unsafe.Pointer(p)).FpTab 5199 (*IdxScan)(unsafe.Pointer(pScan)).FpNextScan = (*sqlite3expert)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpExpert)).FpScan 5200 (*sqlite3expert)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpExpert)).FpScan = pScan 5201 5202 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 5203 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 5204 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 && 5205 (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn >= 0 && 5206 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpTab)).FaCol+uintptr((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn)*24)).FiPk == 0 && 5207 int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop)&opmask != 0 { 5208 var pNew uintptr 5209 var zColl uintptr = sqlite3.Xsqlite3_vtab_collation(tls, pIdxInfo, i) 5210 pNew = idxNewConstraint(tls, bp, zColl) 5211 if pNew != 0 { 5212 (*IdxConstraint)(unsafe.Pointer(pNew)).FiCol = (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn 5213 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 5214 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpEq 5215 (*IdxScan)(unsafe.Pointer(pScan)).FpEq = pNew 5216 } else { 5217 (*IdxConstraint)(unsafe.Pointer(pNew)).FbRange = 1 5218 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpRange 5219 (*IdxScan)(unsafe.Pointer(pScan)).FpRange = pNew 5220 } 5221 } 5222 n++ 5223 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = n 5224 } 5225 } 5226 5227 for i = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy - 1; i >= 0; i-- { 5228 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).FiColumn 5229 if iCol >= 0 { 5230 var pNew uintptr = idxNewConstraint(tls, bp, (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(p)).FpTab)).FaCol+uintptr(iCol)*24)).FzColl) 5231 if pNew != 0 { 5232 (*IdxConstraint)(unsafe.Pointer(pNew)).FiCol = iCol 5233 (*IdxConstraint)(unsafe.Pointer(pNew)).FbDesc = int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).Fdesc) 5234 (*IdxConstraint)(unsafe.Pointer(pNew)).FpNext = (*IdxScan)(unsafe.Pointer(pScan)).FpOrder 5235 (*IdxConstraint)(unsafe.Pointer(pNew)).FpLink = (*IdxScan)(unsafe.Pointer(pScan)).FpOrder 5236 (*IdxScan)(unsafe.Pointer(pScan)).FpOrder = pNew 5237 n++ 5238 } 5239 } 5240 } 5241 } 5242 5243 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000.0 / float64(n+1) 5244 return *(*int32)(unsafe.Pointer(bp)) 5245 } 5246 5247 func expertUpdate(tls *libc.TLS, pVtab uintptr, nData int32, azData uintptr, pRowid uintptr) int32 { 5248 _ = pVtab 5249 _ = nData 5250 _ = azData 5251 _ = pRowid 5252 return SQLITE_OK 5253 } 5254 5255 func expertOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 5256 bp := tls.Alloc(4) 5257 defer tls.Free(4) 5258 5259 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 5260 var pCsr uintptr 5261 _ = pVTab 5262 pCsr = idxMalloc(tls, bp, int32(unsafe.Sizeof(ExpertCsr{}))) 5263 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 5264 return *(*int32)(unsafe.Pointer(bp)) 5265 } 5266 5267 func expertClose(tls *libc.TLS, cur uintptr) int32 { 5268 var pCsr uintptr = cur 5269 sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 5270 sqlite3.Xsqlite3_free(tls, pCsr) 5271 return SQLITE_OK 5272 } 5273 5274 func expertEof(tls *libc.TLS, cur uintptr) int32 { 5275 var pCsr uintptr = cur 5276 return libc.Bool32((*ExpertCsr)(unsafe.Pointer(pCsr)).FpData == uintptr(0)) 5277 } 5278 5279 func expertNext(tls *libc.TLS, cur uintptr) int32 { 5280 var pCsr uintptr = cur 5281 var rc int32 = SQLITE_OK 5282 5283 rc = sqlite3.Xsqlite3_step(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 5284 if rc != SQLITE_ROW { 5285 rc = sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 5286 (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData = uintptr(0) 5287 } else { 5288 rc = SQLITE_OK 5289 } 5290 5291 return rc 5292 } 5293 5294 func expertRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 5295 _ = cur 5296 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 5297 return SQLITE_OK 5298 } 5299 5300 func expertColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 5301 var pCsr uintptr = cur 5302 var pVal uintptr 5303 pVal = sqlite3.Xsqlite3_column_value(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData, i) 5304 if pVal != 0 { 5305 sqlite3.Xsqlite3_result_value(tls, ctx, pVal) 5306 } 5307 return SQLITE_OK 5308 } 5309 5310 func expertFilter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 5311 bp := tls.Alloc(8) 5312 defer tls.Free(8) 5313 5314 var pCsr uintptr = cur 5315 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 5316 var pExpert uintptr = (*ExpertVtab)(unsafe.Pointer(pVtab)).FpExpert 5317 var rc int32 5318 5319 _ = idxNum 5320 _ = idxStr 5321 _ = argc 5322 _ = argv 5323 rc = sqlite3.Xsqlite3_finalize(tls, (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData) 5324 (*ExpertCsr)(unsafe.Pointer(pCsr)).FpData = uintptr(0) 5325 if rc == SQLITE_OK { 5326 rc = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(pExpert)).Fdb, pCsr+8, pVtab+16, 5327 ts+19, libc.VaList(bp, (*IdxTable)(unsafe.Pointer((*ExpertVtab)(unsafe.Pointer(pVtab)).FpTab)).FzName)) 5328 } 5329 5330 if rc == SQLITE_OK { 5331 rc = expertNext(tls, cur) 5332 } 5333 return rc 5334 } 5335 5336 func idxRegisterVtab(tls *libc.TLS, p uintptr) int32 { 5337 return sqlite3.Xsqlite3_create_module(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, ts+56, uintptr(unsafe.Pointer(&expertModule)), p) 5338 } 5339 5340 var expertModule = sqlite3_module{ 5341 FiVersion: 2, 5342 FxCreate: 0, 5343 FxConnect: 0, 5344 FxBestIndex: 0, 5345 FxDisconnect: 0, 5346 FxDestroy: 0, 5347 FxOpen: 0, 5348 FxClose: 0, 5349 FxFilter: 0, 5350 FxNext: 0, 5351 FxEof: 0, 5352 FxColumn: 0, 5353 FxRowid: 0, 5354 FxUpdate: 0, 5355 } 5356 5357 func idxFinalize(tls *libc.TLS, pRc uintptr, pStmt uintptr) { 5358 var rc int32 = sqlite3.Xsqlite3_finalize(tls, pStmt) 5359 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 5360 *(*int32)(unsafe.Pointer(pRc)) = rc 5361 } 5362 } 5363 5364 func idxGetTableInfo(tls *libc.TLS, db uintptr, zTab uintptr, ppOut uintptr, pzErrmsg uintptr) int32 { 5365 bp := tls.Alloc(40) 5366 defer tls.Free(40) 5367 5368 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 5369 var nCol int32 = 0 5370 var nTab int32 5371 var nByte int32 5372 var pNew uintptr = uintptr(0) 5373 5374 var rc2 int32 5375 var pCsr uintptr = uintptr(0) 5376 var nPk int32 = 0 5377 5378 *(*uintptr)(unsafe.Pointer(ppOut)) = uintptr(0) 5379 if zTab == uintptr(0) { 5380 return SQLITE_ERROR 5381 } 5382 nTab = int32(libc.Xstrlen(tls, zTab)) 5383 nByte = int32(uint64(unsafe.Sizeof(IdxTable{})) + uint64(nTab) + uint64(1)) 5384 *(*int32)(unsafe.Pointer(bp + 24)) = idxPrintfPrepareStmt(tls, db, bp+8, pzErrmsg, ts+63, libc.VaList(bp, zTab)) 5385 for *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) { 5386 var zCol uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 5387 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 5388 if zCol == uintptr(0) { 5389 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_ERROR 5390 break 5391 } 5392 nByte = nByte + (1 + int32(libc.Xstrlen(tls, zCol))) 5393 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3_table_column_metadata(tls, 5394 db, ts+85, zTab, zCol, uintptr(0), bp+16, uintptr(0), uintptr(0), uintptr(0)) 5395 if *(*uintptr)(unsafe.Pointer(bp + 16)) == uintptr(0) { 5396 *(*uintptr)(unsafe.Pointer(bp + 16)) = ts + 90 5397 } 5398 nByte = nByte + (1 + int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 16))))) 5399 nCol++ 5400 nPk = nPk + libc.Bool32(sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 5) > 0) 5401 } 5402 rc2 = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 5403 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5404 *(*int32)(unsafe.Pointer(bp + 24)) = rc2 5405 } 5406 5407 nByte = int32(uint64(nByte) + uint64(unsafe.Sizeof(IdxColumn{}))*uint64(nCol)) 5408 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5409 pNew = idxMalloc(tls, bp+24, nByte) 5410 } 5411 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5412 (*IdxTable)(unsafe.Pointer(pNew)).FaCol = pNew + 1*32 5413 (*IdxTable)(unsafe.Pointer(pNew)).FnCol = nCol 5414 pCsr = (*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24 5415 } 5416 5417 nCol = 0 5418 for *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) { 5419 var zCol uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 5420 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 5421 var nCopy int32 5422 if zCol == uintptr(0) { 5423 continue 5424 } 5425 nCopy = int32(libc.Xstrlen(tls, zCol)) + 1 5426 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24)).FzName = pCsr 5427 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24)).FiPk = libc.Bool32(sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 5) == 1 && nPk == 1) 5428 libc.X__builtin___memcpy_chk(tls, pCsr, zCol, uint64(nCopy), libc.X__builtin_object_size(tls, pCsr, 0)) 5429 pCsr += uintptr(nCopy) 5430 5431 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3_table_column_metadata(tls, 5432 db, ts+85, zTab, zCol, uintptr(0), bp+32, uintptr(0), uintptr(0), uintptr(0)) 5433 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 5434 if *(*uintptr)(unsafe.Pointer(bp + 32)) == uintptr(0) { 5435 *(*uintptr)(unsafe.Pointer(bp + 32)) = ts + 90 5436 } 5437 nCopy = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 32)))) + 1 5438 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pNew)).FaCol + uintptr(nCol)*24)).FzColl = pCsr 5439 libc.X__builtin___memcpy_chk(tls, pCsr, *(*uintptr)(unsafe.Pointer(bp + 32)), uint64(nCopy), libc.X__builtin_object_size(tls, pCsr, 0)) 5440 pCsr += uintptr(nCopy) 5441 } 5442 5443 nCol++ 5444 } 5445 idxFinalize(tls, bp+24, *(*uintptr)(unsafe.Pointer(bp + 8))) 5446 5447 if *(*int32)(unsafe.Pointer(bp + 24)) != SQLITE_OK { 5448 sqlite3.Xsqlite3_free(tls, pNew) 5449 pNew = uintptr(0) 5450 } else if pNew != uintptr(0) { 5451 (*IdxTable)(unsafe.Pointer(pNew)).FzName = pCsr 5452 if (*IdxTable)(unsafe.Pointer(pNew)).FzName != uintptr(0) { 5453 libc.X__builtin___memcpy_chk(tls, (*IdxTable)(unsafe.Pointer(pNew)).FzName, zTab, uint64(nTab+1), libc.X__builtin_object_size(tls, (*IdxTable)(unsafe.Pointer(pNew)).FzName, 0)) 5454 } 5455 } 5456 5457 *(*uintptr)(unsafe.Pointer(ppOut)) = pNew 5458 return *(*int32)(unsafe.Pointer(bp + 24)) 5459 } 5460 5461 func idxAppendText(tls *libc.TLS, pRc uintptr, zIn uintptr, zFmt uintptr, va uintptr) uintptr { 5462 var ap va_list 5463 _ = ap 5464 var zAppend uintptr = uintptr(0) 5465 var zRet uintptr = uintptr(0) 5466 var nIn int32 5467 if zIn != 0 { 5468 nIn = int32(libc.Xstrlen(tls, zIn)) 5469 } else { 5470 nIn = 0 5471 } 5472 var nAppend int32 = 0 5473 ap = va 5474 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 5475 zAppend = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 5476 if zAppend != 0 { 5477 nAppend = int32(libc.Xstrlen(tls, zAppend)) 5478 zRet = sqlite3.Xsqlite3_malloc(tls, nIn+nAppend+1) 5479 } 5480 if zAppend != 0 && zRet != 0 { 5481 if nIn != 0 { 5482 libc.X__builtin___memcpy_chk(tls, zRet, zIn, uint64(nIn), libc.X__builtin_object_size(tls, zRet, 0)) 5483 } 5484 libc.X__builtin___memcpy_chk(tls, zRet+uintptr(nIn), zAppend, uint64(nAppend+1), libc.X__builtin_object_size(tls, zRet+uintptr(nIn), 0)) 5485 } else { 5486 sqlite3.Xsqlite3_free(tls, zRet) 5487 zRet = uintptr(0) 5488 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 5489 } 5490 sqlite3.Xsqlite3_free(tls, zAppend) 5491 sqlite3.Xsqlite3_free(tls, zIn) 5492 } 5493 _ = ap 5494 return zRet 5495 } 5496 5497 func idxIdentifierRequiresQuotes(tls *libc.TLS, zId uintptr) int32 { 5498 var i int32 5499 for i = 0; *(*int8)(unsafe.Pointer(zId + uintptr(i))) != 0; i++ { 5500 if !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) == '_') && 5501 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= '0' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= '9') && 5502 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= 'a' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= 'z') && 5503 !(int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) >= 'A' && int32(*(*int8)(unsafe.Pointer(zId + uintptr(i)))) <= 'Z') { 5504 return 1 5505 } 5506 } 5507 return 0 5508 } 5509 5510 func idxAppendColDefn(tls *libc.TLS, pRc uintptr, zIn uintptr, pTab uintptr, pCons uintptr) uintptr { 5511 bp := tls.Alloc(32) 5512 defer tls.Free(32) 5513 5514 var zRet uintptr = zIn 5515 var p uintptr = (*IdxTable)(unsafe.Pointer(pTab)).FaCol + uintptr((*IdxConstraint)(unsafe.Pointer(pCons)).FiCol)*24 5516 if zRet != 0 { 5517 zRet = idxAppendText(tls, pRc, zRet, ts+97, 0) 5518 } 5519 5520 if idxIdentifierRequiresQuotes(tls, (*IdxColumn)(unsafe.Pointer(p)).FzName) != 0 { 5521 zRet = idxAppendText(tls, pRc, zRet, ts+100, libc.VaList(bp, (*IdxColumn)(unsafe.Pointer(p)).FzName)) 5522 } else { 5523 zRet = idxAppendText(tls, pRc, zRet, ts, libc.VaList(bp+8, (*IdxColumn)(unsafe.Pointer(p)).FzName)) 5524 } 5525 5526 if sqlite3.Xsqlite3_stricmp(tls, (*IdxColumn)(unsafe.Pointer(p)).FzColl, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl) != 0 { 5527 if idxIdentifierRequiresQuotes(tls, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl) != 0 { 5528 zRet = idxAppendText(tls, pRc, zRet, ts+103, libc.VaList(bp+16, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl)) 5529 } else { 5530 zRet = idxAppendText(tls, pRc, zRet, ts+115, libc.VaList(bp+24, (*IdxConstraint)(unsafe.Pointer(pCons)).FzColl)) 5531 } 5532 } 5533 5534 if (*IdxConstraint)(unsafe.Pointer(pCons)).FbDesc != 0 { 5535 zRet = idxAppendText(tls, pRc, zRet, ts+127, 0) 5536 } 5537 return zRet 5538 } 5539 5540 func idxFindCompatible(tls *libc.TLS, pRc uintptr, dbm uintptr, pScan uintptr, pEq uintptr, pTail uintptr) int32 { 5541 bp := tls.Alloc(36) 5542 defer tls.Free(36) 5543 5544 var zTbl uintptr = (*IdxTable)(unsafe.Pointer((*IdxScan)(unsafe.Pointer(pScan)).FpTab)).FzName 5545 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 5546 var pIter uintptr 5547 var nEq int32 = 0 5548 5549 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 5550 nEq++ 5551 } 5552 5553 *(*int32)(unsafe.Pointer(bp + 32)) = idxPrintfPrepareStmt(tls, dbm, bp+16, uintptr(0), ts+133, libc.VaList(bp, zTbl)) 5554 for *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) == SQLITE_ROW { 5555 var bMatch int32 = 1 5556 var pT uintptr = pTail 5557 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 5558 var zIdx uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 1) 5559 if zIdx == uintptr(0) { 5560 continue 5561 } 5562 5563 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 5564 (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag = 0 5565 } 5566 5567 *(*int32)(unsafe.Pointer(bp + 32)) = idxPrintfPrepareStmt(tls, dbm, bp+24, uintptr(0), ts+154, libc.VaList(bp+8, zIdx)) 5568 for *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) == SQLITE_ROW { 5569 var iIdx int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 0) 5570 var iCol int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 1) 5571 var zColl uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 4) 5572 5573 if iIdx < nEq { 5574 for pIter = pEq; pIter != 0; pIter = (*IdxConstraint)(unsafe.Pointer(pIter)).FpLink { 5575 if (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag != 0 { 5576 continue 5577 } 5578 if (*IdxConstraint)(unsafe.Pointer(pIter)).FiCol != iCol { 5579 continue 5580 } 5581 if sqlite3.Xsqlite3_stricmp(tls, (*IdxConstraint)(unsafe.Pointer(pIter)).FzColl, zColl) != 0 { 5582 continue 5583 } 5584 (*IdxConstraint)(unsafe.Pointer(pIter)).FbFlag = 1 5585 break 5586 } 5587 if pIter == uintptr(0) { 5588 bMatch = 0 5589 break 5590 } 5591 } else { 5592 if pT != 0 { 5593 if (*IdxConstraint)(unsafe.Pointer(pT)).FiCol != iCol || sqlite3.Xsqlite3_stricmp(tls, (*IdxConstraint)(unsafe.Pointer(pT)).FzColl, zColl) != 0 { 5594 bMatch = 0 5595 break 5596 } 5597 pT = (*IdxConstraint)(unsafe.Pointer(pT)).FpLink 5598 } 5599 } 5600 } 5601 idxFinalize(tls, bp+32, *(*uintptr)(unsafe.Pointer(bp + 24))) 5602 5603 if *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK && bMatch != 0 { 5604 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 5605 return 1 5606 } 5607 } 5608 idxFinalize(tls, bp+32, *(*uintptr)(unsafe.Pointer(bp + 16))) 5609 5610 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp + 32)) 5611 return 0 5612 } 5613 5614 func countNonzeros(tls *libc.TLS, pCount uintptr, nc int32, azResults uintptr, azColumns uintptr) int32 { 5615 _ = azColumns 5616 if nc > 0 && (int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(azResults))))) != '0' || int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(azResults)) + 1))) != 0) { 5617 *(*int32)(unsafe.Pointer(pCount)) += 1 5618 } 5619 return 0 5620 } 5621 5622 func idxCreateFromCons(tls *libc.TLS, p uintptr, pScan uintptr, pEq uintptr, pTail uintptr) int32 { 5623 bp := tls.Alloc(56) 5624 defer tls.Free(56) 5625 5626 var dbm uintptr = (*sqlite3expert)(unsafe.Pointer(p)).Fdbm 5627 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_OK 5628 if (pEq != 0 || pTail != 0) && 0 == idxFindCompatible(tls, bp+48, dbm, pScan, pEq, pTail) { 5629 var pTab uintptr = (*IdxScan)(unsafe.Pointer(pScan)).FpTab 5630 var zCols uintptr = uintptr(0) 5631 var zIdx uintptr = uintptr(0) 5632 var pCons uintptr 5633 var h uint32 = uint32(0) 5634 var zFmt uintptr 5635 5636 for pCons = pEq; pCons != 0; pCons = (*IdxConstraint)(unsafe.Pointer(pCons)).FpLink { 5637 zCols = idxAppendColDefn(tls, bp+48, zCols, pTab, pCons) 5638 } 5639 for pCons = pTail; pCons != 0; pCons = (*IdxConstraint)(unsafe.Pointer(pCons)).FpLink { 5640 zCols = idxAppendColDefn(tls, bp+48, zCols, pTab, pCons) 5641 } 5642 5643 if *(*int32)(unsafe.Pointer(bp + 48)) == SQLITE_OK { 5644 var zTable uintptr = (*IdxTable)(unsafe.Pointer((*IdxScan)(unsafe.Pointer(pScan)).FpTab)).FzName 5645 var quoteTable int32 = idxIdentifierRequiresQuotes(tls, zTable) 5646 var zName uintptr = uintptr(0) 5647 var collisions int32 = 0 5648 for __ccgo := true; __ccgo; __ccgo = collisions < 50 && zName != uintptr(0) { 5649 var zFind uintptr 5650 for *(*int32)(unsafe.Pointer(bp + 52)) = 0; *(*int8)(unsafe.Pointer(zCols + uintptr(*(*int32)(unsafe.Pointer(bp + 52))))) != 0; *(*int32)(unsafe.Pointer(bp + 52))++ { 5651 h = h + (h<<3 + uint32(*(*int8)(unsafe.Pointer(zCols + uintptr(*(*int32)(unsafe.Pointer(bp + 52))))))) 5652 } 5653 sqlite3.Xsqlite3_free(tls, zName) 5654 zName = sqlite3.Xsqlite3_mprintf(tls, ts+176, libc.VaList(bp, zTable, h)) 5655 if zName == uintptr(0) { 5656 break 5657 } 5658 5659 zFmt = ts + 188 5660 zFind = sqlite3.Xsqlite3_mprintf(tls, zFmt, libc.VaList(bp+16, zName)) 5661 *(*int32)(unsafe.Pointer(bp + 52)) = 0 5662 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, dbm, zFind, *(*uintptr)(unsafe.Pointer(&struct { 5663 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 5664 }{countNonzeros})), bp+52, uintptr(0)) 5665 5666 sqlite3.Xsqlite3_free(tls, zFind) 5667 if *(*int32)(unsafe.Pointer(bp + 52)) == 0 { 5668 collisions = 0 5669 break 5670 } 5671 collisions++ 5672 } 5673 if collisions != 0 { 5674 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_BUSY | int32(3)<<8 5675 } else if zName == uintptr(0) { 5676 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_NOMEM 5677 } else { 5678 if quoteTable != 0 { 5679 zFmt = ts + 274 5680 } else { 5681 zFmt = ts + 304 5682 } 5683 zIdx = sqlite3.Xsqlite3_mprintf(tls, zFmt, libc.VaList(bp+24, zName, zTable, zCols)) 5684 if !(zIdx != 0) { 5685 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_NOMEM 5686 } else { 5687 *(*int32)(unsafe.Pointer(bp + 48)) = sqlite3.Xsqlite3_exec(tls, dbm, zIdx, uintptr(0), uintptr(0), (*sqlite3expert)(unsafe.Pointer(p)).FpzErrmsg) 5688 if *(*int32)(unsafe.Pointer(bp + 48)) != SQLITE_OK { 5689 *(*int32)(unsafe.Pointer(bp + 48)) = SQLITE_BUSY | int32(3)<<8 5690 } else { 5691 idxHashAdd(tls, bp+48, p+88, zName, zIdx) 5692 } 5693 } 5694 sqlite3.Xsqlite3_free(tls, zName) 5695 sqlite3.Xsqlite3_free(tls, zIdx) 5696 } 5697 } 5698 5699 sqlite3.Xsqlite3_free(tls, zCols) 5700 } 5701 return *(*int32)(unsafe.Pointer(bp + 48)) 5702 } 5703 5704 func idxFindConstraint(tls *libc.TLS, pList uintptr, p uintptr) int32 { 5705 var pCmp uintptr 5706 for pCmp = pList; pCmp != 0; pCmp = (*IdxConstraint)(unsafe.Pointer(pCmp)).FpLink { 5707 if (*IdxConstraint)(unsafe.Pointer(p)).FiCol == (*IdxConstraint)(unsafe.Pointer(pCmp)).FiCol { 5708 return 1 5709 } 5710 } 5711 return 0 5712 } 5713 5714 func idxCreateFromWhere(tls *libc.TLS, p uintptr, pScan uintptr, pTail uintptr) int32 { 5715 var p1 uintptr = uintptr(0) 5716 var pCon uintptr 5717 var rc int32 5718 5719 for pCon = (*IdxScan)(unsafe.Pointer(pScan)).FpEq; pCon != 0; pCon = (*IdxConstraint)(unsafe.Pointer(pCon)).FpNext { 5720 if !(idxFindConstraint(tls, p1, pCon) != 0) && !(idxFindConstraint(tls, pTail, pCon) != 0) { 5721 (*IdxConstraint)(unsafe.Pointer(pCon)).FpLink = p1 5722 p1 = pCon 5723 } 5724 } 5725 5726 rc = idxCreateFromCons(tls, p, pScan, p1, pTail) 5727 5728 if pTail == uintptr(0) { 5729 for pCon = (*IdxScan)(unsafe.Pointer(pScan)).FpRange; rc == SQLITE_OK && pCon != 0; pCon = (*IdxConstraint)(unsafe.Pointer(pCon)).FpNext { 5730 if !(idxFindConstraint(tls, p1, pCon) != 0) && !(idxFindConstraint(tls, pTail, pCon) != 0) { 5731 rc = idxCreateFromCons(tls, p, pScan, p1, pCon) 5732 } 5733 } 5734 } 5735 5736 return rc 5737 } 5738 5739 func idxCreateCandidates(tls *libc.TLS, p uintptr) int32 { 5740 var rc int32 = SQLITE_OK 5741 var pIter uintptr 5742 5743 for pIter = (*sqlite3expert)(unsafe.Pointer(p)).FpScan; pIter != 0 && rc == SQLITE_OK; pIter = (*IdxScan)(unsafe.Pointer(pIter)).FpNextScan { 5744 rc = idxCreateFromWhere(tls, p, pIter, uintptr(0)) 5745 if rc == SQLITE_OK && (*IdxScan)(unsafe.Pointer(pIter)).FpOrder != 0 { 5746 rc = idxCreateFromWhere(tls, p, pIter, (*IdxScan)(unsafe.Pointer(pIter)).FpOrder) 5747 } 5748 } 5749 5750 return rc 5751 } 5752 5753 func idxConstraintFree(tls *libc.TLS, pConstraint uintptr) { 5754 var pNext uintptr 5755 var p uintptr 5756 5757 for p = pConstraint; p != 0; p = pNext { 5758 pNext = (*IdxConstraint)(unsafe.Pointer(p)).FpNext 5759 sqlite3.Xsqlite3_free(tls, p) 5760 } 5761 } 5762 5763 func idxScanFree(tls *libc.TLS, pScan uintptr, pLast uintptr) { 5764 var p uintptr 5765 var pNext uintptr 5766 for p = pScan; p != pLast; p = pNext { 5767 pNext = (*IdxScan)(unsafe.Pointer(p)).FpNextScan 5768 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpOrder) 5769 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpEq) 5770 idxConstraintFree(tls, (*IdxScan)(unsafe.Pointer(p)).FpRange) 5771 sqlite3.Xsqlite3_free(tls, p) 5772 } 5773 } 5774 5775 func idxStatementFree(tls *libc.TLS, pStatement uintptr, pLast uintptr) { 5776 var p uintptr 5777 var pNext uintptr 5778 for p = pStatement; p != pLast; p = pNext { 5779 pNext = (*IdxStatement)(unsafe.Pointer(p)).FpNext 5780 sqlite3.Xsqlite3_free(tls, (*IdxStatement)(unsafe.Pointer(p)).FzEQP) 5781 sqlite3.Xsqlite3_free(tls, (*IdxStatement)(unsafe.Pointer(p)).FzIdx) 5782 sqlite3.Xsqlite3_free(tls, p) 5783 } 5784 } 5785 5786 func idxTableFree(tls *libc.TLS, pTab uintptr) { 5787 var pIter uintptr 5788 var pNext uintptr 5789 for pIter = pTab; pIter != 0; pIter = pNext { 5790 pNext = (*IdxTable)(unsafe.Pointer(pIter)).FpNext 5791 sqlite3.Xsqlite3_free(tls, pIter) 5792 } 5793 } 5794 5795 func idxWriteFree(tls *libc.TLS, pTab uintptr) { 5796 var pIter uintptr 5797 var pNext uintptr 5798 for pIter = pTab; pIter != 0; pIter = pNext { 5799 pNext = (*IdxWrite)(unsafe.Pointer(pIter)).FpNext 5800 sqlite3.Xsqlite3_free(tls, pIter) 5801 } 5802 } 5803 5804 func idxFindIndexes(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 5805 bp := tls.Alloc(8228) 5806 defer tls.Free(8228) 5807 5808 var pStmt uintptr 5809 var dbm uintptr 5810 5811 var zSql uintptr 5812 var nIdx int32 5813 var zIdx uintptr 5814 5815 var zDetail uintptr 5816 var nDetail int32 5817 var i int32 5818 var pEntry uintptr 5819 5820 dbm = (*sqlite3expert)(unsafe.Pointer(p)).Fdbm 5821 *(*int32)(unsafe.Pointer(bp + 8224)) = SQLITE_OK 5822 idxHashInit(tls, bp+24) 5823 5824 pStmt = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 5825 __1: 5826 if !(*(*int32)(unsafe.Pointer(bp + 8224)) == SQLITE_OK && pStmt != 0) { 5827 goto __3 5828 } 5829 *(*uintptr)(unsafe.Pointer(bp + 8216)) = uintptr(0) 5830 idxHashClear(tls, bp+24) 5831 *(*int32)(unsafe.Pointer(bp + 8224)) = idxPrintfPrepareStmt(tls, dbm, bp+8216, pzErr, 5832 ts+330, libc.VaList(bp, (*IdxStatement)(unsafe.Pointer(pStmt)).FzSql)) 5833 __4: 5834 if !(*(*int32)(unsafe.Pointer(bp + 8224)) == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8216))) == SQLITE_ROW) { 5835 goto __5 5836 } 5837 5838 zDetail = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8216)), 3) 5839 5840 if !!(zDetail != 0) { 5841 goto __6 5842 } 5843 goto __4 5844 __6: 5845 ; 5846 nDetail = int32(libc.Xstrlen(tls, zDetail)) 5847 5848 i = 0 5849 __7: 5850 if !(i < nDetail) { 5851 goto __9 5852 } 5853 zIdx = uintptr(0) 5854 if !(i+13 < nDetail && libc.Xmemcmp(tls, zDetail+uintptr(i), ts+352, uint64(13)) == 0) { 5855 goto __10 5856 } 5857 zIdx = zDetail + uintptr(i+13) 5858 goto __11 5859 __10: 5860 if !(i+22 < nDetail && 5861 libc.Xmemcmp(tls, zDetail+uintptr(i), ts+366, uint64(22)) == 0) { 5862 goto __12 5863 } 5864 zIdx = zDetail + uintptr(i+22) 5865 __12: 5866 ; 5867 __11: 5868 ; 5869 if !(zIdx != 0) { 5870 goto __13 5871 } 5872 nIdx = 0 5873 __14: 5874 if !(int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx)))) != 0 && (int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx)))) != ' ' || int32(*(*int8)(unsafe.Pointer(zIdx + uintptr(nIdx+1)))) != '(')) { 5875 goto __15 5876 } 5877 nIdx++ 5878 goto __14 5879 __15: 5880 ; 5881 zSql = idxHashSearch(tls, p+88, zIdx, nIdx) 5882 if !(zSql != 0) { 5883 goto __16 5884 } 5885 idxHashAdd(tls, bp+8224, bp+24, zSql, uintptr(0)) 5886 if !(*(*int32)(unsafe.Pointer(bp + 8224)) != 0) { 5887 goto __17 5888 } 5889 goto find_indexes_out 5890 __17: 5891 ; 5892 __16: 5893 ; 5894 goto __9 5895 __13: 5896 ; 5897 goto __8 5898 __8: 5899 i++ 5900 goto __7 5901 goto __9 5902 __9: 5903 ; 5904 if !(int32(*(*int8)(unsafe.Pointer(zDetail))) != '-') { 5905 goto __18 5906 } 5907 (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP = idxAppendText(tls, bp+8224, (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP, ts+389, libc.VaList(bp+8, zDetail)) 5908 __18: 5909 ; 5910 goto __4 5911 __5: 5912 ; 5913 pEntry = (*IdxHash)(unsafe.Pointer(bp + 24)).FpFirst 5914 __19: 5915 if !(pEntry != 0) { 5916 goto __21 5917 } 5918 (*IdxStatement)(unsafe.Pointer(pStmt)).FzIdx = idxAppendText(tls, bp+8224, (*IdxStatement)(unsafe.Pointer(pStmt)).FzIdx, ts+393, libc.VaList(bp+16, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzKey)) 5919 goto __20 5920 __20: 5921 pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext 5922 goto __19 5923 goto __21 5924 __21: 5925 ; 5926 idxFinalize(tls, bp+8224, *(*uintptr)(unsafe.Pointer(bp + 8216))) 5927 goto __2 5928 __2: 5929 pStmt = (*IdxStatement)(unsafe.Pointer(pStmt)).FpNext 5930 goto __1 5931 goto __3 5932 __3: 5933 ; 5934 find_indexes_out: 5935 idxHashClear(tls, bp+24) 5936 return *(*int32)(unsafe.Pointer(bp + 8224)) 5937 } 5938 5939 func idxAuthCallback(tls *libc.TLS, pCtx uintptr, eOp int32, z3 uintptr, z4 uintptr, zDb uintptr, zTrigger uintptr) int32 { 5940 bp := tls.Alloc(4) 5941 defer tls.Free(4) 5942 5943 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 5944 _ = z4 5945 _ = zTrigger 5946 if eOp == SQLITE_INSERT || eOp == SQLITE_UPDATE || eOp == SQLITE_DELETE { 5947 if sqlite3.Xsqlite3_stricmp(tls, zDb, ts+85) == 0 { 5948 var p uintptr = pCtx 5949 var pTab uintptr 5950 for pTab = (*sqlite3expert)(unsafe.Pointer(p)).FpTable; pTab != 0; pTab = (*IdxTable)(unsafe.Pointer(pTab)).FpNext { 5951 if 0 == sqlite3.Xsqlite3_stricmp(tls, z3, (*IdxTable)(unsafe.Pointer(pTab)).FzName) { 5952 break 5953 } 5954 } 5955 if pTab != 0 { 5956 var pWrite uintptr 5957 for pWrite = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite; pWrite != 0; pWrite = (*IdxWrite)(unsafe.Pointer(pWrite)).FpNext { 5958 if (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab == pTab && (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp == eOp { 5959 break 5960 } 5961 } 5962 if pWrite == uintptr(0) { 5963 pWrite = idxMalloc(tls, bp, int32(unsafe.Sizeof(IdxWrite{}))) 5964 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 5965 (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab = pTab 5966 (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp = eOp 5967 (*IdxWrite)(unsafe.Pointer(pWrite)).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 5968 (*sqlite3expert)(unsafe.Pointer(p)).FpWrite = pWrite 5969 } 5970 } 5971 } 5972 } 5973 } 5974 return *(*int32)(unsafe.Pointer(bp)) 5975 } 5976 5977 func idxProcessOneTrigger(tls *libc.TLS, p uintptr, pWrite uintptr, pzErr uintptr) int32 { 5978 bp := tls.Alloc(104) 5979 defer tls.Free(104) 5980 5981 var pTab uintptr = (*IdxWrite)(unsafe.Pointer(pWrite)).FpTab 5982 var zTab uintptr = (*IdxTable)(unsafe.Pointer(pTab)).FzName 5983 var zSql uintptr = ts + 398 5984 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 5985 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_OK 5986 var zWrite uintptr = uintptr(0) 5987 5988 *(*int32)(unsafe.Pointer(bp + 88)) = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, bp+80, pzErr, zSql, libc.VaList(bp, zTab, zTab)) 5989 for *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) { 5990 var zCreate uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 5991 if zCreate == uintptr(0) { 5992 continue 5993 } 5994 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zCreate, uintptr(0), uintptr(0), pzErr) 5995 } 5996 idxFinalize(tls, bp+88, *(*uintptr)(unsafe.Pointer(bp + 80))) 5997 5998 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 5999 var z uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+524, libc.VaList(bp+16, zTab, zInt)) 6000 if z == uintptr(0) { 6001 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_NOMEM 6002 } else { 6003 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, z, uintptr(0), uintptr(0), pzErr) 6004 sqlite3.Xsqlite3_free(tls, z) 6005 } 6006 } 6007 6008 switch (*IdxWrite)(unsafe.Pointer(pWrite)).FeOp { 6009 case SQLITE_INSERT: 6010 { 6011 var i int32 6012 zWrite = idxAppendText(tls, bp+88, zWrite, ts+557, libc.VaList(bp+32, zInt)) 6013 for i = 0; i < (*IdxTable)(unsafe.Pointer(pTab)).FnCol; i++ { 6014 zWrite = idxAppendText(tls, bp+88, zWrite, ts+580, libc.VaList(bp+40, func() uintptr { 6015 if i == 0 { 6016 return ts + 584 6017 } 6018 return ts + 97 6019 }())) 6020 } 6021 zWrite = idxAppendText(tls, bp+88, zWrite, ts+585, 0) 6022 break 6023 6024 } 6025 case SQLITE_UPDATE: 6026 { 6027 var i int32 6028 zWrite = idxAppendText(tls, bp+88, zWrite, ts+587, libc.VaList(bp+48, zInt)) 6029 for i = 0; i < (*IdxTable)(unsafe.Pointer(pTab)).FnCol; i++ { 6030 zWrite = idxAppendText(tls, bp+88, zWrite, ts+602, libc.VaList(bp+56, func() uintptr { 6031 if i == 0 { 6032 return ts + 584 6033 } 6034 return ts + 97 6035 }(), 6036 (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(pTab)).FaCol+uintptr(i)*24)).FzName)) 6037 } 6038 break 6039 6040 } 6041 default: 6042 { 6043 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 6044 zWrite = sqlite3.Xsqlite3_mprintf(tls, ts+609, libc.VaList(bp+72, zInt)) 6045 if zWrite == uintptr(0) { 6046 *(*int32)(unsafe.Pointer(bp + 88)) = SQLITE_NOMEM 6047 } 6048 } 6049 6050 } 6051 } 6052 6053 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 6054 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 6055 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_prepare_v2(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zWrite, -1, bp+96, uintptr(0)) 6056 idxFinalize(tls, bp+88, *(*uintptr)(unsafe.Pointer(bp + 96))) 6057 if *(*int32)(unsafe.Pointer(bp + 88)) != SQLITE_OK { 6058 idxDatabaseError(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, pzErr) 6059 } 6060 } 6061 sqlite3.Xsqlite3_free(tls, zWrite) 6062 6063 if *(*int32)(unsafe.Pointer(bp + 88)) == SQLITE_OK { 6064 *(*int32)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zDrop, uintptr(0), uintptr(0), pzErr) 6065 } 6066 6067 return *(*int32)(unsafe.Pointer(bp + 88)) 6068 } 6069 6070 var zInt uintptr = ts + 624 6071 var zDrop uintptr = ts + 662 6072 6073 func idxProcessTriggers(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 6074 var rc int32 = SQLITE_OK 6075 var pEnd uintptr = uintptr(0) 6076 var pFirst uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 6077 6078 for rc == SQLITE_OK && pFirst != pEnd { 6079 var pIter uintptr 6080 for pIter = pFirst; rc == SQLITE_OK && pIter != pEnd; pIter = (*IdxWrite)(unsafe.Pointer(pIter)).FpNext { 6081 rc = idxProcessOneTrigger(tls, p, pIter, pzErr) 6082 } 6083 pEnd = pFirst 6084 pFirst = (*sqlite3expert)(unsafe.Pointer(p)).FpWrite 6085 } 6086 6087 return rc 6088 } 6089 6090 func idxCreateVtabSchema(tls *libc.TLS, p uintptr, pzErrmsg uintptr) int32 { 6091 bp := tls.Alloc(60) 6092 defer tls.Free(60) 6093 6094 *(*int32)(unsafe.Pointer(bp + 56)) = idxRegisterVtab(tls, p) 6095 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 6096 6097 *(*int32)(unsafe.Pointer(bp + 56)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, bp+40, pzErrmsg, 6098 ts+711) 6099 for *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 6100 var zType uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 6101 var zName uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 6102 var zSql uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 6103 6104 if zType == uintptr(0) || zName == uintptr(0) { 6105 continue 6106 } 6107 if int32(*(*int8)(unsafe.Pointer(zType))) == 'v' || int32(*(*int8)(unsafe.Pointer(zType + 1))) == 'r' { 6108 if zSql != 0 { 6109 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zSql, uintptr(0), uintptr(0), pzErrmsg) 6110 } 6111 } else { 6112 *(*int32)(unsafe.Pointer(bp + 56)) = idxGetTableInfo(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, zName, bp+48, pzErrmsg) 6113 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK { 6114 var i int32 6115 var zInner uintptr = uintptr(0) 6116 var zOuter uintptr = uintptr(0) 6117 (*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpTable 6118 (*sqlite3expert)(unsafe.Pointer(p)).FpTable = *(*uintptr)(unsafe.Pointer(bp + 48)) 6119 6120 zInner = idxAppendText(tls, bp+56, uintptr(0), ts+979, 0) 6121 for i = 0; i < (*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FnCol; i++ { 6122 zInner = idxAppendText(tls, bp+56, zInner, ts+995, 6123 libc.VaList(bp, func() uintptr { 6124 if i == 0 { 6125 return ts + 584 6126 } 6127 return ts + 97 6128 }(), (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FaCol+uintptr(i)*24)).FzName, (*IdxColumn)(unsafe.Pointer((*IdxTable)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FaCol+uintptr(i)*24)).FzColl)) 6129 } 6130 zInner = idxAppendText(tls, bp+56, zInner, ts+585, 0) 6131 6132 zOuter = idxAppendText(tls, bp+56, uintptr(0), 6133 ts+1011, libc.VaList(bp+24, zName, zInner)) 6134 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK { 6135 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zOuter, uintptr(0), uintptr(0), pzErrmsg) 6136 } 6137 sqlite3.Xsqlite3_free(tls, zInner) 6138 sqlite3.Xsqlite3_free(tls, zOuter) 6139 } 6140 } 6141 } 6142 idxFinalize(tls, bp+56, *(*uintptr)(unsafe.Pointer(bp + 40))) 6143 return *(*int32)(unsafe.Pointer(bp + 56)) 6144 } 6145 6146 type IdxSampleCtx = struct { 6147 FiTarget int32 6148 F__ccgo_pad1 [4]byte 6149 Ftarget float64 6150 FnRow float64 6151 FnRet float64 6152 } 6153 6154 func idxSampleFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 6155 bp := tls.Alloc(2) 6156 defer tls.Free(2) 6157 6158 var p uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 6159 var bRet int32 6160 6161 _ = argv 6162 6163 if (*IdxSampleCtx)(unsafe.Pointer(p)).FnRow == 0.0 { 6164 bRet = 1 6165 } else { 6166 bRet = libc.Bool32((*IdxSampleCtx)(unsafe.Pointer(p)).FnRet/(*IdxSampleCtx)(unsafe.Pointer(p)).FnRow <= (*IdxSampleCtx)(unsafe.Pointer(p)).Ftarget) 6167 if bRet == 0 { 6168 sqlite3.Xsqlite3_randomness(tls, 2, bp) 6169 bRet = libc.Bool32(int32(*(*uint16)(unsafe.Pointer(bp)))%100 <= (*IdxSampleCtx)(unsafe.Pointer(p)).FiTarget) 6170 } 6171 } 6172 6173 sqlite3.Xsqlite3_result_int(tls, pCtx, bRet) 6174 *(*float64)(unsafe.Pointer(p + 16)) += 1.0 6175 *(*float64)(unsafe.Pointer(p + 24)) += float64(bRet) 6176 } 6177 6178 type IdxRemCtx = struct { 6179 FnSlot int32 6180 F__ccgo_pad1 [4]byte 6181 FaSlot [1]struct { 6182 FeType int32 6183 F__ccgo_pad1 [4]byte 6184 FiVal i64 6185 FrVal float64 6186 FnByte int32 6187 Fn int32 6188 Fz uintptr 6189 } 6190 } 6191 6192 type IdxRemSlot = struct { 6193 FeType int32 6194 F__ccgo_pad1 [4]byte 6195 FiVal i64 6196 FrVal float64 6197 FnByte int32 6198 Fn int32 6199 Fz uintptr 6200 } 6201 6202 func idxRemFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 6203 var p uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 6204 var pSlot uintptr 6205 var iSlot int32 6206 6207 iSlot = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 6208 6209 pSlot = p + 8 + uintptr(iSlot)*40 6210 6211 switch (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType { 6212 case SQLITE_NULL: 6213 break 6214 6215 case SQLITE_INTEGER: 6216 sqlite3.Xsqlite3_result_int64(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).FiVal) 6217 break 6218 6219 case SQLITE_FLOAT: 6220 sqlite3.Xsqlite3_result_double(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).FrVal) 6221 break 6222 6223 case SQLITE_BLOB: 6224 sqlite3.Xsqlite3_result_blob(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn, libc.UintptrFromInt32(-1)) 6225 break 6226 6227 case SQLITE_TEXT: 6228 sqlite3.Xsqlite3_result_text(tls, pCtx, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn, libc.UintptrFromInt32(-1)) 6229 break 6230 } 6231 6232 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType = sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 6233 switch (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType { 6234 case SQLITE_NULL: 6235 break 6236 6237 case SQLITE_INTEGER: 6238 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FiVal = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 6239 break 6240 6241 case SQLITE_FLOAT: 6242 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FrVal = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 6243 break 6244 6245 case SQLITE_BLOB: 6246 fallthrough 6247 case SQLITE_TEXT: 6248 { 6249 var nByte int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 6250 var pData uintptr = uintptr(0) 6251 if nByte > (*IdxRemSlot)(unsafe.Pointer(pSlot)).FnByte { 6252 var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, nByte*2) 6253 if zNew == uintptr(0) { 6254 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 6255 return 6256 } 6257 (*IdxRemSlot)(unsafe.Pointer(pSlot)).FnByte = nByte * 2 6258 (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz = zNew 6259 } 6260 (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fn = nByte 6261 if (*IdxRemSlot)(unsafe.Pointer(pSlot)).FeType == SQLITE_BLOB { 6262 pData = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 6263 if pData != 0 { 6264 libc.X__builtin___memcpy_chk(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, pData, uint64(nByte), libc.X__builtin_object_size(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, 0)) 6265 } 6266 } else { 6267 pData = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 6268 libc.X__builtin___memcpy_chk(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, pData, uint64(nByte), libc.X__builtin_object_size(tls, (*IdxRemSlot)(unsafe.Pointer(pSlot)).Fz, 0)) 6269 } 6270 break 6271 6272 } 6273 } 6274 } 6275 6276 func idxLargestIndex(tls *libc.TLS, db uintptr, pnMax uintptr, pzErr uintptr) int32 { 6277 bp := tls.Alloc(12) 6278 defer tls.Free(12) 6279 6280 *(*int32)(unsafe.Pointer(bp + 8)) = SQLITE_OK 6281 var zMax uintptr = ts + 1052 6282 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 6283 6284 *(*int32)(unsafe.Pointer(pnMax)) = 0 6285 *(*int32)(unsafe.Pointer(bp + 8)) = idxPrepareStmt(tls, db, bp, pzErr, zMax) 6286 if *(*int32)(unsafe.Pointer(bp + 8)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) { 6287 *(*int32)(unsafe.Pointer(pnMax)) = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) + 1 6288 } 6289 idxFinalize(tls, bp+8, *(*uintptr)(unsafe.Pointer(bp))) 6290 6291 return *(*int32)(unsafe.Pointer(bp + 8)) 6292 } 6293 6294 func idxPopulateOneStat1(tls *libc.TLS, p uintptr, pIndexXInfo uintptr, pWriteStat uintptr, zTab uintptr, zIdx uintptr, pzErr uintptr) int32 { 6295 bp := tls.Alloc(128) 6296 defer tls.Free(128) 6297 6298 var zCols uintptr = uintptr(0) 6299 var zOrder uintptr = uintptr(0) 6300 var zQuery uintptr = uintptr(0) 6301 var nCol int32 = 0 6302 var i int32 6303 *(*uintptr)(unsafe.Pointer(bp + 120)) = uintptr(0) 6304 var aStat uintptr = uintptr(0) 6305 *(*int32)(unsafe.Pointer(bp + 112)) = SQLITE_OK 6306 6307 sqlite3.Xsqlite3_bind_text(tls, pIndexXInfo, 1, zIdx, -1, uintptr(0)) 6308 for SQLITE_OK == *(*int32)(unsafe.Pointer(bp + 112)) && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pIndexXInfo) { 6309 var zComma uintptr 6310 if zCols == uintptr(0) { 6311 zComma = ts + 584 6312 } else { 6313 zComma = ts + 97 6314 } 6315 var zName uintptr = sqlite3.Xsqlite3_column_text(tls, pIndexXInfo, 0) 6316 var zColl uintptr = sqlite3.Xsqlite3_column_text(tls, pIndexXInfo, 1) 6317 zCols = idxAppendText(tls, bp+112, zCols, 6318 ts+1189, libc.VaList(bp, zComma, zName, nCol, zName, zColl)) 6319 zOrder = idxAppendText(tls, bp+112, zOrder, ts+1224, libc.VaList(bp+40, zComma, libc.PreIncInt32(&nCol, 1))) 6320 } 6321 sqlite3.Xsqlite3_reset(tls, pIndexXInfo) 6322 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6323 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 6324 zQuery = sqlite3.Xsqlite3_mprintf(tls, 6325 ts+1229, libc.VaList(bp+56, zCols, zTab, zOrder)) 6326 } else { 6327 zQuery = sqlite3.Xsqlite3_mprintf(tls, 6328 ts+1261, libc.VaList(bp+80, zCols, zOrder)) 6329 } 6330 } 6331 sqlite3.Xsqlite3_free(tls, zCols) 6332 sqlite3.Xsqlite3_free(tls, zOrder) 6333 6334 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6335 var dbrem uintptr = func() uintptr { 6336 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 6337 return (*sqlite3expert)(unsafe.Pointer(p)).Fdb 6338 } 6339 return (*sqlite3expert)(unsafe.Pointer(p)).Fdbv 6340 }() 6341 *(*int32)(unsafe.Pointer(bp + 112)) = idxPrepareStmt(tls, dbrem, bp+120, pzErr, zQuery) 6342 } 6343 sqlite3.Xsqlite3_free(tls, zQuery) 6344 6345 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6346 aStat = idxMalloc(tls, bp+112, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(nCol+1))) 6347 } 6348 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) { 6349 var pEntry uintptr 6350 var zStat uintptr = uintptr(0) 6351 for i = 0; i <= nCol; i++ { 6352 *(*int32)(unsafe.Pointer(aStat + uintptr(i)*4)) = 1 6353 } 6354 for *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) { 6355 *(*int32)(unsafe.Pointer(aStat))++ 6356 for i = 0; i < nCol; i++ { 6357 if sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 120)), i) == 0 { 6358 break 6359 } 6360 } 6361 for ; i < nCol; i++ { 6362 *(*int32)(unsafe.Pointer(aStat + uintptr(i+1)*4))++ 6363 } 6364 } 6365 6366 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6367 var s0 int32 = *(*int32)(unsafe.Pointer(aStat)) 6368 zStat = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp+96, s0)) 6369 if zStat == uintptr(0) { 6370 *(*int32)(unsafe.Pointer(bp + 112)) = SQLITE_NOMEM 6371 } 6372 for i = 1; *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK && i <= nCol; i++ { 6373 zStat = idxAppendText(tls, bp+112, zStat, ts+1336, libc.VaList(bp+104, (s0+*(*int32)(unsafe.Pointer(aStat + uintptr(i)*4))/2) / *(*int32)(unsafe.Pointer(aStat + uintptr(i)*4)))) 6374 } 6375 } 6376 6377 if *(*int32)(unsafe.Pointer(bp + 112)) == SQLITE_OK { 6378 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 1, zTab, -1, uintptr(0)) 6379 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 2, zIdx, -1, uintptr(0)) 6380 sqlite3.Xsqlite3_bind_text(tls, pWriteStat, 3, zStat, -1, uintptr(0)) 6381 sqlite3.Xsqlite3_step(tls, pWriteStat) 6382 *(*int32)(unsafe.Pointer(bp + 112)) = sqlite3.Xsqlite3_reset(tls, pWriteStat) 6383 } 6384 6385 pEntry = idxHashFind(tls, p+88, zIdx, int32(libc.Xstrlen(tls, zIdx))) 6386 if pEntry != 0 { 6387 (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2 = zStat 6388 } else { 6389 sqlite3.Xsqlite3_free(tls, zStat) 6390 } 6391 } 6392 sqlite3.Xsqlite3_free(tls, aStat) 6393 idxFinalize(tls, bp+112, *(*uintptr)(unsafe.Pointer(bp + 120))) 6394 6395 return *(*int32)(unsafe.Pointer(bp + 112)) 6396 } 6397 6398 func idxBuildSampleTable(tls *libc.TLS, p uintptr, zTab uintptr) int32 { 6399 bp := tls.Alloc(8) 6400 defer tls.Free(8) 6401 6402 var rc int32 6403 var zSql uintptr 6404 6405 rc = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, ts+1340, uintptr(0), uintptr(0), uintptr(0)) 6406 if rc != SQLITE_OK { 6407 return rc 6408 } 6409 6410 zSql = sqlite3.Xsqlite3_mprintf(tls, 6411 ts+1404, libc.VaList(bp, zTab)) 6412 if zSql == uintptr(0) { 6413 return SQLITE_NOMEM 6414 } 6415 rc = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, zSql, uintptr(0), uintptr(0), uintptr(0)) 6416 sqlite3.Xsqlite3_free(tls, zSql) 6417 6418 return rc 6419 } 6420 6421 func idxPopulateStat1(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 6422 bp := tls.Alloc(64) 6423 defer tls.Free(64) 6424 6425 *(*int32)(unsafe.Pointer(bp + 4)) = SQLITE_OK 6426 *(*int32)(unsafe.Pointer(bp)) = 0 6427 var pCtx uintptr = uintptr(0) 6428 6429 var i int32 6430 var iPrev i64 = int64(-100000) 6431 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 6432 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 6433 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 6434 6435 var zAllIndex uintptr = ts + 1480 6436 var zIndexXInfo uintptr = ts + 1594 6437 var zWrite uintptr = ts + 1649 6438 6439 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 0 { 6440 return SQLITE_OK 6441 } 6442 6443 *(*int32)(unsafe.Pointer(bp + 4)) = idxLargestIndex(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp, pzErr) 6444 if *(*int32)(unsafe.Pointer(bp)) <= 0 || *(*int32)(unsafe.Pointer(bp + 4)) != SQLITE_OK { 6445 return *(*int32)(unsafe.Pointer(bp + 4)) 6446 } 6447 6448 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, ts+1690, uintptr(0), uintptr(0), uintptr(0)) 6449 6450 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6451 var nByte int32 = int32(uint64(unsafe.Sizeof(IdxRemCtx{})) + uint64(unsafe.Sizeof(IdxRemSlot{}))*uint64(*(*int32)(unsafe.Pointer(bp)))) 6452 pCtx = idxMalloc(tls, bp+4, nByte) 6453 } 6454 6455 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6456 var dbrem uintptr = func() uintptr { 6457 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample == 100 { 6458 return (*sqlite3expert)(unsafe.Pointer(p)).Fdb 6459 } 6460 return (*sqlite3expert)(unsafe.Pointer(p)).Fdbv 6461 }() 6462 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_create_function(tls, 6463 dbrem, ts+1724, 2, SQLITE_UTF8, pCtx, *(*uintptr)(unsafe.Pointer(&struct { 6464 f func(*libc.TLS, uintptr, int32, uintptr) 6465 }{idxRemFunc})), uintptr(0), uintptr(0)) 6466 } 6467 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6468 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_create_function(tls, 6469 (*sqlite3expert)(unsafe.Pointer(p)).Fdb, ts+1728, 0, SQLITE_UTF8, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 6470 f func(*libc.TLS, uintptr, int32, uintptr) 6471 }{idxSampleFunc})), uintptr(0), uintptr(0)) 6472 } 6473 6474 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6475 (*IdxRemCtx)(unsafe.Pointer(pCtx)).FnSlot = *(*int32)(unsafe.Pointer(bp)) + 1 6476 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+40, pzErr, zAllIndex) 6477 } 6478 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6479 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+48, pzErr, zIndexXInfo) 6480 } 6481 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6482 *(*int32)(unsafe.Pointer(bp + 4)) = idxPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, bp+56, pzErr, zWrite) 6483 } 6484 6485 for *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 6486 var iRowid i64 = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 6487 var zTab uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 6488 var zIdx uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 6489 if zTab == uintptr(0) || zIdx == uintptr(0) { 6490 continue 6491 } 6492 if (*sqlite3expert)(unsafe.Pointer(p)).FiSample < 100 && iPrev != iRowid { 6493 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).Ftarget = float64((*sqlite3expert)(unsafe.Pointer(p)).FiSample) / 100.0 6494 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FiTarget = (*sqlite3expert)(unsafe.Pointer(p)).FiSample 6495 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FnRow = 0.0 6496 (*IdxSampleCtx)(unsafe.Pointer(bp + 8)).FnRet = 0.0 6497 *(*int32)(unsafe.Pointer(bp + 4)) = idxBuildSampleTable(tls, p, zTab) 6498 if *(*int32)(unsafe.Pointer(bp + 4)) != SQLITE_OK { 6499 break 6500 } 6501 } 6502 *(*int32)(unsafe.Pointer(bp + 4)) = idxPopulateOneStat1(tls, p, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(bp + 56)), zTab, zIdx, pzErr) 6503 iPrev = iRowid 6504 } 6505 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK && (*sqlite3expert)(unsafe.Pointer(p)).FiSample < 100 { 6506 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, 6507 ts+1340, uintptr(0), uintptr(0), uintptr(0)) 6508 } 6509 6510 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 40))) 6511 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 48))) 6512 idxFinalize(tls, bp+4, *(*uintptr)(unsafe.Pointer(bp + 56))) 6513 6514 if pCtx != 0 { 6515 for i = 0; i < (*IdxRemCtx)(unsafe.Pointer(pCtx)).FnSlot; i++ { 6516 sqlite3.Xsqlite3_free(tls, (*IdxRemSlot)(unsafe.Pointer(pCtx+8+uintptr(i)*40)).Fz) 6517 } 6518 sqlite3.Xsqlite3_free(tls, pCtx) 6519 } 6520 6521 if *(*int32)(unsafe.Pointer(bp + 4)) == SQLITE_OK { 6522 *(*int32)(unsafe.Pointer(bp + 4)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm, ts+1735, uintptr(0), uintptr(0), uintptr(0)) 6523 } 6524 6525 sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdb, ts+1340, uintptr(0), uintptr(0), uintptr(0)) 6526 return *(*int32)(unsafe.Pointer(bp + 4)) 6527 } 6528 6529 func sqlite3_expert_new(tls *libc.TLS, db uintptr, pzErrmsg uintptr) uintptr { 6530 bp := tls.Alloc(32) 6531 defer tls.Free(32) 6532 6533 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 6534 var pNew uintptr 6535 6536 pNew = idxMalloc(tls, bp+16, int32(unsafe.Sizeof(sqlite3expert{}))) 6537 6538 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6539 (*sqlite3expert)(unsafe.Pointer(pNew)).Fdb = db 6540 (*sqlite3expert)(unsafe.Pointer(pNew)).FiSample = 100 6541 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_open(tls, ts+1757, pNew+24) 6542 } 6543 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6544 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_open(tls, ts+1757, pNew+16) 6545 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6546 sqlite3.Xsqlite3_db_config(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbm, SQLITE_DBCONFIG_TRIGGER_EQP, libc.VaList(bp, 1, uintptr(0))) 6547 } 6548 } 6549 6550 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6551 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 6552 *(*int32)(unsafe.Pointer(bp + 16)) = idxPrintfPrepareStmt(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdb, bp+24, pzErrmsg, 6553 ts+1766, 0) 6554 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) { 6555 var zSql uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 0) 6556 if zSql != 0 { 6557 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_exec(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbm, zSql, uintptr(0), uintptr(0), pzErrmsg) 6558 } 6559 } 6560 idxFinalize(tls, bp+16, *(*uintptr)(unsafe.Pointer(bp + 24))) 6561 } 6562 6563 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6564 *(*int32)(unsafe.Pointer(bp + 16)) = idxCreateVtabSchema(tls, pNew, pzErrmsg) 6565 } 6566 6567 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6568 sqlite3.Xsqlite3_set_authorizer(tls, (*sqlite3expert)(unsafe.Pointer(pNew)).Fdbv, *(*uintptr)(unsafe.Pointer(&struct { 6569 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr, uintptr) int32 6570 }{idxAuthCallback})), pNew) 6571 } 6572 6573 if *(*int32)(unsafe.Pointer(bp + 16)) != SQLITE_OK { 6574 sqlite3_expert_destroy(tls, pNew) 6575 pNew = uintptr(0) 6576 } 6577 return pNew 6578 } 6579 6580 func sqlite3_expert_config(tls *libc.TLS, p uintptr, op int32, va uintptr) int32 { 6581 var rc int32 = SQLITE_OK 6582 var ap va_list 6583 _ = ap 6584 ap = va 6585 switch op { 6586 case EXPERT_CONFIG_SAMPLE: 6587 { 6588 var iVal int32 = libc.VaInt32(&ap) 6589 if iVal < 0 { 6590 iVal = 0 6591 } 6592 if iVal > 100 { 6593 iVal = 100 6594 } 6595 (*sqlite3expert)(unsafe.Pointer(p)).FiSample = iVal 6596 break 6597 6598 } 6599 default: 6600 rc = SQLITE_NOTFOUND 6601 break 6602 } 6603 6604 _ = ap 6605 return rc 6606 } 6607 6608 func sqlite3_expert_sql(tls *libc.TLS, p uintptr, zSql uintptr, pzErr uintptr) int32 { 6609 bp := tls.Alloc(20) 6610 defer tls.Free(20) 6611 6612 var pScanOrig uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpScan 6613 var pStmtOrig uintptr = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 6614 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 6615 *(*uintptr)(unsafe.Pointer(bp + 8)) = zSql 6616 6617 if (*sqlite3expert)(unsafe.Pointer(p)).FbRun != 0 { 6618 return SQLITE_MISUSE 6619 } 6620 6621 for *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 8)) != 0 && *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)))) != 0 { 6622 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 6623 *(*int32)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_prepare_v2(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, *(*uintptr)(unsafe.Pointer(bp + 8)), -1, bp, bp+8) 6624 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6625 if *(*uintptr)(unsafe.Pointer(bp)) != 0 { 6626 var pNew uintptr 6627 var z uintptr = sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 6628 var n int32 = int32(libc.Xstrlen(tls, z)) 6629 pNew = idxMalloc(tls, bp+16, int32(uint64(unsafe.Sizeof(IdxStatement{}))+uint64(n)+uint64(1))) 6630 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 6631 (*IdxStatement)(unsafe.Pointer(pNew)).FzSql = pNew + 1*40 6632 libc.X__builtin___memcpy_chk(tls, (*IdxStatement)(unsafe.Pointer(pNew)).FzSql, z, uint64(n+1), libc.X__builtin_object_size(tls, (*IdxStatement)(unsafe.Pointer(pNew)).FzSql, 0)) 6633 (*IdxStatement)(unsafe.Pointer(pNew)).FpNext = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement 6634 if (*sqlite3expert)(unsafe.Pointer(p)).FpStatement != 0 { 6635 (*IdxStatement)(unsafe.Pointer(pNew)).FiId = (*IdxStatement)(unsafe.Pointer((*sqlite3expert)(unsafe.Pointer(p)).FpStatement)).FiId + 1 6636 } 6637 (*sqlite3expert)(unsafe.Pointer(p)).FpStatement = pNew 6638 } 6639 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 6640 } 6641 } else { 6642 idxDatabaseError(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv, pzErr) 6643 } 6644 } 6645 6646 if *(*int32)(unsafe.Pointer(bp + 16)) != SQLITE_OK { 6647 idxScanFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpScan, pScanOrig) 6648 idxStatementFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpStatement, pStmtOrig) 6649 (*sqlite3expert)(unsafe.Pointer(p)).FpScan = pScanOrig 6650 (*sqlite3expert)(unsafe.Pointer(p)).FpStatement = pStmtOrig 6651 } 6652 6653 return *(*int32)(unsafe.Pointer(bp + 16)) 6654 } 6655 6656 func sqlite3_expert_analyze(tls *libc.TLS, p uintptr, pzErr uintptr) int32 { 6657 bp := tls.Alloc(28) 6658 defer tls.Free(28) 6659 6660 var pEntry uintptr 6661 6662 *(*int32)(unsafe.Pointer(bp + 24)) = idxProcessTriggers(tls, p, pzErr) 6663 6664 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6665 *(*int32)(unsafe.Pointer(bp + 24)) = idxCreateCandidates(tls, p) 6666 } else if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_BUSY|int32(3)<<8 { 6667 if pzErr != 0 { 6668 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+1865, 0) 6669 } 6670 return *(*int32)(unsafe.Pointer(bp + 24)) 6671 } 6672 6673 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6674 *(*int32)(unsafe.Pointer(bp + 24)) = idxPopulateStat1(tls, p, pzErr) 6675 } 6676 6677 for pEntry = (*sqlite3expert)(unsafe.Pointer(p)).FhIdx.FpFirst; pEntry != 0; pEntry = (*IdxHashEntry)(unsafe.Pointer(pEntry)).FpNext { 6678 (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates = idxAppendText(tls, bp+24, (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates, 6679 ts+1909, libc.VaList(bp, (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal, 6680 func() uintptr { 6681 if (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2 != 0 { 6682 return ts + 1918 6683 } 6684 return ts + 584 6685 }(), (*IdxHashEntry)(unsafe.Pointer(pEntry)).FzVal2)) 6686 } 6687 6688 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6689 *(*int32)(unsafe.Pointer(bp + 24)) = idxFindIndexes(tls, p, pzErr) 6690 } 6691 6692 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 6693 (*sqlite3expert)(unsafe.Pointer(p)).FbRun = 1 6694 } 6695 return *(*int32)(unsafe.Pointer(bp + 24)) 6696 } 6697 6698 func sqlite3_expert_count(tls *libc.TLS, p uintptr) int32 { 6699 var nRet int32 = 0 6700 if (*sqlite3expert)(unsafe.Pointer(p)).FpStatement != 0 { 6701 nRet = (*IdxStatement)(unsafe.Pointer((*sqlite3expert)(unsafe.Pointer(p)).FpStatement)).FiId + 1 6702 } 6703 return nRet 6704 } 6705 6706 func sqlite3_expert_report(tls *libc.TLS, p uintptr, iStmt int32, eReport int32) uintptr { 6707 var zRet uintptr = uintptr(0) 6708 var pStmt uintptr 6709 6710 if (*sqlite3expert)(unsafe.Pointer(p)).FbRun == 0 { 6711 return uintptr(0) 6712 } 6713 for pStmt = (*sqlite3expert)(unsafe.Pointer(p)).FpStatement; pStmt != 0 && (*IdxStatement)(unsafe.Pointer(pStmt)).FiId != iStmt; pStmt = (*IdxStatement)(unsafe.Pointer(pStmt)).FpNext { 6714 } 6715 switch eReport { 6716 case EXPERT_REPORT_SQL: 6717 if pStmt != 0 { 6718 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzSql 6719 } 6720 break 6721 case EXPERT_REPORT_INDEXES: 6722 if pStmt != 0 { 6723 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzIdx 6724 } 6725 break 6726 case EXPERT_REPORT_PLAN: 6727 if pStmt != 0 { 6728 zRet = (*IdxStatement)(unsafe.Pointer(pStmt)).FzEQP 6729 } 6730 break 6731 case EXPERT_REPORT_CANDIDATES: 6732 zRet = (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates 6733 break 6734 } 6735 return zRet 6736 } 6737 6738 func sqlite3_expert_destroy(tls *libc.TLS, p uintptr) { 6739 if p != 0 { 6740 sqlite3.Xsqlite3_close(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbm) 6741 sqlite3.Xsqlite3_close(tls, (*sqlite3expert)(unsafe.Pointer(p)).Fdbv) 6742 idxScanFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpScan, uintptr(0)) 6743 idxStatementFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpStatement, uintptr(0)) 6744 idxTableFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpTable) 6745 idxWriteFree(tls, (*sqlite3expert)(unsafe.Pointer(p)).FpWrite) 6746 idxHashClear(tls, p+88) 6747 sqlite3.Xsqlite3_free(tls, (*sqlite3expert)(unsafe.Pointer(p)).FzCandidates) 6748 sqlite3.Xsqlite3_free(tls, p) 6749 } 6750 } 6751 6752 type ClientData = uintptr 6753 6754 type Tcl_WideInt = int64 6755 type Tcl_WideUInt = uint64 6756 6757 type stat = struct { 6758 Fst_dev dev_t 6759 Fst_mode mode_t 6760 Fst_nlink nlink_t 6761 Fst_ino uint64 6762 Fst_uid uid_t 6763 Fst_gid gid_t 6764 Fst_rdev dev_t 6765 F__ccgo_pad1 [4]byte 6766 Fst_atimespec struct { 6767 Ftv_sec int64 6768 Ftv_nsec int64 6769 } 6770 Fst_mtimespec struct { 6771 Ftv_sec int64 6772 Ftv_nsec int64 6773 } 6774 Fst_ctimespec struct { 6775 Ftv_sec int64 6776 Ftv_nsec int64 6777 } 6778 Fst_birthtimespec struct { 6779 Ftv_sec int64 6780 Ftv_nsec int64 6781 } 6782 Fst_size off_t 6783 Fst_blocks blkcnt_t 6784 Fst_blksize blksize_t 6785 Fst_flags uint32 6786 Fst_gen uint32 6787 Fst_lspare int32 6788 Fst_qspare [2]int64 6789 } 6790 6791 type Tcl_Interp1 = struct { 6792 Fresult uintptr 6793 FfreeProc uintptr 6794 FerrorLine int32 6795 F__ccgo_pad1 [4]byte 6796 } 6797 6798 type Tcl_Interp = Tcl_Interp1 6799 6800 type Tcl_AsyncHandler = uintptr 6801 type Tcl_Channel = uintptr 6802 type Tcl_ChannelTypeVersion = uintptr 6803 type Tcl_Command = uintptr 6804 type Tcl_Condition = uintptr 6805 type Tcl_Dict = uintptr 6806 type Tcl_EncodingState = uintptr 6807 type Tcl_Encoding = uintptr 6808 type Tcl_Event1 = struct { 6809 Fproc uintptr 6810 FnextPtr uintptr 6811 } 6812 6813 type Tcl_Event = Tcl_Event1 6814 type Tcl_InterpState = uintptr 6815 type Tcl_LoadHandle = uintptr 6816 type Tcl_Mutex = uintptr 6817 type Tcl_Pid = uintptr 6818 type Tcl_RegExp = uintptr 6819 type Tcl_ThreadDataKey = uintptr 6820 type Tcl_ThreadId = uintptr 6821 type Tcl_TimerToken = uintptr 6822 type Tcl_Trace = uintptr 6823 type Tcl_Var = uintptr 6824 6825 type Tcl_RegExpIndices1 = struct { 6826 Fstart int64 6827 Fend int64 6828 } 6829 6830 type Tcl_RegExpIndices = Tcl_RegExpIndices1 6831 6832 type Tcl_RegExpInfo1 = struct { 6833 Fnsubs int32 6834 F__ccgo_pad1 [4]byte 6835 Fmatches uintptr 6836 FextendStart int64 6837 Freserved int64 6838 } 6839 6840 type Tcl_RegExpInfo = Tcl_RegExpInfo1 6841 6842 type Tcl_Stat_ = uintptr 6843 type Tcl_OldStat_ = uintptr 6844 6845 type Tcl_ValueType = uint32 6846 6847 type Tcl_Value1 = struct { 6848 Ftype Tcl_ValueType 6849 F__ccgo_pad1 [4]byte 6850 FintValue int64 6851 FdoubleValue float64 6852 FwideValue Tcl_WideInt 6853 } 6854 6855 type Tcl_Value = Tcl_Value1 6856 6857 type Tcl_Obj1 = struct { 6858 FrefCount int32 6859 F__ccgo_pad1 [4]byte 6860 Fbytes uintptr 6861 Flength int32 6862 F__ccgo_pad2 [4]byte 6863 FtypePtr uintptr 6864 FinternalRep struct { 6865 FlongValue int64 6866 F__ccgo_pad1 [8]byte 6867 } 6868 } 6869 6870 type Tcl_ObjType1 = struct { 6871 Fname uintptr 6872 FfreeIntRepProc uintptr 6873 FdupIntRepProc uintptr 6874 FupdateStringProc uintptr 6875 FsetFromAnyProc uintptr 6876 } 6877 6878 type Tcl_ObjType = Tcl_ObjType1 6879 6880 type Tcl_Obj = Tcl_Obj1 6881 6882 type Tcl_SavedResult1 = struct { 6883 Fresult uintptr 6884 FfreeProc uintptr 6885 FobjResultPtr uintptr 6886 FappendResult uintptr 6887 FappendAvl int32 6888 FappendUsed int32 6889 FresultSpace [201]int8 6890 F__ccgo_pad1 [7]byte 6891 } 6892 6893 type Tcl_SavedResult = Tcl_SavedResult1 6894 6895 type Tcl_Namespace1 = struct { 6896 Fname uintptr 6897 FfullName uintptr 6898 FclientData ClientData 6899 FdeleteProc uintptr 6900 FparentPtr uintptr 6901 } 6902 6903 type Tcl_Namespace = Tcl_Namespace1 6904 6905 type Tcl_CallFrame1 = struct { 6906 FnsPtr uintptr 6907 Fdummy1 int32 6908 Fdummy2 int32 6909 Fdummy3 uintptr 6910 Fdummy4 uintptr 6911 Fdummy5 uintptr 6912 Fdummy6 int32 6913 F__ccgo_pad1 [4]byte 6914 Fdummy7 uintptr 6915 Fdummy8 uintptr 6916 Fdummy9 int32 6917 F__ccgo_pad2 [4]byte 6918 Fdummy10 uintptr 6919 Fdummy11 uintptr 6920 Fdummy12 uintptr 6921 Fdummy13 uintptr 6922 } 6923 6924 type Tcl_CallFrame = Tcl_CallFrame1 6925 6926 type Tcl_CmdInfo1 = struct { 6927 FisNativeObjectProc int32 6928 F__ccgo_pad1 [4]byte 6929 FobjProc uintptr 6930 FobjClientData ClientData 6931 Fproc uintptr 6932 FclientData ClientData 6933 FdeleteProc uintptr 6934 FdeleteData ClientData 6935 FnamespacePtr uintptr 6936 } 6937 6938 type Tcl_CmdInfo = Tcl_CmdInfo1 6939 6940 type Tcl_DString1 = struct { 6941 Fstring uintptr 6942 Flength int32 6943 FspaceAvl int32 6944 FstaticSpace [200]int8 6945 } 6946 6947 type Tcl_DString = Tcl_DString1 6948 6949 type Tcl_HashKeyType1 = struct { 6950 Fversion int32 6951 Fflags int32 6952 FhashKeyProc uintptr 6953 FcompareKeysProc uintptr 6954 FallocEntryProc uintptr 6955 FfreeEntryProc uintptr 6956 } 6957 6958 type Tcl_HashKeyType = Tcl_HashKeyType1 6959 type Tcl_HashTable1 = struct { 6960 Fbuckets uintptr 6961 FstaticBuckets [4]uintptr 6962 FnumBuckets int32 6963 FnumEntries int32 6964 FrebuildSize int32 6965 FdownShift int32 6966 Fmask int32 6967 FkeyType int32 6968 FfindProc uintptr 6969 FcreateProc uintptr 6970 FtypePtr uintptr 6971 } 6972 6973 type Tcl_HashTable = Tcl_HashTable1 6974 type Tcl_HashEntry1 = struct { 6975 FnextPtr uintptr 6976 FtablePtr uintptr 6977 Fhash uintptr 6978 FclientData ClientData 6979 Fkey struct{ FoneWordValue uintptr } 6980 } 6981 6982 type Tcl_HashEntry = Tcl_HashEntry1 6983 6984 type Tcl_HashSearch1 = struct { 6985 FtablePtr uintptr 6986 FnextIndex int32 6987 F__ccgo_pad1 [4]byte 6988 FnextEntryPtr uintptr 6989 } 6990 6991 type Tcl_HashSearch = Tcl_HashSearch1 6992 6993 type Tcl_DictSearch = struct { 6994 Fnext uintptr 6995 Fepoch int32 6996 F__ccgo_pad1 [4]byte 6997 FdictionaryPtr Tcl_Dict 6998 } 6999 7000 type Tcl_QueuePosition = uint32 7001 7002 type Tcl_Time1 = struct { 7003 Fsec int64 7004 Fusec int64 7005 } 7006 7007 type Tcl_Time = Tcl_Time1 7008 7009 type Tcl_ChannelType1 = struct { 7010 FtypeName uintptr 7011 Fversion Tcl_ChannelTypeVersion 7012 FcloseProc uintptr 7013 FinputProc uintptr 7014 FoutputProc uintptr 7015 FseekProc uintptr 7016 FsetOptionProc uintptr 7017 FgetOptionProc uintptr 7018 FwatchProc uintptr 7019 FgetHandleProc uintptr 7020 Fclose2Proc uintptr 7021 FblockModeProc uintptr 7022 FflushProc uintptr 7023 FhandlerProc uintptr 7024 FwideSeekProc uintptr 7025 FthreadActionProc uintptr 7026 FtruncateProc uintptr 7027 } 7028 7029 type Tcl_ChannelType = Tcl_ChannelType1 7030 7031 type Tcl_PathType = uint32 7032 7033 type Tcl_GlobTypeData1 = struct { 7034 Ftype int32 7035 Fperm int32 7036 FmacType uintptr 7037 FmacCreator uintptr 7038 } 7039 7040 type Tcl_GlobTypeData = Tcl_GlobTypeData1 7041 7042 type utimbuf = struct { 7043 Factime time_t 7044 Fmodtime time_t 7045 } 7046 7047 type Tcl_FSVersion = uintptr 7048 7049 type Tcl_Filesystem1 = struct { 7050 FtypeName uintptr 7051 FstructureLength int32 7052 F__ccgo_pad1 [4]byte 7053 Fversion Tcl_FSVersion 7054 FpathInFilesystemProc uintptr 7055 FdupInternalRepProc uintptr 7056 FfreeInternalRepProc uintptr 7057 FinternalToNormalizedProc uintptr 7058 FcreateInternalRepProc uintptr 7059 FnormalizePathProc uintptr 7060 FfilesystemPathTypeProc uintptr 7061 FfilesystemSeparatorProc uintptr 7062 FstatProc uintptr 7063 FaccessProc uintptr 7064 FopenFileChannelProc uintptr 7065 FmatchInDirectoryProc uintptr 7066 FutimeProc uintptr 7067 FlinkProc uintptr 7068 FlistVolumesProc uintptr 7069 FfileAttrStringsProc uintptr 7070 FfileAttrsGetProc uintptr 7071 FfileAttrsSetProc uintptr 7072 FcreateDirectoryProc uintptr 7073 FremoveDirectoryProc uintptr 7074 FdeleteFileProc uintptr 7075 FcopyFileProc uintptr 7076 FrenameFileProc uintptr 7077 FcopyDirectoryProc uintptr 7078 FlstatProc uintptr 7079 FloadFileProc uintptr 7080 FgetCwdProc uintptr 7081 FchdirProc uintptr 7082 } 7083 7084 type Tcl_Filesystem = Tcl_Filesystem1 7085 7086 type Tcl_NotifierProcs1 = struct { 7087 FsetTimerProc uintptr 7088 FwaitForEventProc uintptr 7089 FcreateFileHandlerProc uintptr 7090 FdeleteFileHandlerProc uintptr 7091 FinitNotifierProc uintptr 7092 FfinalizeNotifierProc uintptr 7093 FalertNotifierProc uintptr 7094 FserviceModeHookProc uintptr 7095 } 7096 7097 type Tcl_NotifierProcs = Tcl_NotifierProcs1 7098 7099 type Tcl_EncodingType1 = struct { 7100 FencodingName uintptr 7101 FtoUtfProc uintptr 7102 FfromUtfProc uintptr 7103 FfreeProc uintptr 7104 FclientData ClientData 7105 FnullSize int32 7106 F__ccgo_pad1 [4]byte 7107 } 7108 7109 type Tcl_EncodingType = Tcl_EncodingType1 7110 7111 type Tcl_Token1 = struct { 7112 Ftype int32 7113 F__ccgo_pad1 [4]byte 7114 Fstart uintptr 7115 Fsize int32 7116 FnumComponents int32 7117 } 7118 7119 type Tcl_Token = Tcl_Token1 7120 7121 type Tcl_Parse1 = struct { 7122 FcommentStart uintptr 7123 FcommentSize int32 7124 F__ccgo_pad1 [4]byte 7125 FcommandStart uintptr 7126 FcommandSize int32 7127 FnumWords int32 7128 FtokenPtr uintptr 7129 FnumTokens int32 7130 FtokensAvailable int32 7131 FerrorType int32 7132 F__ccgo_pad2 [4]byte 7133 Fstring uintptr 7134 Fend uintptr 7135 Finterp uintptr 7136 Fterm uintptr 7137 Fincomplete int32 7138 F__ccgo_pad3 [4]byte 7139 FstaticTokens [20]Tcl_Token 7140 } 7141 7142 type Tcl_Parse = Tcl_Parse1 7143 7144 type Tcl_UniChar = uint16 7145 7146 type Tcl_Config1 = struct { 7147 Fkey uintptr 7148 Fvalue uintptr 7149 } 7150 7151 type Tcl_Config = Tcl_Config1 7152 type mp_digit = uint32 7153 7154 type TclStubHooks1 = struct { 7155 FtclPlatStubs uintptr 7156 FtclIntStubs uintptr 7157 FtclIntPlatStubs uintptr 7158 } 7159 7160 type TclPlatStubs1 = struct { 7161 Fmagic int32 7162 F__ccgo_pad1 [4]byte 7163 Fhooks uintptr 7164 } 7165 7166 type TclStubHooks = TclStubHooks1 7167 7168 type TclStubs1 = struct { 7169 Fmagic int32 7170 F__ccgo_pad1 [4]byte 7171 Fhooks uintptr 7172 Ftcl_PkgProvideEx uintptr 7173 Ftcl_PkgRequireEx uintptr 7174 Ftcl_Panic uintptr 7175 Ftcl_Alloc uintptr 7176 Ftcl_Free uintptr 7177 Ftcl_Realloc uintptr 7178 Ftcl_DbCkalloc uintptr 7179 Ftcl_DbCkfree uintptr 7180 Ftcl_DbCkrealloc uintptr 7181 Ftcl_CreateFileHandler uintptr 7182 Ftcl_DeleteFileHandler uintptr 7183 Ftcl_SetTimer uintptr 7184 Ftcl_Sleep uintptr 7185 Ftcl_WaitForEvent uintptr 7186 Ftcl_AppendAllObjTypes uintptr 7187 Ftcl_AppendStringsToObj uintptr 7188 Ftcl_AppendToObj uintptr 7189 Ftcl_ConcatObj uintptr 7190 Ftcl_ConvertToType uintptr 7191 Ftcl_DbDecrRefCount uintptr 7192 Ftcl_DbIncrRefCount uintptr 7193 Ftcl_DbIsShared uintptr 7194 Ftcl_DbNewBooleanObj uintptr 7195 Ftcl_DbNewByteArrayObj uintptr 7196 Ftcl_DbNewDoubleObj uintptr 7197 Ftcl_DbNewListObj uintptr 7198 Ftcl_DbNewLongObj uintptr 7199 Ftcl_DbNewObj uintptr 7200 Ftcl_DbNewStringObj uintptr 7201 Ftcl_DuplicateObj uintptr 7202 FtclFreeObj uintptr 7203 Ftcl_GetBoolean uintptr 7204 Ftcl_GetBooleanFromObj uintptr 7205 Ftcl_GetByteArrayFromObj uintptr 7206 Ftcl_GetDouble uintptr 7207 Ftcl_GetDoubleFromObj uintptr 7208 Ftcl_GetIndexFromObj uintptr 7209 Ftcl_GetInt uintptr 7210 Ftcl_GetIntFromObj uintptr 7211 Ftcl_GetLongFromObj uintptr 7212 Ftcl_GetObjType uintptr 7213 Ftcl_GetStringFromObj uintptr 7214 Ftcl_InvalidateStringRep uintptr 7215 Ftcl_ListObjAppendList uintptr 7216 Ftcl_ListObjAppendElement uintptr 7217 Ftcl_ListObjGetElements uintptr 7218 Ftcl_ListObjIndex uintptr 7219 Ftcl_ListObjLength uintptr 7220 Ftcl_ListObjReplace uintptr 7221 Ftcl_NewBooleanObj uintptr 7222 Ftcl_NewByteArrayObj uintptr 7223 Ftcl_NewDoubleObj uintptr 7224 Ftcl_NewIntObj uintptr 7225 Ftcl_NewListObj uintptr 7226 Ftcl_NewLongObj uintptr 7227 Ftcl_NewObj uintptr 7228 Ftcl_NewStringObj uintptr 7229 Ftcl_SetBooleanObj uintptr 7230 Ftcl_SetByteArrayLength uintptr 7231 Ftcl_SetByteArrayObj uintptr 7232 Ftcl_SetDoubleObj uintptr 7233 Ftcl_SetIntObj uintptr 7234 Ftcl_SetListObj uintptr 7235 Ftcl_SetLongObj uintptr 7236 Ftcl_SetObjLength uintptr 7237 Ftcl_SetStringObj uintptr 7238 Ftcl_AddErrorInfo uintptr 7239 Ftcl_AddObjErrorInfo uintptr 7240 Ftcl_AllowExceptions uintptr 7241 Ftcl_AppendElement uintptr 7242 Ftcl_AppendResult uintptr 7243 Ftcl_AsyncCreate uintptr 7244 Ftcl_AsyncDelete uintptr 7245 Ftcl_AsyncInvoke uintptr 7246 Ftcl_AsyncMark uintptr 7247 Ftcl_AsyncReady uintptr 7248 Ftcl_BackgroundError uintptr 7249 Ftcl_Backslash uintptr 7250 Ftcl_BadChannelOption uintptr 7251 Ftcl_CallWhenDeleted uintptr 7252 Ftcl_CancelIdleCall uintptr 7253 Ftcl_Close uintptr 7254 Ftcl_CommandComplete uintptr 7255 Ftcl_Concat uintptr 7256 Ftcl_ConvertElement uintptr 7257 Ftcl_ConvertCountedElement uintptr 7258 Ftcl_CreateAlias uintptr 7259 Ftcl_CreateAliasObj uintptr 7260 Ftcl_CreateChannel uintptr 7261 Ftcl_CreateChannelHandler uintptr 7262 Ftcl_CreateCloseHandler uintptr 7263 Ftcl_CreateCommand uintptr 7264 Ftcl_CreateEventSource uintptr 7265 Ftcl_CreateExitHandler uintptr 7266 Ftcl_CreateInterp uintptr 7267 Ftcl_CreateMathFunc uintptr 7268 Ftcl_CreateObjCommand uintptr 7269 Ftcl_CreateSlave uintptr 7270 Ftcl_CreateTimerHandler uintptr 7271 Ftcl_CreateTrace uintptr 7272 Ftcl_DeleteAssocData uintptr 7273 Ftcl_DeleteChannelHandler uintptr 7274 Ftcl_DeleteCloseHandler uintptr 7275 Ftcl_DeleteCommand uintptr 7276 Ftcl_DeleteCommandFromToken uintptr 7277 Ftcl_DeleteEvents uintptr 7278 Ftcl_DeleteEventSource uintptr 7279 Ftcl_DeleteExitHandler uintptr 7280 Ftcl_DeleteHashEntry uintptr 7281 Ftcl_DeleteHashTable uintptr 7282 Ftcl_DeleteInterp uintptr 7283 Ftcl_DetachPids uintptr 7284 Ftcl_DeleteTimerHandler uintptr 7285 Ftcl_DeleteTrace uintptr 7286 Ftcl_DontCallWhenDeleted uintptr 7287 Ftcl_DoOneEvent uintptr 7288 Ftcl_DoWhenIdle uintptr 7289 Ftcl_DStringAppend uintptr 7290 Ftcl_DStringAppendElement uintptr 7291 Ftcl_DStringEndSublist uintptr 7292 Ftcl_DStringFree uintptr 7293 Ftcl_DStringGetResult uintptr 7294 Ftcl_DStringInit uintptr 7295 Ftcl_DStringResult uintptr 7296 Ftcl_DStringSetLength uintptr 7297 Ftcl_DStringStartSublist uintptr 7298 Ftcl_Eof uintptr 7299 Ftcl_ErrnoId uintptr 7300 Ftcl_ErrnoMsg uintptr 7301 Ftcl_Eval uintptr 7302 Ftcl_EvalFile uintptr 7303 Ftcl_EvalObj uintptr 7304 Ftcl_EventuallyFree uintptr 7305 Ftcl_Exit uintptr 7306 Ftcl_ExposeCommand uintptr 7307 Ftcl_ExprBoolean uintptr 7308 Ftcl_ExprBooleanObj uintptr 7309 Ftcl_ExprDouble uintptr 7310 Ftcl_ExprDoubleObj uintptr 7311 Ftcl_ExprLong uintptr 7312 Ftcl_ExprLongObj uintptr 7313 Ftcl_ExprObj uintptr 7314 Ftcl_ExprString uintptr 7315 Ftcl_Finalize uintptr 7316 Ftcl_FindExecutable uintptr 7317 Ftcl_FirstHashEntry uintptr 7318 Ftcl_Flush uintptr 7319 Ftcl_FreeResult uintptr 7320 Ftcl_GetAlias uintptr 7321 Ftcl_GetAliasObj uintptr 7322 Ftcl_GetAssocData uintptr 7323 Ftcl_GetChannel uintptr 7324 Ftcl_GetChannelBufferSize uintptr 7325 Ftcl_GetChannelHandle uintptr 7326 Ftcl_GetChannelInstanceData uintptr 7327 Ftcl_GetChannelMode uintptr 7328 Ftcl_GetChannelName uintptr 7329 Ftcl_GetChannelOption uintptr 7330 Ftcl_GetChannelType uintptr 7331 Ftcl_GetCommandInfo uintptr 7332 Ftcl_GetCommandName uintptr 7333 Ftcl_GetErrno uintptr 7334 Ftcl_GetHostName uintptr 7335 Ftcl_GetInterpPath uintptr 7336 Ftcl_GetMaster uintptr 7337 Ftcl_GetNameOfExecutable uintptr 7338 Ftcl_GetObjResult uintptr 7339 Ftcl_GetOpenFile uintptr 7340 Ftcl_GetPathType uintptr 7341 Ftcl_Gets uintptr 7342 Ftcl_GetsObj uintptr 7343 Ftcl_GetServiceMode uintptr 7344 Ftcl_GetSlave uintptr 7345 Ftcl_GetStdChannel uintptr 7346 Ftcl_GetStringResult uintptr 7347 Ftcl_GetVar uintptr 7348 Ftcl_GetVar2 uintptr 7349 Ftcl_GlobalEval uintptr 7350 Ftcl_GlobalEvalObj uintptr 7351 Ftcl_HideCommand uintptr 7352 Ftcl_Init uintptr 7353 Ftcl_InitHashTable uintptr 7354 Ftcl_InputBlocked uintptr 7355 Ftcl_InputBuffered uintptr 7356 Ftcl_InterpDeleted uintptr 7357 Ftcl_IsSafe uintptr 7358 Ftcl_JoinPath uintptr 7359 Ftcl_LinkVar uintptr 7360 Freserved188 uintptr 7361 Ftcl_MakeFileChannel uintptr 7362 Ftcl_MakeSafe uintptr 7363 Ftcl_MakeTcpClientChannel uintptr 7364 Ftcl_Merge uintptr 7365 Ftcl_NextHashEntry uintptr 7366 Ftcl_NotifyChannel uintptr 7367 Ftcl_ObjGetVar2 uintptr 7368 Ftcl_ObjSetVar2 uintptr 7369 Ftcl_OpenCommandChannel uintptr 7370 Ftcl_OpenFileChannel uintptr 7371 Ftcl_OpenTcpClient uintptr 7372 Ftcl_OpenTcpServer uintptr 7373 Ftcl_Preserve uintptr 7374 Ftcl_PrintDouble uintptr 7375 Ftcl_PutEnv uintptr 7376 Ftcl_PosixError uintptr 7377 Ftcl_QueueEvent uintptr 7378 Ftcl_Read uintptr 7379 Ftcl_ReapDetachedProcs uintptr 7380 Ftcl_RecordAndEval uintptr 7381 Ftcl_RecordAndEvalObj uintptr 7382 Ftcl_RegisterChannel uintptr 7383 Ftcl_RegisterObjType uintptr 7384 Ftcl_RegExpCompile uintptr 7385 Ftcl_RegExpExec uintptr 7386 Ftcl_RegExpMatch uintptr 7387 Ftcl_RegExpRange uintptr 7388 Ftcl_Release uintptr 7389 Ftcl_ResetResult uintptr 7390 Ftcl_ScanElement uintptr 7391 Ftcl_ScanCountedElement uintptr 7392 Ftcl_SeekOld uintptr 7393 Ftcl_ServiceAll uintptr 7394 Ftcl_ServiceEvent uintptr 7395 Ftcl_SetAssocData uintptr 7396 Ftcl_SetChannelBufferSize uintptr 7397 Ftcl_SetChannelOption uintptr 7398 Ftcl_SetCommandInfo uintptr 7399 Ftcl_SetErrno uintptr 7400 Ftcl_SetErrorCode uintptr 7401 Ftcl_SetMaxBlockTime uintptr 7402 Ftcl_SetPanicProc uintptr 7403 Ftcl_SetRecursionLimit uintptr 7404 Ftcl_SetResult uintptr 7405 Ftcl_SetServiceMode uintptr 7406 Ftcl_SetObjErrorCode uintptr 7407 Ftcl_SetObjResult uintptr 7408 Ftcl_SetStdChannel uintptr 7409 Ftcl_SetVar uintptr 7410 Ftcl_SetVar2 uintptr 7411 Ftcl_SignalId uintptr 7412 Ftcl_SignalMsg uintptr 7413 Ftcl_SourceRCFile uintptr 7414 Ftcl_SplitList uintptr 7415 Ftcl_SplitPath uintptr 7416 Ftcl_StaticPackage uintptr 7417 Ftcl_StringMatch uintptr 7418 Ftcl_TellOld uintptr 7419 Ftcl_TraceVar uintptr 7420 Ftcl_TraceVar2 uintptr 7421 Ftcl_TranslateFileName uintptr 7422 Ftcl_Ungets uintptr 7423 Ftcl_UnlinkVar uintptr 7424 Ftcl_UnregisterChannel uintptr 7425 Ftcl_UnsetVar uintptr 7426 Ftcl_UnsetVar2 uintptr 7427 Ftcl_UntraceVar uintptr 7428 Ftcl_UntraceVar2 uintptr 7429 Ftcl_UpdateLinkedVar uintptr 7430 Ftcl_UpVar uintptr 7431 Ftcl_UpVar2 uintptr 7432 Ftcl_VarEval uintptr 7433 Ftcl_VarTraceInfo uintptr 7434 Ftcl_VarTraceInfo2 uintptr 7435 Ftcl_Write uintptr 7436 Ftcl_WrongNumArgs uintptr 7437 Ftcl_DumpActiveMemory uintptr 7438 Ftcl_ValidateAllMemory uintptr 7439 Ftcl_AppendResultVA uintptr 7440 Ftcl_AppendStringsToObjVA uintptr 7441 Ftcl_HashStats uintptr 7442 Ftcl_ParseVar uintptr 7443 Ftcl_PkgPresent uintptr 7444 Ftcl_PkgPresentEx uintptr 7445 Ftcl_PkgProvide uintptr 7446 Ftcl_PkgRequire uintptr 7447 Ftcl_SetErrorCodeVA uintptr 7448 Ftcl_VarEvalVA uintptr 7449 Ftcl_WaitPid uintptr 7450 Ftcl_PanicVA uintptr 7451 Ftcl_GetVersion uintptr 7452 Ftcl_InitMemory uintptr 7453 Ftcl_StackChannel uintptr 7454 Ftcl_UnstackChannel uintptr 7455 Ftcl_GetStackedChannel uintptr 7456 Ftcl_SetMainLoop uintptr 7457 Freserved285 uintptr 7458 Ftcl_AppendObjToObj uintptr 7459 Ftcl_CreateEncoding uintptr 7460 Ftcl_CreateThreadExitHandler uintptr 7461 Ftcl_DeleteThreadExitHandler uintptr 7462 Ftcl_DiscardResult uintptr 7463 Ftcl_EvalEx uintptr 7464 Ftcl_EvalObjv uintptr 7465 Ftcl_EvalObjEx uintptr 7466 Ftcl_ExitThread uintptr 7467 Ftcl_ExternalToUtf uintptr 7468 Ftcl_ExternalToUtfDString uintptr 7469 Ftcl_FinalizeThread uintptr 7470 Ftcl_FinalizeNotifier uintptr 7471 Ftcl_FreeEncoding uintptr 7472 Ftcl_GetCurrentThread uintptr 7473 Ftcl_GetEncoding uintptr 7474 Ftcl_GetEncodingName uintptr 7475 Ftcl_GetEncodingNames uintptr 7476 Ftcl_GetIndexFromObjStruct uintptr 7477 Ftcl_GetThreadData uintptr 7478 Ftcl_GetVar2Ex uintptr 7479 Ftcl_InitNotifier uintptr 7480 Ftcl_MutexLock uintptr 7481 Ftcl_MutexUnlock uintptr 7482 Ftcl_ConditionNotify uintptr 7483 Ftcl_ConditionWait uintptr 7484 Ftcl_NumUtfChars uintptr 7485 Ftcl_ReadChars uintptr 7486 Ftcl_RestoreResult uintptr 7487 Ftcl_SaveResult uintptr 7488 Ftcl_SetSystemEncoding uintptr 7489 Ftcl_SetVar2Ex uintptr 7490 Ftcl_ThreadAlert uintptr 7491 Ftcl_ThreadQueueEvent uintptr 7492 Ftcl_UniCharAtIndex uintptr 7493 Ftcl_UniCharToLower uintptr 7494 Ftcl_UniCharToTitle uintptr 7495 Ftcl_UniCharToUpper uintptr 7496 Ftcl_UniCharToUtf uintptr 7497 Ftcl_UtfAtIndex uintptr 7498 Ftcl_UtfCharComplete uintptr 7499 Ftcl_UtfBackslash uintptr 7500 Ftcl_UtfFindFirst uintptr 7501 Ftcl_UtfFindLast uintptr 7502 Ftcl_UtfNext uintptr 7503 Ftcl_UtfPrev uintptr 7504 Ftcl_UtfToExternal uintptr 7505 Ftcl_UtfToExternalDString uintptr 7506 Ftcl_UtfToLower uintptr 7507 Ftcl_UtfToTitle uintptr 7508 Ftcl_UtfToUniChar uintptr 7509 Ftcl_UtfToUpper uintptr 7510 Ftcl_WriteChars uintptr 7511 Ftcl_WriteObj uintptr 7512 Ftcl_GetString uintptr 7513 Ftcl_GetDefaultEncodingDir uintptr 7514 Ftcl_SetDefaultEncodingDir uintptr 7515 Ftcl_AlertNotifier uintptr 7516 Ftcl_ServiceModeHook uintptr 7517 Ftcl_UniCharIsAlnum uintptr 7518 Ftcl_UniCharIsAlpha uintptr 7519 Ftcl_UniCharIsDigit uintptr 7520 Ftcl_UniCharIsLower uintptr 7521 Ftcl_UniCharIsSpace uintptr 7522 Ftcl_UniCharIsUpper uintptr 7523 Ftcl_UniCharIsWordChar uintptr 7524 Ftcl_UniCharLen uintptr 7525 Ftcl_UniCharNcmp uintptr 7526 Ftcl_UniCharToUtfDString uintptr 7527 Ftcl_UtfToUniCharDString uintptr 7528 Ftcl_GetRegExpFromObj uintptr 7529 Ftcl_EvalTokens uintptr 7530 Ftcl_FreeParse uintptr 7531 Ftcl_LogCommandInfo uintptr 7532 Ftcl_ParseBraces uintptr 7533 Ftcl_ParseCommand uintptr 7534 Ftcl_ParseExpr uintptr 7535 Ftcl_ParseQuotedString uintptr 7536 Ftcl_ParseVarName uintptr 7537 Ftcl_GetCwd uintptr 7538 Ftcl_Chdir uintptr 7539 Ftcl_Access uintptr 7540 Ftcl_Stat uintptr 7541 Ftcl_UtfNcmp uintptr 7542 Ftcl_UtfNcasecmp uintptr 7543 Ftcl_StringCaseMatch uintptr 7544 Ftcl_UniCharIsControl uintptr 7545 Ftcl_UniCharIsGraph uintptr 7546 Ftcl_UniCharIsPrint uintptr 7547 Ftcl_UniCharIsPunct uintptr 7548 Ftcl_RegExpExecObj uintptr 7549 Ftcl_RegExpGetInfo uintptr 7550 Ftcl_NewUnicodeObj uintptr 7551 Ftcl_SetUnicodeObj uintptr 7552 Ftcl_GetCharLength uintptr 7553 Ftcl_GetUniChar uintptr 7554 Ftcl_GetUnicode uintptr 7555 Ftcl_GetRange uintptr 7556 Ftcl_AppendUnicodeToObj uintptr 7557 Ftcl_RegExpMatchObj uintptr 7558 Ftcl_SetNotifier uintptr 7559 Ftcl_GetAllocMutex uintptr 7560 Ftcl_GetChannelNames uintptr 7561 Ftcl_GetChannelNamesEx uintptr 7562 Ftcl_ProcObjCmd uintptr 7563 Ftcl_ConditionFinalize uintptr 7564 Ftcl_MutexFinalize uintptr 7565 Ftcl_CreateThread uintptr 7566 Ftcl_ReadRaw uintptr 7567 Ftcl_WriteRaw uintptr 7568 Ftcl_GetTopChannel uintptr 7569 Ftcl_ChannelBuffered uintptr 7570 Ftcl_ChannelName uintptr 7571 Ftcl_ChannelVersion uintptr 7572 Ftcl_ChannelBlockModeProc uintptr 7573 Ftcl_ChannelCloseProc uintptr 7574 Ftcl_ChannelClose2Proc uintptr 7575 Ftcl_ChannelInputProc uintptr 7576 Ftcl_ChannelOutputProc uintptr 7577 Ftcl_ChannelSeekProc uintptr 7578 Ftcl_ChannelSetOptionProc uintptr 7579 Ftcl_ChannelGetOptionProc uintptr 7580 Ftcl_ChannelWatchProc uintptr 7581 Ftcl_ChannelGetHandleProc uintptr 7582 Ftcl_ChannelFlushProc uintptr 7583 Ftcl_ChannelHandlerProc uintptr 7584 Ftcl_JoinThread uintptr 7585 Ftcl_IsChannelShared uintptr 7586 Ftcl_IsChannelRegistered uintptr 7587 Ftcl_CutChannel uintptr 7588 Ftcl_SpliceChannel uintptr 7589 Ftcl_ClearChannelHandlers uintptr 7590 Ftcl_IsChannelExisting uintptr 7591 Ftcl_UniCharNcasecmp uintptr 7592 Ftcl_UniCharCaseMatch uintptr 7593 Ftcl_FindHashEntry uintptr 7594 Ftcl_CreateHashEntry uintptr 7595 Ftcl_InitCustomHashTable uintptr 7596 Ftcl_InitObjHashTable uintptr 7597 Ftcl_CommandTraceInfo uintptr 7598 Ftcl_TraceCommand uintptr 7599 Ftcl_UntraceCommand uintptr 7600 Ftcl_AttemptAlloc uintptr 7601 Ftcl_AttemptDbCkalloc uintptr 7602 Ftcl_AttemptRealloc uintptr 7603 Ftcl_AttemptDbCkrealloc uintptr 7604 Ftcl_AttemptSetObjLength uintptr 7605 Ftcl_GetChannelThread uintptr 7606 Ftcl_GetUnicodeFromObj uintptr 7607 Ftcl_GetMathFuncInfo uintptr 7608 Ftcl_ListMathFuncs uintptr 7609 Ftcl_SubstObj uintptr 7610 Ftcl_DetachChannel uintptr 7611 Ftcl_IsStandardChannel uintptr 7612 Ftcl_FSCopyFile uintptr 7613 Ftcl_FSCopyDirectory uintptr 7614 Ftcl_FSCreateDirectory uintptr 7615 Ftcl_FSDeleteFile uintptr 7616 Ftcl_FSLoadFile uintptr 7617 Ftcl_FSMatchInDirectory uintptr 7618 Ftcl_FSLink uintptr 7619 Ftcl_FSRemoveDirectory uintptr 7620 Ftcl_FSRenameFile uintptr 7621 Ftcl_FSLstat uintptr 7622 Ftcl_FSUtime uintptr 7623 Ftcl_FSFileAttrsGet uintptr 7624 Ftcl_FSFileAttrsSet uintptr 7625 Ftcl_FSFileAttrStrings uintptr 7626 Ftcl_FSStat uintptr 7627 Ftcl_FSAccess uintptr 7628 Ftcl_FSOpenFileChannel uintptr 7629 Ftcl_FSGetCwd uintptr 7630 Ftcl_FSChdir uintptr 7631 Ftcl_FSConvertToPathType uintptr 7632 Ftcl_FSJoinPath uintptr 7633 Ftcl_FSSplitPath uintptr 7634 Ftcl_FSEqualPaths uintptr 7635 Ftcl_FSGetNormalizedPath uintptr 7636 Ftcl_FSJoinToPath uintptr 7637 Ftcl_FSGetInternalRep uintptr 7638 Ftcl_FSGetTranslatedPath uintptr 7639 Ftcl_FSEvalFile uintptr 7640 Ftcl_FSNewNativePath uintptr 7641 Ftcl_FSGetNativePath uintptr 7642 Ftcl_FSFileSystemInfo uintptr 7643 Ftcl_FSPathSeparator uintptr 7644 Ftcl_FSListVolumes uintptr 7645 Ftcl_FSRegister uintptr 7646 Ftcl_FSUnregister uintptr 7647 Ftcl_FSData uintptr 7648 Ftcl_FSGetTranslatedStringPath uintptr 7649 Ftcl_FSGetFileSystemForPath uintptr 7650 Ftcl_FSGetPathType uintptr 7651 Ftcl_OutputBuffered uintptr 7652 Ftcl_FSMountsChanged uintptr 7653 Ftcl_EvalTokensStandard uintptr 7654 Ftcl_GetTime uintptr 7655 Ftcl_CreateObjTrace uintptr 7656 Ftcl_GetCommandInfoFromToken uintptr 7657 Ftcl_SetCommandInfoFromToken uintptr 7658 Ftcl_DbNewWideIntObj uintptr 7659 Ftcl_GetWideIntFromObj uintptr 7660 Ftcl_NewWideIntObj uintptr 7661 Ftcl_SetWideIntObj uintptr 7662 Ftcl_AllocStatBuf uintptr 7663 Ftcl_Seek uintptr 7664 Ftcl_Tell uintptr 7665 Ftcl_ChannelWideSeekProc uintptr 7666 Ftcl_DictObjPut uintptr 7667 Ftcl_DictObjGet uintptr 7668 Ftcl_DictObjRemove uintptr 7669 Ftcl_DictObjSize uintptr 7670 Ftcl_DictObjFirst uintptr 7671 Ftcl_DictObjNext uintptr 7672 Ftcl_DictObjDone uintptr 7673 Ftcl_DictObjPutKeyList uintptr 7674 Ftcl_DictObjRemoveKeyList uintptr 7675 Ftcl_NewDictObj uintptr 7676 Ftcl_DbNewDictObj uintptr 7677 Ftcl_RegisterConfig uintptr 7678 Ftcl_CreateNamespace uintptr 7679 Ftcl_DeleteNamespace uintptr 7680 Ftcl_AppendExportList uintptr 7681 Ftcl_Export uintptr 7682 Ftcl_Import uintptr 7683 Ftcl_ForgetImport uintptr 7684 Ftcl_GetCurrentNamespace uintptr 7685 Ftcl_GetGlobalNamespace uintptr 7686 Ftcl_FindNamespace uintptr 7687 Ftcl_FindCommand uintptr 7688 Ftcl_GetCommandFromObj uintptr 7689 Ftcl_GetCommandFullName uintptr 7690 Ftcl_FSEvalFileEx uintptr 7691 Ftcl_SetExitProc uintptr 7692 Ftcl_LimitAddHandler uintptr 7693 Ftcl_LimitRemoveHandler uintptr 7694 Ftcl_LimitReady uintptr 7695 Ftcl_LimitCheck uintptr 7696 Ftcl_LimitExceeded uintptr 7697 Ftcl_LimitSetCommands uintptr 7698 Ftcl_LimitSetTime uintptr 7699 Ftcl_LimitSetGranularity uintptr 7700 Ftcl_LimitTypeEnabled uintptr 7701 Ftcl_LimitTypeExceeded uintptr 7702 Ftcl_LimitTypeSet uintptr 7703 Ftcl_LimitTypeReset uintptr 7704 Ftcl_LimitGetCommands uintptr 7705 Ftcl_LimitGetTime uintptr 7706 Ftcl_LimitGetGranularity uintptr 7707 Ftcl_SaveInterpState uintptr 7708 Ftcl_RestoreInterpState uintptr 7709 Ftcl_DiscardInterpState uintptr 7710 Ftcl_SetReturnOptions uintptr 7711 Ftcl_GetReturnOptions uintptr 7712 Ftcl_IsEnsemble uintptr 7713 Ftcl_CreateEnsemble uintptr 7714 Ftcl_FindEnsemble uintptr 7715 Ftcl_SetEnsembleSubcommandList uintptr 7716 Ftcl_SetEnsembleMappingDict uintptr 7717 Ftcl_SetEnsembleUnknownHandler uintptr 7718 Ftcl_SetEnsembleFlags uintptr 7719 Ftcl_GetEnsembleSubcommandList uintptr 7720 Ftcl_GetEnsembleMappingDict uintptr 7721 Ftcl_GetEnsembleUnknownHandler uintptr 7722 Ftcl_GetEnsembleFlags uintptr 7723 Ftcl_GetEnsembleNamespace uintptr 7724 Ftcl_SetTimeProc uintptr 7725 Ftcl_QueryTimeProc uintptr 7726 Ftcl_ChannelThreadActionProc uintptr 7727 Ftcl_NewBignumObj uintptr 7728 Ftcl_DbNewBignumObj uintptr 7729 Ftcl_SetBignumObj uintptr 7730 Ftcl_GetBignumFromObj uintptr 7731 Ftcl_TakeBignumFromObj uintptr 7732 Ftcl_TruncateChannel uintptr 7733 Ftcl_ChannelTruncateProc uintptr 7734 Ftcl_SetChannelErrorInterp uintptr 7735 Ftcl_GetChannelErrorInterp uintptr 7736 Ftcl_SetChannelError uintptr 7737 Ftcl_GetChannelError uintptr 7738 Ftcl_InitBignumFromDouble uintptr 7739 Ftcl_GetNamespaceUnknownHandler uintptr 7740 Ftcl_SetNamespaceUnknownHandler uintptr 7741 Ftcl_GetEncodingFromObj uintptr 7742 Ftcl_GetEncodingSearchPath uintptr 7743 Ftcl_SetEncodingSearchPath uintptr 7744 Ftcl_GetEncodingNameFromEnvironment uintptr 7745 Ftcl_PkgRequireProc uintptr 7746 Ftcl_AppendObjToErrorInfo uintptr 7747 Ftcl_AppendLimitedToObj uintptr 7748 Ftcl_Format uintptr 7749 Ftcl_AppendFormatToObj uintptr 7750 Ftcl_ObjPrintf uintptr 7751 Ftcl_AppendPrintfToObj uintptr 7752 } 7753 7754 type TclStubs = TclStubs1 7755 7756 type TclPlatStubs = TclPlatStubs1 7757 7758 func dbHandleFromObj(tls *libc.TLS, interp uintptr, pObj uintptr, pDb uintptr) int32 { 7759 bp := tls.Alloc(88) 7760 defer tls.Free(88) 7761 7762 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, pObj), bp+24) { 7763 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, pObj), 0)) 7764 return TCL_ERROR 7765 } 7766 7767 *(*uintptr)(unsafe.Pointer(pDb)) = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 7768 return TCL_OK 7769 } 7770 7771 func testExpertCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7772 bp := tls.Alloc(212) 7773 defer tls.Free(212) 7774 7775 var pExpert uintptr = clientData 7776 *(*[6]Subcmd)(unsafe.Pointer(bp)) = [6]Subcmd{ 7777 {FzSub: ts + 1947, FnArg: 1, FzMsg: ts + 1951}, 7778 {FzSub: ts + 1957, FzMsg: ts + 584}, 7779 {FzSub: ts + 1965, FzMsg: ts + 584}, 7780 {FzSub: ts + 1971, FnArg: 2, FzMsg: ts + 1978}, 7781 {FzSub: ts + 1991, FzMsg: ts + 584}, 7782 {}, 7783 } 7784 7785 var rc int32 = TCL_OK 7786 *(*uintptr)(unsafe.Pointer(bp + 152)) = uintptr(0) 7787 7788 if objc < 2 { 7789 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 7790 return TCL_ERROR 7791 } 7792 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 7793 *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(Subcmd{})), ts+2014, 0, bp+144) 7794 if rc != TCL_OK { 7795 return rc 7796 } 7797 if objc != 2+(*Subcmd)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 144)))*24)).FnArg { 7798 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*Subcmd)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 144)))*24)).FzMsg) 7799 return TCL_ERROR 7800 } 7801 7802 switch *(*int32)(unsafe.Pointer(bp + 144)) { 7803 case 0: 7804 { 7805 var zArg uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 7806 rc = sqlite3_expert_sql(tls, pExpert, zArg, bp+152) 7807 break 7808 7809 } 7810 7811 case 1: 7812 { 7813 rc = sqlite3_expert_analyze(tls, pExpert, bp+152) 7814 break 7815 7816 } 7817 7818 case 2: 7819 { 7820 var n int32 = sqlite3_expert_count(tls, pExpert) 7821 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, n)) 7822 break 7823 7824 } 7825 7826 case 3: 7827 { 7828 *(*[5]uintptr)(unsafe.Pointer(bp + 168)) = [5]uintptr{ 7829 ts + 1947, ts + 2026, ts + 2034, ts + 2039, uintptr(0), 7830 } 7831 7832 var zReport uintptr 7833 7834 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+160) != 0 || 7835 tcl.XTcl_GetIndexFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+168, ts+1971, 0, bp+208) != 0 { 7836 return TCL_ERROR 7837 } 7838 7839 zReport = sqlite3_expert_report(tls, pExpert, *(*int32)(unsafe.Pointer(bp + 160)), 1+*(*int32)(unsafe.Pointer(bp + 208))) 7840 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zReport, -1)) 7841 break 7842 7843 } 7844 7845 default: 7846 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 7847 break 7848 } 7849 7850 if rc != TCL_OK { 7851 if *(*uintptr)(unsafe.Pointer(bp + 152)) != 0 { 7852 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 152)), -1)) 7853 } else { 7854 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 7855 } 7856 } 7857 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 152))) 7858 return rc 7859 } 7860 7861 type Subcmd = struct { 7862 FzSub uintptr 7863 FnArg int32 7864 F__ccgo_pad1 [4]byte 7865 FzMsg uintptr 7866 } 7867 7868 func testExpertDel(tls *libc.TLS, clientData uintptr) { 7869 var pExpert uintptr = clientData 7870 sqlite3_expert_destroy(tls, pExpert) 7871 } 7872 7873 func test_sqlite3_expert_new(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 7874 bp := tls.Alloc(56) 7875 defer tls.Free(56) 7876 7877 var zCmd uintptr = uintptr(0) 7878 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 7879 var pExpert uintptr 7880 var rc int32 = TCL_OK 7881 7882 if objc != 2 { 7883 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 7884 return TCL_ERROR 7885 } 7886 if dbHandleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+40) != 0 { 7887 return TCL_ERROR 7888 } 7889 7890 zCmd = sqlite3.Xsqlite3_mprintf(tls, ts+2053, libc.VaList(bp, libc.PreIncInt32(&iCmd, 1))) 7891 if zCmd == uintptr(0) { 7892 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, ts+2069, uintptr(0))) 7893 return TCL_ERROR 7894 } 7895 7896 pExpert = sqlite3_expert_new(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), bp+48) 7897 if pExpert == uintptr(0) { 7898 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(bp + 48)), uintptr(0))) 7899 rc = TCL_ERROR 7900 } else { 7901 var p uintptr = pExpert 7902 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 7903 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7904 }{testExpertCmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testExpertDel}))) 7905 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zCmd, -1)) 7906 } 7907 7908 sqlite3.Xsqlite3_free(tls, zCmd) 7909 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 7910 return rc 7911 } 7912 7913 var iCmd int32 = 0 7914 7915 func TestExpert_Init(tls *libc.TLS, interp uintptr) int32 { 7916 bp := tls.Alloc(16) 7917 defer tls.Free(16) 7918 7919 *(*[1]struct { 7920 FzCmd uintptr 7921 FxProc uintptr 7922 })(unsafe.Pointer(bp)) = [1]struct { 7923 FzCmd uintptr 7924 FxProc uintptr 7925 }{ 7926 {FzCmd: ts + 2083, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 7927 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 7928 }{test_sqlite3_expert_new}))}, 7929 } 7930 var i int32 7931 7932 for i = 0; uint64(i) < uint64(unsafe.Sizeof([1]struct { 7933 FzCmd uintptr 7934 FxProc uintptr 7935 }{}))/uint64(unsafe.Sizeof(struct { 7936 FzCmd uintptr 7937 FxProc uintptr 7938 }{})); i++ { 7939 var p uintptr = bp + uintptr(i)*16 7940 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 7941 FzCmd uintptr 7942 FxProc uintptr 7943 })(unsafe.Pointer(p)).FzCmd, (*struct { 7944 FzCmd uintptr 7945 FxProc uintptr 7946 })(unsafe.Pointer(p)).FxProc, uintptr(0), uintptr(0)) 7947 } 7948 return TCL_OK 7949 } 7950 7951 func f5tDbPointer(tls *libc.TLS, interp uintptr, pObj uintptr, ppDb uintptr) int32 { 7952 bp := tls.Alloc(64) 7953 defer tls.Free(64) 7954 7955 var p uintptr 7956 7957 var z uintptr = tcl.XTcl_GetString(tls, pObj) 7958 if tcl.XTcl_GetCommandInfo(tls, interp, z, bp) != 0 { 7959 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData 7960 *(*uintptr)(unsafe.Pointer(ppDb)) = (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb 7961 return TCL_OK 7962 } 7963 return TCL_ERROR 7964 } 7965 7966 func f5tResultToErrorCode(tls *libc.TLS, zRes uintptr) int32 { 7967 bp := tls.Alloc(64) 7968 defer tls.Free(64) 7969 7970 *(*[4]ErrorCode)(unsafe.Pointer(bp)) = [4]ErrorCode{ 7971 {Frc: SQLITE_DONE, FzError: ts + 2102}, 7972 {Frc: SQLITE_ERROR, FzError: ts + 2114}, 7973 {FzError: ts + 2127}, 7974 {FzError: ts + 584}, 7975 } 7976 var i int32 7977 7978 for i = 0; uint64(i) < uint64(unsafe.Sizeof([4]ErrorCode{}))/uint64(unsafe.Sizeof(ErrorCode{})); i++ { 7979 if 0 == sqlite3.Xsqlite3_stricmp(tls, zRes, (*ErrorCode)(unsafe.Pointer(bp+uintptr(i)*16)).FzError) { 7980 return (*ErrorCode)(unsafe.Pointer(bp + uintptr(i)*16)).Frc 7981 } 7982 } 7983 7984 return SQLITE_ERROR 7985 } 7986 7987 type ErrorCode = struct { 7988 Frc int32 7989 F__ccgo_pad1 [4]byte 7990 FzError uintptr 7991 } 7992 7993 func f5tDbAndApi(tls *libc.TLS, interp uintptr, pObj uintptr, ppDb uintptr, ppApi uintptr) int32 { 7994 bp := tls.Alloc(72) 7995 defer tls.Free(72) 7996 7997 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 7998 var rc int32 = f5tDbPointer(tls, interp, pObj, bp+48) 7999 if rc != TCL_OK { 8000 return TCL_ERROR 8001 } else { 8002 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 8003 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 8004 8005 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+2137, -1, bp+56, uintptr(0)) 8006 if rc != SQLITE_OK { 8007 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 48))), 0)) 8008 return TCL_ERROR 8009 } 8010 sqlite3.Xsqlite3_bind_pointer(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), 1, bp+64, ts+2161, uintptr(0)) 8011 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 8012 8013 if sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != SQLITE_OK { 8014 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 48))), 0)) 8015 return TCL_ERROR 8016 } 8017 8018 *(*uintptr)(unsafe.Pointer(ppDb)) = *(*uintptr)(unsafe.Pointer(bp + 48)) 8019 *(*uintptr)(unsafe.Pointer(ppApi)) = *(*uintptr)(unsafe.Pointer(bp + 64)) 8020 } 8021 8022 return TCL_OK 8023 } 8024 8025 type F5tFunction1 = struct { 8026 Finterp uintptr 8027 FpScript uintptr 8028 } 8029 8030 type F5tFunction = F5tFunction1 8031 8032 type F5tApi1 = struct { 8033 FpApi uintptr 8034 FpFts uintptr 8035 } 8036 8037 type F5tApi = F5tApi1 8038 8039 type F5tAuxData1 = struct{ FpObj uintptr } 8040 8041 type F5tAuxData = F5tAuxData1 8042 8043 func xTokenizeCb(tls *libc.TLS, pCtx uintptr, tflags int32, zToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 8044 var p uintptr = pCtx 8045 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 8046 var rc int32 8047 8048 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8049 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 8050 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, iStart)) 8051 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, iEnd)) 8052 8053 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, 0) 8054 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8055 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount, 1) <= 0 { 8056 tcl.XTclFreeObj(tls, pEval) 8057 } 8058 } 8059 if rc == TCL_OK { 8060 rc = f5tResultToErrorCode(tls, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp)) 8061 } 8062 8063 return rc 8064 } 8065 8066 func xQueryPhraseCb(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr) int32 { 8067 bp := tls.Alloc(88) 8068 defer tls.Free(88) 8069 8070 var p uintptr = pCtx 8071 var pEval uintptr 8072 var rc int32 8073 8074 (*F5tApi)(unsafe.Pointer(bp + 72)).FpApi = pApi 8075 (*F5tApi)(unsafe.Pointer(bp + 72)).FpFts = pFts 8076 libc.X__builtin___sprintf_chk(tls, bp+8, 0, libc.X__builtin_object_size(tls, bp+8, func() int32 { 8077 if X_USE_FORTIFY_LEVEL > 1 { 8078 return 1 8079 } 8080 return 0 8081 }()), ts+2174, libc.VaList(bp, libc.PostIncInt64(&iCmd1, 1))) 8082 tcl.XTcl_CreateObjCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 8083 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8084 }{xF5tApi})), bp+72, uintptr(0)) 8085 8086 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 8087 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8088 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 8089 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, 0) 8090 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8091 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount, 1) <= 0 { 8092 tcl.XTclFreeObj(tls, pEval) 8093 } 8094 } 8095 tcl.XTcl_DeleteCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8) 8096 8097 if rc == TCL_OK { 8098 rc = f5tResultToErrorCode(tls, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp)) 8099 } 8100 8101 return rc 8102 } 8103 8104 var iCmd1 sqlite3_int64 = int64(0) 8105 8106 func xSetAuxdataDestructor(tls *libc.TLS, p uintptr) { 8107 var pData uintptr = p 8108 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8109 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*F5tAuxData)(unsafe.Pointer(pData)).FpObj)).FrefCount, 1) <= 0 { 8110 tcl.XTclFreeObj(tls, (*F5tAuxData)(unsafe.Pointer(pData)).FpObj) 8111 } 8112 } 8113 sqlite3.Xsqlite3_free(tls, pData) 8114 } 8115 8116 func xF5tApi(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8117 bp := tls.Alloc(684) 8118 defer tls.Free(684) 8119 8120 *(*[19]Sub)(unsafe.Pointer(bp + 32)) = [19]Sub{ 8121 {FzName: ts + 2185, FzMsg: ts + 584}, 8122 {FzName: ts + 2198, FzMsg: ts + 584}, 8123 {FzName: ts + 2208, FnArg: 1, FzMsg: ts + 2225}, 8124 {FzName: ts + 2229, FnArg: 2, FzMsg: ts + 2239}, 8125 {FzName: ts + 2251, FzMsg: ts + 584}, 8126 {FzName: ts + 2264, FnArg: 1, FzMsg: ts + 2276}, 8127 {FzName: ts + 2283, FzMsg: ts + 584}, 8128 {FzName: ts + 2294, FnArg: 1, FzMsg: ts + 2300}, 8129 {FzName: ts + 2304, FzMsg: ts + 584}, 8130 {FzName: ts + 2311, FnArg: 1, FzMsg: ts + 2225}, 8131 {FzName: ts + 2323, FnArg: 1, FzMsg: ts + 2225}, 8132 {FzName: ts + 2335, FnArg: 2, FzMsg: ts + 2348}, 8133 {FzName: ts + 2362, FnArg: 1, FzMsg: ts + 2374}, 8134 {FzName: ts + 2380, FnArg: 1, FzMsg: ts + 2392}, 8135 {FzName: ts + 2398, FnArg: 1, FzMsg: ts + 2413}, 8136 {FzName: ts + 2421, FnArg: 1, FzMsg: ts + 2392}, 8137 {FzName: ts + 2436, FnArg: 4, FzMsg: ts + 2451}, 8138 {FzName: ts + 2480, FnArg: 3, FzMsg: ts + 2501}, 8139 {}, 8140 } 8141 var rc int32 8142 *(*int32)(unsafe.Pointer(bp + 488)) = 0 8143 var p uintptr = clientData 8144 8145 if objc < 2 { 8146 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 8147 return TCL_ERROR 8148 } 8149 8150 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 8151 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+32, int32(unsafe.Sizeof(Sub{})), ts+2523, 0, bp+488) 8152 if rc != TCL_OK { 8153 return rc 8154 } 8155 if (*Sub)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 488)))*24)).FnArg != objc-2 { 8156 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, (*Sub)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 488)))*24)).FzMsg) 8157 return TCL_ERROR 8158 } 8159 8160 switch *(*int32)(unsafe.Pointer(bp + 488)) { 8161 case 0: 8162 { 8163 var nCol int32 8164 nCol = (*struct { 8165 f func(*libc.TLS, uintptr) int32 8166 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 8167 if rc == SQLITE_OK { 8168 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nCol)) 8169 } 8170 break 8171 8172 } 8173 case 1: 8174 { 8175 rc = (*struct { 8176 f func(*libc.TLS, uintptr, uintptr) int32 8177 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxRowCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+496) 8178 if rc == SQLITE_OK { 8179 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 496)))) 8180 } 8181 break 8182 8183 } 8184 case 2: 8185 { 8186 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+504) != 0 { 8187 return TCL_ERROR 8188 } 8189 rc = (*struct { 8190 f func(*libc.TLS, uintptr, int32, uintptr) int32 8191 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnTotalSize})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 504)), bp+512) 8192 if rc == SQLITE_OK { 8193 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 512)))) 8194 } 8195 break 8196 8197 } 8198 case 3: 8199 { 8200 var zText uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+520) 8201 8202 (*F5tFunction)(unsafe.Pointer(bp + 528)).Finterp = interp 8203 (*F5tFunction)(unsafe.Pointer(bp + 528)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 8204 rc = (*struct { 8205 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr) int32 8206 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxTokenize})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, zText, *(*int32)(unsafe.Pointer(bp + 520)), bp+528, *(*uintptr)(unsafe.Pointer(&struct { 8207 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 8208 }{xTokenizeCb}))) 8209 if rc == SQLITE_OK { 8210 tcl.XTcl_ResetResult(tls, interp) 8211 } 8212 return rc 8213 8214 } 8215 case 4: 8216 { 8217 var nPhrase int32 8218 nPhrase = (*struct { 8219 f func(*libc.TLS, uintptr) int32 8220 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 8221 if rc == SQLITE_OK { 8222 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nPhrase)) 8223 } 8224 break 8225 8226 } 8227 case 5: 8228 { 8229 var sz int32 8230 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+544) != 0 { 8231 return TCL_ERROR 8232 } 8233 sz = (*struct { 8234 f func(*libc.TLS, uintptr, int32) int32 8235 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseSize})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 544))) 8236 if rc == SQLITE_OK { 8237 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sz)) 8238 } 8239 break 8240 8241 } 8242 case 6: 8243 { 8244 rc = (*struct { 8245 f func(*libc.TLS, uintptr, uintptr) int32 8246 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxInstCount})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+548) 8247 if rc == SQLITE_OK { 8248 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 548)))) 8249 } 8250 break 8251 8252 } 8253 case 7: 8254 { 8255 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+552) != 0 { 8256 return TCL_ERROR 8257 } 8258 rc = (*struct { 8259 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8260 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxInst})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 552)), bp+556, bp+560, bp+564) 8261 if rc == SQLITE_OK { 8262 var pList uintptr = tcl.XTcl_NewObj(tls) 8263 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 556)))) 8264 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 560)))) 8265 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 564)))) 8266 tcl.XTcl_SetObjResult(tls, interp, pList) 8267 } 8268 break 8269 8270 } 8271 case 8: 8272 { 8273 var iRowid sqlite3_int64 = (*struct { 8274 f func(*libc.TLS, uintptr) sqlite3_int64 8275 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxRowid})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts) 8276 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, iRowid)) 8277 break 8278 8279 } 8280 case 9: 8281 { 8282 *(*uintptr)(unsafe.Pointer(bp + 576)) = uintptr(0) 8283 *(*int32)(unsafe.Pointer(bp + 584)) = 0 8284 8285 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+568) != 0 { 8286 return TCL_ERROR 8287 } 8288 rc = (*struct { 8289 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8290 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnText})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 568)), bp+576, bp+584) 8291 if rc == SQLITE_OK { 8292 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 576)), *(*int32)(unsafe.Pointer(bp + 584)))) 8293 } 8294 break 8295 8296 } 8297 case 10: 8298 { 8299 *(*int32)(unsafe.Pointer(bp + 592)) = 0 8300 8301 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+588) != 0 { 8302 return TCL_ERROR 8303 } 8304 rc = (*struct { 8305 f func(*libc.TLS, uintptr, int32, uintptr) int32 8306 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxColumnSize})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 588)), bp+592) 8307 if rc == SQLITE_OK { 8308 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 592)))) 8309 } 8310 break 8311 8312 } 8313 case 11: 8314 { 8315 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+596) != 0 { 8316 return TCL_ERROR 8317 } 8318 (*F5tFunction)(unsafe.Pointer(bp + 600)).Finterp = interp 8319 (*F5tFunction)(unsafe.Pointer(bp + 600)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 8320 rc = (*struct { 8321 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8322 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxQueryPhrase})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 596)), bp+600, *(*uintptr)(unsafe.Pointer(&struct { 8323 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8324 }{xQueryPhraseCb}))) 8325 if rc == SQLITE_OK { 8326 tcl.XTcl_ResetResult(tls, interp) 8327 } 8328 break 8329 8330 } 8331 case 12: 8332 { 8333 var pData uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(F5tAuxData{}))) 8334 if pData == uintptr(0) { 8335 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2069, 0)) 8336 return TCL_ERROR 8337 } 8338 (*F5tAuxData)(unsafe.Pointer(pData)).FpObj = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 8339 (*Tcl_Obj)(unsafe.Pointer((*F5tAuxData)(unsafe.Pointer(pData)).FpObj)).FrefCount++ 8340 rc = (*struct { 8341 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8342 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxSetAuxdata})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, pData, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{xSetAuxdataDestructor}))) 8343 break 8344 8345 } 8346 case 13: 8347 { 8348 var pData uintptr 8349 8350 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+616) != 0 { 8351 return TCL_ERROR 8352 } 8353 pData = (*struct { 8354 f func(*libc.TLS, uintptr, int32) uintptr 8355 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxGetAuxdata})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 616))) 8356 if pData == uintptr(0) { 8357 tcl.XTcl_ResetResult(tls, interp) 8358 } else { 8359 tcl.XTcl_SetObjResult(tls, interp, (*F5tAuxData)(unsafe.Pointer(pData)).FpObj) 8360 if *(*int32)(unsafe.Pointer(bp + 616)) != 0 { 8361 xSetAuxdataDestructor(tls, pData) 8362 } 8363 } 8364 break 8365 8366 } 8367 8368 case 14: 8369 { 8370 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+620) != 0 { 8371 return TCL_ERROR 8372 } 8373 rc = (*struct { 8374 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 8375 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxSetAuxdata})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, uintptr(0)+uintptr(*(*int32)(unsafe.Pointer(bp + 620))), uintptr(0)) 8376 break 8377 8378 } 8379 case 15: 8380 { 8381 var iVal int32 8382 8383 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+624) != 0 { 8384 return TCL_ERROR 8385 } 8386 iVal = int32((int64((*struct { 8387 f func(*libc.TLS, uintptr, int32) uintptr 8388 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxGetAuxdata})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 624)))) - int64(uintptr(0))) / 1) 8389 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iVal)) 8390 break 8391 8392 } 8393 8394 case 16: 8395 { 8396 var zColvar uintptr 8397 var zOffvar uintptr 8398 var pScript uintptr = *(*uintptr)(unsafe.Pointer(objv + 5*8)) 8399 8400 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+628) != 0 { 8401 return TCL_ERROR 8402 } 8403 zColvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 8404 zOffvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 8405 8406 rc = (*struct { 8407 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 8408 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseFirst})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 628)), bp+632, bp+648, bp+652) 8409 if rc != SQLITE_OK { 8410 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 8411 return TCL_ERROR 8412 } 8413 for ; *(*int32)(unsafe.Pointer(bp + 648)) >= 0; (*struct { 8414 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 8415 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseNext})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+632, bp+648, bp+652) { 8416 tcl.XTcl_SetVar2Ex(tls, interp, zColvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 648))), 0) 8417 tcl.XTcl_SetVar2Ex(tls, interp, zOffvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 652))), 0) 8418 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 8419 if rc == TCL_CONTINUE { 8420 rc = TCL_OK 8421 } 8422 if rc != TCL_OK { 8423 if rc == TCL_BREAK { 8424 rc = TCL_OK 8425 } 8426 break 8427 } 8428 } 8429 8430 break 8431 8432 } 8433 8434 case 17: 8435 { 8436 var zColvar uintptr 8437 var pScript uintptr = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 8438 8439 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+656) != 0 { 8440 return TCL_ERROR 8441 } 8442 zColvar = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 8443 8444 rc = (*struct { 8445 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 8446 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseFirstColumn})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, *(*int32)(unsafe.Pointer(bp + 656)), bp+664, bp+680) 8447 if rc != SQLITE_OK { 8448 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8449 return TCL_ERROR 8450 } 8451 for ; *(*int32)(unsafe.Pointer(bp + 680)) >= 0; (*struct { 8452 f func(*libc.TLS, uintptr, uintptr, uintptr) 8453 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer((*F5tApi)(unsafe.Pointer(p)).FpApi)).FxPhraseNextColumn})).f(tls, (*F5tApi)(unsafe.Pointer(p)).FpFts, bp+664, bp+680) { 8454 tcl.XTcl_SetVar2Ex(tls, interp, zColvar, uintptr(0), tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 680))), 0) 8455 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 8456 if rc == TCL_CONTINUE { 8457 rc = TCL_OK 8458 } 8459 if rc != TCL_OK { 8460 if rc == TCL_BREAK { 8461 rc = TCL_OK 8462 } 8463 break 8464 } 8465 } 8466 8467 break 8468 8469 } 8470 8471 default: 8472 break 8473 } 8474 8475 if rc != SQLITE_OK { 8476 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8477 return TCL_ERROR 8478 } 8479 8480 return TCL_OK 8481 } 8482 8483 type Sub = struct { 8484 FzName uintptr 8485 FnArg int32 8486 F__ccgo_pad1 [4]byte 8487 FzMsg uintptr 8488 } 8489 8490 func xF5tFunction(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) { 8491 bp := tls.Alloc(112) 8492 defer tls.Free(112) 8493 8494 var p uintptr = (*struct { 8495 f func(*libc.TLS, uintptr) uintptr 8496 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxUserData})).f(tls, pFts) 8497 var pEval uintptr 8498 var i int32 8499 var rc int32 8500 8501 (*F5tApi)(unsafe.Pointer(bp + 72)).FpApi = pApi 8502 (*F5tApi)(unsafe.Pointer(bp + 72)).FpFts = pFts 8503 8504 libc.X__builtin___sprintf_chk(tls, bp+8, 0, libc.X__builtin_object_size(tls, bp+8, func() int32 { 8505 if X_USE_FORTIFY_LEVEL > 1 { 8506 return 1 8507 } 8508 return 0 8509 }()), ts+2535, libc.VaList(bp, libc.PostIncInt64(&iCmd2, 1))) 8510 tcl.XTcl_CreateObjCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8, *(*uintptr)(unsafe.Pointer(&struct { 8511 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8512 }{xF5tApi})), bp+72, uintptr(0)) 8513 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 8514 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8515 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, bp+8, -1)) 8516 8517 for i = 0; i < nVal; i++ { 8518 var pObj uintptr = uintptr(0) 8519 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))) { 8520 case SQLITE_TEXT: 8521 pObj = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))), -1) 8522 break 8523 case SQLITE_BLOB: 8524 pObj = tcl.XTcl_NewByteArrayObj(tls, 8525 sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8))), sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 8526 break 8527 case SQLITE_INTEGER: 8528 pObj = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 8529 break 8530 case SQLITE_FLOAT: 8531 pObj = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)))) 8532 break 8533 default: 8534 pObj = tcl.XTcl_NewObj(tls) 8535 break 8536 } 8537 tcl.XTcl_ListObjAppendElement(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, pObj) 8538 } 8539 8540 rc = tcl.XTcl_EvalObjEx(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, pEval, TCL_GLOBAL_ONLY) 8541 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8542 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount, 1) <= 0 { 8543 tcl.XTclFreeObj(tls, pEval) 8544 } 8545 } 8546 tcl.XTcl_DeleteCommand(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp, bp+8) 8547 8548 if rc != TCL_OK { 8549 sqlite3.Xsqlite3_result_error(tls, pCtx, tcl.XTcl_GetStringResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp), -1) 8550 } else { 8551 var pVar uintptr = tcl.XTcl_GetObjResult(tls, (*F5tFunction)(unsafe.Pointer(p)).Finterp) 8552 8553 var zType uintptr = func() uintptr { 8554 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 8555 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 8556 } 8557 return ts + 584 8558 }() 8559 var c int8 = *(*int8)(unsafe.Pointer(zType)) 8560 if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 8561 var data uintptr = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+88) 8562 sqlite3.Xsqlite3_result_blob(tls, pCtx, data, *(*int32)(unsafe.Pointer(bp + 88)), libc.UintptrFromInt32(-1)) 8563 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 { 8564 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pVar, bp+88) 8565 sqlite3.Xsqlite3_result_int(tls, pCtx, *(*int32)(unsafe.Pointer(bp + 88))) 8566 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 8567 tcl.XTcl_GetDoubleFromObj(tls, uintptr(0), pVar, bp+96) 8568 sqlite3.Xsqlite3_result_double(tls, pCtx, *(*float64)(unsafe.Pointer(bp + 96))) 8569 } else if int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 8570 tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), pVar, bp+104) 8571 sqlite3.Xsqlite3_result_int64(tls, pCtx, *(*Tcl_WideInt)(unsafe.Pointer(bp + 104))) 8572 } else { 8573 var data uintptr = tcl.XTcl_GetStringFromObj(tls, pVar, bp+88) 8574 sqlite3.Xsqlite3_result_text(tls, pCtx, data, *(*int32)(unsafe.Pointer(bp + 88)), libc.UintptrFromInt32(-1)) 8575 } 8576 } 8577 } 8578 8579 var iCmd2 sqlite3_int64 = int64(0) 8580 8581 func xF5tDestroy(tls *libc.TLS, pCtx uintptr) { 8582 var p uintptr = pCtx 8583 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8584 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*F5tFunction)(unsafe.Pointer(p)).FpScript)).FrefCount, 1) <= 0 { 8585 tcl.XTclFreeObj(tls, (*F5tFunction)(unsafe.Pointer(p)).FpScript) 8586 } 8587 } 8588 tcl.XTcl_Free(tls, p) 8589 } 8590 8591 func f5tCreateFunction(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8592 bp := tls.Alloc(40) 8593 defer tls.Free(40) 8594 8595 var zName uintptr 8596 var pScript uintptr 8597 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 8598 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 8599 var pCtx uintptr = uintptr(0) 8600 var rc int32 8601 8602 if objc != 4 { 8603 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2581) 8604 return TCL_ERROR 8605 } 8606 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24, bp+32) != 0 { 8607 return TCL_ERROR 8608 } 8609 8610 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 8611 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 8612 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tFunction{}))) 8613 (*F5tFunction)(unsafe.Pointer(pCtx)).Finterp = interp 8614 (*F5tFunction)(unsafe.Pointer(pCtx)).FpScript = pScript 8615 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 8616 8617 rc = (*struct { 8618 f func(*libc.TLS, uintptr, uintptr, uintptr, fts5_extension_function, uintptr) int32 8619 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FxCreateFunction})).f(tls, 8620 *(*uintptr)(unsafe.Pointer(bp + 32)), zName, pCtx, *(*uintptr)(unsafe.Pointer(&struct { 8621 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) 8622 }{xF5tFunction})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{xF5tDestroy}))) 8623 if rc != SQLITE_OK { 8624 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2153, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 24))), 0)) 8625 return TCL_ERROR 8626 } 8627 8628 return TCL_OK 8629 } 8630 8631 type F5tTokenizeCtx1 = struct { 8632 FpRet uintptr 8633 FbSubst int32 8634 F__ccgo_pad1 [4]byte 8635 FzInput uintptr 8636 } 8637 8638 type F5tTokenizeCtx = F5tTokenizeCtx1 8639 8640 func xTokenizeCb2(tls *libc.TLS, pCtx uintptr, tflags int32, zToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 8641 var p uintptr = pCtx 8642 if (*F5tTokenizeCtx)(unsafe.Pointer(p)).FbSubst != 0 { 8643 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 8644 tcl.XTcl_ListObjAppendElement(tls, 8645 uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, (*F5tTokenizeCtx)(unsafe.Pointer(p)).FzInput+uintptr(iStart), iEnd-iStart)) 8646 } else { 8647 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewStringObj(tls, zToken, nToken)) 8648 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewIntObj(tls, iStart)) 8649 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), (*F5tTokenizeCtx)(unsafe.Pointer(p)).FpRet, tcl.XTcl_NewIntObj(tls, iEnd)) 8650 } 8651 return SQLITE_OK 8652 } 8653 8654 func f5tTokenize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8655 bp := tls.Alloc(200) 8656 defer tls.Free(200) 8657 8658 var zText uintptr 8659 8660 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 8661 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 8662 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 8663 8664 var pRet uintptr = uintptr(0) 8665 8666 var rc int32 8667 8668 if objc != 4 && objc != 5 { 8669 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2596) 8670 return TCL_ERROR 8671 } 8672 if objc == 5 { 8673 var zOpt uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 8674 if libc.Xstrcmp(tls, ts+2618, zOpt) != 0 { 8675 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2625, zOpt, 0)) 8676 return TCL_ERROR 8677 } 8678 } 8679 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)), bp+96, bp+104) != 0 { 8680 return TCL_ERROR 8681 } 8682 if tcl.XTcl_SplitList(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))), bp+112, bp+120) != 0 { 8683 return TCL_ERROR 8684 } 8685 if *(*int32)(unsafe.Pointer(bp + 112)) == 0 { 8686 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+2647, 0)) 8687 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) 8688 return TCL_ERROR 8689 } 8690 zText = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+128) 8691 8692 rc = (*struct { 8693 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) int32 8694 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 104)))).FxFindTokenizer})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 104)), *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 120)))), bp+136, bp+144) 8695 if rc != SQLITE_OK { 8696 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+2647, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 120)))), 0)) 8697 return TCL_ERROR 8698 } 8699 8700 rc = (*struct { 8701 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8702 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 144)).FxCreate})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 136)), *(*uintptr)(unsafe.Pointer(bp + 120))+1*8, *(*int32)(unsafe.Pointer(bp + 112))-1, bp+168) 8703 if rc != SQLITE_OK { 8704 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, ts+2667, 0)) 8705 return TCL_ERROR 8706 } 8707 8708 pRet = tcl.XTcl_NewObj(tls) 8709 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 8710 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FbSubst = libc.Bool32(objc == 5) 8711 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FpRet = pRet 8712 (*F5tTokenizeCtx)(unsafe.Pointer(bp + 176)).FzInput = zText 8713 rc = (*struct { 8714 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 8715 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 144)).FxTokenize})).f(tls, 8716 *(*uintptr)(unsafe.Pointer(bp + 168)), bp+176, FTS5_TOKENIZE_DOCUMENT, zText, *(*int32)(unsafe.Pointer(bp + 128)), *(*uintptr)(unsafe.Pointer(&struct { 8717 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 8718 }{xTokenizeCb2}))) 8719 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*fts5_tokenizer)(unsafe.Pointer(bp + 144)).FxDelete})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 168))) 8720 if rc != SQLITE_OK { 8721 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+80, ts+2696, 0)) 8722 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8723 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount, 1) <= 0 { 8724 tcl.XTclFreeObj(tls, pRet) 8725 } 8726 } 8727 return TCL_ERROR 8728 } 8729 8730 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(bp + 120))) 8731 tcl.XTcl_SetObjResult(tls, interp, pRet) 8732 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 8733 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount, 1) <= 0 { 8734 tcl.XTclFreeObj(tls, pRet) 8735 } 8736 } 8737 return TCL_OK 8738 } 8739 8740 type F5tTokenizerContext1 = struct { 8741 FpCtx uintptr 8742 FxToken uintptr 8743 } 8744 8745 type F5tTokenizerContext = F5tTokenizerContext1 8746 type F5tTokenizerModule1 = struct { 8747 Finterp uintptr 8748 FpScript uintptr 8749 FpContext uintptr 8750 } 8751 8752 type F5tTokenizerModule = F5tTokenizerModule1 8753 type F5tTokenizerInstance1 = struct { 8754 Finterp uintptr 8755 FpScript uintptr 8756 FpContext uintptr 8757 } 8758 8759 type F5tTokenizerInstance = F5tTokenizerInstance1 8760 8761 func f5tTokenizerCreate(tls *libc.TLS, pCtx uintptr, azArg uintptr, nArg int32, ppOut uintptr) int32 { 8762 var pMod uintptr = pCtx 8763 var pEval uintptr 8764 var rc int32 = TCL_OK 8765 var i int32 8766 8767 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript) 8768 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8769 for i = 0; rc == TCL_OK && i < nArg; i++ { 8770 var pObj uintptr = tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8)), -1) 8771 rc = tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp, pEval, pObj) 8772 } 8773 8774 if rc == TCL_OK { 8775 rc = tcl.XTcl_EvalObjEx(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp, pEval, TCL_GLOBAL_ONLY) 8776 } 8777 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8778 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount, 1) <= 0 { 8779 tcl.XTclFreeObj(tls, pEval) 8780 } 8781 } 8782 8783 if rc == TCL_OK { 8784 var pInst uintptr 8785 pInst = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerInstance{}))) 8786 libc.X__builtin___memset_chk(tls, pInst, 0, uint64(unsafe.Sizeof(F5tTokenizerInstance{})), libc.X__builtin_object_size(tls, pInst, 0)) 8787 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp 8788 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript = tcl.XTcl_GetObjResult(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp) 8789 (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext = (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpContext 8790 (*Tcl_Obj)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript)).FrefCount++ 8791 *(*uintptr)(unsafe.Pointer(ppOut)) = pInst 8792 } 8793 8794 return rc 8795 } 8796 8797 func f5tTokenizerDelete(tls *libc.TLS, p uintptr) { 8798 var pInst uintptr = p 8799 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8800 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript)).FrefCount, 1) <= 0 { 8801 tcl.XTclFreeObj(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript) 8802 } 8803 } 8804 tcl.XTcl_Free(tls, pInst) 8805 } 8806 8807 func f5tTokenizerTokenize(tls *libc.TLS, p uintptr, pCtx uintptr, flags int32, pText uintptr, nText int32, xToken uintptr) int32 { 8808 var pInst uintptr = p 8809 var pOldCtx uintptr 8810 var xOldToken uintptr 8811 var pEval uintptr 8812 var rc int32 8813 var zFlags uintptr 8814 8815 pOldCtx = (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx 8816 xOldToken = (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken 8817 8818 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx = pCtx 8819 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken = xToken 8820 8821 pEval = tcl.XTcl_DuplicateObj(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpScript) 8822 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 8823 switch flags { 8824 case FTS5_TOKENIZE_DOCUMENT: 8825 zFlags = ts + 2727 8826 break 8827 case FTS5_TOKENIZE_AUX: 8828 zFlags = ts + 2736 8829 break 8830 case FTS5_TOKENIZE_QUERY: 8831 zFlags = ts + 2740 8832 break 8833 case FTS5_TOKENIZE_PREFIX | FTS5_TOKENIZE_QUERY: 8834 zFlags = ts + 2746 8835 break 8836 default: 8837 zFlags = ts + 2758 8838 break 8839 } 8840 8841 tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zFlags, -1)) 8842 tcl.XTcl_ListObjAppendElement(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, pText, nText)) 8843 rc = tcl.XTcl_EvalObjEx(tls, (*F5tTokenizerInstance)(unsafe.Pointer(pInst)).Finterp, pEval, TCL_GLOBAL_ONLY) 8844 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8845 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount, 1) <= 0 { 8846 tcl.XTclFreeObj(tls, pEval) 8847 } 8848 } 8849 8850 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FpCtx = pOldCtx 8851 (*F5tTokenizerContext)(unsafe.Pointer((*F5tTokenizerInstance)(unsafe.Pointer(pInst)).FpContext)).FxToken = xOldToken 8852 return rc 8853 } 8854 8855 func f5tTokenizerReturn(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8856 bp := tls.Alloc(32) 8857 defer tls.Free(32) 8858 8859 var p uintptr 8860 8861 var tflags int32 8862 var zToken uintptr 8863 var rc int32 8864 8865 var zArg uintptr 8866 p = clientData 8867 tflags = 0 8868 8869 if !(objc == 5) { 8870 goto __1 8871 } 8872 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 8873 if !(*(*int32)(unsafe.Pointer(bp + 16)) <= 10 && *(*int32)(unsafe.Pointer(bp + 16)) >= 2 && libc.Xmemcmp(tls, ts+2766, zArg, uint64(*(*int32)(unsafe.Pointer(bp + 16)))) == 0) { 8874 goto __3 8875 } 8876 tflags = tflags | FTS5_TOKEN_COLOCATED 8877 goto __4 8878 __3: 8879 goto usage 8880 __4: 8881 ; 8882 goto __2 8883 __1: 8884 if !(objc != 4) { 8885 goto __5 8886 } 8887 goto usage 8888 __5: 8889 ; 8890 __2: 8891 ; 8892 zToken = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)), bp+20) 8893 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)), bp+24) != 0 || 8894 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+28) != 0) { 8895 goto __6 8896 } 8897 return TCL_ERROR 8898 __6: 8899 ; 8900 if !((*F5tTokenizerContext)(unsafe.Pointer(p)).FxToken == uintptr(0)) { 8901 goto __7 8902 } 8903 tcl.XTcl_AppendResult(tls, interp, 8904 libc.VaList(bp, ts+2777, 0)) 8905 return TCL_ERROR 8906 __7: 8907 ; 8908 rc = (*struct { 8909 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 8910 })(unsafe.Pointer(&struct{ uintptr }{(*F5tTokenizerContext)(unsafe.Pointer(p)).FxToken})).f(tls, (*F5tTokenizerContext)(unsafe.Pointer(p)).FpCtx, tflags, zToken, *(*int32)(unsafe.Pointer(bp + 20)), *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 28))) 8911 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 8912 if rc == SQLITE_OK { 8913 return TCL_OK 8914 } 8915 return TCL_ERROR 8916 8917 usage: 8918 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2835) 8919 return TCL_ERROR 8920 } 8921 8922 func f5tDelTokenizer(tls *libc.TLS, pCtx uintptr) { 8923 var pMod uintptr = pCtx 8924 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 8925 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript)).FrefCount, 1) <= 0 { 8926 tcl.XTclFreeObj(tls, (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript) 8927 } 8928 } 8929 tcl.XTcl_Free(tls, pMod) 8930 } 8931 8932 func f5tCreateTokenizer(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 8933 bp := tls.Alloc(56) 8934 defer tls.Free(56) 8935 8936 var pContext uintptr = clientData 8937 8938 var zName uintptr 8939 var pScript uintptr 8940 8941 var pMod uintptr 8942 var rc int32 8943 8944 if objc != 4 { 8945 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2581) 8946 return TCL_ERROR 8947 } 8948 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16, bp+24) != 0 { 8949 return TCL_ERROR 8950 } 8951 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 8952 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 8953 8954 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxCreate = *(*uintptr)(unsafe.Pointer(&struct { 8955 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 8956 }{f5tTokenizerCreate})) 8957 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxTokenize = *(*uintptr)(unsafe.Pointer(&struct { 8958 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 8959 }{f5tTokenizerTokenize})) 8960 (*fts5_tokenizer)(unsafe.Pointer(bp + 32)).FxDelete = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{f5tTokenizerDelete})) 8961 8962 pMod = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerModule{}))) 8963 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).Finterp = interp 8964 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpScript = pScript 8965 (*F5tTokenizerModule)(unsafe.Pointer(pMod)).FpContext = pContext 8966 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 8967 rc = (*struct { 8968 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr, uintptr) int32 8969 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 24)))).FxCreateTokenizer})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), zName, pMod, bp+32, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{f5tDelTokenizer}))) 8970 if rc != SQLITE_OK { 8971 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2863, 0)) 8972 return TCL_ERROR 8973 } 8974 8975 return TCL_OK 8976 } 8977 8978 func xF5tFree(tls *libc.TLS, clientData ClientData) { 8979 tcl.XTcl_Free(tls, clientData) 8980 } 8981 8982 func f5tMayBeCorrupt(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8983 return TCL_OK 8984 } 8985 8986 func f5t_fts5HashKey(tls *libc.TLS, nSlot int32, p uintptr, n int32) uint32 { 8987 var i int32 8988 var h uint32 = uint32(13) 8989 for i = n - 1; i >= 0; i-- { 8990 h = h<<3 ^ h ^ uint32(*(*int8)(unsafe.Pointer(p + uintptr(i)))) 8991 } 8992 return h % uint32(nSlot) 8993 } 8994 8995 func f5tTokenHash(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 8996 bp := tls.Alloc(8) 8997 defer tls.Free(8) 8998 8999 var z uintptr 9000 9001 var iVal uint32 9002 9003 if objc != 3 { 9004 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2900) 9005 return TCL_ERROR 9006 } 9007 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 9008 return TCL_ERROR 9009 } 9010 z = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) 9011 9012 iVal = f5t_fts5HashKey(tls, *(*int32)(unsafe.Pointer(bp)), z, *(*int32)(unsafe.Pointer(bp + 4))) 9013 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(iVal))) 9014 return TCL_OK 9015 } 9016 9017 func f5tRegisterMatchinfo(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 9018 bp := tls.Alloc(8) 9019 defer tls.Free(8) 9020 9021 var rc int32 9022 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 9023 9024 if objc != 2 { 9025 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 9026 return TCL_ERROR 9027 } 9028 if f5tDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 9029 return TCL_ERROR 9030 } 9031 9032 rc = sqlite3Fts5TestRegisterMatchinfo(tls, *(*uintptr)(unsafe.Pointer(bp))) 9033 if rc != SQLITE_OK { 9034 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 9035 return TCL_ERROR 9036 } 9037 return TCL_OK 9038 } 9039 9040 func f5tRegisterTok(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 9041 bp := tls.Alloc(16) 9042 defer tls.Free(16) 9043 9044 var rc int32 9045 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 9046 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 9047 9048 if objc != 2 { 9049 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 9050 return TCL_ERROR 9051 } 9052 if f5tDbAndApi(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, bp+8) != 0 { 9053 return TCL_ERROR 9054 } 9055 9056 rc = sqlite3Fts5TestRegisterTok(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(bp + 8))) 9057 if rc != SQLITE_OK { 9058 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 9059 return TCL_ERROR 9060 } 9061 return TCL_OK 9062 } 9063 9064 func Fts5tcl_Init(tls *libc.TLS, interp uintptr) int32 { 9065 var i int32 9066 var pContext uintptr 9067 9068 pContext = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(F5tTokenizerContext{}))) 9069 libc.X__builtin___memset_chk(tls, pContext, 0, uint64(unsafe.Sizeof(F5tTokenizerContext{})), libc.X__builtin_object_size(tls, pContext, 0)) 9070 9071 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd))/uint64(unsafe.Sizeof(struct { 9072 FzName uintptr 9073 FxProc uintptr 9074 FbTokenizeCtx int32 9075 F__ccgo_pad1 [4]byte 9076 }{})); i++ { 9077 var p uintptr = uintptr(unsafe.Pointer(&aCmd)) + uintptr(i)*24 9078 var pCtx uintptr = uintptr(0) 9079 if (*struct { 9080 FzName uintptr 9081 FxProc uintptr 9082 FbTokenizeCtx int32 9083 F__ccgo_pad1 [4]byte 9084 })(unsafe.Pointer(p)).FbTokenizeCtx != 0 { 9085 pCtx = pContext 9086 } 9087 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 9088 FzName uintptr 9089 FxProc uintptr 9090 FbTokenizeCtx int32 9091 F__ccgo_pad1 [4]byte 9092 })(unsafe.Pointer(p)).FzName, (*struct { 9093 FzName uintptr 9094 FxProc uintptr 9095 FbTokenizeCtx int32 9096 F__ccgo_pad1 [4]byte 9097 })(unsafe.Pointer(p)).FxProc, pCtx, func() uintptr { 9098 if i != 0 { 9099 return uintptr(0) 9100 } 9101 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{xF5tFree})) 9102 }()) 9103 } 9104 9105 return TCL_OK 9106 } 9107 9108 var aCmd = [8]struct { 9109 FzName uintptr 9110 FxProc uintptr 9111 FbTokenizeCtx int32 9112 F__ccgo_pad1 [4]byte 9113 }{ 9114 {FzName: ts + 2912, FxProc: 0, FbTokenizeCtx: 1}, 9115 {FzName: ts + 2942, FxProc: 0, FbTokenizeCtx: 1}, 9116 {FzName: ts + 2961, FxProc: 0}, 9117 {FzName: ts + 2983, FxProc: 0}, 9118 {FzName: ts + 3012, FxProc: 0}, 9119 {FzName: ts + 3040, FxProc: 0}, 9120 {FzName: ts + 3064, FxProc: 0}, 9121 {FzName: ts + 3096, FxProc: 0}, 9122 } 9123 9124 type Fts5MatchinfoCtx1 = struct { 9125 FnCol int32 9126 FnPhrase int32 9127 FzArg uintptr 9128 FnRet int32 9129 F__ccgo_pad1 [4]byte 9130 FaRet uintptr 9131 } 9132 9133 type Fts5MatchinfoCtx = Fts5MatchinfoCtx1 9134 9135 type u32 = uint32 9136 9137 func fts5_api_from_db(tls *libc.TLS, db uintptr, ppApi uintptr) int32 { 9138 bp := tls.Alloc(8) 9139 defer tls.Free(8) 9140 9141 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 9142 var rc int32 9143 9144 *(*uintptr)(unsafe.Pointer(ppApi)) = uintptr(0) 9145 rc = sqlite3.Xsqlite3_prepare(tls, db, ts+2137, -1, bp, uintptr(0)) 9146 if rc == SQLITE_OK { 9147 sqlite3.Xsqlite3_bind_pointer(tls, *(*uintptr)(unsafe.Pointer(bp)), 1, ppApi, ts+2161, uintptr(0)) 9148 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) 9149 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 9150 } 9151 9152 return rc 9153 } 9154 9155 func fts5MatchinfoFlagsize(tls *libc.TLS, nCol int32, nPhrase int32, f int8) int32 { 9156 var ret int32 = -1 9157 switch int32(f) { 9158 case 'p': 9159 ret = 1 9160 break 9161 case 'c': 9162 ret = 1 9163 break 9164 case 'x': 9165 ret = 3 * nCol * nPhrase 9166 break 9167 case 'y': 9168 ret = nCol * nPhrase 9169 break 9170 case 'b': 9171 ret = (nCol + 31) / 32 * nPhrase 9172 break 9173 case 'n': 9174 ret = 1 9175 break 9176 case 'a': 9177 ret = nCol 9178 break 9179 case 'l': 9180 ret = nCol 9181 break 9182 case 's': 9183 ret = nCol 9184 break 9185 } 9186 return ret 9187 } 9188 9189 func fts5MatchinfoIter(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, x uintptr) int32 { 9190 var i int32 9191 var n int32 = 0 9192 var rc int32 = SQLITE_OK 9193 var f int8 9194 for i = 0; libc.AssignInt8(&f, *(*int8)(unsafe.Pointer((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg + uintptr(i)))) != 0; i++ { 9195 rc = (*struct { 9196 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 9197 })(unsafe.Pointer(&struct{ uintptr }{x})).f(tls, pApi, pFts, p, f, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet+uintptr(n)*4) 9198 if rc != SQLITE_OK { 9199 break 9200 } 9201 n = n + fts5MatchinfoFlagsize(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase, f) 9202 } 9203 return rc 9204 } 9205 9206 func fts5MatchinfoXCb(tls *libc.TLS, pApi uintptr, pFts uintptr, pUserData uintptr) int32 { 9207 bp := tls.Alloc(24) 9208 defer tls.Free(24) 9209 9210 var aOut uintptr = pUserData 9211 var iPrev int32 = -1 9212 9213 for (*struct { 9214 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 9215 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseFirst})).f(tls, pFts, 0, bp, bp+16, bp+20); *(*int32)(unsafe.Pointer(bp + 16)) >= 0; (*struct { 9216 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 9217 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNext})).f(tls, pFts, bp, bp+16, bp+20) { 9218 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 16))*3+1)*4))++ 9219 if *(*int32)(unsafe.Pointer(bp + 16)) != iPrev { 9220 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 16))*3+2)*4))++ 9221 } 9222 iPrev = *(*int32)(unsafe.Pointer(bp + 16)) 9223 } 9224 9225 return SQLITE_OK 9226 } 9227 9228 func fts5MatchinfoGlobalCb(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, f int8, aOut uintptr) int32 { 9229 bp := tls.Alloc(24) 9230 defer tls.Free(24) 9231 9232 var rc int32 = SQLITE_OK 9233 switch int32(f) { 9234 case 'p': 9235 *(*u32)(unsafe.Pointer(aOut)) = u32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase) 9236 break 9237 9238 case 'c': 9239 *(*u32)(unsafe.Pointer(aOut)) = u32((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol) 9240 break 9241 9242 case 'x': 9243 { 9244 var i int32 9245 for i = 0; i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase && rc == SQLITE_OK; i++ { 9246 var pPtr uintptr = aOut + uintptr(i*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol*3)*4 9247 rc = (*struct { 9248 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 9249 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxQueryPhrase})).f(tls, pFts, i, pPtr, *(*uintptr)(unsafe.Pointer(&struct { 9250 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 9251 }{fts5MatchinfoXCb}))) 9252 } 9253 break 9254 9255 } 9256 9257 case 'n': 9258 { 9259 rc = (*struct { 9260 f func(*libc.TLS, uintptr, uintptr) int32 9261 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxRowCount})).f(tls, pFts, bp) 9262 *(*u32)(unsafe.Pointer(aOut)) = u32(*(*sqlite3_int64)(unsafe.Pointer(bp))) 9263 break 9264 9265 } 9266 9267 case 'a': 9268 { 9269 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) = int64(0) 9270 rc = (*struct { 9271 f func(*libc.TLS, uintptr, uintptr) int32 9272 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxRowCount})).f(tls, pFts, bp+8) 9273 if *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == int64(0) { 9274 libc.X__builtin___memset_chk(tls, aOut, 0, uint64(unsafe.Sizeof(u32(0)))*uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol), libc.X__builtin_object_size(tls, aOut, 0)) 9275 } else { 9276 var i int32 9277 for i = 0; rc == SQLITE_OK && i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol; i++ { 9278 rc = (*struct { 9279 f func(*libc.TLS, uintptr, int32, uintptr) int32 9280 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnTotalSize})).f(tls, pFts, i, bp+16) 9281 if rc == SQLITE_OK { 9282 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32((int64(2)**(*sqlite3_int64)(unsafe.Pointer(bp + 16)) + *(*sqlite3_int64)(unsafe.Pointer(bp + 8))) / (int64(2) * *(*sqlite3_int64)(unsafe.Pointer(bp + 8)))) 9283 } 9284 } 9285 } 9286 break 9287 9288 } 9289 9290 } 9291 return rc 9292 } 9293 9294 func fts5MatchinfoLocalCb(tls *libc.TLS, pApi uintptr, pFts uintptr, p uintptr, f int8, aOut uintptr) int32 { 9295 bp := tls.Alloc(80) 9296 defer tls.Free(80) 9297 9298 var i int32 9299 var rc int32 = SQLITE_OK 9300 9301 switch int32(f) { 9302 case 'b': 9303 { 9304 var iPhrase int32 9305 var nInt int32 = ((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol + 31) / 32 * (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase 9306 for i = 0; i < nInt; i++ { 9307 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32(0) 9308 } 9309 9310 for iPhrase = 0; iPhrase < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; iPhrase++ { 9311 for (*struct { 9312 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 9313 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseFirstColumn})).f(tls, pFts, iPhrase, bp, bp+16); *(*int32)(unsafe.Pointer(bp + 16)) >= 0; (*struct { 9314 f func(*libc.TLS, uintptr, uintptr, uintptr) 9315 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNextColumn})).f(tls, pFts, bp, bp+16) { 9316 *(*u32)(unsafe.Pointer(aOut + uintptr(iPhrase*(((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol+31)/32)+*(*int32)(unsafe.Pointer(bp + 16))/32)*4)) |= u32(1) << (*(*int32)(unsafe.Pointer(bp + 16)) % 32) 9317 } 9318 } 9319 9320 break 9321 9322 } 9323 9324 case 'x': 9325 fallthrough 9326 case 'y': 9327 { 9328 var nMul int32 = func() int32 { 9329 if int32(f) == 'x' { 9330 return 3 9331 } 9332 return 1 9333 }() 9334 var iPhrase int32 9335 9336 for i = 0; i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; i++ { 9337 *(*u32)(unsafe.Pointer(aOut + uintptr(i*nMul)*4)) = u32(0) 9338 } 9339 9340 for iPhrase = 0; iPhrase < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase; iPhrase++ { 9341 for (*struct { 9342 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 9343 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseFirst})).f(tls, pFts, iPhrase, bp+24, bp+40, bp+44); *(*int32)(unsafe.Pointer(bp + 44)) >= 0; (*struct { 9344 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) 9345 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseNext})).f(tls, pFts, bp+24, bp+40, bp+44) { 9346 *(*u32)(unsafe.Pointer(aOut + uintptr(nMul*(*(*int32)(unsafe.Pointer(bp + 40))+iPhrase*(*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol))*4))++ 9347 } 9348 } 9349 9350 break 9351 9352 } 9353 9354 case 'l': 9355 { 9356 for i = 0; rc == SQLITE_OK && i < (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol; i++ { 9357 rc = (*struct { 9358 f func(*libc.TLS, uintptr, int32, uintptr) int32 9359 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnSize})).f(tls, pFts, i, bp+48) 9360 *(*u32)(unsafe.Pointer(aOut + uintptr(i)*4)) = u32(*(*int32)(unsafe.Pointer(bp + 48))) 9361 } 9362 break 9363 9364 } 9365 9366 case 's': 9367 { 9368 libc.X__builtin___memset_chk(tls, aOut, 0, uint64(unsafe.Sizeof(u32(0)))*uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol), libc.X__builtin_object_size(tls, aOut, 0)) 9369 9370 rc = (*struct { 9371 f func(*libc.TLS, uintptr, uintptr) int32 9372 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInstCount})).f(tls, pFts, bp+52) 9373 for i = 0; rc == SQLITE_OK && i < *(*int32)(unsafe.Pointer(bp + 52)); i++ { 9374 *(*int32)(unsafe.Pointer(bp + 60)) = 0 9375 var iNextPhrase int32 9376 var iNextOff int32 9377 var nSeq u32 = u32(1) 9378 var j int32 9379 9380 rc = (*struct { 9381 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 9382 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})).f(tls, pFts, i, bp+56, bp+60, bp+64) 9383 iNextPhrase = *(*int32)(unsafe.Pointer(bp + 56)) + 1 9384 iNextOff = *(*int32)(unsafe.Pointer(bp + 64)) + (*struct { 9385 f func(*libc.TLS, uintptr, int32) int32 9386 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseSize})).f(tls, pFts, 0) 9387 for j = i + 1; rc == SQLITE_OK && j < *(*int32)(unsafe.Pointer(bp + 52)); j++ { 9388 rc = (*struct { 9389 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32 9390 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})).f(tls, pFts, j, bp+68, bp+72, bp+76) 9391 if *(*int32)(unsafe.Pointer(bp + 72)) != *(*int32)(unsafe.Pointer(bp + 60)) || *(*int32)(unsafe.Pointer(bp + 76)) > iNextOff { 9392 break 9393 } 9394 if *(*int32)(unsafe.Pointer(bp + 68)) == iNextPhrase && *(*int32)(unsafe.Pointer(bp + 76)) == iNextOff { 9395 nSeq++ 9396 iNextPhrase = *(*int32)(unsafe.Pointer(bp + 68)) + 1 9397 iNextOff = *(*int32)(unsafe.Pointer(bp + 76)) + (*struct { 9398 f func(*libc.TLS, uintptr, int32) int32 9399 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseSize})).f(tls, pFts, *(*int32)(unsafe.Pointer(bp + 68))) 9400 } 9401 } 9402 9403 if nSeq > *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 60)))*4)) { 9404 *(*u32)(unsafe.Pointer(aOut + uintptr(*(*int32)(unsafe.Pointer(bp + 60)))*4)) = nSeq 9405 } 9406 } 9407 9408 break 9409 9410 } 9411 } 9412 return rc 9413 } 9414 9415 func fts5MatchinfoNew(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, zArg uintptr) uintptr { 9416 bp := tls.Alloc(8) 9417 defer tls.Free(8) 9418 9419 var p uintptr 9420 var nCol int32 9421 var nPhrase int32 9422 var i int32 9423 var nInt int32 9424 var nByte sqlite3_int64 9425 var rc int32 9426 9427 nCol = (*struct { 9428 f func(*libc.TLS, uintptr) int32 9429 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnCount})).f(tls, pFts) 9430 nPhrase = (*struct { 9431 f func(*libc.TLS, uintptr) int32 9432 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxPhraseCount})).f(tls, pFts) 9433 9434 nInt = 0 9435 for i = 0; *(*int8)(unsafe.Pointer(zArg + uintptr(i))) != 0; i++ { 9436 var n int32 = fts5MatchinfoFlagsize(tls, nCol, nPhrase, *(*int8)(unsafe.Pointer(zArg + uintptr(i)))) 9437 if n < 0 { 9438 var zErr uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+3131, libc.VaList(bp, int32(*(*int8)(unsafe.Pointer(zArg + uintptr(i)))))) 9439 sqlite3.Xsqlite3_result_error(tls, pCtx, zErr, -1) 9440 sqlite3.Xsqlite3_free(tls, zErr) 9441 return uintptr(0) 9442 } 9443 nInt = nInt + n 9444 } 9445 9446 nByte = sqlite3_int64(uint64(unsafe.Sizeof(Fts5MatchinfoCtx{})) + 9447 uint64(unsafe.Sizeof(u32(0)))*uint64(nInt) + 9448 uint64(i+1)) 9449 p = sqlite3.Xsqlite3_malloc64(tls, uint64(nByte)) 9450 if p == uintptr(0) { 9451 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 9452 return uintptr(0) 9453 } 9454 libc.X__builtin___memset_chk(tls, p, 0, uint64(nByte), libc.X__builtin_object_size(tls, p, 0)) 9455 9456 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnCol = nCol 9457 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnPhrase = nPhrase 9458 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet = p + 1*32 9459 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnRet = nInt 9460 (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg = (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet + uintptr(nInt)*4 9461 libc.X__builtin___memcpy_chk(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg, zArg, uint64(i), libc.X__builtin_object_size(tls, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg, 0)) 9462 9463 rc = fts5MatchinfoIter(tls, pApi, pFts, p, *(*uintptr)(unsafe.Pointer(&struct { 9464 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 9465 }{fts5MatchinfoGlobalCb}))) 9466 if rc != SQLITE_OK { 9467 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 9468 sqlite3.Xsqlite3_free(tls, p) 9469 p = uintptr(0) 9470 } 9471 9472 return p 9473 } 9474 9475 func fts5MatchinfoFunc(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) { 9476 var zArg uintptr 9477 var p uintptr 9478 var rc int32 = SQLITE_OK 9479 9480 if nVal > 0 { 9481 zArg = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9482 } else { 9483 zArg = ts + 3163 9484 } 9485 9486 p = (*struct { 9487 f func(*libc.TLS, uintptr, int32) uintptr 9488 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxGetAuxdata})).f(tls, pFts, 0) 9489 if p == uintptr(0) || sqlite3.Xsqlite3_stricmp(tls, zArg, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FzArg) != 0 { 9490 p = fts5MatchinfoNew(tls, pApi, pFts, pCtx, zArg) 9491 if p == uintptr(0) { 9492 rc = SQLITE_NOMEM 9493 } else { 9494 rc = (*struct { 9495 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 9496 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5ExtensionApi)(unsafe.Pointer(pApi)).FxSetAuxdata})).f(tls, pFts, p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 9497 } 9498 } 9499 9500 if rc == SQLITE_OK { 9501 rc = fts5MatchinfoIter(tls, pApi, pFts, p, *(*uintptr)(unsafe.Pointer(&struct { 9502 f func(*libc.TLS, uintptr, uintptr, uintptr, int8, uintptr) int32 9503 }{fts5MatchinfoLocalCb}))) 9504 } 9505 if rc != SQLITE_OK { 9506 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 9507 } else { 9508 var nByte int32 = int32(uint64((*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FnRet) * uint64(unsafe.Sizeof(u32(0)))) 9509 sqlite3.Xsqlite3_result_blob(tls, pCtx, (*Fts5MatchinfoCtx)(unsafe.Pointer(p)).FaRet, nByte, libc.UintptrFromInt32(-1)) 9510 } 9511 } 9512 9513 func sqlite3Fts5TestRegisterMatchinfo(tls *libc.TLS, db uintptr) int32 { 9514 bp := tls.Alloc(8) 9515 defer tls.Free(8) 9516 9517 var rc int32 9518 9519 rc = fts5_api_from_db(tls, db, bp) 9520 if rc != SQLITE_OK { 9521 return rc 9522 } 9523 9524 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) || (*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FiVersion < 2 { 9525 return SQLITE_ERROR 9526 } 9527 9528 rc = (*struct { 9529 f func(*libc.TLS, uintptr, uintptr, uintptr, fts5_extension_function, uintptr) int32 9530 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FxCreateFunction})).f(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+3167, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 9531 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) 9532 }{fts5MatchinfoFunc})), uintptr(0)) 9533 9534 return rc 9535 } 9536 9537 type Fts5tokTable1 = struct { 9538 Fbase sqlite3_vtab 9539 Ftok fts5_tokenizer 9540 FpTok uintptr 9541 } 9542 9543 type Fts5tokTable = Fts5tokTable1 9544 type Fts5tokCursor1 = struct { 9545 Fbase sqlite3_vtab_cursor 9546 FiRowid int32 9547 F__ccgo_pad1 [4]byte 9548 FzInput uintptr 9549 FnRow int32 9550 F__ccgo_pad2 [4]byte 9551 FaRow uintptr 9552 } 9553 9554 type Fts5tokCursor = Fts5tokCursor1 9555 type Fts5tokRow1 = struct { 9556 FzToken uintptr 9557 FiStart int32 9558 FiEnd int32 9559 FiPos int32 9560 F__ccgo_pad1 [4]byte 9561 } 9562 9563 type Fts5tokRow = Fts5tokRow1 9564 9565 func fts5tokDequote(tls *libc.TLS, z uintptr) { 9566 var q int8 = *(*int8)(unsafe.Pointer(z)) 9567 9568 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 9569 var iIn int32 = 1 9570 var iOut int32 = 0 9571 if int32(q) == '[' { 9572 q = int8(']') 9573 } 9574 9575 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 9576 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 9577 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 9578 iIn++ 9579 break 9580 } else { 9581 iIn = iIn + 2 9582 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 9583 } 9584 } else { 9585 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 9586 } 9587 } 9588 9589 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 9590 } 9591 } 9592 9593 func fts5tokDequoteArray(tls *libc.TLS, argc int32, argv uintptr, pazDequote uintptr) int32 { 9594 var rc int32 = SQLITE_OK 9595 if argc == 0 { 9596 *(*uintptr)(unsafe.Pointer(pazDequote)) = uintptr(0) 9597 } else { 9598 var i int32 9599 var nByte int32 = 0 9600 var azDequote uintptr 9601 9602 for i = 0; i < argc; i++ { 9603 nByte = nByte + int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))+uint64(1)) 9604 } 9605 9606 *(*uintptr)(unsafe.Pointer(pazDequote)) = libc.AssignUintptr(&azDequote, sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(uintptr(0)))*uint64(argc)+uint64(nByte))) 9607 if azDequote == uintptr(0) { 9608 rc = SQLITE_NOMEM 9609 } else { 9610 var pSpace uintptr = azDequote + uintptr(argc)*8 9611 for i = 0; i < argc; i++ { 9612 var n int32 = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 9613 *(*uintptr)(unsafe.Pointer(azDequote + uintptr(i)*8)) = pSpace 9614 libc.X__builtin___memcpy_chk(tls, pSpace, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), uint64(n+1), libc.X__builtin_object_size(tls, pSpace, 0)) 9615 fts5tokDequote(tls, pSpace) 9616 pSpace += uintptr(n + 1) 9617 } 9618 } 9619 } 9620 9621 return rc 9622 } 9623 9624 func fts5tokConnectMethod(tls *libc.TLS, db uintptr, pCtx uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 9625 bp := tls.Alloc(16) 9626 defer tls.Free(16) 9627 9628 var pApi uintptr = pCtx 9629 var pTab uintptr = uintptr(0) 9630 var rc int32 9631 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 9632 var nDequote int32 = 0 9633 9634 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 9635 ts+3177) 9636 9637 if rc == SQLITE_OK { 9638 nDequote = argc - 3 9639 rc = fts5tokDequoteArray(tls, nDequote, argv+3*8, bp) 9640 } 9641 9642 if rc == SQLITE_OK { 9643 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Fts5tokTable{}))) 9644 if pTab == uintptr(0) { 9645 rc = SQLITE_NOMEM 9646 } else { 9647 libc.X__builtin___memset_chk(tls, pTab, 0, uint64(unsafe.Sizeof(Fts5tokTable{})), libc.X__builtin_object_size(tls, pTab, 0)) 9648 } 9649 } 9650 9651 if rc == SQLITE_OK { 9652 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 9653 var zModule uintptr = uintptr(0) 9654 if nDequote > 0 { 9655 zModule = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))) 9656 } 9657 9658 rc = (*struct { 9659 f func(*libc.TLS, uintptr, uintptr, uintptr, uintptr) int32 9660 })(unsafe.Pointer(&struct{ uintptr }{(*fts5_api)(unsafe.Pointer(pApi)).FxFindTokenizer})).f(tls, pApi, zModule, bp+8, pTab+24) 9661 if rc == SQLITE_OK { 9662 var azArg uintptr = func() uintptr { 9663 if nDequote > 1 { 9664 return *(*uintptr)(unsafe.Pointer(bp)) + 1*8 9665 } 9666 return uintptr(0) 9667 }() 9668 var nArg int32 9669 if nDequote > 0 { 9670 nArg = nDequote - 1 9671 } else { 9672 nArg = 0 9673 } 9674 rc = (*struct { 9675 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 9676 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxCreate})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), azArg, nArg, pTab+48) 9677 } 9678 } 9679 9680 if rc != SQLITE_OK { 9681 sqlite3.Xsqlite3_free(tls, pTab) 9682 pTab = uintptr(0) 9683 } 9684 9685 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 9686 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp))) 9687 return rc 9688 } 9689 9690 func fts5tokDisconnectMethod(tls *libc.TLS, pVtab uintptr) int32 { 9691 var pTab uintptr = pVtab 9692 if (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok != 0 { 9693 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxDelete})).f(tls, (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok) 9694 } 9695 sqlite3.Xsqlite3_free(tls, pTab) 9696 return SQLITE_OK 9697 } 9698 9699 func fts5tokBestIndexMethod(tls *libc.TLS, pVTab uintptr, pInfo uintptr) int32 { 9700 var i int32 9701 9702 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FnConstraint; i++ { 9703 if (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 && 9704 (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).FiColumn == 0 && 9705 int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraint+uintptr(i)*12)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 9706 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FidxNum = 1 9707 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 9708 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 9709 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FestimatedCost = float64(1) 9710 return SQLITE_OK 9711 } 9712 } 9713 9714 (*sqlite3_index_info)(unsafe.Pointer(pInfo)).FidxNum = 0 9715 9716 return SQLITE_OK 9717 } 9718 9719 func fts5tokOpenMethod(tls *libc.TLS, pVTab uintptr, ppCsr uintptr) int32 { 9720 var pCsr uintptr 9721 9722 pCsr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Fts5tokCursor{}))) 9723 if pCsr == uintptr(0) { 9724 return SQLITE_NOMEM 9725 } 9726 libc.X__builtin___memset_chk(tls, pCsr, 0, uint64(unsafe.Sizeof(Fts5tokCursor{})), libc.X__builtin_object_size(tls, pCsr, 0)) 9727 9728 *(*uintptr)(unsafe.Pointer(ppCsr)) = pCsr 9729 return SQLITE_OK 9730 } 9731 9732 func fts5tokResetCursor(tls *libc.TLS, pCsr uintptr) { 9733 var i int32 9734 for i = 0; i < (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow; i++ { 9735 sqlite3.Xsqlite3_free(tls, (*Fts5tokRow)(unsafe.Pointer((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow+uintptr(i)*24)).FzToken) 9736 } 9737 sqlite3.Xsqlite3_free(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput) 9738 sqlite3.Xsqlite3_free(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow) 9739 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput = uintptr(0) 9740 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow = uintptr(0) 9741 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow = 0 9742 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid = 0 9743 } 9744 9745 func fts5tokCloseMethod(tls *libc.TLS, pCursor uintptr) int32 { 9746 var pCsr uintptr = pCursor 9747 fts5tokResetCursor(tls, pCsr) 9748 sqlite3.Xsqlite3_free(tls, pCsr) 9749 return SQLITE_OK 9750 } 9751 9752 func fts5tokNextMethod(tls *libc.TLS, pCursor uintptr) int32 { 9753 var pCsr uintptr = pCursor 9754 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid++ 9755 return SQLITE_OK 9756 } 9757 9758 func fts5tokCb(tls *libc.TLS, pCtx uintptr, tflags int32, pToken uintptr, nToken int32, iStart int32, iEnd int32) int32 { 9759 var pCsr uintptr = pCtx 9760 var pRow uintptr 9761 9762 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow&((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow-1) == 0 { 9763 var nNew int32 9764 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow != 0 { 9765 nNew = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow * 2 9766 } else { 9767 nNew = 32 9768 } 9769 var aNew uintptr 9770 aNew = sqlite3.Xsqlite3_realloc64(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow, uint64(nNew)*uint64(unsafe.Sizeof(Fts5tokRow{}))) 9771 if aNew == uintptr(0) { 9772 return SQLITE_NOMEM 9773 } 9774 libc.X__builtin___memset_chk(tls, aNew+uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*24, 0, uint64(unsafe.Sizeof(Fts5tokRow{}))*uint64(nNew-(*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow), libc.X__builtin_object_size(tls, aNew+uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*24, 0)) 9775 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow = aNew 9776 } 9777 9778 pRow = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow + uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow)*24 9779 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiStart = iStart 9780 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiEnd = iEnd 9781 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow != 0 { 9782 (*Fts5tokRow)(unsafe.Pointer(pRow)).FiPos = (*Fts5tokRow)(unsafe.Pointer(pRow+libc.UintptrFromInt32(-1)*24)).FiPos + func() int32 { 9783 if tflags&FTS5_TOKEN_COLOCATED != 0 { 9784 return 0 9785 } 9786 return 1 9787 }() 9788 } 9789 (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken = sqlite3.Xsqlite3_malloc(tls, nToken+1) 9790 if (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken == uintptr(0) { 9791 return SQLITE_NOMEM 9792 } 9793 libc.X__builtin___memcpy_chk(tls, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, pToken, uint64(nToken), libc.X__builtin_object_size(tls, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, 0)) 9794 *(*int8)(unsafe.Pointer((*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken + uintptr(nToken))) = int8(0) 9795 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow++ 9796 9797 return SQLITE_OK 9798 } 9799 9800 func fts5tokFilterMethod(tls *libc.TLS, pCursor uintptr, idxNum int32, idxStr uintptr, nVal int32, apVal uintptr) int32 { 9801 var rc int32 = SQLITE_ERROR 9802 var pCsr uintptr = pCursor 9803 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 9804 9805 fts5tokResetCursor(tls, pCsr) 9806 if idxNum == 1 { 9807 var zByte uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9808 var nByte int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal))) 9809 (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput = sqlite3.Xsqlite3_malloc(tls, nByte+1) 9810 if (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput == uintptr(0) { 9811 rc = SQLITE_NOMEM 9812 } else { 9813 if nByte > 0 { 9814 libc.X__builtin___memcpy_chk(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, zByte, uint64(nByte), libc.X__builtin_object_size(tls, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, 0)) 9815 } 9816 *(*int8)(unsafe.Pointer((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput + uintptr(nByte))) = int8(0) 9817 rc = (*struct { 9818 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, int32, uintptr) int32 9819 })(unsafe.Pointer(&struct{ uintptr }{(*Fts5tokTable)(unsafe.Pointer(pTab)).Ftok.FxTokenize})).f(tls, 9820 (*Fts5tokTable)(unsafe.Pointer(pTab)).FpTok, pCsr, 0, zByte, nByte, *(*uintptr)(unsafe.Pointer(&struct { 9821 f func(*libc.TLS, uintptr, int32, uintptr, int32, int32, int32) int32 9822 }{fts5tokCb}))) 9823 } 9824 } 9825 9826 if rc != SQLITE_OK { 9827 return rc 9828 } 9829 return fts5tokNextMethod(tls, pCursor) 9830 } 9831 9832 func fts5tokEofMethod(tls *libc.TLS, pCursor uintptr) int32 { 9833 var pCsr uintptr = pCursor 9834 return libc.Bool32((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid > (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FnRow) 9835 } 9836 9837 func fts5tokColumnMethod(tls *libc.TLS, pCursor uintptr, pCtx uintptr, iCol int32) int32 { 9838 var pCsr uintptr = pCursor 9839 var pRow uintptr = (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FaRow + uintptr((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid-1)*24 9840 9841 switch iCol { 9842 case 0: 9843 sqlite3.Xsqlite3_result_text(tls, pCtx, (*Fts5tokCursor)(unsafe.Pointer(pCsr)).FzInput, -1, libc.UintptrFromInt32(-1)) 9844 break 9845 case 1: 9846 sqlite3.Xsqlite3_result_text(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FzToken, -1, libc.UintptrFromInt32(-1)) 9847 break 9848 case 2: 9849 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiStart) 9850 break 9851 case 3: 9852 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiEnd) 9853 break 9854 default: 9855 sqlite3.Xsqlite3_result_int(tls, pCtx, (*Fts5tokRow)(unsafe.Pointer(pRow)).FiPos) 9856 break 9857 } 9858 return SQLITE_OK 9859 } 9860 9861 func fts5tokRowidMethod(tls *libc.TLS, pCursor uintptr, pRowid uintptr) int32 { 9862 var pCsr uintptr = pCursor 9863 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3_int64((*Fts5tokCursor)(unsafe.Pointer(pCsr)).FiRowid) 9864 return SQLITE_OK 9865 } 9866 9867 func sqlite3Fts5TestRegisterTok(tls *libc.TLS, db uintptr, pApi uintptr) int32 { 9868 var rc int32 9869 9870 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+3235, uintptr(unsafe.Pointer(&fts5tok_module)), pApi) 9871 return rc 9872 } 9873 9874 var fts5tok_module = sqlite3_module{ 9875 FxCreate: 0, 9876 FxConnect: 0, 9877 FxBestIndex: 0, 9878 FxDisconnect: 0, 9879 FxDestroy: 0, 9880 FxOpen: 0, 9881 FxClose: 0, 9882 FxFilter: 0, 9883 FxNext: 0, 9884 FxEof: 0, 9885 FxColumn: 0, 9886 FxRowid: 0, 9887 } 9888 9889 type sqlite3_api_routines = sqlite3_api_routines1 9890 9891 type sqlite3_loadext_entry = uintptr 9892 9893 type ApndVfs = sqlite3_vfs1 9894 type ApndFile1 = struct { 9895 Fbase sqlite3_file 9896 FiPgOne sqlite3_int64 9897 FiMark sqlite3_int64 9898 } 9899 9900 type ApndFile = ApndFile1 9901 9902 var apnd_vfs = sqlite3_vfs{ 9903 FiVersion: 3, 9904 FmxPathname: 1024, 9905 FzName: ts + 3248, 9906 FxOpen: 0, 9907 FxDelete: 0, 9908 FxAccess: 0, 9909 FxFullPathname: 0, 9910 FxDlOpen: 0, 9911 FxDlError: 0, 9912 FxDlSym: 0, 9913 FxDlClose: 0, 9914 FxRandomness: 0, 9915 FxSleep: 0, 9916 FxCurrentTime: 0, 9917 FxGetLastError: 0, 9918 FxCurrentTimeInt64: 0, 9919 FxSetSystemCall: 0, 9920 FxGetSystemCall: 0, 9921 FxNextSystemCall: 0, 9922 } 9923 9924 var apnd_io_methods = sqlite3_io_methods{ 9925 FiVersion: 3, 9926 FxClose: 0, 9927 FxRead: 0, 9928 FxWrite: 0, 9929 FxTruncate: 0, 9930 FxSync: 0, 9931 FxFileSize: 0, 9932 FxLock: 0, 9933 FxUnlock: 0, 9934 FxCheckReservedLock: 0, 9935 FxFileControl: 0, 9936 FxSectorSize: 0, 9937 FxDeviceCharacteristics: 0, 9938 FxShmMap: 0, 9939 FxShmLock: 0, 9940 FxShmBarrier: 0, 9941 FxShmUnmap: 0, 9942 FxFetch: 0, 9943 FxUnfetch: 0, 9944 } 9945 9946 func apndClose(tls *libc.TLS, pFile uintptr) int32 { 9947 pFile = pFile + uintptr(1)*24 9948 return (*struct { 9949 f func(*libc.TLS, uintptr) int32 9950 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxClose})).f(tls, pFile) 9951 } 9952 9953 func apndRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 9954 var paf uintptr = pFile 9955 pFile = pFile + uintptr(1)*24 9956 return (*struct { 9957 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9958 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxRead})).f(tls, pFile, zBuf, iAmt, (*ApndFile)(unsafe.Pointer(paf)).FiPgOne+iOfst) 9959 } 9960 9961 func apndWriteMark(tls *libc.TLS, paf uintptr, pFile uintptr, iWriteEnd sqlite_int64) int32 { 9962 bp := tls.Alloc(25) 9963 defer tls.Free(25) 9964 9965 var iPgOne sqlite_int64 = (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9966 9967 var i int32 = APND_MARK_FOS_SZ 9968 var rc int32 9969 9970 libc.X__builtin___memcpy_chk(tls, bp, ts+3256, uint64(APND_MARK_PREFIX_SZ), libc.X__builtin_object_size(tls, bp, 0)) 9971 for libc.PreDecInt32(&i, 1) >= 0 { 9972 *(*uint8)(unsafe.Pointer(bp + uintptr(APND_MARK_PREFIX_SZ+i))) = uint8(iPgOne & int64(0xff)) 9973 iPgOne >>= 8 9974 } 9975 iWriteEnd = iWriteEnd + (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 9976 if SQLITE_OK == libc.AssignInt32(&rc, (*struct { 9977 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 9978 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxWrite})).f(tls, pFile, bp, APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ, iWriteEnd)) { 9979 (*ApndFile)(unsafe.Pointer(paf)).FiMark = iWriteEnd 9980 } 9981 return rc 9982 } 9983 9984 func apndWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 9985 var paf uintptr = pFile 9986 var iWriteEnd sqlite_int64 = iOfst + sqlite_int64(iAmt) 9987 if iWriteEnd >= int64(0x40000000) { 9988 return SQLITE_FULL 9989 } 9990 pFile = pFile + uintptr(1)*24 9991 9992 if (*ApndFile)(unsafe.Pointer(paf)).FiMark < int64(0) || (*ApndFile)(unsafe.Pointer(paf)).FiPgOne+iWriteEnd > (*ApndFile)(unsafe.Pointer(paf)).FiMark { 9993 var rc int32 = apndWriteMark(tls, paf, pFile, iWriteEnd) 9994 if SQLITE_OK != rc { 9995 return rc 9996 } 9997 } 9998 return (*struct { 9999 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 10000 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxWrite})).f(tls, pFile, zBuf, iAmt, (*ApndFile)(unsafe.Pointer(paf)).FiPgOne+iOfst) 10001 } 10002 10003 func apndTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 10004 var paf uintptr = pFile 10005 pFile = pFile + uintptr(1)*24 10006 10007 if SQLITE_OK != apndWriteMark(tls, paf, pFile, size) { 10008 return SQLITE_IOERR 10009 } 10010 10011 return (*struct { 10012 f func(*libc.TLS, uintptr, sqlite3_int64) int32 10013 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxTruncate})).f(tls, pFile, (*ApndFile)(unsafe.Pointer(paf)).FiMark+int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)) 10014 } 10015 10016 func apndSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 10017 pFile = pFile + uintptr(1)*24 10018 return (*struct { 10019 f func(*libc.TLS, uintptr, int32) int32 10020 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSync})).f(tls, pFile, flags) 10021 } 10022 10023 func apndFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 10024 var paf uintptr = pFile 10025 *(*sqlite_int64)(unsafe.Pointer(pSize)) = func() int64 { 10026 if (*ApndFile)(unsafe.Pointer(paf)).FiMark >= int64(0) { 10027 return (*ApndFile)(unsafe.Pointer(paf)).FiMark - (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 10028 } 10029 return int64(0) 10030 }() 10031 return SQLITE_OK 10032 } 10033 10034 func apndLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 10035 pFile = pFile + uintptr(1)*24 10036 return (*struct { 10037 f func(*libc.TLS, uintptr, int32) int32 10038 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxLock})).f(tls, pFile, eLock) 10039 } 10040 10041 func apndUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 10042 pFile = pFile + uintptr(1)*24 10043 return (*struct { 10044 f func(*libc.TLS, uintptr, int32) int32 10045 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnlock})).f(tls, pFile, eLock) 10046 } 10047 10048 func apndCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 10049 pFile = pFile + uintptr(1)*24 10050 return (*struct { 10051 f func(*libc.TLS, uintptr, uintptr) int32 10052 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxCheckReservedLock})).f(tls, pFile, pResOut) 10053 } 10054 10055 func apndFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 10056 bp := tls.Alloc(16) 10057 defer tls.Free(16) 10058 10059 var paf uintptr = pFile 10060 var rc int32 10061 pFile = pFile + uintptr(1)*24 10062 if op == SQLITE_FCNTL_SIZE_HINT { 10063 *(*sqlite3_int64)(unsafe.Pointer(pArg)) += (*ApndFile)(unsafe.Pointer(paf)).FiPgOne 10064 } 10065 rc = (*struct { 10066 f func(*libc.TLS, uintptr, int32, uintptr) int32 10067 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileControl})).f(tls, pFile, op, pArg) 10068 if rc == SQLITE_OK && op == SQLITE_FCNTL_VFSNAME { 10069 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+3274, libc.VaList(bp, (*ApndFile)(unsafe.Pointer(paf)).FiPgOne, *(*uintptr)(unsafe.Pointer(pArg)))) 10070 } 10071 return rc 10072 } 10073 10074 func apndSectorSize(tls *libc.TLS, pFile uintptr) int32 { 10075 pFile = pFile + uintptr(1)*24 10076 return (*struct { 10077 f func(*libc.TLS, uintptr) int32 10078 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSectorSize})).f(tls, pFile) 10079 } 10080 10081 func apndDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 10082 pFile = pFile + uintptr(1)*24 10083 return (*struct { 10084 f func(*libc.TLS, uintptr) int32 10085 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxDeviceCharacteristics})).f(tls, pFile) 10086 } 10087 10088 func apndShmMap(tls *libc.TLS, pFile uintptr, iPg int32, pgsz int32, bExtend int32, pp uintptr) int32 { 10089 pFile = pFile + uintptr(1)*24 10090 return (*struct { 10091 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 10092 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmMap})).f(tls, pFile, iPg, pgsz, bExtend, pp) 10093 } 10094 10095 func apndShmLock(tls *libc.TLS, pFile uintptr, offset int32, n int32, flags int32) int32 { 10096 pFile = pFile + uintptr(1)*24 10097 return (*struct { 10098 f func(*libc.TLS, uintptr, int32, int32, int32) int32 10099 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmLock})).f(tls, pFile, offset, n, flags) 10100 } 10101 10102 func apndShmBarrier(tls *libc.TLS, pFile uintptr) { 10103 pFile = pFile + uintptr(1)*24 10104 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmBarrier})).f(tls, pFile) 10105 } 10106 10107 func apndShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 10108 pFile = pFile + uintptr(1)*24 10109 return (*struct { 10110 f func(*libc.TLS, uintptr, int32) int32 10111 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmUnmap})).f(tls, pFile, deleteFlag) 10112 } 10113 10114 func apndFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 10115 var p uintptr = pFile 10116 if (*ApndFile)(unsafe.Pointer(p)).FiMark < int64(0) || iOfst+sqlite3_int64(iAmt) > (*ApndFile)(unsafe.Pointer(p)).FiMark { 10117 return SQLITE_IOERR 10118 } 10119 pFile = pFile + uintptr(1)*24 10120 return (*struct { 10121 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 10122 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFetch})).f(tls, pFile, iOfst+(*ApndFile)(unsafe.Pointer(p)).FiPgOne, iAmt, pp) 10123 } 10124 10125 func apndUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, pPage uintptr) int32 { 10126 var p uintptr = pFile 10127 pFile = pFile + uintptr(1)*24 10128 return (*struct { 10129 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 10130 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnfetch})).f(tls, pFile, iOfst+(*ApndFile)(unsafe.Pointer(p)).FiPgOne, pPage) 10131 } 10132 10133 func apndReadMark(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) sqlite3_int64 { 10134 bp := tls.Alloc(25) 10135 defer tls.Free(25) 10136 10137 var rc int32 10138 var i int32 10139 var iMark sqlite3_int64 10140 var msbs int32 = 8 * (APND_MARK_FOS_SZ - 1) 10141 10142 if int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) != sz&int64(0x1ff) { 10143 return int64(-1) 10144 } 10145 rc = (*struct { 10146 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 10147 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxRead})).f(tls, pFile, bp, APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ, sz-int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)) 10148 if rc != 0 { 10149 return int64(-1) 10150 } 10151 if libc.Xmemcmp(tls, bp, ts+3256, uint64(APND_MARK_PREFIX_SZ)) != 0 { 10152 return int64(-1) 10153 } 10154 iMark = sqlite3_int64(int32(*(*uint8)(unsafe.Pointer(bp + 17)))&0x7f) << msbs 10155 for i = 1; i < 8; i++ { 10156 msbs = msbs - 8 10157 iMark = iMark | sqlite3_int64(*(*uint8)(unsafe.Pointer(bp + uintptr(APND_MARK_PREFIX_SZ+i))))<<msbs 10158 } 10159 if iMark > sz-int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)-int64(512) { 10160 return int64(-1) 10161 } 10162 if iMark&int64(0x1ff) != 0 { 10163 return int64(-1) 10164 } 10165 return iMark 10166 } 10167 10168 var apvfsSqliteHdr = *(*[16]int8)(unsafe.Pointer(ts + 3288)) 10169 10170 func apndIsAppendvfsDatabase(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) int32 { 10171 bp := tls.Alloc(16) 10172 defer tls.Free(16) 10173 10174 var rc int32 10175 10176 var iMark sqlite3_int64 = apndReadMark(tls, sz, pFile) 10177 if iMark >= int64(0) { 10178 rc = (*struct { 10179 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 10180 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxRead})).f(tls, pFile, bp, int32(unsafe.Sizeof([16]int8{})), iMark) 10181 if SQLITE_OK == rc && 10182 libc.Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&apvfsSqliteHdr)), uint64(unsafe.Sizeof([16]int8{}))) == 0 && 10183 sz&int64(0x1ff) == int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) && 10184 sz >= int64(512+(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ)) { 10185 return 1 10186 } 10187 } 10188 return 0 10189 } 10190 10191 func apndIsOrdinaryDatabaseFile(tls *libc.TLS, sz sqlite3_int64, pFile uintptr) int32 { 10192 bp := tls.Alloc(16) 10193 defer tls.Free(16) 10194 10195 if apndIsAppendvfsDatabase(tls, sz, pFile) != 0 || 10196 sz&int64(0x1ff) != int64(0) || 10197 SQLITE_OK != (*struct { 10198 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 10199 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxRead})).f(tls, pFile, bp, int32(unsafe.Sizeof([16]int8{})), int64(0)) || 10200 libc.Xmemcmp(tls, bp, uintptr(unsafe.Pointer(&apvfsSqliteHdr)), uint64(unsafe.Sizeof([16]int8{}))) != 0 { 10201 return 0 10202 } else { 10203 return 1 10204 } 10205 return int32(0) 10206 } 10207 10208 func apndOpen(tls *libc.TLS, pApndVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 10209 bp := tls.Alloc(8) 10210 defer tls.Free(8) 10211 10212 var pApndFile uintptr = pFile 10213 var pBaseFile uintptr = pFile + uintptr(1)*24 10214 var pBaseVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pApndVfs)).FpAppData 10215 var rc int32 10216 *(*sqlite3_int64)(unsafe.Pointer(bp)) = int64(0) 10217 if flags&SQLITE_OPEN_MAIN_DB == 0 { 10218 return (*struct { 10219 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 10220 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FxOpen})).f(tls, pBaseVfs, zName, pFile, flags, pOutFlags) 10221 } 10222 libc.X__builtin___memset_chk(tls, pApndFile, 0, uint64(unsafe.Sizeof(ApndFile{})), libc.X__builtin_object_size(tls, pApndFile, 0)) 10223 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&apnd_io_methods)) 10224 (*ApndFile)(unsafe.Pointer(pApndFile)).FiMark = int64(-1) 10225 10226 rc = (*struct { 10227 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 10228 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FxOpen})).f(tls, pBaseVfs, zName, pBaseFile, flags, pOutFlags) 10229 if rc == SQLITE_OK { 10230 rc = (*struct { 10231 f func(*libc.TLS, uintptr, uintptr) int32 10232 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxFileSize})).f(tls, pBaseFile, bp) 10233 if rc != 0 { 10234 (*struct { 10235 f func(*libc.TLS, uintptr) int32 10236 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxClose})).f(tls, pBaseFile) 10237 } 10238 } 10239 if rc != 0 { 10240 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 10241 return rc 10242 } 10243 if apndIsOrdinaryDatabaseFile(tls, *(*sqlite3_int64)(unsafe.Pointer(bp)), pBaseFile) != 0 { 10244 libc.X__builtin___memmove_chk(tls, pApndFile, pBaseFile, uint64((*sqlite3_vfs)(unsafe.Pointer(pBaseVfs)).FszOsFile), libc.X__builtin_object_size(tls, pApndFile, 0)) 10245 return SQLITE_OK 10246 } 10247 (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne = apndReadMark(tls, *(*sqlite3_int64)(unsafe.Pointer(bp)), pFile) 10248 if (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne >= int64(0) { 10249 (*ApndFile)(unsafe.Pointer(pApndFile)).FiMark = *(*sqlite3_int64)(unsafe.Pointer(bp)) - int64(APND_MARK_PREFIX_SZ+APND_MARK_FOS_SZ) 10250 return SQLITE_OK 10251 } 10252 if flags&SQLITE_OPEN_CREATE == 0 { 10253 (*struct { 10254 f func(*libc.TLS, uintptr) int32 10255 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pBaseFile)).FpMethods)).FxClose})).f(tls, pBaseFile) 10256 rc = SQLITE_CANTOPEN 10257 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 10258 } else { 10259 (*ApndFile)(unsafe.Pointer(pApndFile)).FiPgOne = (*(*sqlite3_int64)(unsafe.Pointer(bp)) + int64(APND_ROUNDUP-1)) & libc.CplInt64(int64(APND_ROUNDUP-1)) 10260 } 10261 return rc 10262 } 10263 10264 func apndDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 10265 return (*struct { 10266 f func(*libc.TLS, uintptr, uintptr, int32) int32 10267 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDelete})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath, dirSync) 10268 } 10269 10270 func apndAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 10271 return (*struct { 10272 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 10273 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxAccess})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath, flags, pResOut) 10274 } 10275 10276 func apndFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 10277 return (*struct { 10278 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 10279 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxFullPathname})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath, nOut, zOut) 10280 } 10281 10282 func apndDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 10283 return (*struct { 10284 f func(*libc.TLS, uintptr, uintptr) uintptr 10285 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlOpen})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath) 10286 } 10287 10288 func apndDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 10289 (*struct { 10290 f func(*libc.TLS, uintptr, int32, uintptr) 10291 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlError})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nByte, zErrMsg) 10292 } 10293 10294 func apndDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 10295 return (*struct { 10296 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 10297 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlSym})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, p, zSym) 10298 } 10299 10300 func apndDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 10301 (*struct { 10302 f func(*libc.TLS, uintptr, uintptr) 10303 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlClose})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pHandle) 10304 } 10305 10306 func apndRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 10307 return (*struct { 10308 f func(*libc.TLS, uintptr, int32, uintptr) int32 10309 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxRandomness})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nByte, zBufOut) 10310 } 10311 10312 func apndSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 10313 return (*struct { 10314 f func(*libc.TLS, uintptr, int32) int32 10315 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSleep})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nMicro) 10316 } 10317 10318 func apndCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 10319 return (*struct { 10320 f func(*libc.TLS, uintptr, uintptr) int32 10321 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTime})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pTimeOut) 10322 } 10323 10324 func apndGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 10325 return (*struct { 10326 f func(*libc.TLS, uintptr, int32, uintptr) int32 10327 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetLastError})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, a, b) 10328 } 10329 10330 func apndCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 10331 return (*struct { 10332 f func(*libc.TLS, uintptr, uintptr) int32 10333 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTimeInt64})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, p) 10334 } 10335 10336 func apndSetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr, pCall sqlite3_syscall_ptr) int32 { 10337 return (*struct { 10338 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 10339 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName, pCall) 10340 } 10341 10342 func apndGetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) sqlite3_syscall_ptr { 10343 return (*struct { 10344 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 10345 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 10346 } 10347 10348 func apndNextSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) uintptr { 10349 return (*struct { 10350 f func(*libc.TLS, uintptr, uintptr) uintptr 10351 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxNextSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 10352 } 10353 10354 func sqlite3_appendvfs_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 10355 var rc int32 = SQLITE_OK 10356 var pOrig uintptr 10357 _ = pApi 10358 10359 _ = pzErrMsg 10360 _ = db 10361 pOrig = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 10362 if pOrig == uintptr(0) { 10363 return SQLITE_ERROR 10364 } 10365 apnd_vfs.FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FiVersion 10366 apnd_vfs.FpAppData = pOrig 10367 apnd_vfs.FszOsFile = int32(uint64((*sqlite3_vfs)(unsafe.Pointer(pOrig)).FszOsFile) + uint64(unsafe.Sizeof(ApndFile{}))) 10368 rc = sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&apnd_vfs)), 0) 10369 if rc == SQLITE_OK { 10370 rc = SQLITE_OK | int32(1)<<8 10371 } 10372 return rc 10373 } 10374 10375 type idtype_t = uint32 10376 10377 type pid_t = int32 10378 10379 type id_t = uint32 10380 10381 type sig_atomic_t = int32 10382 10383 type __darwin_i386_thread_state = struct { 10384 F__eax uint32 10385 F__ebx uint32 10386 F__ecx uint32 10387 F__edx uint32 10388 F__edi uint32 10389 F__esi uint32 10390 F__ebp uint32 10391 F__esp uint32 10392 F__ss uint32 10393 F__eflags uint32 10394 F__eip uint32 10395 F__cs uint32 10396 F__ds uint32 10397 F__es uint32 10398 F__fs uint32 10399 F__gs uint32 10400 } 10401 10402 type __darwin_fp_control = struct { 10403 F__ccgo_pad1 [0]uint16 10404 F__invalid uint16 10405 } 10406 10407 type __darwin_fp_status = struct { 10408 F__ccgo_pad1 [0]uint16 10409 F__invalid uint16 10410 } 10411 10412 type __darwin_mmst_reg = struct { 10413 F__mmst_reg [10]int8 10414 F__mmst_rsrv [6]int8 10415 } 10416 10417 type __darwin_xmm_reg = struct{ F__xmm_reg [16]int8 } 10418 10419 type __darwin_ymm_reg = struct{ F__ymm_reg [32]int8 } 10420 10421 type __darwin_zmm_reg = struct{ F__zmm_reg [64]int8 } 10422 10423 type __darwin_opmask_reg = struct{ F__opmask_reg [8]int8 } 10424 10425 type __darwin_i386_float_state = struct { 10426 F__fpu_reserved [2]int32 10427 F__fpu_fcw struct { 10428 F__ccgo_pad1 [0]uint16 10429 F__invalid uint16 10430 } 10431 F__fpu_fsw struct { 10432 F__ccgo_pad1 [0]uint16 10433 F__invalid uint16 10434 } 10435 F__fpu_ftw uint8 10436 F__fpu_rsrv1 uint8 10437 F__fpu_fop uint16 10438 F__fpu_ip uint32 10439 F__fpu_cs uint16 10440 F__fpu_rsrv2 uint16 10441 F__fpu_dp uint32 10442 F__fpu_ds uint16 10443 F__fpu_rsrv3 uint16 10444 F__fpu_mxcsr uint32 10445 F__fpu_mxcsrmask uint32 10446 F__fpu_stmm0 struct { 10447 F__mmst_reg [10]int8 10448 F__mmst_rsrv [6]int8 10449 } 10450 F__fpu_stmm1 struct { 10451 F__mmst_reg [10]int8 10452 F__mmst_rsrv [6]int8 10453 } 10454 F__fpu_stmm2 struct { 10455 F__mmst_reg [10]int8 10456 F__mmst_rsrv [6]int8 10457 } 10458 F__fpu_stmm3 struct { 10459 F__mmst_reg [10]int8 10460 F__mmst_rsrv [6]int8 10461 } 10462 F__fpu_stmm4 struct { 10463 F__mmst_reg [10]int8 10464 F__mmst_rsrv [6]int8 10465 } 10466 F__fpu_stmm5 struct { 10467 F__mmst_reg [10]int8 10468 F__mmst_rsrv [6]int8 10469 } 10470 F__fpu_stmm6 struct { 10471 F__mmst_reg [10]int8 10472 F__mmst_rsrv [6]int8 10473 } 10474 F__fpu_stmm7 struct { 10475 F__mmst_reg [10]int8 10476 F__mmst_rsrv [6]int8 10477 } 10478 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 10479 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 10480 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 10481 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 10482 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 10483 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 10484 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 10485 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 10486 F__fpu_rsrv4 [224]int8 10487 F__fpu_reserved1 int32 10488 } 10489 10490 type __darwin_i386_avx_state = struct { 10491 F__fpu_reserved [2]int32 10492 F__fpu_fcw struct { 10493 F__ccgo_pad1 [0]uint16 10494 F__invalid uint16 10495 } 10496 F__fpu_fsw struct { 10497 F__ccgo_pad1 [0]uint16 10498 F__invalid uint16 10499 } 10500 F__fpu_ftw uint8 10501 F__fpu_rsrv1 uint8 10502 F__fpu_fop uint16 10503 F__fpu_ip uint32 10504 F__fpu_cs uint16 10505 F__fpu_rsrv2 uint16 10506 F__fpu_dp uint32 10507 F__fpu_ds uint16 10508 F__fpu_rsrv3 uint16 10509 F__fpu_mxcsr uint32 10510 F__fpu_mxcsrmask uint32 10511 F__fpu_stmm0 struct { 10512 F__mmst_reg [10]int8 10513 F__mmst_rsrv [6]int8 10514 } 10515 F__fpu_stmm1 struct { 10516 F__mmst_reg [10]int8 10517 F__mmst_rsrv [6]int8 10518 } 10519 F__fpu_stmm2 struct { 10520 F__mmst_reg [10]int8 10521 F__mmst_rsrv [6]int8 10522 } 10523 F__fpu_stmm3 struct { 10524 F__mmst_reg [10]int8 10525 F__mmst_rsrv [6]int8 10526 } 10527 F__fpu_stmm4 struct { 10528 F__mmst_reg [10]int8 10529 F__mmst_rsrv [6]int8 10530 } 10531 F__fpu_stmm5 struct { 10532 F__mmst_reg [10]int8 10533 F__mmst_rsrv [6]int8 10534 } 10535 F__fpu_stmm6 struct { 10536 F__mmst_reg [10]int8 10537 F__mmst_rsrv [6]int8 10538 } 10539 F__fpu_stmm7 struct { 10540 F__mmst_reg [10]int8 10541 F__mmst_rsrv [6]int8 10542 } 10543 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 10544 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 10545 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 10546 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 10547 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 10548 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 10549 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 10550 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 10551 F__fpu_rsrv4 [224]int8 10552 F__fpu_reserved1 int32 10553 F__avx_reserved1 [64]int8 10554 F__fpu_ymmh0 struct{ F__xmm_reg [16]int8 } 10555 F__fpu_ymmh1 struct{ F__xmm_reg [16]int8 } 10556 F__fpu_ymmh2 struct{ F__xmm_reg [16]int8 } 10557 F__fpu_ymmh3 struct{ F__xmm_reg [16]int8 } 10558 F__fpu_ymmh4 struct{ F__xmm_reg [16]int8 } 10559 F__fpu_ymmh5 struct{ F__xmm_reg [16]int8 } 10560 F__fpu_ymmh6 struct{ F__xmm_reg [16]int8 } 10561 F__fpu_ymmh7 struct{ F__xmm_reg [16]int8 } 10562 } 10563 10564 type __darwin_i386_avx512_state = struct { 10565 F__fpu_reserved [2]int32 10566 F__fpu_fcw struct { 10567 F__ccgo_pad1 [0]uint16 10568 F__invalid uint16 10569 } 10570 F__fpu_fsw struct { 10571 F__ccgo_pad1 [0]uint16 10572 F__invalid uint16 10573 } 10574 F__fpu_ftw uint8 10575 F__fpu_rsrv1 uint8 10576 F__fpu_fop uint16 10577 F__fpu_ip uint32 10578 F__fpu_cs uint16 10579 F__fpu_rsrv2 uint16 10580 F__fpu_dp uint32 10581 F__fpu_ds uint16 10582 F__fpu_rsrv3 uint16 10583 F__fpu_mxcsr uint32 10584 F__fpu_mxcsrmask uint32 10585 F__fpu_stmm0 struct { 10586 F__mmst_reg [10]int8 10587 F__mmst_rsrv [6]int8 10588 } 10589 F__fpu_stmm1 struct { 10590 F__mmst_reg [10]int8 10591 F__mmst_rsrv [6]int8 10592 } 10593 F__fpu_stmm2 struct { 10594 F__mmst_reg [10]int8 10595 F__mmst_rsrv [6]int8 10596 } 10597 F__fpu_stmm3 struct { 10598 F__mmst_reg [10]int8 10599 F__mmst_rsrv [6]int8 10600 } 10601 F__fpu_stmm4 struct { 10602 F__mmst_reg [10]int8 10603 F__mmst_rsrv [6]int8 10604 } 10605 F__fpu_stmm5 struct { 10606 F__mmst_reg [10]int8 10607 F__mmst_rsrv [6]int8 10608 } 10609 F__fpu_stmm6 struct { 10610 F__mmst_reg [10]int8 10611 F__mmst_rsrv [6]int8 10612 } 10613 F__fpu_stmm7 struct { 10614 F__mmst_reg [10]int8 10615 F__mmst_rsrv [6]int8 10616 } 10617 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 10618 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 10619 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 10620 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 10621 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 10622 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 10623 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 10624 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 10625 F__fpu_rsrv4 [224]int8 10626 F__fpu_reserved1 int32 10627 F__avx_reserved1 [64]int8 10628 F__fpu_ymmh0 struct{ F__xmm_reg [16]int8 } 10629 F__fpu_ymmh1 struct{ F__xmm_reg [16]int8 } 10630 F__fpu_ymmh2 struct{ F__xmm_reg [16]int8 } 10631 F__fpu_ymmh3 struct{ F__xmm_reg [16]int8 } 10632 F__fpu_ymmh4 struct{ F__xmm_reg [16]int8 } 10633 F__fpu_ymmh5 struct{ F__xmm_reg [16]int8 } 10634 F__fpu_ymmh6 struct{ F__xmm_reg [16]int8 } 10635 F__fpu_ymmh7 struct{ F__xmm_reg [16]int8 } 10636 F__fpu_k0 struct{ F__opmask_reg [8]int8 } 10637 F__fpu_k1 struct{ F__opmask_reg [8]int8 } 10638 F__fpu_k2 struct{ F__opmask_reg [8]int8 } 10639 F__fpu_k3 struct{ F__opmask_reg [8]int8 } 10640 F__fpu_k4 struct{ F__opmask_reg [8]int8 } 10641 F__fpu_k5 struct{ F__opmask_reg [8]int8 } 10642 F__fpu_k6 struct{ F__opmask_reg [8]int8 } 10643 F__fpu_k7 struct{ F__opmask_reg [8]int8 } 10644 F__fpu_zmmh0 struct{ F__ymm_reg [32]int8 } 10645 F__fpu_zmmh1 struct{ F__ymm_reg [32]int8 } 10646 F__fpu_zmmh2 struct{ F__ymm_reg [32]int8 } 10647 F__fpu_zmmh3 struct{ F__ymm_reg [32]int8 } 10648 F__fpu_zmmh4 struct{ F__ymm_reg [32]int8 } 10649 F__fpu_zmmh5 struct{ F__ymm_reg [32]int8 } 10650 F__fpu_zmmh6 struct{ F__ymm_reg [32]int8 } 10651 F__fpu_zmmh7 struct{ F__ymm_reg [32]int8 } 10652 } 10653 10654 type __darwin_i386_exception_state = struct { 10655 F__trapno uint16 10656 F__cpu uint16 10657 F__err uint32 10658 F__faultvaddr uint32 10659 } 10660 10661 type __darwin_x86_debug_state32 = struct { 10662 F__dr0 uint32 10663 F__dr1 uint32 10664 F__dr2 uint32 10665 F__dr3 uint32 10666 F__dr4 uint32 10667 F__dr5 uint32 10668 F__dr6 uint32 10669 F__dr7 uint32 10670 } 10671 10672 type __x86_pagein_state = struct{ F__pagein_error int32 } 10673 10674 type __darwin_x86_thread_state64 = struct { 10675 F__rax uint64 10676 F__rbx uint64 10677 F__rcx uint64 10678 F__rdx uint64 10679 F__rdi uint64 10680 F__rsi uint64 10681 F__rbp uint64 10682 F__rsp uint64 10683 F__r8 uint64 10684 F__r9 uint64 10685 F__r10 uint64 10686 F__r11 uint64 10687 F__r12 uint64 10688 F__r13 uint64 10689 F__r14 uint64 10690 F__r15 uint64 10691 F__rip uint64 10692 F__rflags uint64 10693 F__cs uint64 10694 F__fs uint64 10695 F__gs uint64 10696 } 10697 10698 type __darwin_x86_thread_full_state64 = struct { 10699 F__ss64 struct { 10700 F__rax uint64 10701 F__rbx uint64 10702 F__rcx uint64 10703 F__rdx uint64 10704 F__rdi uint64 10705 F__rsi uint64 10706 F__rbp uint64 10707 F__rsp uint64 10708 F__r8 uint64 10709 F__r9 uint64 10710 F__r10 uint64 10711 F__r11 uint64 10712 F__r12 uint64 10713 F__r13 uint64 10714 F__r14 uint64 10715 F__r15 uint64 10716 F__rip uint64 10717 F__rflags uint64 10718 F__cs uint64 10719 F__fs uint64 10720 F__gs uint64 10721 } 10722 F__ds uint64 10723 F__es uint64 10724 F__ss uint64 10725 F__gsbase uint64 10726 } 10727 10728 type __darwin_x86_float_state64 = struct { 10729 F__fpu_reserved [2]int32 10730 F__fpu_fcw struct { 10731 F__ccgo_pad1 [0]uint16 10732 F__invalid uint16 10733 } 10734 F__fpu_fsw struct { 10735 F__ccgo_pad1 [0]uint16 10736 F__invalid uint16 10737 } 10738 F__fpu_ftw uint8 10739 F__fpu_rsrv1 uint8 10740 F__fpu_fop uint16 10741 F__fpu_ip uint32 10742 F__fpu_cs uint16 10743 F__fpu_rsrv2 uint16 10744 F__fpu_dp uint32 10745 F__fpu_ds uint16 10746 F__fpu_rsrv3 uint16 10747 F__fpu_mxcsr uint32 10748 F__fpu_mxcsrmask uint32 10749 F__fpu_stmm0 struct { 10750 F__mmst_reg [10]int8 10751 F__mmst_rsrv [6]int8 10752 } 10753 F__fpu_stmm1 struct { 10754 F__mmst_reg [10]int8 10755 F__mmst_rsrv [6]int8 10756 } 10757 F__fpu_stmm2 struct { 10758 F__mmst_reg [10]int8 10759 F__mmst_rsrv [6]int8 10760 } 10761 F__fpu_stmm3 struct { 10762 F__mmst_reg [10]int8 10763 F__mmst_rsrv [6]int8 10764 } 10765 F__fpu_stmm4 struct { 10766 F__mmst_reg [10]int8 10767 F__mmst_rsrv [6]int8 10768 } 10769 F__fpu_stmm5 struct { 10770 F__mmst_reg [10]int8 10771 F__mmst_rsrv [6]int8 10772 } 10773 F__fpu_stmm6 struct { 10774 F__mmst_reg [10]int8 10775 F__mmst_rsrv [6]int8 10776 } 10777 F__fpu_stmm7 struct { 10778 F__mmst_reg [10]int8 10779 F__mmst_rsrv [6]int8 10780 } 10781 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 10782 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 10783 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 10784 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 10785 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 10786 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 10787 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 10788 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 10789 F__fpu_xmm8 struct{ F__xmm_reg [16]int8 } 10790 F__fpu_xmm9 struct{ F__xmm_reg [16]int8 } 10791 F__fpu_xmm10 struct{ F__xmm_reg [16]int8 } 10792 F__fpu_xmm11 struct{ F__xmm_reg [16]int8 } 10793 F__fpu_xmm12 struct{ F__xmm_reg [16]int8 } 10794 F__fpu_xmm13 struct{ F__xmm_reg [16]int8 } 10795 F__fpu_xmm14 struct{ F__xmm_reg [16]int8 } 10796 F__fpu_xmm15 struct{ F__xmm_reg [16]int8 } 10797 F__fpu_rsrv4 [96]int8 10798 F__fpu_reserved1 int32 10799 } 10800 10801 type __darwin_x86_avx_state64 = struct { 10802 F__fpu_reserved [2]int32 10803 F__fpu_fcw struct { 10804 F__ccgo_pad1 [0]uint16 10805 F__invalid uint16 10806 } 10807 F__fpu_fsw struct { 10808 F__ccgo_pad1 [0]uint16 10809 F__invalid uint16 10810 } 10811 F__fpu_ftw uint8 10812 F__fpu_rsrv1 uint8 10813 F__fpu_fop uint16 10814 F__fpu_ip uint32 10815 F__fpu_cs uint16 10816 F__fpu_rsrv2 uint16 10817 F__fpu_dp uint32 10818 F__fpu_ds uint16 10819 F__fpu_rsrv3 uint16 10820 F__fpu_mxcsr uint32 10821 F__fpu_mxcsrmask uint32 10822 F__fpu_stmm0 struct { 10823 F__mmst_reg [10]int8 10824 F__mmst_rsrv [6]int8 10825 } 10826 F__fpu_stmm1 struct { 10827 F__mmst_reg [10]int8 10828 F__mmst_rsrv [6]int8 10829 } 10830 F__fpu_stmm2 struct { 10831 F__mmst_reg [10]int8 10832 F__mmst_rsrv [6]int8 10833 } 10834 F__fpu_stmm3 struct { 10835 F__mmst_reg [10]int8 10836 F__mmst_rsrv [6]int8 10837 } 10838 F__fpu_stmm4 struct { 10839 F__mmst_reg [10]int8 10840 F__mmst_rsrv [6]int8 10841 } 10842 F__fpu_stmm5 struct { 10843 F__mmst_reg [10]int8 10844 F__mmst_rsrv [6]int8 10845 } 10846 F__fpu_stmm6 struct { 10847 F__mmst_reg [10]int8 10848 F__mmst_rsrv [6]int8 10849 } 10850 F__fpu_stmm7 struct { 10851 F__mmst_reg [10]int8 10852 F__mmst_rsrv [6]int8 10853 } 10854 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 10855 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 10856 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 10857 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 10858 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 10859 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 10860 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 10861 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 10862 F__fpu_xmm8 struct{ F__xmm_reg [16]int8 } 10863 F__fpu_xmm9 struct{ F__xmm_reg [16]int8 } 10864 F__fpu_xmm10 struct{ F__xmm_reg [16]int8 } 10865 F__fpu_xmm11 struct{ F__xmm_reg [16]int8 } 10866 F__fpu_xmm12 struct{ F__xmm_reg [16]int8 } 10867 F__fpu_xmm13 struct{ F__xmm_reg [16]int8 } 10868 F__fpu_xmm14 struct{ F__xmm_reg [16]int8 } 10869 F__fpu_xmm15 struct{ F__xmm_reg [16]int8 } 10870 F__fpu_rsrv4 [96]int8 10871 F__fpu_reserved1 int32 10872 F__avx_reserved1 [64]int8 10873 F__fpu_ymmh0 struct{ F__xmm_reg [16]int8 } 10874 F__fpu_ymmh1 struct{ F__xmm_reg [16]int8 } 10875 F__fpu_ymmh2 struct{ F__xmm_reg [16]int8 } 10876 F__fpu_ymmh3 struct{ F__xmm_reg [16]int8 } 10877 F__fpu_ymmh4 struct{ F__xmm_reg [16]int8 } 10878 F__fpu_ymmh5 struct{ F__xmm_reg [16]int8 } 10879 F__fpu_ymmh6 struct{ F__xmm_reg [16]int8 } 10880 F__fpu_ymmh7 struct{ F__xmm_reg [16]int8 } 10881 F__fpu_ymmh8 struct{ F__xmm_reg [16]int8 } 10882 F__fpu_ymmh9 struct{ F__xmm_reg [16]int8 } 10883 F__fpu_ymmh10 struct{ F__xmm_reg [16]int8 } 10884 F__fpu_ymmh11 struct{ F__xmm_reg [16]int8 } 10885 F__fpu_ymmh12 struct{ F__xmm_reg [16]int8 } 10886 F__fpu_ymmh13 struct{ F__xmm_reg [16]int8 } 10887 F__fpu_ymmh14 struct{ F__xmm_reg [16]int8 } 10888 F__fpu_ymmh15 struct{ F__xmm_reg [16]int8 } 10889 } 10890 10891 type __darwin_x86_avx512_state64 = struct { 10892 F__fpu_reserved [2]int32 10893 F__fpu_fcw struct { 10894 F__ccgo_pad1 [0]uint16 10895 F__invalid uint16 10896 } 10897 F__fpu_fsw struct { 10898 F__ccgo_pad1 [0]uint16 10899 F__invalid uint16 10900 } 10901 F__fpu_ftw uint8 10902 F__fpu_rsrv1 uint8 10903 F__fpu_fop uint16 10904 F__fpu_ip uint32 10905 F__fpu_cs uint16 10906 F__fpu_rsrv2 uint16 10907 F__fpu_dp uint32 10908 F__fpu_ds uint16 10909 F__fpu_rsrv3 uint16 10910 F__fpu_mxcsr uint32 10911 F__fpu_mxcsrmask uint32 10912 F__fpu_stmm0 struct { 10913 F__mmst_reg [10]int8 10914 F__mmst_rsrv [6]int8 10915 } 10916 F__fpu_stmm1 struct { 10917 F__mmst_reg [10]int8 10918 F__mmst_rsrv [6]int8 10919 } 10920 F__fpu_stmm2 struct { 10921 F__mmst_reg [10]int8 10922 F__mmst_rsrv [6]int8 10923 } 10924 F__fpu_stmm3 struct { 10925 F__mmst_reg [10]int8 10926 F__mmst_rsrv [6]int8 10927 } 10928 F__fpu_stmm4 struct { 10929 F__mmst_reg [10]int8 10930 F__mmst_rsrv [6]int8 10931 } 10932 F__fpu_stmm5 struct { 10933 F__mmst_reg [10]int8 10934 F__mmst_rsrv [6]int8 10935 } 10936 F__fpu_stmm6 struct { 10937 F__mmst_reg [10]int8 10938 F__mmst_rsrv [6]int8 10939 } 10940 F__fpu_stmm7 struct { 10941 F__mmst_reg [10]int8 10942 F__mmst_rsrv [6]int8 10943 } 10944 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 10945 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 10946 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 10947 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 10948 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 10949 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 10950 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 10951 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 10952 F__fpu_xmm8 struct{ F__xmm_reg [16]int8 } 10953 F__fpu_xmm9 struct{ F__xmm_reg [16]int8 } 10954 F__fpu_xmm10 struct{ F__xmm_reg [16]int8 } 10955 F__fpu_xmm11 struct{ F__xmm_reg [16]int8 } 10956 F__fpu_xmm12 struct{ F__xmm_reg [16]int8 } 10957 F__fpu_xmm13 struct{ F__xmm_reg [16]int8 } 10958 F__fpu_xmm14 struct{ F__xmm_reg [16]int8 } 10959 F__fpu_xmm15 struct{ F__xmm_reg [16]int8 } 10960 F__fpu_rsrv4 [96]int8 10961 F__fpu_reserved1 int32 10962 F__avx_reserved1 [64]int8 10963 F__fpu_ymmh0 struct{ F__xmm_reg [16]int8 } 10964 F__fpu_ymmh1 struct{ F__xmm_reg [16]int8 } 10965 F__fpu_ymmh2 struct{ F__xmm_reg [16]int8 } 10966 F__fpu_ymmh3 struct{ F__xmm_reg [16]int8 } 10967 F__fpu_ymmh4 struct{ F__xmm_reg [16]int8 } 10968 F__fpu_ymmh5 struct{ F__xmm_reg [16]int8 } 10969 F__fpu_ymmh6 struct{ F__xmm_reg [16]int8 } 10970 F__fpu_ymmh7 struct{ F__xmm_reg [16]int8 } 10971 F__fpu_ymmh8 struct{ F__xmm_reg [16]int8 } 10972 F__fpu_ymmh9 struct{ F__xmm_reg [16]int8 } 10973 F__fpu_ymmh10 struct{ F__xmm_reg [16]int8 } 10974 F__fpu_ymmh11 struct{ F__xmm_reg [16]int8 } 10975 F__fpu_ymmh12 struct{ F__xmm_reg [16]int8 } 10976 F__fpu_ymmh13 struct{ F__xmm_reg [16]int8 } 10977 F__fpu_ymmh14 struct{ F__xmm_reg [16]int8 } 10978 F__fpu_ymmh15 struct{ F__xmm_reg [16]int8 } 10979 F__fpu_k0 struct{ F__opmask_reg [8]int8 } 10980 F__fpu_k1 struct{ F__opmask_reg [8]int8 } 10981 F__fpu_k2 struct{ F__opmask_reg [8]int8 } 10982 F__fpu_k3 struct{ F__opmask_reg [8]int8 } 10983 F__fpu_k4 struct{ F__opmask_reg [8]int8 } 10984 F__fpu_k5 struct{ F__opmask_reg [8]int8 } 10985 F__fpu_k6 struct{ F__opmask_reg [8]int8 } 10986 F__fpu_k7 struct{ F__opmask_reg [8]int8 } 10987 F__fpu_zmmh0 struct{ F__ymm_reg [32]int8 } 10988 F__fpu_zmmh1 struct{ F__ymm_reg [32]int8 } 10989 F__fpu_zmmh2 struct{ F__ymm_reg [32]int8 } 10990 F__fpu_zmmh3 struct{ F__ymm_reg [32]int8 } 10991 F__fpu_zmmh4 struct{ F__ymm_reg [32]int8 } 10992 F__fpu_zmmh5 struct{ F__ymm_reg [32]int8 } 10993 F__fpu_zmmh6 struct{ F__ymm_reg [32]int8 } 10994 F__fpu_zmmh7 struct{ F__ymm_reg [32]int8 } 10995 F__fpu_zmmh8 struct{ F__ymm_reg [32]int8 } 10996 F__fpu_zmmh9 struct{ F__ymm_reg [32]int8 } 10997 F__fpu_zmmh10 struct{ F__ymm_reg [32]int8 } 10998 F__fpu_zmmh11 struct{ F__ymm_reg [32]int8 } 10999 F__fpu_zmmh12 struct{ F__ymm_reg [32]int8 } 11000 F__fpu_zmmh13 struct{ F__ymm_reg [32]int8 } 11001 F__fpu_zmmh14 struct{ F__ymm_reg [32]int8 } 11002 F__fpu_zmmh15 struct{ F__ymm_reg [32]int8 } 11003 F__fpu_zmm16 struct{ F__zmm_reg [64]int8 } 11004 F__fpu_zmm17 struct{ F__zmm_reg [64]int8 } 11005 F__fpu_zmm18 struct{ F__zmm_reg [64]int8 } 11006 F__fpu_zmm19 struct{ F__zmm_reg [64]int8 } 11007 F__fpu_zmm20 struct{ F__zmm_reg [64]int8 } 11008 F__fpu_zmm21 struct{ F__zmm_reg [64]int8 } 11009 F__fpu_zmm22 struct{ F__zmm_reg [64]int8 } 11010 F__fpu_zmm23 struct{ F__zmm_reg [64]int8 } 11011 F__fpu_zmm24 struct{ F__zmm_reg [64]int8 } 11012 F__fpu_zmm25 struct{ F__zmm_reg [64]int8 } 11013 F__fpu_zmm26 struct{ F__zmm_reg [64]int8 } 11014 F__fpu_zmm27 struct{ F__zmm_reg [64]int8 } 11015 F__fpu_zmm28 struct{ F__zmm_reg [64]int8 } 11016 F__fpu_zmm29 struct{ F__zmm_reg [64]int8 } 11017 F__fpu_zmm30 struct{ F__zmm_reg [64]int8 } 11018 F__fpu_zmm31 struct{ F__zmm_reg [64]int8 } 11019 } 11020 11021 type __darwin_x86_exception_state64 = struct { 11022 F__trapno uint16 11023 F__cpu uint16 11024 F__err uint32 11025 F__faultvaddr uint64 11026 } 11027 11028 type __darwin_x86_debug_state64 = struct { 11029 F__dr0 uint64 11030 F__dr1 uint64 11031 F__dr2 uint64 11032 F__dr3 uint64 11033 F__dr4 uint64 11034 F__dr5 uint64 11035 F__dr6 uint64 11036 F__dr7 uint64 11037 } 11038 11039 type __darwin_x86_cpmu_state64 = struct{ F__ctrs [16]uint64 } 11040 11041 type __darwin_mcontext32 = struct { 11042 F__es struct { 11043 F__trapno uint16 11044 F__cpu uint16 11045 F__err uint32 11046 F__faultvaddr uint32 11047 } 11048 F__ss struct { 11049 F__eax uint32 11050 F__ebx uint32 11051 F__ecx uint32 11052 F__edx uint32 11053 F__edi uint32 11054 F__esi uint32 11055 F__ebp uint32 11056 F__esp uint32 11057 F__ss uint32 11058 F__eflags uint32 11059 F__eip uint32 11060 F__cs uint32 11061 F__ds uint32 11062 F__es uint32 11063 F__fs uint32 11064 F__gs uint32 11065 } 11066 F__fs struct { 11067 F__fpu_reserved [2]int32 11068 F__fpu_fcw struct { 11069 F__ccgo_pad1 [0]uint16 11070 F__invalid uint16 11071 } 11072 F__fpu_fsw struct { 11073 F__ccgo_pad1 [0]uint16 11074 F__invalid uint16 11075 } 11076 F__fpu_ftw uint8 11077 F__fpu_rsrv1 uint8 11078 F__fpu_fop uint16 11079 F__fpu_ip uint32 11080 F__fpu_cs uint16 11081 F__fpu_rsrv2 uint16 11082 F__fpu_dp uint32 11083 F__fpu_ds uint16 11084 F__fpu_rsrv3 uint16 11085 F__fpu_mxcsr uint32 11086 F__fpu_mxcsrmask uint32 11087 F__fpu_stmm0 struct { 11088 F__mmst_reg [10]int8 11089 F__mmst_rsrv [6]int8 11090 } 11091 F__fpu_stmm1 struct { 11092 F__mmst_reg [10]int8 11093 F__mmst_rsrv [6]int8 11094 } 11095 F__fpu_stmm2 struct { 11096 F__mmst_reg [10]int8 11097 F__mmst_rsrv [6]int8 11098 } 11099 F__fpu_stmm3 struct { 11100 F__mmst_reg [10]int8 11101 F__mmst_rsrv [6]int8 11102 } 11103 F__fpu_stmm4 struct { 11104 F__mmst_reg [10]int8 11105 F__mmst_rsrv [6]int8 11106 } 11107 F__fpu_stmm5 struct { 11108 F__mmst_reg [10]int8 11109 F__mmst_rsrv [6]int8 11110 } 11111 F__fpu_stmm6 struct { 11112 F__mmst_reg [10]int8 11113 F__mmst_rsrv [6]int8 11114 } 11115 F__fpu_stmm7 struct { 11116 F__mmst_reg [10]int8 11117 F__mmst_rsrv [6]int8 11118 } 11119 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 11120 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 11121 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 11122 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 11123 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 11124 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 11125 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 11126 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 11127 F__fpu_rsrv4 [224]int8 11128 F__fpu_reserved1 int32 11129 } 11130 } 11131 11132 type __darwin_mcontext_avx32 = struct { 11133 F__es struct { 11134 F__trapno uint16 11135 F__cpu uint16 11136 F__err uint32 11137 F__faultvaddr uint32 11138 } 11139 F__ss struct { 11140 F__eax uint32 11141 F__ebx uint32 11142 F__ecx uint32 11143 F__edx uint32 11144 F__edi uint32 11145 F__esi uint32 11146 F__ebp uint32 11147 F__esp uint32 11148 F__ss uint32 11149 F__eflags uint32 11150 F__eip uint32 11151 F__cs uint32 11152 F__ds uint32 11153 F__es uint32 11154 F__fs uint32 11155 F__gs uint32 11156 } 11157 F__fs struct { 11158 F__fpu_reserved [2]int32 11159 F__fpu_fcw struct { 11160 F__ccgo_pad1 [0]uint16 11161 F__invalid uint16 11162 } 11163 F__fpu_fsw struct { 11164 F__ccgo_pad1 [0]uint16 11165 F__invalid uint16 11166 } 11167 F__fpu_ftw uint8 11168 F__fpu_rsrv1 uint8 11169 F__fpu_fop uint16 11170 F__fpu_ip uint32 11171 F__fpu_cs uint16 11172 F__fpu_rsrv2 uint16 11173 F__fpu_dp uint32 11174 F__fpu_ds uint16 11175 F__fpu_rsrv3 uint16 11176 F__fpu_mxcsr uint32 11177 F__fpu_mxcsrmask uint32 11178 F__fpu_stmm0 struct { 11179 F__mmst_reg [10]int8 11180 F__mmst_rsrv [6]int8 11181 } 11182 F__fpu_stmm1 struct { 11183 F__mmst_reg [10]int8 11184 F__mmst_rsrv [6]int8 11185 } 11186 F__fpu_stmm2 struct { 11187 F__mmst_reg [10]int8 11188 F__mmst_rsrv [6]int8 11189 } 11190 F__fpu_stmm3 struct { 11191 F__mmst_reg [10]int8 11192 F__mmst_rsrv [6]int8 11193 } 11194 F__fpu_stmm4 struct { 11195 F__mmst_reg [10]int8 11196 F__mmst_rsrv [6]int8 11197 } 11198 F__fpu_stmm5 struct { 11199 F__mmst_reg [10]int8 11200 F__mmst_rsrv [6]int8 11201 } 11202 F__fpu_stmm6 struct { 11203 F__mmst_reg [10]int8 11204 F__mmst_rsrv [6]int8 11205 } 11206 F__fpu_stmm7 struct { 11207 F__mmst_reg [10]int8 11208 F__mmst_rsrv [6]int8 11209 } 11210 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 11211 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 11212 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 11213 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 11214 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 11215 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 11216 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 11217 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 11218 F__fpu_rsrv4 [224]int8 11219 F__fpu_reserved1 int32 11220 F__avx_reserved1 [64]int8 11221 F__fpu_ymmh0 struct{ F__xmm_reg [16]int8 } 11222 F__fpu_ymmh1 struct{ F__xmm_reg [16]int8 } 11223 F__fpu_ymmh2 struct{ F__xmm_reg [16]int8 } 11224 F__fpu_ymmh3 struct{ F__xmm_reg [16]int8 } 11225 F__fpu_ymmh4 struct{ F__xmm_reg [16]int8 } 11226 F__fpu_ymmh5 struct{ F__xmm_reg [16]int8 } 11227 F__fpu_ymmh6 struct{ F__xmm_reg [16]int8 } 11228 F__fpu_ymmh7 struct{ F__xmm_reg [16]int8 } 11229 } 11230 } 11231 11232 type __darwin_mcontext_avx512_32 = struct { 11233 F__es struct { 11234 F__trapno uint16 11235 F__cpu uint16 11236 F__err uint32 11237 F__faultvaddr uint32 11238 } 11239 F__ss struct { 11240 F__eax uint32 11241 F__ebx uint32 11242 F__ecx uint32 11243 F__edx uint32 11244 F__edi uint32 11245 F__esi uint32 11246 F__ebp uint32 11247 F__esp uint32 11248 F__ss uint32 11249 F__eflags uint32 11250 F__eip uint32 11251 F__cs uint32 11252 F__ds uint32 11253 F__es uint32 11254 F__fs uint32 11255 F__gs uint32 11256 } 11257 F__fs struct { 11258 F__fpu_reserved [2]int32 11259 F__fpu_fcw struct { 11260 F__ccgo_pad1 [0]uint16 11261 F__invalid uint16 11262 } 11263 F__fpu_fsw struct { 11264 F__ccgo_pad1 [0]uint16 11265 F__invalid uint16 11266 } 11267 F__fpu_ftw uint8 11268 F__fpu_rsrv1 uint8 11269 F__fpu_fop uint16 11270 F__fpu_ip uint32 11271 F__fpu_cs uint16 11272 F__fpu_rsrv2 uint16 11273 F__fpu_dp uint32 11274 F__fpu_ds uint16 11275 F__fpu_rsrv3 uint16 11276 F__fpu_mxcsr uint32 11277 F__fpu_mxcsrmask uint32 11278 F__fpu_stmm0 struct { 11279 F__mmst_reg [10]int8 11280 F__mmst_rsrv [6]int8 11281 } 11282 F__fpu_stmm1 struct { 11283 F__mmst_reg [10]int8 11284 F__mmst_rsrv [6]int8 11285 } 11286 F__fpu_stmm2 struct { 11287 F__mmst_reg [10]int8 11288 F__mmst_rsrv [6]int8 11289 } 11290 F__fpu_stmm3 struct { 11291 F__mmst_reg [10]int8 11292 F__mmst_rsrv [6]int8 11293 } 11294 F__fpu_stmm4 struct { 11295 F__mmst_reg [10]int8 11296 F__mmst_rsrv [6]int8 11297 } 11298 F__fpu_stmm5 struct { 11299 F__mmst_reg [10]int8 11300 F__mmst_rsrv [6]int8 11301 } 11302 F__fpu_stmm6 struct { 11303 F__mmst_reg [10]int8 11304 F__mmst_rsrv [6]int8 11305 } 11306 F__fpu_stmm7 struct { 11307 F__mmst_reg [10]int8 11308 F__mmst_rsrv [6]int8 11309 } 11310 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 11311 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 11312 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 11313 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 11314 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 11315 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 11316 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 11317 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 11318 F__fpu_rsrv4 [224]int8 11319 F__fpu_reserved1 int32 11320 F__avx_reserved1 [64]int8 11321 F__fpu_ymmh0 struct{ F__xmm_reg [16]int8 } 11322 F__fpu_ymmh1 struct{ F__xmm_reg [16]int8 } 11323 F__fpu_ymmh2 struct{ F__xmm_reg [16]int8 } 11324 F__fpu_ymmh3 struct{ F__xmm_reg [16]int8 } 11325 F__fpu_ymmh4 struct{ F__xmm_reg [16]int8 } 11326 F__fpu_ymmh5 struct{ F__xmm_reg [16]int8 } 11327 F__fpu_ymmh6 struct{ F__xmm_reg [16]int8 } 11328 F__fpu_ymmh7 struct{ F__xmm_reg [16]int8 } 11329 F__fpu_k0 struct{ F__opmask_reg [8]int8 } 11330 F__fpu_k1 struct{ F__opmask_reg [8]int8 } 11331 F__fpu_k2 struct{ F__opmask_reg [8]int8 } 11332 F__fpu_k3 struct{ F__opmask_reg [8]int8 } 11333 F__fpu_k4 struct{ F__opmask_reg [8]int8 } 11334 F__fpu_k5 struct{ F__opmask_reg [8]int8 } 11335 F__fpu_k6 struct{ F__opmask_reg [8]int8 } 11336 F__fpu_k7 struct{ F__opmask_reg [8]int8 } 11337 F__fpu_zmmh0 struct{ F__ymm_reg [32]int8 } 11338 F__fpu_zmmh1 struct{ F__ymm_reg [32]int8 } 11339 F__fpu_zmmh2 struct{ F__ymm_reg [32]int8 } 11340 F__fpu_zmmh3 struct{ F__ymm_reg [32]int8 } 11341 F__fpu_zmmh4 struct{ F__ymm_reg [32]int8 } 11342 F__fpu_zmmh5 struct{ F__ymm_reg [32]int8 } 11343 F__fpu_zmmh6 struct{ F__ymm_reg [32]int8 } 11344 F__fpu_zmmh7 struct{ F__ymm_reg [32]int8 } 11345 } 11346 } 11347 11348 type __darwin_mcontext64 = struct { 11349 F__es struct { 11350 F__trapno uint16 11351 F__cpu uint16 11352 F__err uint32 11353 F__faultvaddr uint64 11354 } 11355 F__ss struct { 11356 F__rax uint64 11357 F__rbx uint64 11358 F__rcx uint64 11359 F__rdx uint64 11360 F__rdi uint64 11361 F__rsi uint64 11362 F__rbp uint64 11363 F__rsp uint64 11364 F__r8 uint64 11365 F__r9 uint64 11366 F__r10 uint64 11367 F__r11 uint64 11368 F__r12 uint64 11369 F__r13 uint64 11370 F__r14 uint64 11371 F__r15 uint64 11372 F__rip uint64 11373 F__rflags uint64 11374 F__cs uint64 11375 F__fs uint64 11376 F__gs uint64 11377 } 11378 F__fs struct { 11379 F__fpu_reserved [2]int32 11380 F__fpu_fcw struct { 11381 F__ccgo_pad1 [0]uint16 11382 F__invalid uint16 11383 } 11384 F__fpu_fsw struct { 11385 F__ccgo_pad1 [0]uint16 11386 F__invalid uint16 11387 } 11388 F__fpu_ftw uint8 11389 F__fpu_rsrv1 uint8 11390 F__fpu_fop uint16 11391 F__fpu_ip uint32 11392 F__fpu_cs uint16 11393 F__fpu_rsrv2 uint16 11394 F__fpu_dp uint32 11395 F__fpu_ds uint16 11396 F__fpu_rsrv3 uint16 11397 F__fpu_mxcsr uint32 11398 F__fpu_mxcsrmask uint32 11399 F__fpu_stmm0 struct { 11400 F__mmst_reg [10]int8 11401 F__mmst_rsrv [6]int8 11402 } 11403 F__fpu_stmm1 struct { 11404 F__mmst_reg [10]int8 11405 F__mmst_rsrv [6]int8 11406 } 11407 F__fpu_stmm2 struct { 11408 F__mmst_reg [10]int8 11409 F__mmst_rsrv [6]int8 11410 } 11411 F__fpu_stmm3 struct { 11412 F__mmst_reg [10]int8 11413 F__mmst_rsrv [6]int8 11414 } 11415 F__fpu_stmm4 struct { 11416 F__mmst_reg [10]int8 11417 F__mmst_rsrv [6]int8 11418 } 11419 F__fpu_stmm5 struct { 11420 F__mmst_reg [10]int8 11421 F__mmst_rsrv [6]int8 11422 } 11423 F__fpu_stmm6 struct { 11424 F__mmst_reg [10]int8 11425 F__mmst_rsrv [6]int8 11426 } 11427 F__fpu_stmm7 struct { 11428 F__mmst_reg [10]int8 11429 F__mmst_rsrv [6]int8 11430 } 11431 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 11432 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 11433 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 11434 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 11435 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 11436 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 11437 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 11438 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 11439 F__fpu_xmm8 struct{ F__xmm_reg [16]int8 } 11440 F__fpu_xmm9 struct{ F__xmm_reg [16]int8 } 11441 F__fpu_xmm10 struct{ F__xmm_reg [16]int8 } 11442 F__fpu_xmm11 struct{ F__xmm_reg [16]int8 } 11443 F__fpu_xmm12 struct{ F__xmm_reg [16]int8 } 11444 F__fpu_xmm13 struct{ F__xmm_reg [16]int8 } 11445 F__fpu_xmm14 struct{ F__xmm_reg [16]int8 } 11446 F__fpu_xmm15 struct{ F__xmm_reg [16]int8 } 11447 F__fpu_rsrv4 [96]int8 11448 F__fpu_reserved1 int32 11449 } 11450 F__ccgo_pad1 [4]byte 11451 } 11452 11453 type __darwin_mcontext64_full = struct { 11454 F__es struct { 11455 F__trapno uint16 11456 F__cpu uint16 11457 F__err uint32 11458 F__faultvaddr uint64 11459 } 11460 F__ss struct { 11461 F__ss64 struct { 11462 F__rax uint64 11463 F__rbx uint64 11464 F__rcx uint64 11465 F__rdx uint64 11466 F__rdi uint64 11467 F__rsi uint64 11468 F__rbp uint64 11469 F__rsp uint64 11470 F__r8 uint64 11471 F__r9 uint64 11472 F__r10 uint64 11473 F__r11 uint64 11474 F__r12 uint64 11475 F__r13 uint64 11476 F__r14 uint64 11477 F__r15 uint64 11478 F__rip uint64 11479 F__rflags uint64 11480 F__cs uint64 11481 F__fs uint64 11482 F__gs uint64 11483 } 11484 F__ds uint64 11485 F__es uint64 11486 F__ss uint64 11487 F__gsbase uint64 11488 } 11489 F__fs struct { 11490 F__fpu_reserved [2]int32 11491 F__fpu_fcw struct { 11492 F__ccgo_pad1 [0]uint16 11493 F__invalid uint16 11494 } 11495 F__fpu_fsw struct { 11496 F__ccgo_pad1 [0]uint16 11497 F__invalid uint16 11498 } 11499 F__fpu_ftw uint8 11500 F__fpu_rsrv1 uint8 11501 F__fpu_fop uint16 11502 F__fpu_ip uint32 11503 F__fpu_cs uint16 11504 F__fpu_rsrv2 uint16 11505 F__fpu_dp uint32 11506 F__fpu_ds uint16 11507 F__fpu_rsrv3 uint16 11508 F__fpu_mxcsr uint32 11509 F__fpu_mxcsrmask uint32 11510 F__fpu_stmm0 struct { 11511 F__mmst_reg [10]int8 11512 F__mmst_rsrv [6]int8 11513 } 11514 F__fpu_stmm1 struct { 11515 F__mmst_reg [10]int8 11516 F__mmst_rsrv [6]int8 11517 } 11518 F__fpu_stmm2 struct { 11519 F__mmst_reg [10]int8 11520 F__mmst_rsrv [6]int8 11521 } 11522 F__fpu_stmm3 struct { 11523 F__mmst_reg [10]int8 11524 F__mmst_rsrv [6]int8 11525 } 11526 F__fpu_stmm4 struct { 11527 F__mmst_reg [10]int8 11528 F__mmst_rsrv [6]int8 11529 } 11530 F__fpu_stmm5 struct { 11531 F__mmst_reg [10]int8 11532 F__mmst_rsrv [6]int8 11533 } 11534 F__fpu_stmm6 struct { 11535 F__mmst_reg [10]int8 11536 F__mmst_rsrv [6]int8 11537 } 11538 F__fpu_stmm7 struct { 11539 F__mmst_reg [10]int8 11540 F__mmst_rsrv [6]int8 11541 } 11542 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 11543 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 11544 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 11545 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 11546 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 11547 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 11548 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 11549 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 11550 F__fpu_xmm8 struct{ F__xmm_reg [16]int8 } 11551 F__fpu_xmm9 struct{ F__xmm_reg [16]int8 } 11552 F__fpu_xmm10 struct{ F__xmm_reg [16]int8 } 11553 F__fpu_xmm11 struct{ F__xmm_reg [16]int8 } 11554 F__fpu_xmm12 struct{ F__xmm_reg [16]int8 } 11555 F__fpu_xmm13 struct{ F__xmm_reg [16]int8 } 11556 F__fpu_xmm14 struct{ F__xmm_reg [16]int8 } 11557 F__fpu_xmm15 struct{ F__xmm_reg [16]int8 } 11558 F__fpu_rsrv4 [96]int8 11559 F__fpu_reserved1 int32 11560 } 11561 F__ccgo_pad1 [4]byte 11562 } 11563 11564 type __darwin_mcontext_avx64 = struct { 11565 F__es struct { 11566 F__trapno uint16 11567 F__cpu uint16 11568 F__err uint32 11569 F__faultvaddr uint64 11570 } 11571 F__ss struct { 11572 F__rax uint64 11573 F__rbx uint64 11574 F__rcx uint64 11575 F__rdx uint64 11576 F__rdi uint64 11577 F__rsi uint64 11578 F__rbp uint64 11579 F__rsp uint64 11580 F__r8 uint64 11581 F__r9 uint64 11582 F__r10 uint64 11583 F__r11 uint64 11584 F__r12 uint64 11585 F__r13 uint64 11586 F__r14 uint64 11587 F__r15 uint64 11588 F__rip uint64 11589 F__rflags uint64 11590 F__cs uint64 11591 F__fs uint64 11592 F__gs uint64 11593 } 11594 F__fs struct { 11595 F__fpu_reserved [2]int32 11596 F__fpu_fcw struct { 11597 F__ccgo_pad1 [0]uint16 11598 F__invalid uint16 11599 } 11600 F__fpu_fsw struct { 11601 F__ccgo_pad1 [0]uint16 11602 F__invalid uint16 11603 } 11604 F__fpu_ftw uint8 11605 F__fpu_rsrv1 uint8 11606 F__fpu_fop uint16 11607 F__fpu_ip uint32 11608 F__fpu_cs uint16 11609 F__fpu_rsrv2 uint16 11610 F__fpu_dp uint32 11611 F__fpu_ds uint16 11612 F__fpu_rsrv3 uint16 11613 F__fpu_mxcsr uint32 11614 F__fpu_mxcsrmask uint32 11615 F__fpu_stmm0 struct { 11616 F__mmst_reg [10]int8 11617 F__mmst_rsrv [6]int8 11618 } 11619 F__fpu_stmm1 struct { 11620 F__mmst_reg [10]int8 11621 F__mmst_rsrv [6]int8 11622 } 11623 F__fpu_stmm2 struct { 11624 F__mmst_reg [10]int8 11625 F__mmst_rsrv [6]int8 11626 } 11627 F__fpu_stmm3 struct { 11628 F__mmst_reg [10]int8 11629 F__mmst_rsrv [6]int8 11630 } 11631 F__fpu_stmm4 struct { 11632 F__mmst_reg [10]int8 11633 F__mmst_rsrv [6]int8 11634 } 11635 F__fpu_stmm5 struct { 11636 F__mmst_reg [10]int8 11637 F__mmst_rsrv [6]int8 11638 } 11639 F__fpu_stmm6 struct { 11640 F__mmst_reg [10]int8 11641 F__mmst_rsrv [6]int8 11642 } 11643 F__fpu_stmm7 struct { 11644 F__mmst_reg [10]int8 11645 F__mmst_rsrv [6]int8 11646 } 11647 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 11648 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 11649 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 11650 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 11651 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 11652 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 11653 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 11654 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 11655 F__fpu_xmm8 struct{ F__xmm_reg [16]int8 } 11656 F__fpu_xmm9 struct{ F__xmm_reg [16]int8 } 11657 F__fpu_xmm10 struct{ F__xmm_reg [16]int8 } 11658 F__fpu_xmm11 struct{ F__xmm_reg [16]int8 } 11659 F__fpu_xmm12 struct{ F__xmm_reg [16]int8 } 11660 F__fpu_xmm13 struct{ F__xmm_reg [16]int8 } 11661 F__fpu_xmm14 struct{ F__xmm_reg [16]int8 } 11662 F__fpu_xmm15 struct{ F__xmm_reg [16]int8 } 11663 F__fpu_rsrv4 [96]int8 11664 F__fpu_reserved1 int32 11665 F__avx_reserved1 [64]int8 11666 F__fpu_ymmh0 struct{ F__xmm_reg [16]int8 } 11667 F__fpu_ymmh1 struct{ F__xmm_reg [16]int8 } 11668 F__fpu_ymmh2 struct{ F__xmm_reg [16]int8 } 11669 F__fpu_ymmh3 struct{ F__xmm_reg [16]int8 } 11670 F__fpu_ymmh4 struct{ F__xmm_reg [16]int8 } 11671 F__fpu_ymmh5 struct{ F__xmm_reg [16]int8 } 11672 F__fpu_ymmh6 struct{ F__xmm_reg [16]int8 } 11673 F__fpu_ymmh7 struct{ F__xmm_reg [16]int8 } 11674 F__fpu_ymmh8 struct{ F__xmm_reg [16]int8 } 11675 F__fpu_ymmh9 struct{ F__xmm_reg [16]int8 } 11676 F__fpu_ymmh10 struct{ F__xmm_reg [16]int8 } 11677 F__fpu_ymmh11 struct{ F__xmm_reg [16]int8 } 11678 F__fpu_ymmh12 struct{ F__xmm_reg [16]int8 } 11679 F__fpu_ymmh13 struct{ F__xmm_reg [16]int8 } 11680 F__fpu_ymmh14 struct{ F__xmm_reg [16]int8 } 11681 F__fpu_ymmh15 struct{ F__xmm_reg [16]int8 } 11682 } 11683 F__ccgo_pad1 [4]byte 11684 } 11685 11686 type __darwin_mcontext_avx64_full = struct { 11687 F__es struct { 11688 F__trapno uint16 11689 F__cpu uint16 11690 F__err uint32 11691 F__faultvaddr uint64 11692 } 11693 F__ss struct { 11694 F__ss64 struct { 11695 F__rax uint64 11696 F__rbx uint64 11697 F__rcx uint64 11698 F__rdx uint64 11699 F__rdi uint64 11700 F__rsi uint64 11701 F__rbp uint64 11702 F__rsp uint64 11703 F__r8 uint64 11704 F__r9 uint64 11705 F__r10 uint64 11706 F__r11 uint64 11707 F__r12 uint64 11708 F__r13 uint64 11709 F__r14 uint64 11710 F__r15 uint64 11711 F__rip uint64 11712 F__rflags uint64 11713 F__cs uint64 11714 F__fs uint64 11715 F__gs uint64 11716 } 11717 F__ds uint64 11718 F__es uint64 11719 F__ss uint64 11720 F__gsbase uint64 11721 } 11722 F__fs struct { 11723 F__fpu_reserved [2]int32 11724 F__fpu_fcw struct { 11725 F__ccgo_pad1 [0]uint16 11726 F__invalid uint16 11727 } 11728 F__fpu_fsw struct { 11729 F__ccgo_pad1 [0]uint16 11730 F__invalid uint16 11731 } 11732 F__fpu_ftw uint8 11733 F__fpu_rsrv1 uint8 11734 F__fpu_fop uint16 11735 F__fpu_ip uint32 11736 F__fpu_cs uint16 11737 F__fpu_rsrv2 uint16 11738 F__fpu_dp uint32 11739 F__fpu_ds uint16 11740 F__fpu_rsrv3 uint16 11741 F__fpu_mxcsr uint32 11742 F__fpu_mxcsrmask uint32 11743 F__fpu_stmm0 struct { 11744 F__mmst_reg [10]int8 11745 F__mmst_rsrv [6]int8 11746 } 11747 F__fpu_stmm1 struct { 11748 F__mmst_reg [10]int8 11749 F__mmst_rsrv [6]int8 11750 } 11751 F__fpu_stmm2 struct { 11752 F__mmst_reg [10]int8 11753 F__mmst_rsrv [6]int8 11754 } 11755 F__fpu_stmm3 struct { 11756 F__mmst_reg [10]int8 11757 F__mmst_rsrv [6]int8 11758 } 11759 F__fpu_stmm4 struct { 11760 F__mmst_reg [10]int8 11761 F__mmst_rsrv [6]int8 11762 } 11763 F__fpu_stmm5 struct { 11764 F__mmst_reg [10]int8 11765 F__mmst_rsrv [6]int8 11766 } 11767 F__fpu_stmm6 struct { 11768 F__mmst_reg [10]int8 11769 F__mmst_rsrv [6]int8 11770 } 11771 F__fpu_stmm7 struct { 11772 F__mmst_reg [10]int8 11773 F__mmst_rsrv [6]int8 11774 } 11775 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 11776 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 11777 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 11778 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 11779 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 11780 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 11781 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 11782 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 11783 F__fpu_xmm8 struct{ F__xmm_reg [16]int8 } 11784 F__fpu_xmm9 struct{ F__xmm_reg [16]int8 } 11785 F__fpu_xmm10 struct{ F__xmm_reg [16]int8 } 11786 F__fpu_xmm11 struct{ F__xmm_reg [16]int8 } 11787 F__fpu_xmm12 struct{ F__xmm_reg [16]int8 } 11788 F__fpu_xmm13 struct{ F__xmm_reg [16]int8 } 11789 F__fpu_xmm14 struct{ F__xmm_reg [16]int8 } 11790 F__fpu_xmm15 struct{ F__xmm_reg [16]int8 } 11791 F__fpu_rsrv4 [96]int8 11792 F__fpu_reserved1 int32 11793 F__avx_reserved1 [64]int8 11794 F__fpu_ymmh0 struct{ F__xmm_reg [16]int8 } 11795 F__fpu_ymmh1 struct{ F__xmm_reg [16]int8 } 11796 F__fpu_ymmh2 struct{ F__xmm_reg [16]int8 } 11797 F__fpu_ymmh3 struct{ F__xmm_reg [16]int8 } 11798 F__fpu_ymmh4 struct{ F__xmm_reg [16]int8 } 11799 F__fpu_ymmh5 struct{ F__xmm_reg [16]int8 } 11800 F__fpu_ymmh6 struct{ F__xmm_reg [16]int8 } 11801 F__fpu_ymmh7 struct{ F__xmm_reg [16]int8 } 11802 F__fpu_ymmh8 struct{ F__xmm_reg [16]int8 } 11803 F__fpu_ymmh9 struct{ F__xmm_reg [16]int8 } 11804 F__fpu_ymmh10 struct{ F__xmm_reg [16]int8 } 11805 F__fpu_ymmh11 struct{ F__xmm_reg [16]int8 } 11806 F__fpu_ymmh12 struct{ F__xmm_reg [16]int8 } 11807 F__fpu_ymmh13 struct{ F__xmm_reg [16]int8 } 11808 F__fpu_ymmh14 struct{ F__xmm_reg [16]int8 } 11809 F__fpu_ymmh15 struct{ F__xmm_reg [16]int8 } 11810 } 11811 F__ccgo_pad1 [4]byte 11812 } 11813 11814 type __darwin_mcontext_avx512_64 = struct { 11815 F__es struct { 11816 F__trapno uint16 11817 F__cpu uint16 11818 F__err uint32 11819 F__faultvaddr uint64 11820 } 11821 F__ss struct { 11822 F__rax uint64 11823 F__rbx uint64 11824 F__rcx uint64 11825 F__rdx uint64 11826 F__rdi uint64 11827 F__rsi uint64 11828 F__rbp uint64 11829 F__rsp uint64 11830 F__r8 uint64 11831 F__r9 uint64 11832 F__r10 uint64 11833 F__r11 uint64 11834 F__r12 uint64 11835 F__r13 uint64 11836 F__r14 uint64 11837 F__r15 uint64 11838 F__rip uint64 11839 F__rflags uint64 11840 F__cs uint64 11841 F__fs uint64 11842 F__gs uint64 11843 } 11844 F__fs struct { 11845 F__fpu_reserved [2]int32 11846 F__fpu_fcw struct { 11847 F__ccgo_pad1 [0]uint16 11848 F__invalid uint16 11849 } 11850 F__fpu_fsw struct { 11851 F__ccgo_pad1 [0]uint16 11852 F__invalid uint16 11853 } 11854 F__fpu_ftw uint8 11855 F__fpu_rsrv1 uint8 11856 F__fpu_fop uint16 11857 F__fpu_ip uint32 11858 F__fpu_cs uint16 11859 F__fpu_rsrv2 uint16 11860 F__fpu_dp uint32 11861 F__fpu_ds uint16 11862 F__fpu_rsrv3 uint16 11863 F__fpu_mxcsr uint32 11864 F__fpu_mxcsrmask uint32 11865 F__fpu_stmm0 struct { 11866 F__mmst_reg [10]int8 11867 F__mmst_rsrv [6]int8 11868 } 11869 F__fpu_stmm1 struct { 11870 F__mmst_reg [10]int8 11871 F__mmst_rsrv [6]int8 11872 } 11873 F__fpu_stmm2 struct { 11874 F__mmst_reg [10]int8 11875 F__mmst_rsrv [6]int8 11876 } 11877 F__fpu_stmm3 struct { 11878 F__mmst_reg [10]int8 11879 F__mmst_rsrv [6]int8 11880 } 11881 F__fpu_stmm4 struct { 11882 F__mmst_reg [10]int8 11883 F__mmst_rsrv [6]int8 11884 } 11885 F__fpu_stmm5 struct { 11886 F__mmst_reg [10]int8 11887 F__mmst_rsrv [6]int8 11888 } 11889 F__fpu_stmm6 struct { 11890 F__mmst_reg [10]int8 11891 F__mmst_rsrv [6]int8 11892 } 11893 F__fpu_stmm7 struct { 11894 F__mmst_reg [10]int8 11895 F__mmst_rsrv [6]int8 11896 } 11897 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 11898 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 11899 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 11900 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 11901 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 11902 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 11903 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 11904 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 11905 F__fpu_xmm8 struct{ F__xmm_reg [16]int8 } 11906 F__fpu_xmm9 struct{ F__xmm_reg [16]int8 } 11907 F__fpu_xmm10 struct{ F__xmm_reg [16]int8 } 11908 F__fpu_xmm11 struct{ F__xmm_reg [16]int8 } 11909 F__fpu_xmm12 struct{ F__xmm_reg [16]int8 } 11910 F__fpu_xmm13 struct{ F__xmm_reg [16]int8 } 11911 F__fpu_xmm14 struct{ F__xmm_reg [16]int8 } 11912 F__fpu_xmm15 struct{ F__xmm_reg [16]int8 } 11913 F__fpu_rsrv4 [96]int8 11914 F__fpu_reserved1 int32 11915 F__avx_reserved1 [64]int8 11916 F__fpu_ymmh0 struct{ F__xmm_reg [16]int8 } 11917 F__fpu_ymmh1 struct{ F__xmm_reg [16]int8 } 11918 F__fpu_ymmh2 struct{ F__xmm_reg [16]int8 } 11919 F__fpu_ymmh3 struct{ F__xmm_reg [16]int8 } 11920 F__fpu_ymmh4 struct{ F__xmm_reg [16]int8 } 11921 F__fpu_ymmh5 struct{ F__xmm_reg [16]int8 } 11922 F__fpu_ymmh6 struct{ F__xmm_reg [16]int8 } 11923 F__fpu_ymmh7 struct{ F__xmm_reg [16]int8 } 11924 F__fpu_ymmh8 struct{ F__xmm_reg [16]int8 } 11925 F__fpu_ymmh9 struct{ F__xmm_reg [16]int8 } 11926 F__fpu_ymmh10 struct{ F__xmm_reg [16]int8 } 11927 F__fpu_ymmh11 struct{ F__xmm_reg [16]int8 } 11928 F__fpu_ymmh12 struct{ F__xmm_reg [16]int8 } 11929 F__fpu_ymmh13 struct{ F__xmm_reg [16]int8 } 11930 F__fpu_ymmh14 struct{ F__xmm_reg [16]int8 } 11931 F__fpu_ymmh15 struct{ F__xmm_reg [16]int8 } 11932 F__fpu_k0 struct{ F__opmask_reg [8]int8 } 11933 F__fpu_k1 struct{ F__opmask_reg [8]int8 } 11934 F__fpu_k2 struct{ F__opmask_reg [8]int8 } 11935 F__fpu_k3 struct{ F__opmask_reg [8]int8 } 11936 F__fpu_k4 struct{ F__opmask_reg [8]int8 } 11937 F__fpu_k5 struct{ F__opmask_reg [8]int8 } 11938 F__fpu_k6 struct{ F__opmask_reg [8]int8 } 11939 F__fpu_k7 struct{ F__opmask_reg [8]int8 } 11940 F__fpu_zmmh0 struct{ F__ymm_reg [32]int8 } 11941 F__fpu_zmmh1 struct{ F__ymm_reg [32]int8 } 11942 F__fpu_zmmh2 struct{ F__ymm_reg [32]int8 } 11943 F__fpu_zmmh3 struct{ F__ymm_reg [32]int8 } 11944 F__fpu_zmmh4 struct{ F__ymm_reg [32]int8 } 11945 F__fpu_zmmh5 struct{ F__ymm_reg [32]int8 } 11946 F__fpu_zmmh6 struct{ F__ymm_reg [32]int8 } 11947 F__fpu_zmmh7 struct{ F__ymm_reg [32]int8 } 11948 F__fpu_zmmh8 struct{ F__ymm_reg [32]int8 } 11949 F__fpu_zmmh9 struct{ F__ymm_reg [32]int8 } 11950 F__fpu_zmmh10 struct{ F__ymm_reg [32]int8 } 11951 F__fpu_zmmh11 struct{ F__ymm_reg [32]int8 } 11952 F__fpu_zmmh12 struct{ F__ymm_reg [32]int8 } 11953 F__fpu_zmmh13 struct{ F__ymm_reg [32]int8 } 11954 F__fpu_zmmh14 struct{ F__ymm_reg [32]int8 } 11955 F__fpu_zmmh15 struct{ F__ymm_reg [32]int8 } 11956 F__fpu_zmm16 struct{ F__zmm_reg [64]int8 } 11957 F__fpu_zmm17 struct{ F__zmm_reg [64]int8 } 11958 F__fpu_zmm18 struct{ F__zmm_reg [64]int8 } 11959 F__fpu_zmm19 struct{ F__zmm_reg [64]int8 } 11960 F__fpu_zmm20 struct{ F__zmm_reg [64]int8 } 11961 F__fpu_zmm21 struct{ F__zmm_reg [64]int8 } 11962 F__fpu_zmm22 struct{ F__zmm_reg [64]int8 } 11963 F__fpu_zmm23 struct{ F__zmm_reg [64]int8 } 11964 F__fpu_zmm24 struct{ F__zmm_reg [64]int8 } 11965 F__fpu_zmm25 struct{ F__zmm_reg [64]int8 } 11966 F__fpu_zmm26 struct{ F__zmm_reg [64]int8 } 11967 F__fpu_zmm27 struct{ F__zmm_reg [64]int8 } 11968 F__fpu_zmm28 struct{ F__zmm_reg [64]int8 } 11969 F__fpu_zmm29 struct{ F__zmm_reg [64]int8 } 11970 F__fpu_zmm30 struct{ F__zmm_reg [64]int8 } 11971 F__fpu_zmm31 struct{ F__zmm_reg [64]int8 } 11972 } 11973 F__ccgo_pad1 [4]byte 11974 } 11975 11976 type __darwin_mcontext_avx512_64_full = struct { 11977 F__es struct { 11978 F__trapno uint16 11979 F__cpu uint16 11980 F__err uint32 11981 F__faultvaddr uint64 11982 } 11983 F__ss struct { 11984 F__ss64 struct { 11985 F__rax uint64 11986 F__rbx uint64 11987 F__rcx uint64 11988 F__rdx uint64 11989 F__rdi uint64 11990 F__rsi uint64 11991 F__rbp uint64 11992 F__rsp uint64 11993 F__r8 uint64 11994 F__r9 uint64 11995 F__r10 uint64 11996 F__r11 uint64 11997 F__r12 uint64 11998 F__r13 uint64 11999 F__r14 uint64 12000 F__r15 uint64 12001 F__rip uint64 12002 F__rflags uint64 12003 F__cs uint64 12004 F__fs uint64 12005 F__gs uint64 12006 } 12007 F__ds uint64 12008 F__es uint64 12009 F__ss uint64 12010 F__gsbase uint64 12011 } 12012 F__fs struct { 12013 F__fpu_reserved [2]int32 12014 F__fpu_fcw struct { 12015 F__ccgo_pad1 [0]uint16 12016 F__invalid uint16 12017 } 12018 F__fpu_fsw struct { 12019 F__ccgo_pad1 [0]uint16 12020 F__invalid uint16 12021 } 12022 F__fpu_ftw uint8 12023 F__fpu_rsrv1 uint8 12024 F__fpu_fop uint16 12025 F__fpu_ip uint32 12026 F__fpu_cs uint16 12027 F__fpu_rsrv2 uint16 12028 F__fpu_dp uint32 12029 F__fpu_ds uint16 12030 F__fpu_rsrv3 uint16 12031 F__fpu_mxcsr uint32 12032 F__fpu_mxcsrmask uint32 12033 F__fpu_stmm0 struct { 12034 F__mmst_reg [10]int8 12035 F__mmst_rsrv [6]int8 12036 } 12037 F__fpu_stmm1 struct { 12038 F__mmst_reg [10]int8 12039 F__mmst_rsrv [6]int8 12040 } 12041 F__fpu_stmm2 struct { 12042 F__mmst_reg [10]int8 12043 F__mmst_rsrv [6]int8 12044 } 12045 F__fpu_stmm3 struct { 12046 F__mmst_reg [10]int8 12047 F__mmst_rsrv [6]int8 12048 } 12049 F__fpu_stmm4 struct { 12050 F__mmst_reg [10]int8 12051 F__mmst_rsrv [6]int8 12052 } 12053 F__fpu_stmm5 struct { 12054 F__mmst_reg [10]int8 12055 F__mmst_rsrv [6]int8 12056 } 12057 F__fpu_stmm6 struct { 12058 F__mmst_reg [10]int8 12059 F__mmst_rsrv [6]int8 12060 } 12061 F__fpu_stmm7 struct { 12062 F__mmst_reg [10]int8 12063 F__mmst_rsrv [6]int8 12064 } 12065 F__fpu_xmm0 struct{ F__xmm_reg [16]int8 } 12066 F__fpu_xmm1 struct{ F__xmm_reg [16]int8 } 12067 F__fpu_xmm2 struct{ F__xmm_reg [16]int8 } 12068 F__fpu_xmm3 struct{ F__xmm_reg [16]int8 } 12069 F__fpu_xmm4 struct{ F__xmm_reg [16]int8 } 12070 F__fpu_xmm5 struct{ F__xmm_reg [16]int8 } 12071 F__fpu_xmm6 struct{ F__xmm_reg [16]int8 } 12072 F__fpu_xmm7 struct{ F__xmm_reg [16]int8 } 12073 F__fpu_xmm8 struct{ F__xmm_reg [16]int8 } 12074 F__fpu_xmm9 struct{ F__xmm_reg [16]int8 } 12075 F__fpu_xmm10 struct{ F__xmm_reg [16]int8 } 12076 F__fpu_xmm11 struct{ F__xmm_reg [16]int8 } 12077 F__fpu_xmm12 struct{ F__xmm_reg [16]int8 } 12078 F__fpu_xmm13 struct{ F__xmm_reg [16]int8 } 12079 F__fpu_xmm14 struct{ F__xmm_reg [16]int8 } 12080 F__fpu_xmm15 struct{ F__xmm_reg [16]int8 } 12081 F__fpu_rsrv4 [96]int8 12082 F__fpu_reserved1 int32 12083 F__avx_reserved1 [64]int8 12084 F__fpu_ymmh0 struct{ F__xmm_reg [16]int8 } 12085 F__fpu_ymmh1 struct{ F__xmm_reg [16]int8 } 12086 F__fpu_ymmh2 struct{ F__xmm_reg [16]int8 } 12087 F__fpu_ymmh3 struct{ F__xmm_reg [16]int8 } 12088 F__fpu_ymmh4 struct{ F__xmm_reg [16]int8 } 12089 F__fpu_ymmh5 struct{ F__xmm_reg [16]int8 } 12090 F__fpu_ymmh6 struct{ F__xmm_reg [16]int8 } 12091 F__fpu_ymmh7 struct{ F__xmm_reg [16]int8 } 12092 F__fpu_ymmh8 struct{ F__xmm_reg [16]int8 } 12093 F__fpu_ymmh9 struct{ F__xmm_reg [16]int8 } 12094 F__fpu_ymmh10 struct{ F__xmm_reg [16]int8 } 12095 F__fpu_ymmh11 struct{ F__xmm_reg [16]int8 } 12096 F__fpu_ymmh12 struct{ F__xmm_reg [16]int8 } 12097 F__fpu_ymmh13 struct{ F__xmm_reg [16]int8 } 12098 F__fpu_ymmh14 struct{ F__xmm_reg [16]int8 } 12099 F__fpu_ymmh15 struct{ F__xmm_reg [16]int8 } 12100 F__fpu_k0 struct{ F__opmask_reg [8]int8 } 12101 F__fpu_k1 struct{ F__opmask_reg [8]int8 } 12102 F__fpu_k2 struct{ F__opmask_reg [8]int8 } 12103 F__fpu_k3 struct{ F__opmask_reg [8]int8 } 12104 F__fpu_k4 struct{ F__opmask_reg [8]int8 } 12105 F__fpu_k5 struct{ F__opmask_reg [8]int8 } 12106 F__fpu_k6 struct{ F__opmask_reg [8]int8 } 12107 F__fpu_k7 struct{ F__opmask_reg [8]int8 } 12108 F__fpu_zmmh0 struct{ F__ymm_reg [32]int8 } 12109 F__fpu_zmmh1 struct{ F__ymm_reg [32]int8 } 12110 F__fpu_zmmh2 struct{ F__ymm_reg [32]int8 } 12111 F__fpu_zmmh3 struct{ F__ymm_reg [32]int8 } 12112 F__fpu_zmmh4 struct{ F__ymm_reg [32]int8 } 12113 F__fpu_zmmh5 struct{ F__ymm_reg [32]int8 } 12114 F__fpu_zmmh6 struct{ F__ymm_reg [32]int8 } 12115 F__fpu_zmmh7 struct{ F__ymm_reg [32]int8 } 12116 F__fpu_zmmh8 struct{ F__ymm_reg [32]int8 } 12117 F__fpu_zmmh9 struct{ F__ymm_reg [32]int8 } 12118 F__fpu_zmmh10 struct{ F__ymm_reg [32]int8 } 12119 F__fpu_zmmh11 struct{ F__ymm_reg [32]int8 } 12120 F__fpu_zmmh12 struct{ F__ymm_reg [32]int8 } 12121 F__fpu_zmmh13 struct{ F__ymm_reg [32]int8 } 12122 F__fpu_zmmh14 struct{ F__ymm_reg [32]int8 } 12123 F__fpu_zmmh15 struct{ F__ymm_reg [32]int8 } 12124 F__fpu_zmm16 struct{ F__zmm_reg [64]int8 } 12125 F__fpu_zmm17 struct{ F__zmm_reg [64]int8 } 12126 F__fpu_zmm18 struct{ F__zmm_reg [64]int8 } 12127 F__fpu_zmm19 struct{ F__zmm_reg [64]int8 } 12128 F__fpu_zmm20 struct{ F__zmm_reg [64]int8 } 12129 F__fpu_zmm21 struct{ F__zmm_reg [64]int8 } 12130 F__fpu_zmm22 struct{ F__zmm_reg [64]int8 } 12131 F__fpu_zmm23 struct{ F__zmm_reg [64]int8 } 12132 F__fpu_zmm24 struct{ F__zmm_reg [64]int8 } 12133 F__fpu_zmm25 struct{ F__zmm_reg [64]int8 } 12134 F__fpu_zmm26 struct{ F__zmm_reg [64]int8 } 12135 F__fpu_zmm27 struct{ F__zmm_reg [64]int8 } 12136 F__fpu_zmm28 struct{ F__zmm_reg [64]int8 } 12137 F__fpu_zmm29 struct{ F__zmm_reg [64]int8 } 12138 F__fpu_zmm30 struct{ F__zmm_reg [64]int8 } 12139 F__fpu_zmm31 struct{ F__zmm_reg [64]int8 } 12140 } 12141 F__ccgo_pad1 [4]byte 12142 } 12143 12144 type mcontext_t = uintptr 12145 12146 type pthread_attr_t = _opaque_pthread_attr_t 12147 12148 type __darwin_sigaltstack = struct { 12149 Fss_sp uintptr 12150 Fss_size uint64 12151 Fss_flags int32 12152 F__ccgo_pad1 [4]byte 12153 } 12154 12155 type stack_t = __darwin_sigaltstack 12156 12157 type __darwin_ucontext = struct { 12158 Fuc_onstack int32 12159 Fuc_sigmask uint32 12160 Fuc_stack struct { 12161 Fss_sp uintptr 12162 Fss_size uint64 12163 Fss_flags int32 12164 F__ccgo_pad1 [4]byte 12165 } 12166 Fuc_link uintptr 12167 Fuc_mcsize uint64 12168 Fuc_mcontext uintptr 12169 } 12170 12171 type ucontext_t = __darwin_ucontext 12172 12173 type sigset_t = uint32 12174 12175 type uid_t = uint32 12176 12177 type sigval = struct { 12178 F__ccgo_pad1 [0]uint64 12179 Fsival_int int32 12180 F__ccgo_pad2 [4]byte 12181 } 12182 12183 type sigevent = struct { 12184 Fsigev_notify int32 12185 Fsigev_signo int32 12186 Fsigev_value struct { 12187 F__ccgo_pad1 [0]uint64 12188 Fsival_int int32 12189 F__ccgo_pad2 [4]byte 12190 } 12191 Fsigev_notify_function uintptr 12192 Fsigev_notify_attributes uintptr 12193 } 12194 12195 type __siginfo = struct { 12196 Fsi_signo int32 12197 Fsi_errno int32 12198 Fsi_code int32 12199 Fsi_pid pid_t 12200 Fsi_uid uid_t 12201 Fsi_status int32 12202 Fsi_addr uintptr 12203 Fsi_value struct { 12204 F__ccgo_pad1 [0]uint64 12205 Fsival_int int32 12206 F__ccgo_pad2 [4]byte 12207 } 12208 Fsi_band int64 12209 F__pad [7]uint64 12210 } 12211 12212 type siginfo_t = __siginfo 12213 12214 type __sigaction_u = struct{ F__sa_handler uintptr } 12215 12216 type __sigaction = struct { 12217 F__sigaction_u struct{ F__sa_handler uintptr } 12218 Fsa_tramp uintptr 12219 Fsa_mask sigset_t 12220 Fsa_flags int32 12221 } 12222 12223 type sigaction = struct { 12224 F__sigaction_u struct{ F__sa_handler uintptr } 12225 Fsa_mask sigset_t 12226 Fsa_flags int32 12227 } 12228 12229 type sig_t = uintptr 12230 12231 type sigvec = struct { 12232 Fsv_handler uintptr 12233 Fsv_mask int32 12234 Fsv_flags int32 12235 } 12236 12237 type sigstack = struct { 12238 Fss_sp uintptr 12239 Fss_onstack int32 12240 F__ccgo_pad1 [4]byte 12241 } 12242 12243 type uint64_t = uint64 12244 12245 type int_least64_t = int64_t 12246 type uint_least64_t = uint64_t 12247 type int_fast64_t = int64_t 12248 type uint_fast64_t = uint64_t 12249 12250 type uint32_t = uint32 12251 12252 type int_least32_t = int32_t 12253 type uint_least32_t = uint32_t 12254 type int_fast32_t = int32_t 12255 type uint_fast32_t = uint32_t 12256 type uint16_t = uint16 12257 12258 type int_least16_t = int16_t 12259 type uint_least16_t = uint16_t 12260 type int_fast16_t = int16_t 12261 type uint_fast16_t = uint16_t 12262 type uint8_t = uint8 12263 12264 type int_least8_t = int8_t 12265 type uint_least8_t = uint8_t 12266 type int_fast8_t = int8_t 12267 type uint_fast8_t = uint8_t 12268 12269 type intmax_t = int64 12270 type uintmax_t = uint64 12271 12272 type timeval = struct { 12273 Ftv_sec int64 12274 Ftv_usec int32 12275 F__ccgo_pad1 [4]byte 12276 } 12277 12278 type rlim_t = uint64 12279 12280 type rusage = struct { 12281 Fru_utime struct { 12282 Ftv_sec int64 12283 Ftv_usec int32 12284 F__ccgo_pad1 [4]byte 12285 } 12286 Fru_stime struct { 12287 Ftv_sec int64 12288 Ftv_usec int32 12289 F__ccgo_pad1 [4]byte 12290 } 12291 Fru_maxrss int64 12292 Fru_ixrss int64 12293 Fru_idrss int64 12294 Fru_isrss int64 12295 Fru_minflt int64 12296 Fru_majflt int64 12297 Fru_nswap int64 12298 Fru_inblock int64 12299 Fru_oublock int64 12300 Fru_msgsnd int64 12301 Fru_msgrcv int64 12302 Fru_nsignals int64 12303 Fru_nvcsw int64 12304 Fru_nivcsw int64 12305 } 12306 12307 type rusage_info_t = uintptr 12308 12309 type rusage_info_v0 = struct { 12310 Fri_uuid [16]uint8_t 12311 Fri_user_time uint64_t 12312 Fri_system_time uint64_t 12313 Fri_pkg_idle_wkups uint64_t 12314 Fri_interrupt_wkups uint64_t 12315 Fri_pageins uint64_t 12316 Fri_wired_size uint64_t 12317 Fri_resident_size uint64_t 12318 Fri_phys_footprint uint64_t 12319 Fri_proc_start_abstime uint64_t 12320 Fri_proc_exit_abstime uint64_t 12321 } 12322 12323 type rusage_info_v1 = struct { 12324 Fri_uuid [16]uint8_t 12325 Fri_user_time uint64_t 12326 Fri_system_time uint64_t 12327 Fri_pkg_idle_wkups uint64_t 12328 Fri_interrupt_wkups uint64_t 12329 Fri_pageins uint64_t 12330 Fri_wired_size uint64_t 12331 Fri_resident_size uint64_t 12332 Fri_phys_footprint uint64_t 12333 Fri_proc_start_abstime uint64_t 12334 Fri_proc_exit_abstime uint64_t 12335 Fri_child_user_time uint64_t 12336 Fri_child_system_time uint64_t 12337 Fri_child_pkg_idle_wkups uint64_t 12338 Fri_child_interrupt_wkups uint64_t 12339 Fri_child_pageins uint64_t 12340 Fri_child_elapsed_abstime uint64_t 12341 } 12342 12343 type rusage_info_v2 = struct { 12344 Fri_uuid [16]uint8_t 12345 Fri_user_time uint64_t 12346 Fri_system_time uint64_t 12347 Fri_pkg_idle_wkups uint64_t 12348 Fri_interrupt_wkups uint64_t 12349 Fri_pageins uint64_t 12350 Fri_wired_size uint64_t 12351 Fri_resident_size uint64_t 12352 Fri_phys_footprint uint64_t 12353 Fri_proc_start_abstime uint64_t 12354 Fri_proc_exit_abstime uint64_t 12355 Fri_child_user_time uint64_t 12356 Fri_child_system_time uint64_t 12357 Fri_child_pkg_idle_wkups uint64_t 12358 Fri_child_interrupt_wkups uint64_t 12359 Fri_child_pageins uint64_t 12360 Fri_child_elapsed_abstime uint64_t 12361 Fri_diskio_bytesread uint64_t 12362 Fri_diskio_byteswritten uint64_t 12363 } 12364 12365 type rusage_info_v3 = struct { 12366 Fri_uuid [16]uint8_t 12367 Fri_user_time uint64_t 12368 Fri_system_time uint64_t 12369 Fri_pkg_idle_wkups uint64_t 12370 Fri_interrupt_wkups uint64_t 12371 Fri_pageins uint64_t 12372 Fri_wired_size uint64_t 12373 Fri_resident_size uint64_t 12374 Fri_phys_footprint uint64_t 12375 Fri_proc_start_abstime uint64_t 12376 Fri_proc_exit_abstime uint64_t 12377 Fri_child_user_time uint64_t 12378 Fri_child_system_time uint64_t 12379 Fri_child_pkg_idle_wkups uint64_t 12380 Fri_child_interrupt_wkups uint64_t 12381 Fri_child_pageins uint64_t 12382 Fri_child_elapsed_abstime uint64_t 12383 Fri_diskio_bytesread uint64_t 12384 Fri_diskio_byteswritten uint64_t 12385 Fri_cpu_time_qos_default uint64_t 12386 Fri_cpu_time_qos_maintenance uint64_t 12387 Fri_cpu_time_qos_background uint64_t 12388 Fri_cpu_time_qos_utility uint64_t 12389 Fri_cpu_time_qos_legacy uint64_t 12390 Fri_cpu_time_qos_user_initiated uint64_t 12391 Fri_cpu_time_qos_user_interactive uint64_t 12392 Fri_billed_system_time uint64_t 12393 Fri_serviced_system_time uint64_t 12394 } 12395 12396 type rusage_info_v4 = struct { 12397 Fri_uuid [16]uint8_t 12398 Fri_user_time uint64_t 12399 Fri_system_time uint64_t 12400 Fri_pkg_idle_wkups uint64_t 12401 Fri_interrupt_wkups uint64_t 12402 Fri_pageins uint64_t 12403 Fri_wired_size uint64_t 12404 Fri_resident_size uint64_t 12405 Fri_phys_footprint uint64_t 12406 Fri_proc_start_abstime uint64_t 12407 Fri_proc_exit_abstime uint64_t 12408 Fri_child_user_time uint64_t 12409 Fri_child_system_time uint64_t 12410 Fri_child_pkg_idle_wkups uint64_t 12411 Fri_child_interrupt_wkups uint64_t 12412 Fri_child_pageins uint64_t 12413 Fri_child_elapsed_abstime uint64_t 12414 Fri_diskio_bytesread uint64_t 12415 Fri_diskio_byteswritten uint64_t 12416 Fri_cpu_time_qos_default uint64_t 12417 Fri_cpu_time_qos_maintenance uint64_t 12418 Fri_cpu_time_qos_background uint64_t 12419 Fri_cpu_time_qos_utility uint64_t 12420 Fri_cpu_time_qos_legacy uint64_t 12421 Fri_cpu_time_qos_user_initiated uint64_t 12422 Fri_cpu_time_qos_user_interactive uint64_t 12423 Fri_billed_system_time uint64_t 12424 Fri_serviced_system_time uint64_t 12425 Fri_logical_writes uint64_t 12426 Fri_lifetime_max_phys_footprint uint64_t 12427 Fri_instructions uint64_t 12428 Fri_cycles uint64_t 12429 Fri_billed_energy uint64_t 12430 Fri_serviced_energy uint64_t 12431 Fri_interval_max_phys_footprint uint64_t 12432 Fri_runnable_time uint64_t 12433 } 12434 12435 type rusage_info_current = rusage_info_v4 12436 12437 type rlimit = struct { 12438 Frlim_cur rlim_t 12439 Frlim_max rlim_t 12440 } 12441 12442 type proc_rlimit_control_wakeupmon = struct { 12443 Fwm_flags uint32_t 12444 Fwm_rate int32_t 12445 } 12446 12447 type wait = struct{ Fw_status int32 } 12448 12449 type ct_rune_t = int32 12450 12451 type rune_t = int32 12452 12453 type div_t = struct { 12454 Fquot int32 12455 Frem int32 12456 } 12457 12458 type ldiv_t = struct { 12459 Fquot int64 12460 Frem int64 12461 } 12462 12463 type lldiv_t = struct { 12464 Fquot int64 12465 Frem int64 12466 } 12467 12468 type dev_t = int32 12469 12470 type mode_t = uint16 12471 12472 type wint_t = int32 12473 12474 type _RuneEntry = struct { 12475 F__min int32 12476 F__max int32 12477 F__map int32 12478 F__ccgo_pad1 [4]byte 12479 F__types uintptr 12480 } 12481 12482 type _RuneRange = struct { 12483 F__nranges int32 12484 F__ccgo_pad1 [4]byte 12485 F__ranges uintptr 12486 } 12487 12488 type _RuneCharClass = struct { 12489 F__name [14]int8 12490 F__ccgo_pad1 [2]byte 12491 F__mask uint32 12492 } 12493 12494 type _RuneLocale = struct { 12495 F__magic [8]int8 12496 F__encoding [32]int8 12497 F__sgetrune uintptr 12498 F__sputrune uintptr 12499 F__invalid_rune int32 12500 F__runetype [256]uint32 12501 F__maplower [256]int32 12502 F__mapupper [256]int32 12503 F__ccgo_pad1 [4]byte 12504 F__runetype_ext _RuneRange 12505 F__maplower_ext _RuneRange 12506 F__mapupper_ext _RuneRange 12507 F__variable uintptr 12508 F__variable_len int32 12509 F__ncharclasses int32 12510 F__charclasses uintptr 12511 } 12512 12513 func isascii(tls *libc.TLS, _c int32) int32 { 12514 return libc.Bool32(_c&libc.CplInt32(0x7F) == 0) 12515 } 12516 12517 func __istype(tls *libc.TLS, _c int32, _f uint64) int32 { 12518 return func() int32 { 12519 if isascii(tls, _c) != 0 { 12520 return libc.BoolInt32(!!(uint64(*(*uint32)(unsafe.Pointer(uintptr(unsafe.Pointer(&libc.X_DefaultRuneLocale)) + 60 + uintptr(_c)*4)))&_f != 0)) 12521 } 12522 return libc.BoolInt32(!!(libc.X__maskrune(tls, _c, _f) != 0)) 12523 }() 12524 } 12525 12526 func __isctype(tls *libc.TLS, _c int32, _f uint64) int32 { 12527 if _c < 0 || _c >= int32(1)<<8 { 12528 return 0 12529 } 12530 return libc.BoolInt32(!!(uint64(*(*uint32)(unsafe.Pointer(uintptr(unsafe.Pointer(&libc.X_DefaultRuneLocale)) + 60 + uintptr(_c)*4)))&_f != 0)) 12531 } 12532 12533 func __wcwidth(tls *libc.TLS, _c int32) int32 { 12534 var _x uint32 12535 12536 if _c == 0 { 12537 return 0 12538 } 12539 _x = uint32(libc.X__maskrune(tls, _c, uint64(X_CTYPE_SWM|X_CTYPE_R))) 12540 if int64(_x)&X_CTYPE_SWM != int64(0) { 12541 return int32(int64(_x) & X_CTYPE_SWM >> X_CTYPE_SWS) 12542 } 12543 return func() int32 { 12544 if int64(_x)&X_CTYPE_R != int64(0) { 12545 return 1 12546 } 12547 return -1 12548 }() 12549 } 12550 12551 func isalnum(tls *libc.TLS, _c int32) int32 { 12552 return __istype(tls, _c, uint64(X_CTYPE_A|X_CTYPE_D)) 12553 } 12554 12555 func isalpha(tls *libc.TLS, _c int32) int32 { 12556 return __istype(tls, _c, uint64(X_CTYPE_A)) 12557 } 12558 12559 func isblank(tls *libc.TLS, _c int32) int32 { 12560 return __istype(tls, _c, uint64(X_CTYPE_B)) 12561 } 12562 12563 func iscntrl(tls *libc.TLS, _c int32) int32 { 12564 return __istype(tls, _c, uint64(X_CTYPE_C)) 12565 } 12566 12567 func isdigit(tls *libc.TLS, _c int32) int32 { 12568 return __isctype(tls, _c, uint64(X_CTYPE_D)) 12569 } 12570 12571 func isgraph(tls *libc.TLS, _c int32) int32 { 12572 return __istype(tls, _c, uint64(X_CTYPE_G)) 12573 } 12574 12575 func islower(tls *libc.TLS, _c int32) int32 { 12576 return __istype(tls, _c, uint64(X_CTYPE_L)) 12577 } 12578 12579 func isprint(tls *libc.TLS, _c int32) int32 { 12580 return __istype(tls, _c, uint64(X_CTYPE_R)) 12581 } 12582 12583 func ispunct(tls *libc.TLS, _c int32) int32 { 12584 return __istype(tls, _c, uint64(X_CTYPE_P)) 12585 } 12586 12587 func isspace(tls *libc.TLS, _c int32) int32 { 12588 return __istype(tls, _c, uint64(X_CTYPE_S)) 12589 } 12590 12591 func isupper(tls *libc.TLS, _c int32) int32 { 12592 return __istype(tls, _c, uint64(X_CTYPE_U)) 12593 } 12594 12595 func isxdigit(tls *libc.TLS, _c int32) int32 { 12596 return __isctype(tls, _c, uint64(X_CTYPE_X)) 12597 } 12598 12599 func toascii(tls *libc.TLS, _c int32) int32 { 12600 return _c & 0x7F 12601 } 12602 12603 func tolower(tls *libc.TLS, _c int32) int32 { 12604 return libc.X__tolower(tls, _c) 12605 } 12606 12607 func toupper(tls *libc.TLS, _c int32) int32 { 12608 return libc.X__toupper(tls, _c) 12609 } 12610 12611 func digittoint(tls *libc.TLS, _c int32) int32 { 12612 return libc.X__maskrune(tls, _c, uint64(0x0F)) 12613 } 12614 12615 func ishexnumber(tls *libc.TLS, _c int32) int32 { 12616 return __istype(tls, _c, uint64(X_CTYPE_X)) 12617 } 12618 12619 func isideogram(tls *libc.TLS, _c int32) int32 { 12620 return __istype(tls, _c, uint64(X_CTYPE_I)) 12621 } 12622 12623 func isnumber(tls *libc.TLS, _c int32) int32 { 12624 return __istype(tls, _c, uint64(X_CTYPE_D)) 12625 } 12626 12627 func isphonogram(tls *libc.TLS, _c int32) int32 { 12628 return __istype(tls, _c, uint64(X_CTYPE_Q)) 12629 } 12630 12631 func isrune(tls *libc.TLS, _c int32) int32 { 12632 return __istype(tls, _c, uint64(0xFFFFFFF0)) 12633 } 12634 12635 func isspecial(tls *libc.TLS, _c int32) int32 { 12636 return __istype(tls, _c, uint64(X_CTYPE_T)) 12637 } 12638 12639 type amatch_vtab1 = struct { 12640 Fbase sqlite3_vtab 12641 FzClassName uintptr 12642 FzDb uintptr 12643 FzSelf uintptr 12644 FzCostTab uintptr 12645 FzVocabTab uintptr 12646 FzVocabWord uintptr 12647 FzVocabLang uintptr 12648 FpRule uintptr 12649 FrIns amatch_cost 12650 FrDel amatch_cost 12651 FrSub amatch_cost 12652 F__ccgo_pad1 [4]byte 12653 Fdb uintptr 12654 FpVCheck uintptr 12655 FnCursor int32 12656 F__ccgo_pad2 [4]byte 12657 } 12658 12659 type amatch_vtab = amatch_vtab1 12660 type amatch_cursor1 = struct { 12661 Fbase sqlite3_vtab_cursor 12662 FiRowid sqlite3_int64 12663 FiLang amatch_langid 12664 FrLimit amatch_cost 12665 FnBuf int32 12666 FoomErr int32 12667 FnWord int32 12668 F__ccgo_pad1 [4]byte 12669 FzBuf uintptr 12670 FzInput uintptr 12671 FpVtab uintptr 12672 FpAllWords uintptr 12673 FpCurrent uintptr 12674 FpCost uintptr 12675 FpWord uintptr 12676 } 12677 12678 type amatch_cursor = amatch_cursor1 12679 type amatch_rule1 = struct { 12680 FpNext uintptr 12681 FzFrom uintptr 12682 FrCost amatch_cost 12683 FiLang amatch_langid 12684 FnFrom amatch_len 12685 FnTo amatch_len 12686 FzTo [4]int8 12687 F__ccgo_pad1 [2]byte 12688 } 12689 12690 type amatch_rule = amatch_rule1 12691 type amatch_word1 = struct { 12692 FpNext uintptr 12693 FsCost amatch_avl 12694 FsWord amatch_avl 12695 FrCost amatch_cost 12696 FiSeq int32 12697 FzCost [10]int8 12698 FnMatch int16 12699 FzWord [4]int8 12700 } 12701 12702 type amatch_word = amatch_word1 12703 type amatch_avl1 = struct { 12704 FpWord uintptr 12705 FzKey uintptr 12706 FpBefore uintptr 12707 FpAfter uintptr 12708 FpUp uintptr 12709 Fheight int16 12710 Fimbalance int16 12711 F__ccgo_pad1 [4]byte 12712 } 12713 12714 type amatch_avl = amatch_avl1 12715 12716 func amatchAvlRecomputeHeight(tls *libc.TLS, p uintptr) { 12717 var hBefore int16 12718 if (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12719 hBefore = (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(p)).FpBefore)).Fheight 12720 } else { 12721 hBefore = int16(0) 12722 } 12723 var hAfter int16 12724 if (*amatch_avl)(unsafe.Pointer(p)).FpAfter != 0 { 12725 hAfter = (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(p)).FpAfter)).Fheight 12726 } else { 12727 hAfter = int16(0) 12728 } 12729 (*amatch_avl)(unsafe.Pointer(p)).Fimbalance = int16(int32(hBefore) - int32(hAfter)) 12730 (*amatch_avl)(unsafe.Pointer(p)).Fheight = int16(func() int32 { 12731 if int32(hBefore) > int32(hAfter) { 12732 return int32(hBefore) 12733 } 12734 return int32(hAfter) 12735 }() + 1) 12736 } 12737 12738 func amatchAvlRotateBefore(tls *libc.TLS, pP uintptr) uintptr { 12739 var pB uintptr = (*amatch_avl)(unsafe.Pointer(pP)).FpBefore 12740 var pY uintptr = (*amatch_avl)(unsafe.Pointer(pB)).FpAfter 12741 (*amatch_avl)(unsafe.Pointer(pB)).FpUp = (*amatch_avl)(unsafe.Pointer(pP)).FpUp 12742 (*amatch_avl)(unsafe.Pointer(pB)).FpAfter = pP 12743 (*amatch_avl)(unsafe.Pointer(pP)).FpUp = pB 12744 (*amatch_avl)(unsafe.Pointer(pP)).FpBefore = pY 12745 if pY != 0 { 12746 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pP 12747 } 12748 amatchAvlRecomputeHeight(tls, pP) 12749 amatchAvlRecomputeHeight(tls, pB) 12750 return pB 12751 } 12752 12753 func amatchAvlRotateAfter(tls *libc.TLS, pP uintptr) uintptr { 12754 var pA uintptr = (*amatch_avl)(unsafe.Pointer(pP)).FpAfter 12755 var pY uintptr = (*amatch_avl)(unsafe.Pointer(pA)).FpBefore 12756 (*amatch_avl)(unsafe.Pointer(pA)).FpUp = (*amatch_avl)(unsafe.Pointer(pP)).FpUp 12757 (*amatch_avl)(unsafe.Pointer(pA)).FpBefore = pP 12758 (*amatch_avl)(unsafe.Pointer(pP)).FpUp = pA 12759 (*amatch_avl)(unsafe.Pointer(pP)).FpAfter = pY 12760 if pY != 0 { 12761 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pP 12762 } 12763 amatchAvlRecomputeHeight(tls, pP) 12764 amatchAvlRecomputeHeight(tls, pA) 12765 return pA 12766 } 12767 12768 func amatchAvlFromPtr(tls *libc.TLS, p uintptr, pp uintptr) uintptr { 12769 var pUp uintptr = (*amatch_avl)(unsafe.Pointer(p)).FpUp 12770 if pUp == uintptr(0) { 12771 return pp 12772 } 12773 if (*amatch_avl)(unsafe.Pointer(pUp)).FpAfter == p { 12774 return pUp + 24 12775 } 12776 return pUp + 16 12777 } 12778 12779 func amatchAvlBalance(tls *libc.TLS, p uintptr) uintptr { 12780 bp := tls.Alloc(8) 12781 defer tls.Free(8) 12782 *(*uintptr)(unsafe.Pointer(bp)) = p 12783 12784 var pTop uintptr = *(*uintptr)(unsafe.Pointer(bp)) 12785 var pp uintptr 12786 for *(*uintptr)(unsafe.Pointer(bp)) != 0 { 12787 amatchAvlRecomputeHeight(tls, *(*uintptr)(unsafe.Pointer(bp))) 12788 if int32((*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) >= 2 { 12789 var pB uintptr = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore 12790 if int32((*amatch_avl)(unsafe.Pointer(pB)).Fimbalance) < 0 { 12791 (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore = amatchAvlRotateAfter(tls, pB) 12792 } 12793 pp = amatchAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 12794 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, amatchAvlRotateBefore(tls, *(*uintptr)(unsafe.Pointer(bp)))) 12795 } else if int32((*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) <= -2 { 12796 var pA uintptr = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter 12797 if int32((*amatch_avl)(unsafe.Pointer(pA)).Fimbalance) > 0 { 12798 (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter = amatchAvlRotateBefore(tls, pA) 12799 } 12800 pp = amatchAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 12801 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, amatchAvlRotateAfter(tls, *(*uintptr)(unsafe.Pointer(bp)))) 12802 } 12803 pTop = *(*uintptr)(unsafe.Pointer(bp)) 12804 *(*uintptr)(unsafe.Pointer(bp)) = (*amatch_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpUp 12805 } 12806 return pTop 12807 } 12808 12809 func amatchAvlSearch(tls *libc.TLS, p uintptr, zKey uintptr) uintptr { 12810 var c int32 12811 for p != 0 && libc.AssignInt32(&c, libc.Xstrcmp(tls, zKey, (*amatch_avl)(unsafe.Pointer(p)).FzKey)) != 0 { 12812 if c < 0 { 12813 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 12814 } else { 12815 p = (*amatch_avl)(unsafe.Pointer(p)).FpAfter 12816 } 12817 } 12818 return p 12819 } 12820 12821 func amatchAvlFirst(tls *libc.TLS, p uintptr) uintptr { 12822 if p != 0 { 12823 for (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12824 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 12825 } 12826 } 12827 return p 12828 } 12829 12830 func amatchAvlInsert(tls *libc.TLS, ppHead uintptr, pNew uintptr) uintptr { 12831 var c int32 12832 var p uintptr = *(*uintptr)(unsafe.Pointer(ppHead)) 12833 if p == uintptr(0) { 12834 p = pNew 12835 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = uintptr(0) 12836 } else { 12837 for p != 0 { 12838 c = libc.Xstrcmp(tls, (*amatch_avl)(unsafe.Pointer(pNew)).FzKey, (*amatch_avl)(unsafe.Pointer(p)).FzKey) 12839 if c < 0 { 12840 if (*amatch_avl)(unsafe.Pointer(p)).FpBefore != 0 { 12841 p = (*amatch_avl)(unsafe.Pointer(p)).FpBefore 12842 } else { 12843 (*amatch_avl)(unsafe.Pointer(p)).FpBefore = pNew 12844 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = p 12845 break 12846 } 12847 } else if c > 0 { 12848 if (*amatch_avl)(unsafe.Pointer(p)).FpAfter != 0 { 12849 p = (*amatch_avl)(unsafe.Pointer(p)).FpAfter 12850 } else { 12851 (*amatch_avl)(unsafe.Pointer(p)).FpAfter = pNew 12852 (*amatch_avl)(unsafe.Pointer(pNew)).FpUp = p 12853 break 12854 } 12855 } else { 12856 return p 12857 } 12858 } 12859 } 12860 (*amatch_avl)(unsafe.Pointer(pNew)).FpBefore = uintptr(0) 12861 (*amatch_avl)(unsafe.Pointer(pNew)).FpAfter = uintptr(0) 12862 (*amatch_avl)(unsafe.Pointer(pNew)).Fheight = int16(1) 12863 (*amatch_avl)(unsafe.Pointer(pNew)).Fimbalance = int16(0) 12864 *(*uintptr)(unsafe.Pointer(ppHead)) = amatchAvlBalance(tls, p) 12865 12866 return uintptr(0) 12867 } 12868 12869 func amatchAvlRemove(tls *libc.TLS, ppHead uintptr, pOld uintptr) { 12870 var ppParent uintptr 12871 var pBalance uintptr = uintptr(0) 12872 12873 ppParent = amatchAvlFromPtr(tls, pOld, ppHead) 12874 if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore == uintptr(0) && (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter == uintptr(0) { 12875 *(*uintptr)(unsafe.Pointer(ppParent)) = uintptr(0) 12876 pBalance = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 12877 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore != 0 && (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter != 0 { 12878 var pX uintptr 12879 var pY uintptr 12880 pX = amatchAvlFirst(tls, (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter) 12881 *(*uintptr)(unsafe.Pointer(amatchAvlFromPtr(tls, pX, uintptr(0)))) = (*amatch_avl)(unsafe.Pointer(pX)).FpAfter 12882 if (*amatch_avl)(unsafe.Pointer(pX)).FpAfter != 0 { 12883 (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(pX)).FpAfter)).FpUp = (*amatch_avl)(unsafe.Pointer(pX)).FpUp 12884 } 12885 pBalance = (*amatch_avl)(unsafe.Pointer(pX)).FpUp 12886 (*amatch_avl)(unsafe.Pointer(pX)).FpAfter = (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter 12887 if (*amatch_avl)(unsafe.Pointer(pX)).FpAfter != 0 { 12888 (*amatch_avl)(unsafe.Pointer((*amatch_avl)(unsafe.Pointer(pX)).FpAfter)).FpUp = pX 12889 } else { 12890 pBalance = pX 12891 } 12892 (*amatch_avl)(unsafe.Pointer(pX)).FpBefore = libc.AssignUintptr(&pY, (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore) 12893 if pY != 0 { 12894 (*amatch_avl)(unsafe.Pointer(pY)).FpUp = pX 12895 } 12896 (*amatch_avl)(unsafe.Pointer(pX)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 12897 *(*uintptr)(unsafe.Pointer(ppParent)) = pX 12898 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore == uintptr(0) { 12899 *(*uintptr)(unsafe.Pointer(ppParent)) = libc.AssignUintptr(&pBalance, (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter) 12900 (*amatch_avl)(unsafe.Pointer(pBalance)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 12901 } else if (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter == uintptr(0) { 12902 *(*uintptr)(unsafe.Pointer(ppParent)) = libc.AssignUintptr(&pBalance, (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore) 12903 (*amatch_avl)(unsafe.Pointer(pBalance)).FpUp = (*amatch_avl)(unsafe.Pointer(pOld)).FpUp 12904 } 12905 *(*uintptr)(unsafe.Pointer(ppHead)) = amatchAvlBalance(tls, pBalance) 12906 (*amatch_avl)(unsafe.Pointer(pOld)).FpUp = uintptr(0) 12907 (*amatch_avl)(unsafe.Pointer(pOld)).FpBefore = uintptr(0) 12908 (*amatch_avl)(unsafe.Pointer(pOld)).FpAfter = uintptr(0) 12909 12910 } 12911 12912 type amatch_cost = int32 12913 type amatch_len = int8 12914 type amatch_langid = int32 12915 12916 func amatchMergeRules(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 12917 bp := tls.Alloc(32) 12918 defer tls.Free(32) 12919 12920 var pTail uintptr 12921 12922 pTail = bp 12923 for pA != 0 && pB != 0 { 12924 if (*amatch_rule)(unsafe.Pointer(pA)).FrCost <= (*amatch_rule)(unsafe.Pointer(pB)).FrCost { 12925 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pA 12926 pTail = pA 12927 pA = (*amatch_rule)(unsafe.Pointer(pA)).FpNext 12928 } else { 12929 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pB 12930 pTail = pB 12931 pB = (*amatch_rule)(unsafe.Pointer(pB)).FpNext 12932 } 12933 } 12934 if pA == uintptr(0) { 12935 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pB 12936 } else { 12937 (*amatch_rule)(unsafe.Pointer(pTail)).FpNext = pA 12938 } 12939 return (*amatch_rule)(unsafe.Pointer(bp)).FpNext 12940 } 12941 12942 func amatchLoadOneRule(tls *libc.TLS, p uintptr, pStmt uintptr, ppRule uintptr, pzErr uintptr) int32 { 12943 bp := tls.Alloc(48) 12944 defer tls.Free(48) 12945 12946 var iLang sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 12947 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 12948 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 2) 12949 var rCost amatch_cost = sqlite3.Xsqlite3_column_int(tls, pStmt, 3) 12950 12951 var rc int32 = SQLITE_OK 12952 var nFrom int32 12953 var nTo int32 12954 var pRule uintptr = uintptr(0) 12955 12956 if zFrom == uintptr(0) { 12957 zFrom = ts + 584 12958 } 12959 if zTo == uintptr(0) { 12960 zTo = ts + 584 12961 } 12962 nFrom = int32(libc.Xstrlen(tls, zFrom)) 12963 nTo = int32(libc.Xstrlen(tls, zTo)) 12964 12965 if libc.Xstrcmp(tls, zFrom, zTo) == 0 { 12966 if int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && int32(*(*int8)(unsafe.Pointer(zFrom + 1))) == 0 { 12967 if (*amatch_vtab)(unsafe.Pointer(p)).FrSub == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrSub > rCost { 12968 (*amatch_vtab)(unsafe.Pointer(p)).FrSub = rCost 12969 } 12970 } 12971 *(*uintptr)(unsafe.Pointer(ppRule)) = uintptr(0) 12972 return SQLITE_OK 12973 } 12974 12975 if rCost <= 0 || rCost > AMATCH_MX_COST { 12976 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3304, 12977 libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_COST)) 12978 rc = SQLITE_ERROR 12979 } else if nFrom > AMATCH_MX_LENGTH || nTo > AMATCH_MX_LENGTH { 12980 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3338, 12981 libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_LENGTH)) 12982 rc = SQLITE_ERROR 12983 } else if iLang < int64(0) || iLang > int64(AMATCH_MX_LANGID) { 12984 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3370, 12985 libc.VaList(bp+32, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, AMATCH_MX_LANGID)) 12986 rc = SQLITE_ERROR 12987 } else if libc.Xstrcmp(tls, zFrom, ts+584) == 0 && libc.Xstrcmp(tls, zTo, ts+3405) == 0 { 12988 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrIns > rCost { 12989 (*amatch_vtab)(unsafe.Pointer(p)).FrIns = rCost 12990 } 12991 } else if libc.Xstrcmp(tls, zFrom, ts+3405) == 0 && libc.Xstrcmp(tls, zTo, ts+584) == 0 { 12992 if (*amatch_vtab)(unsafe.Pointer(p)).FrDel == 0 || (*amatch_vtab)(unsafe.Pointer(p)).FrDel > rCost { 12993 (*amatch_vtab)(unsafe.Pointer(p)).FrDel = rCost 12994 } 12995 } else { 12996 pRule = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(amatch_rule{}))+uint64(nFrom)+uint64(nTo)) 12997 if pRule == uintptr(0) { 12998 rc = SQLITE_NOMEM 12999 } else { 13000 libc.X__builtin___memset_chk(tls, pRule, 0, uint64(unsafe.Sizeof(amatch_rule{})), libc.X__builtin_object_size(tls, pRule, 0)) 13001 (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom = pRule + 26 + uintptr(nTo+1) 13002 (*amatch_rule)(unsafe.Pointer(pRule)).FnFrom = amatch_len(nFrom) 13003 libc.X__builtin___memcpy_chk(tls, (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom, zFrom, uint64(nFrom+1), libc.X__builtin_object_size(tls, (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom, 0)) 13004 libc.X__builtin___memcpy_chk(tls, pRule+26, zTo, uint64(nTo+1), libc.X__builtin_object_size(tls, pRule+26, 0)) 13005 (*amatch_rule)(unsafe.Pointer(pRule)).FnTo = amatch_len(nTo) 13006 (*amatch_rule)(unsafe.Pointer(pRule)).FrCost = rCost 13007 (*amatch_rule)(unsafe.Pointer(pRule)).FiLang = int32(iLang) 13008 } 13009 } 13010 13011 *(*uintptr)(unsafe.Pointer(ppRule)) = pRule 13012 return rc 13013 } 13014 13015 func amatchFreeRules(tls *libc.TLS, p uintptr) { 13016 for (*amatch_vtab)(unsafe.Pointer(p)).FpRule != 0 { 13017 var pRule uintptr = (*amatch_vtab)(unsafe.Pointer(p)).FpRule 13018 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = (*amatch_rule)(unsafe.Pointer(pRule)).FpNext 13019 sqlite3.Xsqlite3_free(tls, pRule) 13020 } 13021 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = uintptr(0) 13022 } 13023 13024 func amatchLoadRules(tls *libc.TLS, db uintptr, p uintptr, pzErr uintptr) int32 { 13025 bp := tls.Alloc(192) 13026 defer tls.Free(192) 13027 13028 var rc int32 = SQLITE_OK 13029 var zSql uintptr 13030 var pHead uintptr = uintptr(0) 13031 13032 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzDb, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab)) 13033 if zSql == uintptr(0) { 13034 rc = SQLITE_NOMEM 13035 } else { 13036 var rc2 int32 13037 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 13038 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 13039 if rc != SQLITE_OK { 13040 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3427, libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, sqlite3.Xsqlite3_errmsg(tls, db))) 13041 } else if sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != 4 { 13042 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3434, 13043 libc.VaList(bp+32, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))))) 13044 rc = SQLITE_ERROR 13045 } else { 13046 for rc == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) { 13047 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 13048 rc = amatchLoadOneRule(tls, p, *(*uintptr)(unsafe.Pointer(bp + 56)), bp+64, pzErr) 13049 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 13050 (*amatch_rule)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 64)))).FpNext = pHead 13051 pHead = *(*uintptr)(unsafe.Pointer(bp + 64)) 13052 } 13053 } 13054 } 13055 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 13056 if rc == SQLITE_OK { 13057 rc = rc2 13058 } 13059 } 13060 sqlite3.Xsqlite3_free(tls, zSql) 13061 13062 if rc == SQLITE_OK { 13063 var i uint32 13064 var pX uintptr 13065 13066 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 13067 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 13068 } 13069 for libc.AssignUintptr(&pX, pHead) != uintptr(0) { 13070 pHead = (*amatch_rule)(unsafe.Pointer(pX)).FpNext 13071 (*amatch_rule)(unsafe.Pointer(pX)).FpNext = uintptr(0) 13072 for i = uint32(0); *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) != 0 && uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))-uint64(1); i++ { 13073 pX = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 13074 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 13075 } 13076 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 13077 } 13078 pX = *(*uintptr)(unsafe.Pointer(bp + 72)) 13079 i = uint32(1) 13080 for ; uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 13081 pX = amatchMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 13082 } 13083 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = amatchMergeRules(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpRule, pX) 13084 } else { 13085 (*amatch_vtab)(unsafe.Pointer(p)).FpRule = pHead 13086 } 13087 13088 return rc 13089 } 13090 13091 func amatchDequote(tls *libc.TLS, zIn uintptr) uintptr { 13092 var nIn sqlite3_int64 13093 var zOut uintptr 13094 13095 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 13096 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 13097 if zOut != 0 { 13098 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 13099 13100 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 13101 libc.X__builtin___memcpy_chk(tls, zOut, zIn, size_t(nIn+int64(1)), libc.X__builtin_object_size(tls, zOut, 0)) 13102 } else { 13103 var iOut int32 = 0 13104 var iIn int32 13105 13106 if int32(q) == '[' { 13107 q = int8(']') 13108 } 13109 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 13110 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 13111 iIn++ 13112 } 13113 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 13114 } 13115 } 13116 13117 } 13118 return zOut 13119 } 13120 13121 func amatchVCheckClear(tls *libc.TLS, p uintptr) { 13122 if (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck != 0 { 13123 sqlite3.Xsqlite3_finalize(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 13124 (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck = uintptr(0) 13125 } 13126 } 13127 13128 func amatchFree(tls *libc.TLS, p uintptr) { 13129 if p != 0 { 13130 amatchFreeRules(tls, p) 13131 amatchVCheckClear(tls, p) 13132 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzClassName) 13133 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzDb) 13134 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzCostTab) 13135 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab) 13136 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord) 13137 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang) 13138 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf) 13139 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(amatch_vtab{})), libc.X__builtin_object_size(tls, p, 0)) 13140 sqlite3.Xsqlite3_free(tls, p) 13141 } 13142 } 13143 13144 func amatchDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 13145 var p uintptr = pVtab 13146 13147 amatchFree(tls, p) 13148 return SQLITE_OK 13149 } 13150 13151 func amatchValueOfKey(tls *libc.TLS, zKey uintptr, zStr uintptr) uintptr { 13152 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 13153 var nStr int32 = int32(libc.Xstrlen(tls, zStr)) 13154 var i int32 13155 if nStr < nKey+1 { 13156 return uintptr(0) 13157 } 13158 if libc.Xmemcmp(tls, zStr, zKey, uint64(nKey)) != 0 { 13159 return uintptr(0) 13160 } 13161 for i = nKey; isspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))))) != 0; i++ { 13162 } 13163 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) != '=' { 13164 return uintptr(0) 13165 } 13166 i++ 13167 for isspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))))) != 0 { 13168 i++ 13169 } 13170 return zStr + uintptr(i) 13171 } 13172 13173 func amatchConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 13174 bp := tls.Alloc(32) 13175 defer tls.Free(32) 13176 13177 var rc int32 13178 var pNew uintptr 13179 var zModule uintptr 13180 var zDb uintptr 13181 var zVal uintptr 13182 var i int32 13183 rc = SQLITE_OK 13184 pNew = uintptr(0) 13185 zModule = *(*uintptr)(unsafe.Pointer(argv)) 13186 zDb = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 13187 13188 _ = pAux 13189 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 13190 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(amatch_vtab{}))) 13191 if !(pNew == uintptr(0)) { 13192 goto __1 13193 } 13194 return SQLITE_NOMEM 13195 __1: 13196 ; 13197 rc = SQLITE_NOMEM 13198 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(amatch_vtab{})), libc.X__builtin_object_size(tls, pNew, 0)) 13199 (*amatch_vtab)(unsafe.Pointer(pNew)).Fdb = db 13200 (*amatch_vtab)(unsafe.Pointer(pNew)).FzClassName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zModule)) 13201 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzClassName == uintptr(0)) { 13202 goto __2 13203 } 13204 goto amatchConnectError 13205 __2: 13206 ; 13207 (*amatch_vtab)(unsafe.Pointer(pNew)).FzDb = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zDb)) 13208 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzDb == uintptr(0)) { 13209 goto __3 13210 } 13211 goto amatchConnectError 13212 __3: 13213 ; 13214 (*amatch_vtab)(unsafe.Pointer(pNew)).FzSelf = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 13215 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzSelf == uintptr(0)) { 13216 goto __4 13217 } 13218 goto amatchConnectError 13219 __4: 13220 ; 13221 i = 3 13222 __5: 13223 if !(i < argc) { 13224 goto __7 13225 } 13226 zVal = amatchValueOfKey(tls, ts+3468, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 13227 if !(zVal != 0) { 13228 goto __8 13229 } 13230 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab) 13231 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab = amatchDequote(tls, zVal) 13232 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabTab == uintptr(0)) { 13233 goto __9 13234 } 13235 goto amatchConnectError 13236 __9: 13237 ; 13238 goto __6 13239 __8: 13240 ; 13241 zVal = amatchValueOfKey(tls, ts+3485, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 13242 if !(zVal != 0) { 13243 goto __10 13244 } 13245 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord) 13246 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord = amatchDequote(tls, zVal) 13247 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabWord == uintptr(0)) { 13248 goto __11 13249 } 13250 goto amatchConnectError 13251 __11: 13252 ; 13253 goto __6 13254 __10: 13255 ; 13256 zVal = amatchValueOfKey(tls, ts+3501, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 13257 if !(zVal != 0) { 13258 goto __12 13259 } 13260 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang) 13261 (*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang = amatchDequote(tls, zVal) 13262 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzVocabLang == uintptr(0)) { 13263 goto __13 13264 } 13265 goto amatchConnectError 13266 __13: 13267 ; 13268 goto __6 13269 __12: 13270 ; 13271 zVal = amatchValueOfKey(tls, ts+3521, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 13272 if !(zVal != 0) { 13273 goto __14 13274 } 13275 sqlite3.Xsqlite3_free(tls, (*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab) 13276 (*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab = amatchDequote(tls, zVal) 13277 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab == uintptr(0)) { 13278 goto __15 13279 } 13280 goto amatchConnectError 13281 __15: 13282 ; 13283 goto __6 13284 __14: 13285 ; 13286 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3536, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 13287 amatchFree(tls, pNew) 13288 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 13289 return SQLITE_ERROR 13290 goto __6 13291 __6: 13292 i++ 13293 goto __5 13294 goto __7 13295 __7: 13296 ; 13297 rc = SQLITE_OK 13298 if !((*amatch_vtab)(unsafe.Pointer(pNew)).FzCostTab == uintptr(0)) { 13299 goto __16 13300 } 13301 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3565, 0) 13302 rc = SQLITE_ERROR 13303 goto __17 13304 __16: 13305 rc = amatchLoadRules(tls, db, pNew, pzErr) 13306 __17: 13307 ; 13308 if !(rc == SQLITE_OK) { 13309 goto __18 13310 } 13311 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 13312 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 13313 ts+3599) 13314 __18: 13315 ; 13316 if !(rc != SQLITE_OK) { 13317 goto __19 13318 } 13319 amatchFree(tls, pNew) 13320 __19: 13321 ; 13322 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 13323 return rc 13324 13325 amatchConnectError: 13326 amatchFree(tls, pNew) 13327 return rc 13328 } 13329 13330 func amatchOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 13331 var p uintptr = pVTab 13332 var pCur uintptr 13333 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(amatch_cursor{}))) 13334 if pCur == uintptr(0) { 13335 return SQLITE_NOMEM 13336 } 13337 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(amatch_cursor{})), libc.X__builtin_object_size(tls, pCur, 0)) 13338 (*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab = p 13339 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 13340 (*amatch_vtab)(unsafe.Pointer(p)).FnCursor++ 13341 return SQLITE_OK 13342 } 13343 13344 func amatchClearCursor(tls *libc.TLS, pCur uintptr) { 13345 var pWord uintptr 13346 var pNextWord uintptr 13347 for pWord = (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords; pWord != 0; pWord = pNextWord { 13348 pNextWord = (*amatch_word)(unsafe.Pointer(pWord)).FpNext 13349 sqlite3.Xsqlite3_free(tls, pWord) 13350 } 13351 (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords = uintptr(0) 13352 sqlite3.Xsqlite3_free(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput) 13353 (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput = uintptr(0) 13354 sqlite3.Xsqlite3_free(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 13355 (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf = uintptr(0) 13356 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = 0 13357 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCost = uintptr(0) 13358 (*amatch_cursor)(unsafe.Pointer(pCur)).FpWord = uintptr(0) 13359 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent = uintptr(0) 13360 (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit = 1000000 13361 (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang = 0 13362 (*amatch_cursor)(unsafe.Pointer(pCur)).FnWord = 0 13363 } 13364 13365 func amatchClose(tls *libc.TLS, cur uintptr) int32 { 13366 var pCur uintptr = cur 13367 amatchClearCursor(tls, pCur) 13368 (*amatch_vtab)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 13369 sqlite3.Xsqlite3_free(tls, pCur) 13370 return SQLITE_OK 13371 } 13372 13373 func amatchEncodeInt(tls *libc.TLS, x int32, z uintptr) { 13374 *(*int8)(unsafe.Pointer(z)) = a[x>>18&0x3f] 13375 *(*int8)(unsafe.Pointer(z + 1)) = a[x>>12&0x3f] 13376 *(*int8)(unsafe.Pointer(z + 2)) = a[x>>6&0x3f] 13377 *(*int8)(unsafe.Pointer(z + 3)) = a[x&0x3f] 13378 } 13379 13380 var a = *(*[65]int8)(unsafe.Pointer(ts + 3666)) 13381 13382 func amatchWriteCost(tls *libc.TLS, pWord uintptr) { 13383 amatchEncodeInt(tls, (*amatch_word)(unsafe.Pointer(pWord)).FrCost, pWord+112) 13384 amatchEncodeInt(tls, (*amatch_word)(unsafe.Pointer(pWord)).FiSeq, pWord+112+uintptr(4)) 13385 *(*int8)(unsafe.Pointer(pWord + 112 + 8)) = int8(0) 13386 } 13387 13388 func amatchStrcpy(tls *libc.TLS, dest uintptr, src uintptr) { 13389 for int32(libc.AssignPtrInt8(libc.PostIncUintptr(&dest, 1), *(*int8)(unsafe.Pointer(libc.PostIncUintptr(&src, 1))))) != 0 { 13390 } 13391 } 13392 13393 func amatchStrcat(tls *libc.TLS, dest uintptr, src uintptr) { 13394 for *(*int8)(unsafe.Pointer(dest)) != 0 { 13395 dest++ 13396 } 13397 amatchStrcpy(tls, dest, src) 13398 } 13399 13400 func amatchAddWord(tls *libc.TLS, pCur uintptr, rCost amatch_cost, nMatch int32, zWordBase uintptr, zWordTail uintptr) { 13401 bp := tls.Alloc(4) 13402 defer tls.Free(4) 13403 13404 var pWord uintptr 13405 var pNode uintptr 13406 var pOther uintptr 13407 _ = pOther 13408 var nBase int32 13409 var nTail int32 13410 13411 if rCost > (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit { 13412 return 13413 } 13414 nBase = int32(libc.Xstrlen(tls, zWordBase)) 13415 nTail = int32(libc.Xstrlen(tls, zWordTail)) 13416 if nBase+nTail+3 > (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf { 13417 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = nBase + nTail + 100 13418 (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf = sqlite3.Xsqlite3_realloc(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf) 13419 if (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf == uintptr(0) { 13420 (*amatch_cursor)(unsafe.Pointer(pCur)).FnBuf = 0 13421 return 13422 } 13423 } 13424 amatchEncodeInt(tls, nMatch, bp) 13425 libc.X__builtin___memcpy_chk(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, bp+uintptr(2), uint64(2), libc.X__builtin_object_size(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf, 0)) 13426 libc.X__builtin___memcpy_chk(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2), zWordBase, uint64(nBase), libc.X__builtin_object_size(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2), 0)) 13427 libc.X__builtin___memcpy_chk(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2)+uintptr(nBase), zWordTail, uint64(nTail+1), libc.X__builtin_object_size(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf+uintptr(2)+uintptr(nBase), 0)) 13428 pNode = amatchAvlSearch(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FpWord, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 13429 if pNode != 0 { 13430 pWord = (*amatch_avl)(unsafe.Pointer(pNode)).FpWord 13431 if (*amatch_word)(unsafe.Pointer(pWord)).FrCost > rCost { 13432 amatchAvlRemove(tls, pCur+80, pWord+8) 13433 (*amatch_word)(unsafe.Pointer(pWord)).FrCost = rCost 13434 amatchWriteCost(tls, pWord) 13435 pOther = amatchAvlInsert(tls, pCur+80, pWord+8) 13436 _ = pOther 13437 } 13438 return 13439 } 13440 pWord = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(amatch_word{}))+uint64(nBase)+uint64(nTail)-uint64(1)) 13441 if pWord == uintptr(0) { 13442 return 13443 } 13444 libc.X__builtin___memset_chk(tls, pWord, 0, uint64(unsafe.Sizeof(amatch_word{})), libc.X__builtin_object_size(tls, pWord, 0)) 13445 (*amatch_word)(unsafe.Pointer(pWord)).FrCost = rCost 13446 (*amatch_word)(unsafe.Pointer(pWord)).FiSeq = libc.PostIncInt32(&(*amatch_cursor)(unsafe.Pointer(pCur)).FnWord, 1) 13447 amatchWriteCost(tls, pWord) 13448 (*amatch_word)(unsafe.Pointer(pWord)).FnMatch = int16(nMatch) 13449 (*amatch_word)(unsafe.Pointer(pWord)).FpNext = (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords 13450 (*amatch_cursor)(unsafe.Pointer(pCur)).FpAllWords = pWord 13451 (*amatch_word)(unsafe.Pointer(pWord)).FsCost.FzKey = pWord + 112 13452 (*amatch_word)(unsafe.Pointer(pWord)).FsCost.FpWord = pWord 13453 pOther = amatchAvlInsert(tls, pCur+80, pWord+8) 13454 _ = pOther 13455 (*amatch_word)(unsafe.Pointer(pWord)).FsWord.FzKey = pWord + 124 13456 (*amatch_word)(unsafe.Pointer(pWord)).FsWord.FpWord = pWord 13457 amatchStrcpy(tls, pWord+124, (*amatch_cursor)(unsafe.Pointer(pCur)).FzBuf) 13458 pOther = amatchAvlInsert(tls, pCur+88, pWord+56) 13459 _ = pOther 13460 } 13461 13462 func amatchNext(tls *libc.TLS, cur uintptr) int32 { 13463 bp := tls.Alloc(80) 13464 defer tls.Free(80) 13465 13466 var pCur uintptr = cur 13467 var pWord uintptr = uintptr(0) 13468 var pNode uintptr 13469 var isMatch int32 = 0 13470 var p uintptr = (*amatch_cursor)(unsafe.Pointer(pCur)).FpVtab 13471 var nWord int32 13472 var rc int32 13473 var i int32 13474 var zW uintptr 13475 var pRule uintptr 13476 var zBuf uintptr = uintptr(0) 13477 var nBuf int8 = int8(0) 13478 13479 var nNextIn int32 13480 13481 if (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck == uintptr(0) { 13482 var zSql uintptr 13483 if (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang != 0 && *(*int8)(unsafe.Pointer((*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang)) != 0 { 13484 zSql = sqlite3.Xsqlite3_mprintf(tls, 13485 ts+3731, 13486 libc.VaList(bp, ts+3753, 13487 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab, 13488 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabLang)) 13489 } else { 13490 zSql = sqlite3.Xsqlite3_mprintf(tls, 13491 ts+3792, 13492 libc.VaList(bp+40, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord, (*amatch_vtab)(unsafe.Pointer(p)).FzVocabTab, 13493 (*amatch_vtab)(unsafe.Pointer(p)).FzVocabWord)) 13494 } 13495 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*amatch_vtab)(unsafe.Pointer(p)).Fdb, zSql, -1, p+112, uintptr(0)) 13496 sqlite3.Xsqlite3_free(tls, zSql) 13497 if rc != 0 { 13498 return rc 13499 } 13500 } 13501 sqlite3.Xsqlite3_bind_int(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 2, (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang) 13502 13503 for __ccgo := true; __ccgo; __ccgo = !(isMatch != 0) { 13504 pNode = amatchAvlFirst(tls, (*amatch_cursor)(unsafe.Pointer(pCur)).FpCost) 13505 if pNode == uintptr(0) { 13506 pWord = uintptr(0) 13507 break 13508 } 13509 pWord = (*amatch_avl)(unsafe.Pointer(pNode)).FpWord 13510 amatchAvlRemove(tls, pCur+80, pWord+8) 13511 13512 nWord = int32(libc.Xstrlen(tls, pWord+124+uintptr(2))) 13513 if nWord+20 > int32(nBuf) { 13514 nBuf = int8(nWord + 100) 13515 zBuf = sqlite3.Xsqlite3_realloc(tls, zBuf, int32(nBuf)) 13516 if zBuf == uintptr(0) { 13517 return SQLITE_NOMEM 13518 } 13519 } 13520 amatchStrcpy(tls, zBuf, pWord+124+uintptr(2)) 13521 *(*int8)(unsafe.Pointer(bp + 64)) = int8(0) 13522 *(*int8)(unsafe.Pointer(bp + 72)) = *(*int8)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FzInput + uintptr((*amatch_word)(unsafe.Pointer(pWord)).FnMatch))) 13523 if *(*int8)(unsafe.Pointer(bp + 72)) != 0 { 13524 for i = 1; i <= 4 && int32(*(*int8)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FzInput + uintptr(int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+i))))&0xc0 == 0x80; i++ { 13525 *(*int8)(unsafe.Pointer(bp + 72 + uintptr(i))) = *(*int8)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FzInput + uintptr(int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+i))) 13526 } 13527 *(*int8)(unsafe.Pointer(bp + 72 + uintptr(i))) = int8(0) 13528 nNextIn = i 13529 } else { 13530 nNextIn = 0 13531 } 13532 13533 if *(*int8)(unsafe.Pointer(bp + 72)) != 0 && int32(*(*int8)(unsafe.Pointer(bp + 72))) != '*' { 13534 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 13535 amatchStrcat(tls, zBuf, bp+72) 13536 sqlite3.Xsqlite3_bind_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 1, zBuf, nWord+nNextIn, uintptr(0)) 13537 rc = sqlite3.Xsqlite3_step(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 13538 if rc == SQLITE_ROW { 13539 zW = sqlite3.Xsqlite3_column_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 0) 13540 if libc.Xstrncmp(tls, zBuf, zW, uint64(nWord+nNextIn)) == 0 { 13541 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, zBuf, ts+584) 13542 } 13543 } 13544 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 13545 } 13546 13547 for 1 != 0 { 13548 amatchStrcpy(tls, zBuf+uintptr(nWord), bp+64) 13549 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 13550 sqlite3.Xsqlite3_bind_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 1, zBuf, -1, libc.UintptrFromInt32(-1)) 13551 rc = sqlite3.Xsqlite3_step(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 13552 if rc != SQLITE_ROW { 13553 break 13554 } 13555 zW = sqlite3.Xsqlite3_column_text(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck, 0) 13556 amatchStrcpy(tls, zBuf+uintptr(nWord), bp+64) 13557 if libc.Xstrncmp(tls, zW, zBuf, uint64(nWord)) != 0 { 13558 break 13559 } 13560 if int32(*(*int8)(unsafe.Pointer(bp + 72))) == '*' && int32(*(*int8)(unsafe.Pointer(bp + 72 + 1))) == 0 || 13561 int32(*(*int8)(unsafe.Pointer(bp + 72))) == 0 && int32(*(*int8)(unsafe.Pointer(zW + uintptr(nWord)))) == 0 { 13562 isMatch = 1 13563 *(*int8)(unsafe.Pointer(bp + 72)) = int8(0) 13564 nNextIn = 0 13565 break 13566 } 13567 *(*int8)(unsafe.Pointer(bp + 64)) = *(*int8)(unsafe.Pointer(zW + uintptr(nWord))) 13568 for i = 1; i <= 4 && int32(*(*int8)(unsafe.Pointer(zW + uintptr(nWord+i))))&0xc0 == 0x80; i++ { 13569 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i))) = *(*int8)(unsafe.Pointer(zW + uintptr(nWord+i))) 13570 } 13571 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i))) = int8(0) 13572 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 13573 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns > 0 { 13574 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrIns, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch), 13575 zBuf, bp+64) 13576 } 13577 if (*amatch_vtab)(unsafe.Pointer(p)).FrSub > 0 { 13578 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrSub, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, 13579 zBuf, bp+64) 13580 } 13581 if (*amatch_vtab)(unsafe.Pointer(p)).FrIns < 0 && (*amatch_vtab)(unsafe.Pointer(p)).FrSub < 0 { 13582 break 13583 } 13584 *(*int8)(unsafe.Pointer(bp + 64 + uintptr(i-1)))++ 13585 } 13586 sqlite3.Xsqlite3_reset(tls, (*amatch_vtab)(unsafe.Pointer(p)).FpVCheck) 13587 13588 if (*amatch_vtab)(unsafe.Pointer(p)).FrDel > 0 { 13589 *(*int8)(unsafe.Pointer(zBuf + uintptr(nWord))) = int8(0) 13590 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_vtab)(unsafe.Pointer(p)).FrDel, int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+nNextIn, 13591 zBuf, ts+584) 13592 } 13593 13594 for pRule = (*amatch_vtab)(unsafe.Pointer(p)).FpRule; pRule != 0; pRule = (*amatch_rule)(unsafe.Pointer(pRule)).FpNext { 13595 if (*amatch_rule)(unsafe.Pointer(pRule)).FiLang != (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang { 13596 continue 13597 } 13598 if libc.Xstrncmp(tls, (*amatch_rule)(unsafe.Pointer(pRule)).FzFrom, (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput+uintptr((*amatch_word)(unsafe.Pointer(pWord)).FnMatch), uint64((*amatch_rule)(unsafe.Pointer(pRule)).FnFrom)) == 0 { 13599 amatchAddWord(tls, pCur, (*amatch_word)(unsafe.Pointer(pWord)).FrCost+(*amatch_rule)(unsafe.Pointer(pRule)).FrCost, 13600 int32((*amatch_word)(unsafe.Pointer(pWord)).FnMatch)+int32((*amatch_rule)(unsafe.Pointer(pRule)).FnFrom), pWord+124+uintptr(2), pRule+26) 13601 } 13602 } 13603 } 13604 (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent = pWord 13605 sqlite3.Xsqlite3_free(tls, zBuf) 13606 return SQLITE_OK 13607 } 13608 13609 func amatchFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 13610 bp := tls.Alloc(8) 13611 defer tls.Free(8) 13612 13613 var pCur uintptr = pVtabCursor 13614 var zWord uintptr = ts + 3840 13615 var idx int32 13616 13617 amatchClearCursor(tls, pCur) 13618 idx = 0 13619 if idxNum&1 != 0 { 13620 zWord = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 13621 idx++ 13622 } 13623 if idxNum&2 != 0 { 13624 (*amatch_cursor)(unsafe.Pointer(pCur)).FrLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 13625 idx++ 13626 } 13627 if idxNum&4 != 0 { 13628 (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 13629 idx++ 13630 } 13631 (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zWord)) 13632 if (*amatch_cursor)(unsafe.Pointer(pCur)).FzInput == uintptr(0) { 13633 return SQLITE_NOMEM 13634 } 13635 amatchAddWord(tls, pCur, 0, 0, ts+584, ts+584) 13636 amatchNext(tls, pVtabCursor) 13637 13638 return SQLITE_OK 13639 } 13640 13641 func amatchColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 13642 var pCur uintptr = cur 13643 switch i { 13644 case AMATCH_COL_WORD: 13645 { 13646 sqlite3.Xsqlite3_result_text(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent+124+uintptr(2), -1, uintptr(0)) 13647 break 13648 13649 } 13650 case AMATCH_COL_DISTANCE: 13651 { 13652 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_word)(unsafe.Pointer((*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent)).FrCost) 13653 break 13654 13655 } 13656 case AMATCH_COL_LANGUAGE: 13657 { 13658 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FiLang) 13659 break 13660 13661 } 13662 case AMATCH_COL_NWORD: 13663 { 13664 sqlite3.Xsqlite3_result_int(tls, ctx, (*amatch_cursor)(unsafe.Pointer(pCur)).FnWord) 13665 break 13666 13667 } 13668 default: 13669 { 13670 sqlite3.Xsqlite3_result_null(tls, ctx) 13671 break 13672 13673 } 13674 } 13675 return SQLITE_OK 13676 } 13677 13678 func amatchRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 13679 var pCur uintptr = cur 13680 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*amatch_cursor)(unsafe.Pointer(pCur)).FiRowid 13681 return SQLITE_OK 13682 } 13683 13684 func amatchEof(tls *libc.TLS, cur uintptr) int32 { 13685 var pCur uintptr = cur 13686 return libc.Bool32((*amatch_cursor)(unsafe.Pointer(pCur)).FpCurrent == uintptr(0)) 13687 } 13688 13689 func amatchBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 13690 var iPlan int32 = 0 13691 var iDistTerm int32 = -1 13692 var iLangTerm int32 = -1 13693 var i int32 13694 var pConstraint uintptr 13695 13696 _ = tab 13697 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 13698 i = 0 13699 __1: 13700 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 13701 goto __3 13702 } 13703 { 13704 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 13705 goto __2 13706 } 13707 if iPlan&1 == 0 && 13708 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 13709 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 13710 iPlan = iPlan | 1 13711 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 13712 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 13713 } 13714 if iPlan&2 == 0 && 13715 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 1 && 13716 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 13717 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 13718 iPlan = iPlan | 2 13719 iDistTerm = i 13720 } 13721 if iPlan&4 == 0 && 13722 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 2 && 13723 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 13724 iPlan = iPlan | 4 13725 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 13726 iLangTerm = i 13727 } 13728 13729 } 13730 goto __2 13731 __2: 13732 i++ 13733 pConstraint += 12 13734 goto __1 13735 goto __3 13736 __3: 13737 ; 13738 if iPlan&2 != 0 { 13739 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = 1 + libc.Bool32(iPlan&1 != 0) 13740 } 13741 if iPlan&4 != 0 { 13742 var idx int32 = 1 13743 if iPlan&1 != 0 { 13744 idx++ 13745 } 13746 if iPlan&2 != 0 { 13747 idx++ 13748 } 13749 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).FargvIndex = idx 13750 } 13751 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 13752 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 13753 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 1 && 13754 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 13755 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 13756 } 13757 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10000) 13758 13759 return SQLITE_OK 13760 } 13761 13762 func amatchUpdate(tls *libc.TLS, pVTab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 13763 bp := tls.Alloc(24) 13764 defer tls.Free(24) 13765 13766 var p uintptr = pVTab 13767 var zCmd uintptr 13768 _ = pRowid 13769 if argc == 1 { 13770 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+3842, 13771 libc.VaList(bp, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 13772 return SQLITE_ERROR 13773 } 13774 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_NULL { 13775 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+3872, 13776 libc.VaList(bp+8, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 13777 return SQLITE_ERROR 13778 } 13779 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) != SQLITE_NULL || 13780 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) != SQLITE_NULL || 13781 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) != SQLITE_NULL { 13782 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 13783 ts+3900, libc.VaList(bp+16, (*amatch_vtab)(unsafe.Pointer(p)).FzSelf)) 13784 return SQLITE_ERROR 13785 } 13786 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 13787 if zCmd == uintptr(0) { 13788 return SQLITE_OK 13789 } 13790 13791 return SQLITE_OK 13792 } 13793 13794 var amatchModule = sqlite3_module{ 13795 FxCreate: 0, 13796 FxConnect: 0, 13797 FxBestIndex: 0, 13798 FxDisconnect: 0, 13799 FxDestroy: 0, 13800 FxOpen: 0, 13801 FxClose: 0, 13802 FxFilter: 0, 13803 FxNext: 0, 13804 FxEof: 0, 13805 FxColumn: 0, 13806 FxRowid: 0, 13807 FxUpdate: 0, 13808 } 13809 13810 func sqlite3_amatch_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 13811 var rc int32 = SQLITE_OK 13812 _ = pApi 13813 13814 _ = pzErrMsg 13815 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+3949, uintptr(unsafe.Pointer(&amatchModule)), uintptr(0)) 13816 return rc 13817 } 13818 13819 var azType = [4]uintptr{ts + 3967, ts + 3973, ts + 2562, ts + 3979} 13820 13821 type carray_bind1 = struct { 13822 FaData uintptr 13823 FnData int32 13824 FmFlags int32 13825 FxDel uintptr 13826 } 13827 13828 type carray_bind = carray_bind1 13829 13830 type carray_cursor1 = struct { 13831 Fbase sqlite3_vtab_cursor 13832 FiRowid sqlite3_int64 13833 FpPtr uintptr 13834 FiCnt sqlite3_int64 13835 FeType uint8 13836 F__ccgo_pad1 [7]byte 13837 } 13838 13839 type carray_cursor = carray_cursor1 13840 13841 func carrayConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 13842 var pNew uintptr 13843 var rc int32 13844 13845 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 13846 ts+3985) 13847 if rc == SQLITE_OK { 13848 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 13849 if pNew == uintptr(0) { 13850 return SQLITE_NOMEM 13851 } 13852 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{})), libc.X__builtin_object_size(tls, pNew, 0)) 13853 } 13854 return rc 13855 } 13856 13857 func carrayDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 13858 sqlite3.Xsqlite3_free(tls, pVtab) 13859 return SQLITE_OK 13860 } 13861 13862 func carrayOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 13863 var pCur uintptr 13864 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(carray_cursor{}))) 13865 if pCur == uintptr(0) { 13866 return SQLITE_NOMEM 13867 } 13868 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(carray_cursor{})), libc.X__builtin_object_size(tls, pCur, 0)) 13869 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 13870 return SQLITE_OK 13871 } 13872 13873 func carrayClose(tls *libc.TLS, cur uintptr) int32 { 13874 sqlite3.Xsqlite3_free(tls, cur) 13875 return SQLITE_OK 13876 } 13877 13878 func carrayNext(tls *libc.TLS, cur uintptr) int32 { 13879 var pCur uintptr = cur 13880 (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid++ 13881 return SQLITE_OK 13882 } 13883 13884 func carrayColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 13885 var pCur uintptr = cur 13886 var x sqlite3_int64 = int64(0) 13887 switch i { 13888 case CARRAY_COLUMN_POINTER: 13889 return SQLITE_OK 13890 case CARRAY_COLUMN_COUNT: 13891 x = (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt 13892 break 13893 case CARRAY_COLUMN_CTYPE: 13894 { 13895 sqlite3.Xsqlite3_result_text(tls, ctx, azType[(*carray_cursor)(unsafe.Pointer(pCur)).FeType], -1, uintptr(0)) 13896 return SQLITE_OK 13897 13898 } 13899 default: 13900 { 13901 switch int32((*carray_cursor)(unsafe.Pointer(pCur)).FeType) { 13902 case CARRAY_INT32: 13903 { 13904 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 13905 sqlite3.Xsqlite3_result_int(tls, ctx, *(*int32)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*4))) 13906 return SQLITE_OK 13907 13908 } 13909 case CARRAY_INT64: 13910 { 13911 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 13912 sqlite3.Xsqlite3_result_int64(tls, ctx, *(*sqlite3_int64)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8))) 13913 return SQLITE_OK 13914 13915 } 13916 case CARRAY_DOUBLE: 13917 { 13918 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 13919 sqlite3.Xsqlite3_result_double(tls, ctx, *(*float64)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8))) 13920 return SQLITE_OK 13921 13922 } 13923 case CARRAY_TEXT: 13924 { 13925 var p uintptr = (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr 13926 sqlite3.Xsqlite3_result_text(tls, ctx, *(*uintptr)(unsafe.Pointer(p + uintptr((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid-int64(1))*8)), -1, libc.UintptrFromInt32(-1)) 13927 return SQLITE_OK 13928 13929 } 13930 } 13931 13932 } 13933 } 13934 sqlite3.Xsqlite3_result_int64(tls, ctx, x) 13935 return SQLITE_OK 13936 } 13937 13938 func carrayRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 13939 var pCur uintptr = cur 13940 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid 13941 return SQLITE_OK 13942 } 13943 13944 func carrayEof(tls *libc.TLS, cur uintptr) int32 { 13945 var pCur uintptr = cur 13946 return libc.Bool32((*carray_cursor)(unsafe.Pointer(pCur)).FiRowid > (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt) 13947 } 13948 13949 func carrayFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 13950 bp := tls.Alloc(8) 13951 defer tls.Free(8) 13952 13953 var pCur uintptr = pVtabCursor 13954 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = uintptr(0) 13955 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = int64(0) 13956 switch idxNum { 13957 case 1: 13958 { 13959 var pBind uintptr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv)), ts+4048) 13960 if pBind == uintptr(0) { 13961 break 13962 } 13963 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = (*carray_bind)(unsafe.Pointer(pBind)).FaData 13964 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = sqlite3_int64((*carray_bind)(unsafe.Pointer(pBind)).FnData) 13965 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = uint8((*carray_bind)(unsafe.Pointer(pBind)).FmFlags & 0x03) 13966 break 13967 13968 } 13969 case 2: 13970 fallthrough 13971 case 3: 13972 { 13973 (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv)), ts+4060) 13974 (*carray_cursor)(unsafe.Pointer(pCur)).FiCnt = func() int64 { 13975 if (*carray_cursor)(unsafe.Pointer(pCur)).FpPtr != 0 { 13976 return sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 13977 } 13978 return int64(0) 13979 }() 13980 if idxNum < 3 { 13981 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = uint8(CARRAY_INT32) 13982 } else { 13983 var i uint8 13984 var zType uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 13985 for i = uint8(0); uint64(i) < uint64(unsafe.Sizeof(azType))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 13986 if sqlite3.Xsqlite3_stricmp(tls, zType, azType[i]) == 0 { 13987 break 13988 } 13989 } 13990 if uint64(i) >= uint64(unsafe.Sizeof(azType))/uint64(unsafe.Sizeof(uintptr(0))) { 13991 (*sqlite3_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 13992 ts+4067, libc.VaList(bp, zType)) 13993 return SQLITE_ERROR 13994 } else { 13995 (*carray_cursor)(unsafe.Pointer(pCur)).FeType = i 13996 } 13997 } 13998 break 13999 14000 } 14001 } 14002 (*carray_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 14003 return SQLITE_OK 14004 } 14005 14006 func carrayBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 14007 var i int32 14008 var ptrIdx int32 = -1 14009 var cntIdx int32 = -1 14010 var ctypeIdx int32 = -1 14011 14012 var pConstraint uintptr 14013 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 14014 i = 0 14015 __1: 14016 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 14017 goto __3 14018 } 14019 { 14020 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 14021 goto __2 14022 } 14023 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 14024 goto __2 14025 } 14026 switch (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn { 14027 case CARRAY_COLUMN_POINTER: 14028 ptrIdx = i 14029 break 14030 case CARRAY_COLUMN_COUNT: 14031 cntIdx = i 14032 break 14033 case CARRAY_COLUMN_CTYPE: 14034 ctypeIdx = i 14035 break 14036 } 14037 14038 } 14039 goto __2 14040 __2: 14041 i++ 14042 pConstraint += 12 14043 goto __1 14044 goto __3 14045 __3: 14046 ; 14047 if ptrIdx >= 0 { 14048 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ptrIdx)*8)).FargvIndex = 1 14049 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ptrIdx)*8)).Fomit = uint8(1) 14050 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1) 14051 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(100) 14052 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 14053 if cntIdx >= 0 { 14054 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(cntIdx)*8)).FargvIndex = 2 14055 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(cntIdx)*8)).Fomit = uint8(1) 14056 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 2 14057 if ctypeIdx >= 0 { 14058 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ctypeIdx)*8)).FargvIndex = 3 14059 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ctypeIdx)*8)).Fomit = uint8(1) 14060 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 3 14061 } 14062 } 14063 } else { 14064 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(2147483647) 14065 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(2147483647) 14066 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 14067 } 14068 return SQLITE_OK 14069 } 14070 14071 var carrayModule = sqlite3_module{ 14072 FxConnect: 0, 14073 FxBestIndex: 0, 14074 FxDisconnect: 0, 14075 FxOpen: 0, 14076 FxClose: 0, 14077 FxFilter: 0, 14078 FxNext: 0, 14079 FxEof: 0, 14080 FxColumn: 0, 14081 FxRowid: 0, 14082 } 14083 14084 func carrayBindDel(tls *libc.TLS, pPtr uintptr) { 14085 var p uintptr = pPtr 14086 if (*carray_bind)(unsafe.Pointer(p)).FxDel != uintptr(0) { 14087 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*carray_bind)(unsafe.Pointer(p)).FxDel})).f(tls, (*carray_bind)(unsafe.Pointer(p)).FaData) 14088 } 14089 sqlite3.Xsqlite3_free(tls, p) 14090 } 14091 14092 func sqlite3_carray_bind(tls *libc.TLS, pStmt uintptr, idx int32, aData uintptr, nData int32, mFlags int32, xDestroy uintptr) int32 { 14093 var pNew uintptr 14094 var i int32 14095 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(carray_bind{}))) 14096 if pNew == uintptr(0) { 14097 if xDestroy != uintptr(0) && xDestroy != libc.UintptrFromInt32(-1) { 14098 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{xDestroy})).f(tls, aData) 14099 } 14100 return SQLITE_NOMEM 14101 } 14102 (*carray_bind)(unsafe.Pointer(pNew)).FnData = nData 14103 (*carray_bind)(unsafe.Pointer(pNew)).FmFlags = mFlags 14104 if xDestroy == libc.UintptrFromInt32(-1) { 14105 var sz sqlite3_int64 = sqlite3_int64(nData) 14106 switch mFlags & 0x03 { 14107 case CARRAY_INT32: 14108 sz = sz * int64(4) 14109 break 14110 fallthrough 14111 case CARRAY_INT64: 14112 sz = sz * int64(8) 14113 break 14114 fallthrough 14115 case CARRAY_DOUBLE: 14116 sz = sz * int64(8) 14117 break 14118 fallthrough 14119 case CARRAY_TEXT: 14120 sz = int64(uint64(sz) * uint64(unsafe.Sizeof(uintptr(0)))) 14121 break 14122 } 14123 if mFlags&0x03 == CARRAY_TEXT { 14124 for i = 0; i < nData; i++ { 14125 var z uintptr = *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8)) 14126 if z != 0 { 14127 sz = sqlite3_int64(uint64(sz) + (libc.Xstrlen(tls, z) + uint64(1))) 14128 } 14129 } 14130 } 14131 (*carray_bind)(unsafe.Pointer(pNew)).FaData = sqlite3.Xsqlite3_malloc64(tls, uint64(sz)) 14132 if (*carray_bind)(unsafe.Pointer(pNew)).FaData == uintptr(0) { 14133 sqlite3.Xsqlite3_free(tls, pNew) 14134 return SQLITE_NOMEM 14135 } 14136 if mFlags&0x03 == CARRAY_TEXT { 14137 var az uintptr = (*carray_bind)(unsafe.Pointer(pNew)).FaData 14138 var z uintptr = az + uintptr(nData)*8 14139 for i = 0; i < nData; i++ { 14140 var zData uintptr = *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8)) 14141 var n sqlite3_int64 14142 if zData == uintptr(0) { 14143 *(*uintptr)(unsafe.Pointer(az + uintptr(i)*8)) = uintptr(0) 14144 continue 14145 } 14146 *(*uintptr)(unsafe.Pointer(az + uintptr(i)*8)) = z 14147 n = sqlite3_int64(libc.Xstrlen(tls, zData)) 14148 libc.X__builtin___memcpy_chk(tls, z, zData, uint64(n+int64(1)), libc.X__builtin_object_size(tls, z, 0)) 14149 z += uintptr(n + int64(1)) 14150 } 14151 } else { 14152 libc.X__builtin___memcpy_chk(tls, (*carray_bind)(unsafe.Pointer(pNew)).FaData, aData, uint64(sz), libc.X__builtin_object_size(tls, (*carray_bind)(unsafe.Pointer(pNew)).FaData, 0)) 14153 } 14154 (*carray_bind)(unsafe.Pointer(pNew)).FxDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 14155 } else { 14156 (*carray_bind)(unsafe.Pointer(pNew)).FaData = aData 14157 (*carray_bind)(unsafe.Pointer(pNew)).FxDel = xDestroy 14158 } 14159 return sqlite3.Xsqlite3_bind_pointer(tls, pStmt, idx, pNew, ts+4048, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{carrayBindDel}))) 14160 } 14161 14162 func inttoptrFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14163 bp := tls.Alloc(20) 14164 defer tls.Free(20) 14165 14166 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 14167 if uint64(unsafe.Sizeof(sqlite3_int64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 14168 libc.X__builtin___memcpy_chk(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0))), libc.X__builtin_object_size(tls, bp, 0)) 14169 } else { 14170 *(*int32)(unsafe.Pointer(bp + 16)) = int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 8)) & int64(0xffffffff)) 14171 libc.X__builtin___memcpy_chk(tls, bp, bp+16, uint64(unsafe.Sizeof(uintptr(0))), libc.X__builtin_object_size(tls, bp, 0)) 14172 } 14173 sqlite3.Xsqlite3_result_pointer(tls, context, *(*uintptr)(unsafe.Pointer(bp)), ts+4060, uintptr(0)) 14174 } 14175 14176 func sqlite3_carray_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14177 var rc int32 = SQLITE_OK 14178 _ = pApi 14179 14180 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4060, uintptr(unsafe.Pointer(&carrayModule)), uintptr(0)) 14181 if rc == SQLITE_OK { 14182 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4088, 1, SQLITE_UTF8, uintptr(0), 14183 *(*uintptr)(unsafe.Pointer(&struct { 14184 f func(*libc.TLS, uintptr, int32, uintptr) 14185 }{inttoptrFunc})), uintptr(0), uintptr(0)) 14186 } 14187 return rc 14188 } 14189 14190 type CksmVfs = sqlite3_vfs1 14191 type CksmFile1 = struct { 14192 Fbase sqlite3_file 14193 FzFName uintptr 14194 FcomputeCksm int8 14195 FverifyCksm int8 14196 FisWal int8 14197 FinCkpt int8 14198 F__ccgo_pad1 [4]byte 14199 FpPartner uintptr 14200 } 14201 14202 type CksmFile = CksmFile1 14203 14204 type u8 = uint8 14205 14206 var cksm_vfs = sqlite3_vfs{ 14207 FiVersion: 3, 14208 FmxPathname: 1024, 14209 FzName: ts + 4097, 14210 FxOpen: 0, 14211 FxDelete: 0, 14212 FxAccess: 0, 14213 FxFullPathname: 0, 14214 FxDlOpen: 0, 14215 FxDlError: 0, 14216 FxDlSym: 0, 14217 FxDlClose: 0, 14218 FxRandomness: 0, 14219 FxSleep: 0, 14220 FxCurrentTime: 0, 14221 FxGetLastError: 0, 14222 FxCurrentTimeInt64: 0, 14223 FxSetSystemCall: 0, 14224 FxGetSystemCall: 0, 14225 FxNextSystemCall: 0, 14226 } 14227 14228 var cksm_io_methods = sqlite3_io_methods{ 14229 FiVersion: 3, 14230 FxClose: 0, 14231 FxRead: 0, 14232 FxWrite: 0, 14233 FxTruncate: 0, 14234 FxSync: 0, 14235 FxFileSize: 0, 14236 FxLock: 0, 14237 FxUnlock: 0, 14238 FxCheckReservedLock: 0, 14239 FxFileControl: 0, 14240 FxSectorSize: 0, 14241 FxDeviceCharacteristics: 0, 14242 FxShmMap: 0, 14243 FxShmLock: 0, 14244 FxShmBarrier: 0, 14245 FxShmUnmap: 0, 14246 FxFetch: 0, 14247 FxUnfetch: 0, 14248 } 14249 14250 func cksmCompute(tls *libc.TLS, a uintptr, nByte int32, aOut uintptr) { 14251 bp := tls.Alloc(12) 14252 defer tls.Free(12) 14253 14254 *(*u32)(unsafe.Pointer(bp + 4)) = u32(0) 14255 *(*u32)(unsafe.Pointer(bp + 8)) = u32(0) 14256 var aData uintptr = a 14257 var aEnd uintptr = a + uintptr(nByte) 14258 *(*u32)(unsafe.Pointer(bp)) = u32(1) 14259 14260 if 1 == int32(*(*u8)(unsafe.Pointer(bp))) { 14261 for __ccgo := true; __ccgo; __ccgo = aData < aEnd { 14262 *(*u32)(unsafe.Pointer(bp + 4)) += *(*u32)(unsafe.Pointer(libc.PostIncUintptr(&aData, 4))) + *(*u32)(unsafe.Pointer(bp + 8)) 14263 *(*u32)(unsafe.Pointer(bp + 8)) += *(*u32)(unsafe.Pointer(libc.PostIncUintptr(&aData, 4))) + *(*u32)(unsafe.Pointer(bp + 4)) 14264 } 14265 } else { 14266 for __ccgo1 := true; __ccgo1; __ccgo1 = aData < aEnd { 14267 *(*u32)(unsafe.Pointer(bp + 4)) += *(*u32)(unsafe.Pointer(aData))&u32(0x000000FF)<<24 + *(*u32)(unsafe.Pointer(aData))&u32(0x0000FF00)<<8 + *(*u32)(unsafe.Pointer(aData))&u32(0x00FF0000)>>8 + *(*u32)(unsafe.Pointer(aData))&0xFF000000>>24 + *(*u32)(unsafe.Pointer(bp + 8)) 14268 *(*u32)(unsafe.Pointer(bp + 8)) += *(*u32)(unsafe.Pointer(aData + 1*4))&u32(0x000000FF)<<24 + *(*u32)(unsafe.Pointer(aData + 1*4))&u32(0x0000FF00)<<8 + *(*u32)(unsafe.Pointer(aData + 1*4))&u32(0x00FF0000)>>8 + *(*u32)(unsafe.Pointer(aData + 1*4))&0xFF000000>>24 + *(*u32)(unsafe.Pointer(bp + 4)) 14269 aData += 4 * uintptr(2) 14270 } 14271 *(*u32)(unsafe.Pointer(bp + 4)) = *(*u32)(unsafe.Pointer(bp + 4))&u32(0x000000FF)<<24 + *(*u32)(unsafe.Pointer(bp + 4))&u32(0x0000FF00)<<8 + *(*u32)(unsafe.Pointer(bp + 4))&u32(0x00FF0000)>>8 + *(*u32)(unsafe.Pointer(bp + 4))&0xFF000000>>24 14272 *(*u32)(unsafe.Pointer(bp + 8)) = *(*u32)(unsafe.Pointer(bp + 8))&u32(0x000000FF)<<24 + *(*u32)(unsafe.Pointer(bp + 8))&u32(0x0000FF00)<<8 + *(*u32)(unsafe.Pointer(bp + 8))&u32(0x00FF0000)>>8 + *(*u32)(unsafe.Pointer(bp + 8))&0xFF000000>>24 14273 } 14274 libc.X__builtin___memcpy_chk(tls, aOut, bp+4, uint64(4), libc.X__builtin_object_size(tls, aOut, 0)) 14275 libc.X__builtin___memcpy_chk(tls, aOut+uintptr(4), bp+8, uint64(4), libc.X__builtin_object_size(tls, aOut+uintptr(4), 0)) 14276 } 14277 14278 func cksmVerifyFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 14279 bp := tls.Alloc(8) 14280 defer tls.Free(8) 14281 14282 var nByte int32 14283 var data uintptr 14284 14285 data = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 14286 if data == uintptr(0) { 14287 return 14288 } 14289 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_BLOB { 14290 return 14291 } 14292 nByte = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 14293 if nByte < 512 || nByte > 65536 || nByte&(nByte-1) != 0 { 14294 return 14295 } 14296 cksmCompute(tls, data, nByte-8, bp) 14297 sqlite3.Xsqlite3_result_int(tls, context, libc.Bool32(libc.Xmemcmp(tls, data+uintptr(nByte)-uintptr(8), bp, uint64(8)) == 0)) 14298 } 14299 14300 func cksmClose(tls *libc.TLS, pFile uintptr) int32 { 14301 var p uintptr = pFile 14302 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 14303 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FpPartner = uintptr(0) 14304 (*CksmFile)(unsafe.Pointer(p)).FpPartner = uintptr(0) 14305 } 14306 pFile = pFile + uintptr(1)*32 14307 return (*struct { 14308 f func(*libc.TLS, uintptr) int32 14309 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxClose})).f(tls, pFile) 14310 } 14311 14312 func cksmSetFlags(tls *libc.TLS, p uintptr, hasCorrectReserveSize int32) { 14313 if hasCorrectReserveSize != int32((*CksmFile)(unsafe.Pointer(p)).FcomputeCksm) { 14314 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = libc.AssignPtrInt8(p+17, int8(hasCorrectReserveSize)) 14315 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 14316 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FverifyCksm = int8(hasCorrectReserveSize) 14317 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FcomputeCksm = int8(hasCorrectReserveSize) 14318 } 14319 } 14320 } 14321 14322 func cksmRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 14323 bp := tls.Alloc(24) 14324 defer tls.Free(24) 14325 14326 var rc int32 14327 var p uintptr = pFile 14328 pFile = pFile + uintptr(1)*32 14329 rc = (*struct { 14330 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 14331 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxRead})).f(tls, pFile, zBuf, iAmt, iOfst) 14332 if rc == SQLITE_OK { 14333 if iOfst == int64(0) && iAmt >= 100 && (libc.Xmemcmp(tls, zBuf, ts+3288, uint64(16)) == 0 || libc.Xmemcmp(tls, zBuf, ts+4105, uint64(3)) == 0) { 14334 var d uintptr = zBuf 14335 var hasCorrectReserveSize int8 = int8(libc.Bool32(int32(*(*u8)(unsafe.Pointer(d + 20))) == 8)) 14336 cksmSetFlags(tls, p, int32(hasCorrectReserveSize)) 14337 } 14338 14339 if iAmt >= 512 && 14340 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm != 0 && 14341 !(int32((*CksmFile)(unsafe.Pointer(p)).FinCkpt) != 0) { 14342 cksmCompute(tls, zBuf, iAmt-8, bp+16) 14343 if libc.Xmemcmp(tls, zBuf+uintptr(iAmt)-uintptr(8), bp+16, uint64(8)) != 0 { 14344 sqlite3.Xsqlite3_log(tls, SQLITE_IOERR|int32(32)<<8, 14345 ts+4109, 14346 libc.VaList(bp, iOfst, (*CksmFile)(unsafe.Pointer(p)).FzFName)) 14347 rc = SQLITE_IOERR | int32(32)<<8 14348 } 14349 } 14350 } 14351 return rc 14352 } 14353 14354 func cksmWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 14355 var p uintptr = pFile 14356 pFile = pFile + uintptr(1)*32 14357 if iOfst == int64(0) && iAmt >= 100 && (libc.Xmemcmp(tls, zBuf, ts+3288, uint64(16)) == 0 || libc.Xmemcmp(tls, zBuf, ts+4105, uint64(3)) == 0) { 14358 var d uintptr = zBuf 14359 var hasCorrectReserveSize int8 = int8(libc.Bool32(int32(*(*u8)(unsafe.Pointer(d + 20))) == 8)) 14360 cksmSetFlags(tls, p, int32(hasCorrectReserveSize)) 14361 } 14362 14363 if iAmt >= 512 && 14364 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 && 14365 !(int32((*CksmFile)(unsafe.Pointer(p)).FinCkpt) != 0) { 14366 cksmCompute(tls, zBuf, iAmt-8, zBuf+uintptr(iAmt)-uintptr(8)) 14367 } 14368 return (*struct { 14369 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 14370 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxWrite})).f(tls, pFile, zBuf, iAmt, iOfst) 14371 } 14372 14373 func cksmTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 14374 pFile = pFile + uintptr(1)*32 14375 return (*struct { 14376 f func(*libc.TLS, uintptr, sqlite3_int64) int32 14377 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxTruncate})).f(tls, pFile, size) 14378 } 14379 14380 func cksmSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 14381 pFile = pFile + uintptr(1)*32 14382 return (*struct { 14383 f func(*libc.TLS, uintptr, int32) int32 14384 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSync})).f(tls, pFile, flags) 14385 } 14386 14387 func cksmFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 14388 var p uintptr = pFile 14389 pFile = p + uintptr(1)*32 14390 return (*struct { 14391 f func(*libc.TLS, uintptr, uintptr) int32 14392 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileSize})).f(tls, pFile, pSize) 14393 } 14394 14395 func cksmLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 14396 pFile = pFile + uintptr(1)*32 14397 return (*struct { 14398 f func(*libc.TLS, uintptr, int32) int32 14399 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxLock})).f(tls, pFile, eLock) 14400 } 14401 14402 func cksmUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 14403 pFile = pFile + uintptr(1)*32 14404 return (*struct { 14405 f func(*libc.TLS, uintptr, int32) int32 14406 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnlock})).f(tls, pFile, eLock) 14407 } 14408 14409 func cksmCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 14410 pFile = pFile + uintptr(1)*32 14411 return (*struct { 14412 f func(*libc.TLS, uintptr, uintptr) int32 14413 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxCheckReservedLock})).f(tls, pFile, pResOut) 14414 } 14415 14416 func cksmFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 14417 bp := tls.Alloc(16) 14418 defer tls.Free(16) 14419 14420 var rc int32 14421 var p uintptr = pFile 14422 pFile = pFile + uintptr(1)*32 14423 if op == SQLITE_FCNTL_PRAGMA { 14424 var azArg uintptr = pArg 14425 14426 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(azArg + 1*8)), ts+4144) == 0 { 14427 var zArg uintptr = *(*uintptr)(unsafe.Pointer(azArg + 2*8)) 14428 if zArg != uintptr(0) { 14429 if int32(*(*int8)(unsafe.Pointer(zArg))) >= '1' && int32(*(*int8)(unsafe.Pointer(zArg))) <= '9' || 14430 sqlite3.Xsqlite3_strlike(tls, ts+4166, zArg, uint32(0)) == 0 || 14431 sqlite3.Xsqlite3_stricmp(tls, ts+4174, zArg) == 0 || 14432 sqlite3.Xsqlite3_stricmp(tls, ts+4178, zArg) == 0 { 14433 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm = (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm 14434 } else { 14435 (*CksmFile)(unsafe.Pointer(p)).FverifyCksm = int8(0) 14436 } 14437 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 14438 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FverifyCksm = (*CksmFile)(unsafe.Pointer(p)).FverifyCksm 14439 } 14440 } 14441 *(*uintptr)(unsafe.Pointer(azArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp, int32((*CksmFile)(unsafe.Pointer(p)).FverifyCksm))) 14442 return SQLITE_OK 14443 } else if (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 && *(*uintptr)(unsafe.Pointer(azArg + 2*8)) != uintptr(0) && 14444 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(azArg + 1*8)), ts+4181) == 0 { 14445 return SQLITE_OK 14446 } 14447 } else if op == SQLITE_FCNTL_CKPT_START || op == SQLITE_FCNTL_CKPT_DONE { 14448 (*CksmFile)(unsafe.Pointer(p)).FinCkpt = int8(libc.Bool32(op == SQLITE_FCNTL_CKPT_START)) 14449 if (*CksmFile)(unsafe.Pointer(p)).FpPartner != 0 { 14450 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FinCkpt = (*CksmFile)(unsafe.Pointer(p)).FinCkpt 14451 } 14452 } else if op == SQLITE_FCNTL_CKSM_FILE { 14453 var ppFile uintptr = pArg 14454 *(*uintptr)(unsafe.Pointer(ppFile)) = p 14455 return SQLITE_OK 14456 } 14457 rc = (*struct { 14458 f func(*libc.TLS, uintptr, int32, uintptr) int32 14459 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFileControl})).f(tls, pFile, op, pArg) 14460 if rc == SQLITE_OK && op == SQLITE_FCNTL_VFSNAME { 14461 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+4191, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(pArg)))) 14462 } 14463 return rc 14464 } 14465 14466 func cksmSectorSize(tls *libc.TLS, pFile uintptr) int32 { 14467 pFile = pFile + uintptr(1)*32 14468 return (*struct { 14469 f func(*libc.TLS, uintptr) int32 14470 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxSectorSize})).f(tls, pFile) 14471 } 14472 14473 func cksmDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 14474 pFile = pFile + uintptr(1)*32 14475 return (*struct { 14476 f func(*libc.TLS, uintptr) int32 14477 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxDeviceCharacteristics})).f(tls, pFile) 14478 } 14479 14480 func cksmShmMap(tls *libc.TLS, pFile uintptr, iPg int32, pgsz int32, bExtend int32, pp uintptr) int32 { 14481 pFile = pFile + uintptr(1)*32 14482 return (*struct { 14483 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 14484 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmMap})).f(tls, pFile, iPg, pgsz, bExtend, pp) 14485 } 14486 14487 func cksmShmLock(tls *libc.TLS, pFile uintptr, offset int32, n int32, flags int32) int32 { 14488 pFile = pFile + uintptr(1)*32 14489 return (*struct { 14490 f func(*libc.TLS, uintptr, int32, int32, int32) int32 14491 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmLock})).f(tls, pFile, offset, n, flags) 14492 } 14493 14494 func cksmShmBarrier(tls *libc.TLS, pFile uintptr) { 14495 pFile = pFile + uintptr(1)*32 14496 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmBarrier})).f(tls, pFile) 14497 } 14498 14499 func cksmShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 14500 pFile = pFile + uintptr(1)*32 14501 return (*struct { 14502 f func(*libc.TLS, uintptr, int32) int32 14503 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxShmUnmap})).f(tls, pFile, deleteFlag) 14504 } 14505 14506 func cksmFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 14507 var p uintptr = pFile 14508 if (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm != 0 { 14509 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 14510 return SQLITE_OK 14511 } 14512 pFile = pFile + uintptr(1)*32 14513 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FiVersion > 2 && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFetch != 0 { 14514 return (*struct { 14515 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 14516 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxFetch})).f(tls, pFile, iOfst, iAmt, pp) 14517 } 14518 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 14519 return SQLITE_OK 14520 } 14521 14522 func cksmUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, pPage uintptr) int32 { 14523 pFile = pFile + uintptr(1)*32 14524 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FiVersion > 2 && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnfetch != 0 { 14525 return (*struct { 14526 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 14527 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods)).FxUnfetch})).f(tls, pFile, iOfst, pPage) 14528 } 14529 return SQLITE_OK 14530 } 14531 14532 func cksmOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 14533 bp := tls.Alloc(8) 14534 defer tls.Free(8) 14535 14536 var p uintptr 14537 var pSubFile uintptr 14538 var pSubVfs uintptr 14539 var rc int32 14540 14541 pSubVfs = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 14542 if !(flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_WAL) == 0) { 14543 goto __1 14544 } 14545 return (*struct { 14546 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 14547 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pSubVfs)).FxOpen})).f(tls, pSubVfs, zName, pFile, flags, pOutFlags) 14548 __1: 14549 ; 14550 p = pFile 14551 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(CksmFile{})), libc.X__builtin_object_size(tls, p, 0)) 14552 pSubFile = pFile + uintptr(1)*32 14553 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&cksm_io_methods)) 14554 rc = (*struct { 14555 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 14556 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pSubVfs)).FxOpen})).f(tls, pSubVfs, zName, pSubFile, flags, pOutFlags) 14557 if !(rc != 0) { 14558 goto __2 14559 } 14560 goto cksm_open_done 14561 __2: 14562 ; 14563 if !(flags&SQLITE_OPEN_WAL != 0) { 14564 goto __3 14565 } 14566 *(*uintptr)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_database_file_object(tls, zName) 14567 rc = (*struct { 14568 f func(*libc.TLS, uintptr, int32, uintptr) int32 14569 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpMethods)).FxFileControl})).f(tls, *(*uintptr)(unsafe.Pointer(bp)), SQLITE_FCNTL_CKSM_FILE, bp) 14570 14571 (*CksmFile)(unsafe.Pointer(p)).FpPartner = *(*uintptr)(unsafe.Pointer(bp)) 14572 14573 (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FpPartner = p 14574 (*CksmFile)(unsafe.Pointer(p)).FisWal = int8(1) 14575 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = (*CksmFile)(unsafe.Pointer((*CksmFile)(unsafe.Pointer(p)).FpPartner)).FcomputeCksm 14576 goto __4 14577 __3: 14578 (*CksmFile)(unsafe.Pointer(p)).FisWal = int8(0) 14579 (*CksmFile)(unsafe.Pointer(p)).FcomputeCksm = int8(0) 14580 __4: 14581 ; 14582 (*CksmFile)(unsafe.Pointer(p)).FzFName = zName 14583 cksm_open_done: 14584 if !(rc != 0) { 14585 goto __5 14586 } 14587 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 14588 __5: 14589 ; 14590 return rc 14591 } 14592 14593 func cksmDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 14594 return (*struct { 14595 f func(*libc.TLS, uintptr, uintptr, int32) int32 14596 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDelete})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath, dirSync) 14597 } 14598 14599 func cksmAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 14600 return (*struct { 14601 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 14602 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxAccess})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath, flags, pResOut) 14603 } 14604 14605 func cksmFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 14606 return (*struct { 14607 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 14608 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxFullPathname})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath, nOut, zOut) 14609 } 14610 14611 func cksmDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 14612 return (*struct { 14613 f func(*libc.TLS, uintptr, uintptr) uintptr 14614 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlOpen})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zPath) 14615 } 14616 14617 func cksmDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 14618 (*struct { 14619 f func(*libc.TLS, uintptr, int32, uintptr) 14620 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlError})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nByte, zErrMsg) 14621 } 14622 14623 func cksmDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 14624 return (*struct { 14625 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 14626 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlSym})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, p, zSym) 14627 } 14628 14629 func cksmDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 14630 (*struct { 14631 f func(*libc.TLS, uintptr, uintptr) 14632 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxDlClose})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pHandle) 14633 } 14634 14635 func cksmRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 14636 return (*struct { 14637 f func(*libc.TLS, uintptr, int32, uintptr) int32 14638 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxRandomness})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nByte, zBufOut) 14639 } 14640 14641 func cksmSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 14642 return (*struct { 14643 f func(*libc.TLS, uintptr, int32) int32 14644 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSleep})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, nMicro) 14645 } 14646 14647 func cksmCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 14648 return (*struct { 14649 f func(*libc.TLS, uintptr, uintptr) int32 14650 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxCurrentTime})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, pTimeOut) 14651 } 14652 14653 func cksmGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 14654 return (*struct { 14655 f func(*libc.TLS, uintptr, int32, uintptr) int32 14656 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetLastError})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, a, b) 14657 } 14658 14659 func cksmCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 14660 bp := tls.Alloc(8) 14661 defer tls.Free(8) 14662 14663 var pOrig uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 14664 var rc int32 14665 14666 if (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTimeInt64 != 0 { 14667 rc = (*struct { 14668 f func(*libc.TLS, uintptr, uintptr) int32 14669 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTimeInt64})).f(tls, pOrig, p) 14670 } else { 14671 rc = (*struct { 14672 f func(*libc.TLS, uintptr, uintptr) int32 14673 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrig)).FxCurrentTime})).f(tls, pOrig, bp) 14674 *(*sqlite3_int64)(unsafe.Pointer(p)) = libc.Int64FromFloat64(*(*float64)(unsafe.Pointer(bp)) * 86400000.0) 14675 } 14676 return rc 14677 } 14678 14679 func cksmSetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr, pCall sqlite3_syscall_ptr) int32 { 14680 return (*struct { 14681 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 14682 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxSetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName, pCall) 14683 } 14684 14685 func cksmGetSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) sqlite3_syscall_ptr { 14686 return (*struct { 14687 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 14688 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxGetSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 14689 } 14690 14691 func cksmNextSystemCall(tls *libc.TLS, pVfs uintptr, zName uintptr) uintptr { 14692 return (*struct { 14693 f func(*libc.TLS, uintptr, uintptr) uintptr 14694 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FxNextSystemCall})).f(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData, zName) 14695 } 14696 14697 func cksmRegisterFunc(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 14698 var rc int32 14699 if db == uintptr(0) { 14700 return SQLITE_OK 14701 } 14702 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4199, 1, 14703 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 14704 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 14705 f func(*libc.TLS, uintptr, int32, uintptr) 14706 }{cksmVerifyFunc})), uintptr(0), uintptr(0)) 14707 return rc 14708 } 14709 14710 func cksmRegisterVfs(tls *libc.TLS) int32 { 14711 var rc int32 = SQLITE_OK 14712 var pOrig uintptr 14713 if sqlite3.Xsqlite3_vfs_find(tls, ts+4097) != uintptr(0) { 14714 return SQLITE_OK 14715 } 14716 pOrig = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 14717 if pOrig == uintptr(0) { 14718 return SQLITE_ERROR 14719 } 14720 cksm_vfs.FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pOrig)).FiVersion 14721 cksm_vfs.FpAppData = pOrig 14722 cksm_vfs.FszOsFile = int32(uint64((*sqlite3_vfs)(unsafe.Pointer(pOrig)).FszOsFile) + uint64(unsafe.Sizeof(CksmFile{}))) 14723 rc = sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&cksm_vfs)), 1) 14724 if rc == SQLITE_OK { 14725 rc = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 14726 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 14727 }{cksmRegisterFunc}))) 14728 } 14729 return rc 14730 } 14731 14732 func sqlite3_register_cksumvfs(tls *libc.TLS, NotUsed uintptr) int32 { 14733 _ = NotUsed 14734 return cksmRegisterVfs(tls) 14735 } 14736 14737 func sqlite3_unregister_cksumvfs(tls *libc.TLS) int32 { 14738 if sqlite3.Xsqlite3_vfs_find(tls, ts+4097) != 0 { 14739 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&cksm_vfs))) 14740 sqlite3.Xsqlite3_cancel_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 14741 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 14742 }{cksmRegisterFunc}))) 14743 } 14744 return SQLITE_OK 14745 } 14746 14747 type closure_vtab1 = struct { 14748 Fbase sqlite3_vtab 14749 FzDb uintptr 14750 FzSelf uintptr 14751 FzTableName uintptr 14752 FzIdColumn uintptr 14753 FzParentColumn uintptr 14754 Fdb uintptr 14755 FnCursor int32 14756 F__ccgo_pad1 [4]byte 14757 } 14758 14759 type closure_vtab = closure_vtab1 14760 type closure_cursor1 = struct { 14761 Fbase sqlite3_vtab_cursor 14762 FpVtab uintptr 14763 FzTableName uintptr 14764 FzIdColumn uintptr 14765 FzParentColumn uintptr 14766 FpCurrent uintptr 14767 FpClosure uintptr 14768 } 14769 14770 type closure_cursor = closure_cursor1 14771 type closure_queue1 = struct { 14772 FpFirst uintptr 14773 FpLast uintptr 14774 } 14775 14776 type closure_queue = closure_queue1 14777 type closure_avl1 = struct { 14778 Fid sqlite3_int64 14779 FiGeneration int32 14780 F__ccgo_pad1 [4]byte 14781 FpList uintptr 14782 FpBefore uintptr 14783 FpAfter uintptr 14784 FpUp uintptr 14785 Fheight int16 14786 Fimbalance int16 14787 F__ccgo_pad2 [4]byte 14788 } 14789 14790 type closure_avl = closure_avl1 14791 14792 func closureAvlRecomputeHeight(tls *libc.TLS, p uintptr) { 14793 var hBefore int16 14794 if (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 14795 hBefore = (*closure_avl)(unsafe.Pointer((*closure_avl)(unsafe.Pointer(p)).FpBefore)).Fheight 14796 } else { 14797 hBefore = int16(0) 14798 } 14799 var hAfter int16 14800 if (*closure_avl)(unsafe.Pointer(p)).FpAfter != 0 { 14801 hAfter = (*closure_avl)(unsafe.Pointer((*closure_avl)(unsafe.Pointer(p)).FpAfter)).Fheight 14802 } else { 14803 hAfter = int16(0) 14804 } 14805 (*closure_avl)(unsafe.Pointer(p)).Fimbalance = int16(int32(hBefore) - int32(hAfter)) 14806 (*closure_avl)(unsafe.Pointer(p)).Fheight = int16(func() int32 { 14807 if int32(hBefore) > int32(hAfter) { 14808 return int32(hBefore) 14809 } 14810 return int32(hAfter) 14811 }() + 1) 14812 } 14813 14814 func closureAvlRotateBefore(tls *libc.TLS, pP uintptr) uintptr { 14815 var pB uintptr = (*closure_avl)(unsafe.Pointer(pP)).FpBefore 14816 var pY uintptr = (*closure_avl)(unsafe.Pointer(pB)).FpAfter 14817 (*closure_avl)(unsafe.Pointer(pB)).FpUp = (*closure_avl)(unsafe.Pointer(pP)).FpUp 14818 (*closure_avl)(unsafe.Pointer(pB)).FpAfter = pP 14819 (*closure_avl)(unsafe.Pointer(pP)).FpUp = pB 14820 (*closure_avl)(unsafe.Pointer(pP)).FpBefore = pY 14821 if pY != 0 { 14822 (*closure_avl)(unsafe.Pointer(pY)).FpUp = pP 14823 } 14824 closureAvlRecomputeHeight(tls, pP) 14825 closureAvlRecomputeHeight(tls, pB) 14826 return pB 14827 } 14828 14829 func closureAvlRotateAfter(tls *libc.TLS, pP uintptr) uintptr { 14830 var pA uintptr = (*closure_avl)(unsafe.Pointer(pP)).FpAfter 14831 var pY uintptr = (*closure_avl)(unsafe.Pointer(pA)).FpBefore 14832 (*closure_avl)(unsafe.Pointer(pA)).FpUp = (*closure_avl)(unsafe.Pointer(pP)).FpUp 14833 (*closure_avl)(unsafe.Pointer(pA)).FpBefore = pP 14834 (*closure_avl)(unsafe.Pointer(pP)).FpUp = pA 14835 (*closure_avl)(unsafe.Pointer(pP)).FpAfter = pY 14836 if pY != 0 { 14837 (*closure_avl)(unsafe.Pointer(pY)).FpUp = pP 14838 } 14839 closureAvlRecomputeHeight(tls, pP) 14840 closureAvlRecomputeHeight(tls, pA) 14841 return pA 14842 } 14843 14844 func closureAvlFromPtr(tls *libc.TLS, p uintptr, pp uintptr) uintptr { 14845 var pUp uintptr = (*closure_avl)(unsafe.Pointer(p)).FpUp 14846 if pUp == uintptr(0) { 14847 return pp 14848 } 14849 if (*closure_avl)(unsafe.Pointer(pUp)).FpAfter == p { 14850 return pUp + 32 14851 } 14852 return pUp + 24 14853 } 14854 14855 func closureAvlBalance(tls *libc.TLS, p uintptr) uintptr { 14856 bp := tls.Alloc(8) 14857 defer tls.Free(8) 14858 *(*uintptr)(unsafe.Pointer(bp)) = p 14859 14860 var pTop uintptr = *(*uintptr)(unsafe.Pointer(bp)) 14861 var pp uintptr 14862 for *(*uintptr)(unsafe.Pointer(bp)) != 0 { 14863 closureAvlRecomputeHeight(tls, *(*uintptr)(unsafe.Pointer(bp))) 14864 if int32((*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) >= 2 { 14865 var pB uintptr = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore 14866 if int32((*closure_avl)(unsafe.Pointer(pB)).Fimbalance) < 0 { 14867 (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpBefore = closureAvlRotateAfter(tls, pB) 14868 } 14869 pp = closureAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 14870 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, closureAvlRotateBefore(tls, *(*uintptr)(unsafe.Pointer(bp)))) 14871 } else if int32((*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).Fimbalance) <= -2 { 14872 var pA uintptr = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter 14873 if int32((*closure_avl)(unsafe.Pointer(pA)).Fimbalance) > 0 { 14874 (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpAfter = closureAvlRotateBefore(tls, pA) 14875 } 14876 pp = closureAvlFromPtr(tls, *(*uintptr)(unsafe.Pointer(bp)), bp) 14877 *(*uintptr)(unsafe.Pointer(bp)) = libc.AssignPtrUintptr(pp, closureAvlRotateAfter(tls, *(*uintptr)(unsafe.Pointer(bp)))) 14878 } 14879 pTop = *(*uintptr)(unsafe.Pointer(bp)) 14880 *(*uintptr)(unsafe.Pointer(bp)) = (*closure_avl)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpUp 14881 } 14882 return pTop 14883 } 14884 14885 func closureAvlSearch(tls *libc.TLS, p uintptr, id sqlite3_int64) uintptr { 14886 for p != 0 && id != (*closure_avl)(unsafe.Pointer(p)).Fid { 14887 if id < (*closure_avl)(unsafe.Pointer(p)).Fid { 14888 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 14889 } else { 14890 p = (*closure_avl)(unsafe.Pointer(p)).FpAfter 14891 } 14892 } 14893 return p 14894 } 14895 14896 func closureAvlFirst(tls *libc.TLS, p uintptr) uintptr { 14897 if p != 0 { 14898 for (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 14899 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 14900 } 14901 } 14902 return p 14903 } 14904 14905 func closureAvlNext(tls *libc.TLS, p uintptr) uintptr { 14906 var pPrev uintptr = uintptr(0) 14907 for p != 0 && (*closure_avl)(unsafe.Pointer(p)).FpAfter == pPrev { 14908 pPrev = p 14909 p = (*closure_avl)(unsafe.Pointer(p)).FpUp 14910 } 14911 if p != 0 && pPrev == uintptr(0) { 14912 p = closureAvlFirst(tls, (*closure_avl)(unsafe.Pointer(p)).FpAfter) 14913 } 14914 return p 14915 } 14916 14917 func closureAvlInsert(tls *libc.TLS, ppHead uintptr, pNew uintptr) uintptr { 14918 var p uintptr = *(*uintptr)(unsafe.Pointer(ppHead)) 14919 if p == uintptr(0) { 14920 p = pNew 14921 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = uintptr(0) 14922 } else { 14923 for p != 0 { 14924 if (*closure_avl)(unsafe.Pointer(pNew)).Fid < (*closure_avl)(unsafe.Pointer(p)).Fid { 14925 if (*closure_avl)(unsafe.Pointer(p)).FpBefore != 0 { 14926 p = (*closure_avl)(unsafe.Pointer(p)).FpBefore 14927 } else { 14928 (*closure_avl)(unsafe.Pointer(p)).FpBefore = pNew 14929 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = p 14930 break 14931 } 14932 } else if (*closure_avl)(unsafe.Pointer(pNew)).Fid > (*closure_avl)(unsafe.Pointer(p)).Fid { 14933 if (*closure_avl)(unsafe.Pointer(p)).FpAfter != 0 { 14934 p = (*closure_avl)(unsafe.Pointer(p)).FpAfter 14935 } else { 14936 (*closure_avl)(unsafe.Pointer(p)).FpAfter = pNew 14937 (*closure_avl)(unsafe.Pointer(pNew)).FpUp = p 14938 break 14939 } 14940 } else { 14941 return p 14942 } 14943 } 14944 } 14945 (*closure_avl)(unsafe.Pointer(pNew)).FpBefore = uintptr(0) 14946 (*closure_avl)(unsafe.Pointer(pNew)).FpAfter = uintptr(0) 14947 (*closure_avl)(unsafe.Pointer(pNew)).Fheight = int16(1) 14948 (*closure_avl)(unsafe.Pointer(pNew)).Fimbalance = int16(0) 14949 *(*uintptr)(unsafe.Pointer(ppHead)) = closureAvlBalance(tls, p) 14950 return uintptr(0) 14951 } 14952 14953 func closureAvlDestroy(tls *libc.TLS, p uintptr, xDestroy uintptr) { 14954 if p != 0 { 14955 closureAvlDestroy(tls, (*closure_avl)(unsafe.Pointer(p)).FpBefore, xDestroy) 14956 closureAvlDestroy(tls, (*closure_avl)(unsafe.Pointer(p)).FpAfter, xDestroy) 14957 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{xDestroy})).f(tls, p) 14958 } 14959 } 14960 14961 func queuePush(tls *libc.TLS, pQueue uintptr, pNode uintptr) { 14962 (*closure_avl)(unsafe.Pointer(pNode)).FpList = uintptr(0) 14963 if (*closure_queue)(unsafe.Pointer(pQueue)).FpLast != 0 { 14964 (*closure_avl)(unsafe.Pointer((*closure_queue)(unsafe.Pointer(pQueue)).FpLast)).FpList = pNode 14965 } else { 14966 (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst = pNode 14967 } 14968 (*closure_queue)(unsafe.Pointer(pQueue)).FpLast = pNode 14969 } 14970 14971 func queuePull(tls *libc.TLS, pQueue uintptr) uintptr { 14972 var p uintptr = (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst 14973 if p != 0 { 14974 (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst = (*closure_avl)(unsafe.Pointer(p)).FpList 14975 if (*closure_queue)(unsafe.Pointer(pQueue)).FpFirst == uintptr(0) { 14976 (*closure_queue)(unsafe.Pointer(pQueue)).FpLast = uintptr(0) 14977 } 14978 } 14979 return p 14980 } 14981 14982 func closureDequote(tls *libc.TLS, zIn uintptr) uintptr { 14983 var nIn sqlite3_int64 14984 var zOut uintptr 14985 14986 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 14987 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 14988 if zOut != 0 { 14989 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 14990 14991 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 14992 libc.X__builtin___memcpy_chk(tls, zOut, zIn, size_t(nIn+int64(1)), libc.X__builtin_object_size(tls, zOut, 0)) 14993 } else { 14994 var iOut int32 = 0 14995 var iIn int32 14996 14997 if int32(q) == '[' { 14998 q = int8(']') 14999 } 15000 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 15001 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 15002 iIn++ 15003 } 15004 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 15005 } 15006 } 15007 15008 } 15009 return zOut 15010 } 15011 15012 func closureFree(tls *libc.TLS, p uintptr) { 15013 if p != 0 { 15014 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzDb) 15015 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzSelf) 15016 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzTableName) 15017 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzIdColumn) 15018 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(p)).FzParentColumn) 15019 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(closure_vtab{})), libc.X__builtin_object_size(tls, p, 0)) 15020 sqlite3.Xsqlite3_free(tls, p) 15021 } 15022 } 15023 15024 func closureDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 15025 var p uintptr = pVtab 15026 15027 closureFree(tls, p) 15028 return SQLITE_OK 15029 } 15030 15031 func closureValueOfKey(tls *libc.TLS, zKey uintptr, zStr uintptr) uintptr { 15032 var nKey int32 = int32(libc.Xstrlen(tls, zKey)) 15033 var nStr int32 = int32(libc.Xstrlen(tls, zStr)) 15034 var i int32 15035 if nStr < nKey+1 { 15036 return uintptr(0) 15037 } 15038 if libc.Xmemcmp(tls, zStr, zKey, uint64(nKey)) != 0 { 15039 return uintptr(0) 15040 } 15041 for i = nKey; isspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))))) != 0; i++ { 15042 } 15043 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) != '=' { 15044 return uintptr(0) 15045 } 15046 i++ 15047 for isspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))))) != 0 { 15048 i++ 15049 } 15050 return zStr + uintptr(i) 15051 } 15052 15053 func closureConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 15054 bp := tls.Alloc(24) 15055 defer tls.Free(24) 15056 15057 var rc int32 15058 var pNew uintptr 15059 var zDb uintptr 15060 var zVal uintptr 15061 var i int32 15062 rc = SQLITE_OK 15063 pNew = uintptr(0) 15064 zDb = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 15065 15066 _ = pAux 15067 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 15068 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_vtab{}))) 15069 if !(pNew == uintptr(0)) { 15070 goto __1 15071 } 15072 return SQLITE_NOMEM 15073 __1: 15074 ; 15075 rc = SQLITE_NOMEM 15076 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(closure_vtab{})), libc.X__builtin_object_size(tls, pNew, 0)) 15077 (*closure_vtab)(unsafe.Pointer(pNew)).Fdb = db 15078 (*closure_vtab)(unsafe.Pointer(pNew)).FzDb = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zDb)) 15079 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzDb == uintptr(0)) { 15080 goto __2 15081 } 15082 goto closureConnectError 15083 __2: 15084 ; 15085 (*closure_vtab)(unsafe.Pointer(pNew)).FzSelf = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 15086 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzSelf == uintptr(0)) { 15087 goto __3 15088 } 15089 goto closureConnectError 15090 __3: 15091 ; 15092 i = 3 15093 __4: 15094 if !(i < argc) { 15095 goto __6 15096 } 15097 zVal = closureValueOfKey(tls, ts+4215, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 15098 if !(zVal != 0) { 15099 goto __7 15100 } 15101 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzTableName) 15102 (*closure_vtab)(unsafe.Pointer(pNew)).FzTableName = closureDequote(tls, zVal) 15103 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzTableName == uintptr(0)) { 15104 goto __8 15105 } 15106 goto closureConnectError 15107 __8: 15108 ; 15109 goto __5 15110 __7: 15111 ; 15112 zVal = closureValueOfKey(tls, ts+4225, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 15113 if !(zVal != 0) { 15114 goto __9 15115 } 15116 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn) 15117 (*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn = closureDequote(tls, zVal) 15118 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzIdColumn == uintptr(0)) { 15119 goto __10 15120 } 15121 goto closureConnectError 15122 __10: 15123 ; 15124 goto __5 15125 __9: 15126 ; 15127 zVal = closureValueOfKey(tls, ts+4234, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 15128 if !(zVal != 0) { 15129 goto __11 15130 } 15131 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn) 15132 (*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn = closureDequote(tls, zVal) 15133 if !((*closure_vtab)(unsafe.Pointer(pNew)).FzParentColumn == uintptr(0)) { 15134 goto __12 15135 } 15136 goto closureConnectError 15137 __12: 15138 ; 15139 goto __5 15140 __11: 15141 ; 15142 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3536, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 15143 closureFree(tls, pNew) 15144 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 15145 return SQLITE_ERROR 15146 goto __5 15147 __5: 15148 i++ 15149 goto __4 15150 goto __6 15151 __6: 15152 ; 15153 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 15154 ts+4247) 15155 if !(rc != SQLITE_OK) { 15156 goto __13 15157 } 15158 closureFree(tls, pNew) 15159 __13: 15160 ; 15161 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 15162 return rc 15163 15164 closureConnectError: 15165 closureFree(tls, pNew) 15166 return rc 15167 } 15168 15169 func closureOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 15170 var p uintptr = pVTab 15171 var pCur uintptr 15172 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_cursor{}))) 15173 if pCur == uintptr(0) { 15174 return SQLITE_NOMEM 15175 } 15176 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(closure_cursor{})), libc.X__builtin_object_size(tls, pCur, 0)) 15177 (*closure_cursor)(unsafe.Pointer(pCur)).FpVtab = p 15178 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 15179 (*closure_vtab)(unsafe.Pointer(p)).FnCursor++ 15180 return SQLITE_OK 15181 } 15182 15183 func closureClearCursor(tls *libc.TLS, pCur uintptr) { 15184 closureAvlDestroy(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 15185 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName) 15186 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn) 15187 sqlite3.Xsqlite3_free(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn) 15188 (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName = uintptr(0) 15189 (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn = uintptr(0) 15190 (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn = uintptr(0) 15191 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = uintptr(0) 15192 (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure = uintptr(0) 15193 } 15194 15195 func closureClose(tls *libc.TLS, cur uintptr) int32 { 15196 var pCur uintptr = cur 15197 closureClearCursor(tls, pCur) 15198 (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 15199 sqlite3.Xsqlite3_free(tls, pCur) 15200 return SQLITE_OK 15201 } 15202 15203 func closureNext(tls *libc.TLS, cur uintptr) int32 { 15204 var pCur uintptr = cur 15205 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = closureAvlNext(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent) 15206 return SQLITE_OK 15207 } 15208 15209 func closureInsertNode(tls *libc.TLS, pQueue uintptr, pCur uintptr, id sqlite3_int64, iGeneration int32) int32 { 15210 var pNew uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(closure_avl{}))) 15211 if pNew == uintptr(0) { 15212 return SQLITE_NOMEM 15213 } 15214 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(closure_avl{})), libc.X__builtin_object_size(tls, pNew, 0)) 15215 (*closure_avl)(unsafe.Pointer(pNew)).Fid = id 15216 (*closure_avl)(unsafe.Pointer(pNew)).FiGeneration = iGeneration 15217 closureAvlInsert(tls, pCur+48, pNew) 15218 queuePush(tls, pQueue, pNew) 15219 return SQLITE_OK 15220 } 15221 15222 func closureFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 15223 bp := tls.Alloc(96) 15224 defer tls.Free(96) 15225 15226 var pCur uintptr = pVtabCursor 15227 var pVtab uintptr = (*closure_cursor)(unsafe.Pointer(pCur)).FpVtab 15228 var iRoot sqlite3_int64 15229 var mxGen int32 = 999999999 15230 var zSql uintptr 15231 15232 var pAvl uintptr 15233 var rc int32 = SQLITE_OK 15234 var zTableName uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzTableName 15235 var zIdColumn uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzIdColumn 15236 var zParentColumn uintptr = (*closure_vtab)(unsafe.Pointer(pVtab)).FzParentColumn 15237 15238 _ = idxStr 15239 _ = argc 15240 closureClearCursor(tls, pCur) 15241 libc.X__builtin___memset_chk(tls, bp+72, 0, uint64(unsafe.Sizeof(closure_queue{})), libc.X__builtin_object_size(tls, bp+72, 0)) 15242 if idxNum&1 == 0 { 15243 return SQLITE_OK 15244 } 15245 iRoot = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 15246 if idxNum&0x000f0 != 0 { 15247 mxGen = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>4&0x0f)*8))) 15248 if idxNum&0x00002 != 0 { 15249 mxGen-- 15250 } 15251 } 15252 if idxNum&0x00f00 != 0 { 15253 zTableName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>8&0x0f)*8))) 15254 (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zTableName)) 15255 } 15256 if idxNum&0x0f000 != 0 { 15257 zIdColumn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>12&0x0f)*8))) 15258 (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zIdColumn)) 15259 } 15260 if idxNum&0x0f0000 != 0 { 15261 zParentColumn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idxNum>>16&0x0f)*8))) 15262 (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zParentColumn)) 15263 } 15264 15265 zSql = sqlite3.Xsqlite3_mprintf(tls, 15266 ts+4337, 15267 libc.VaList(bp+24, zTableName, zIdColumn, zTableName, zTableName, zParentColumn)) 15268 if zSql == uintptr(0) { 15269 return SQLITE_NOMEM 15270 } else { 15271 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, bp+88, uintptr(0)) 15272 sqlite3.Xsqlite3_free(tls, zSql) 15273 if rc != 0 { 15274 sqlite3.Xsqlite3_free(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fbase.FzErrMsg) 15275 (*closure_vtab)(unsafe.Pointer(pVtab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, sqlite3.Xsqlite3_errmsg(tls, (*closure_vtab)(unsafe.Pointer(pVtab)).Fdb))) 15276 return rc 15277 } 15278 } 15279 if rc == SQLITE_OK { 15280 rc = closureInsertNode(tls, bp+72, pCur, iRoot, 0) 15281 } 15282 for libc.AssignUintptr(&pAvl, queuePull(tls, bp+72)) != uintptr(0) { 15283 if (*closure_avl)(unsafe.Pointer(pAvl)).FiGeneration >= mxGen { 15284 continue 15285 } 15286 sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 1, (*closure_avl)(unsafe.Pointer(pAvl)).Fid) 15287 for rc == SQLITE_OK && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) == SQLITE_ROW { 15288 if sqlite3.Xsqlite3_column_type(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 0) == SQLITE_INTEGER { 15289 var iNew sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), 0) 15290 if closureAvlSearch(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure, iNew) == uintptr(0) { 15291 rc = closureInsertNode(tls, bp+72, pCur, iNew, (*closure_avl)(unsafe.Pointer(pAvl)).FiGeneration+1) 15292 } 15293 } 15294 } 15295 sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 15296 } 15297 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 15298 if rc == SQLITE_OK { 15299 (*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent = closureAvlFirst(tls, (*closure_cursor)(unsafe.Pointer(pCur)).FpClosure) 15300 } 15301 15302 return rc 15303 } 15304 15305 func closureColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 15306 var pCur uintptr = cur 15307 switch i { 15308 case CLOSURE_COL_ID: 15309 { 15310 sqlite3.Xsqlite3_result_int64(tls, ctx, (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).Fid) 15311 break 15312 15313 } 15314 case CLOSURE_COL_DEPTH: 15315 { 15316 sqlite3.Xsqlite3_result_int(tls, ctx, (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).FiGeneration) 15317 break 15318 15319 } 15320 case CLOSURE_COL_ROOT: 15321 { 15322 sqlite3.Xsqlite3_result_null(tls, ctx) 15323 break 15324 15325 } 15326 case CLOSURE_COL_TABLENAME: 15327 { 15328 sqlite3.Xsqlite3_result_text(tls, ctx, 15329 func() uintptr { 15330 if (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName != 0 { 15331 return (*closure_cursor)(unsafe.Pointer(pCur)).FzTableName 15332 } 15333 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzTableName 15334 }(), 15335 -1, libc.UintptrFromInt32(-1)) 15336 break 15337 15338 } 15339 case CLOSURE_COL_IDCOLUMN: 15340 { 15341 sqlite3.Xsqlite3_result_text(tls, ctx, 15342 func() uintptr { 15343 if (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn != 0 { 15344 return (*closure_cursor)(unsafe.Pointer(pCur)).FzIdColumn 15345 } 15346 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzIdColumn 15347 }(), 15348 -1, libc.UintptrFromInt32(-1)) 15349 break 15350 15351 } 15352 case CLOSURE_COL_PARENTCOLUMN: 15353 { 15354 sqlite3.Xsqlite3_result_text(tls, ctx, 15355 func() uintptr { 15356 if (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn != 0 { 15357 return (*closure_cursor)(unsafe.Pointer(pCur)).FzParentColumn 15358 } 15359 return (*closure_vtab)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpVtab)).FzParentColumn 15360 }(), 15361 -1, libc.UintptrFromInt32(-1)) 15362 break 15363 15364 } 15365 } 15366 return SQLITE_OK 15367 } 15368 15369 func closureRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 15370 var pCur uintptr = cur 15371 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*closure_avl)(unsafe.Pointer((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent)).Fid 15372 return SQLITE_OK 15373 } 15374 15375 func closureEof(tls *libc.TLS, cur uintptr) int32 { 15376 var pCur uintptr = cur 15377 return libc.Bool32((*closure_cursor)(unsafe.Pointer(pCur)).FpCurrent == uintptr(0)) 15378 } 15379 15380 func closureBestIndex(tls *libc.TLS, pTab uintptr, pIdxInfo uintptr) int32 { 15381 var iPlan int32 = 0 15382 var i int32 15383 var idx int32 = 1 15384 var pConstraint uintptr 15385 var pVtab uintptr = pTab 15386 var rCost float64 = 10000000.0 15387 15388 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 15389 i = 0 15390 __1: 15391 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 15392 goto __3 15393 } 15394 { 15395 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 15396 goto __2 15397 } 15398 if iPlan&1 == 0 && 15399 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_ROOT && 15400 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 15401 iPlan = iPlan | 1 15402 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 15403 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 15404 rCost = rCost / 100.0 15405 } 15406 if iPlan&0x0000f0 == 0 && 15407 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_DEPTH && 15408 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 15409 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE || 15410 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ) { 15411 iPlan = iPlan | idx<<4 15412 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 15413 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 15414 iPlan = iPlan | 0x000002 15415 } 15416 rCost = rCost / 5.0 15417 } 15418 if iPlan&0x000f00 == 0 && 15419 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_TABLENAME && 15420 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 15421 iPlan = iPlan | idx<<8 15422 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 15423 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 15424 rCost = rCost / 5.0 15425 } 15426 if iPlan&0x00f000 == 0 && 15427 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_IDCOLUMN && 15428 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 15429 iPlan = iPlan | idx<<12 15430 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 15431 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 15432 } 15433 if iPlan&0x0f0000 == 0 && 15434 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == CLOSURE_COL_PARENTCOLUMN && 15435 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 15436 iPlan = iPlan | idx<<16 15437 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&idx, 1) 15438 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 15439 } 15440 15441 } 15442 goto __2 15443 __2: 15444 i++ 15445 pConstraint += 12 15446 goto __1 15447 goto __3 15448 __3: 15449 ; 15450 if (*closure_vtab)(unsafe.Pointer(pVtab)).FzTableName == uintptr(0) && iPlan&0x000f00 == 0 || 15451 (*closure_vtab)(unsafe.Pointer(pVtab)).FzIdColumn == uintptr(0) && iPlan&0x00f000 == 0 || 15452 (*closure_vtab)(unsafe.Pointer(pVtab)).FzParentColumn == uintptr(0) && iPlan&0x0f0000 == 0 { 15453 iPlan = 0 15454 } 15455 if iPlan&1 == 0 { 15456 rCost = rCost * 1e30 15457 i = 0 15458 __4: 15459 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 15460 goto __6 15461 } 15462 { 15463 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 0 15464 15465 } 15466 goto __5 15467 __5: 15468 i++ 15469 pConstraint += 12 15470 goto __4 15471 goto __6 15472 __6: 15473 ; 15474 iPlan = 0 15475 } 15476 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 15477 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 15478 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == CLOSURE_COL_ID && 15479 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 15480 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 15481 } 15482 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = rCost 15483 15484 return SQLITE_OK 15485 } 15486 15487 var closureModule = sqlite3_module{ 15488 FxCreate: 0, 15489 FxConnect: 0, 15490 FxBestIndex: 0, 15491 FxDisconnect: 0, 15492 FxDestroy: 0, 15493 FxOpen: 0, 15494 FxClose: 0, 15495 FxFilter: 0, 15496 FxNext: 0, 15497 FxEof: 0, 15498 FxColumn: 0, 15499 FxRowid: 0, 15500 } 15501 15502 func sqlite3_closure_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 15503 var rc int32 = SQLITE_OK 15504 _ = pApi 15505 15506 _ = pzErrMsg 15507 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4383, uintptr(unsafe.Pointer(&closureModule)), uintptr(0)) 15508 return rc 15509 } 15510 15511 type CsvReader1 = struct { 15512 Fin uintptr 15513 Fz uintptr 15514 Fn int32 15515 FnAlloc int32 15516 FnLine int32 15517 FbNotFirst int32 15518 FcTerm int32 15519 F__ccgo_pad1 [4]byte 15520 FiIn size_t 15521 FnIn size_t 15522 FzIn uintptr 15523 FzErr [200]int8 15524 } 15525 15526 type CsvReader = CsvReader1 15527 15528 func csv_reader_init(tls *libc.TLS, p uintptr) { 15529 (*CsvReader)(unsafe.Pointer(p)).Fin = uintptr(0) 15530 (*CsvReader)(unsafe.Pointer(p)).Fz = uintptr(0) 15531 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 15532 (*CsvReader)(unsafe.Pointer(p)).FnAlloc = 0 15533 (*CsvReader)(unsafe.Pointer(p)).FnLine = 0 15534 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 0 15535 (*CsvReader)(unsafe.Pointer(p)).FnIn = uint64(0) 15536 (*CsvReader)(unsafe.Pointer(p)).FzIn = uintptr(0) 15537 *(*int8)(unsafe.Pointer(p + 64)) = int8(0) 15538 } 15539 15540 func csv_reader_reset(tls *libc.TLS, p uintptr) { 15541 if (*CsvReader)(unsafe.Pointer(p)).Fin != 0 { 15542 libc.Xfclose(tls, (*CsvReader)(unsafe.Pointer(p)).Fin) 15543 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn) 15544 } 15545 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).Fz) 15546 csv_reader_init(tls, p) 15547 } 15548 15549 func csv_errmsg(tls *libc.TLS, p uintptr, zFormat uintptr, va uintptr) { 15550 var ap va_list 15551 _ = ap 15552 ap = va 15553 sqlite3.Xsqlite3_vsnprintf(tls, CSV_MXERR, p+64, zFormat, ap) 15554 _ = ap 15555 } 15556 15557 func csv_reader_open(tls *libc.TLS, p uintptr, zFilename uintptr, zData uintptr) int32 { 15558 bp := tls.Alloc(8) 15559 defer tls.Free(8) 15560 15561 if zFilename != 0 { 15562 (*CsvReader)(unsafe.Pointer(p)).FzIn = sqlite3.Xsqlite3_malloc(tls, CSV_INBUFSZ) 15563 if (*CsvReader)(unsafe.Pointer(p)).FzIn == uintptr(0) { 15564 csv_errmsg(tls, p, ts+2069, 0) 15565 return 1 15566 } 15567 (*CsvReader)(unsafe.Pointer(p)).Fin = libc.Xfopen(tls, zFilename, ts+4402) 15568 if (*CsvReader)(unsafe.Pointer(p)).Fin == uintptr(0) { 15569 sqlite3.Xsqlite3_free(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn) 15570 csv_reader_reset(tls, p) 15571 csv_errmsg(tls, p, ts+4405, libc.VaList(bp, zFilename)) 15572 return 1 15573 } 15574 } else { 15575 (*CsvReader)(unsafe.Pointer(p)).FzIn = zData 15576 (*CsvReader)(unsafe.Pointer(p)).FnIn = libc.Xstrlen(tls, zData) 15577 } 15578 return 0 15579 } 15580 15581 func csv_getc_refill(tls *libc.TLS, p uintptr) int32 { 15582 var got size_t 15583 15584 got = libc.Xfread(tls, (*CsvReader)(unsafe.Pointer(p)).FzIn, uint64(1), uint64(CSV_INBUFSZ), (*CsvReader)(unsafe.Pointer(p)).Fin) 15585 if got == uint64(0) { 15586 return -1 15587 } 15588 (*CsvReader)(unsafe.Pointer(p)).FnIn = got 15589 (*CsvReader)(unsafe.Pointer(p)).FiIn = uint64(1) 15590 return int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).FzIn))) 15591 } 15592 15593 func csv_getc(tls *libc.TLS, p uintptr) int32 { 15594 if (*CsvReader)(unsafe.Pointer(p)).FiIn >= (*CsvReader)(unsafe.Pointer(p)).FnIn { 15595 if (*CsvReader)(unsafe.Pointer(p)).Fin != uintptr(0) { 15596 return csv_getc_refill(tls, p) 15597 } 15598 return -1 15599 } 15600 return int32(*(*uint8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).FzIn + uintptr(libc.PostIncUint64(&(*CsvReader)(unsafe.Pointer(p)).FiIn, 1))))) 15601 } 15602 15603 func csv_resize_and_append(tls *libc.TLS, p uintptr, c int8) int32 { 15604 var zNew uintptr 15605 var nNew int32 = (*CsvReader)(unsafe.Pointer(p)).FnAlloc*2 + 100 15606 zNew = sqlite3.Xsqlite3_realloc64(tls, (*CsvReader)(unsafe.Pointer(p)).Fz, uint64(nNew)) 15607 if zNew != 0 { 15608 (*CsvReader)(unsafe.Pointer(p)).Fz = zNew 15609 (*CsvReader)(unsafe.Pointer(p)).FnAlloc = nNew 15610 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*CsvReader)(unsafe.Pointer(p)).Fn, 1)))) = c 15611 return 0 15612 } else { 15613 csv_errmsg(tls, p, ts+2069, 0) 15614 return 1 15615 } 15616 return int32(0) 15617 } 15618 15619 func csv_append(tls *libc.TLS, p uintptr, c int8) int32 { 15620 if (*CsvReader)(unsafe.Pointer(p)).Fn >= (*CsvReader)(unsafe.Pointer(p)).FnAlloc-1 { 15621 return csv_resize_and_append(tls, p, c) 15622 } 15623 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*CsvReader)(unsafe.Pointer(p)).Fn, 1)))) = c 15624 return 0 15625 } 15626 15627 func csv_read_one_field(tls *libc.TLS, p uintptr) uintptr { 15628 bp := tls.Alloc(32) 15629 defer tls.Free(32) 15630 15631 var c int32 15632 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 15633 c = csv_getc(tls, p) 15634 if c == -1 { 15635 (*CsvReader)(unsafe.Pointer(p)).FcTerm = -1 15636 return uintptr(0) 15637 } 15638 if c == '"' { 15639 var pc int32 15640 var ppc int32 15641 var startLine int32 = (*CsvReader)(unsafe.Pointer(p)).FnLine 15642 pc = libc.AssignInt32(&ppc, 0) 15643 for 1 != 0 { 15644 c = csv_getc(tls, p) 15645 if c <= '"' || pc == '"' { 15646 if c == '\n' { 15647 (*CsvReader)(unsafe.Pointer(p)).FnLine++ 15648 } 15649 if c == '"' { 15650 if pc == '"' { 15651 pc = 0 15652 continue 15653 } 15654 } 15655 if c == ',' && pc == '"' || 15656 c == '\n' && pc == '"' || 15657 c == '\n' && pc == '\r' && ppc == '"' || 15658 c == -1 && pc == '"' { 15659 for __ccgo := true; __ccgo; __ccgo = int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn)))) != '"' { 15660 (*CsvReader)(unsafe.Pointer(p)).Fn-- 15661 } 15662 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 15663 break 15664 } 15665 if pc == '"' && c != '\r' { 15666 csv_errmsg(tls, p, ts+4434, libc.VaList(bp, (*CsvReader)(unsafe.Pointer(p)).FnLine, '"')) 15667 break 15668 } 15669 if c == -1 { 15670 csv_errmsg(tls, p, ts+4466, 15671 libc.VaList(bp+16, startLine, '"')) 15672 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 15673 break 15674 } 15675 } 15676 if csv_append(tls, p, int8(c)) != 0 { 15677 return uintptr(0) 15678 } 15679 ppc = pc 15680 pc = c 15681 } 15682 } else { 15683 if c&0xff == 0xef && (*CsvReader)(unsafe.Pointer(p)).FbNotFirst == 0 { 15684 csv_append(tls, p, int8(c)) 15685 c = csv_getc(tls, p) 15686 if c&0xff == 0xbb { 15687 csv_append(tls, p, int8(c)) 15688 c = csv_getc(tls, p) 15689 if c&0xff == 0xbf { 15690 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 1 15691 (*CsvReader)(unsafe.Pointer(p)).Fn = 0 15692 return csv_read_one_field(tls, p) 15693 } 15694 } 15695 } 15696 for c > ',' || c != -1 && c != ',' && c != '\n' { 15697 if csv_append(tls, p, int8(c)) != 0 { 15698 return uintptr(0) 15699 } 15700 c = csv_getc(tls, p) 15701 } 15702 if c == '\n' { 15703 (*CsvReader)(unsafe.Pointer(p)).FnLine++ 15704 if (*CsvReader)(unsafe.Pointer(p)).Fn > 0 && int32(*(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn-1)))) == '\r' { 15705 (*CsvReader)(unsafe.Pointer(p)).Fn-- 15706 } 15707 } 15708 (*CsvReader)(unsafe.Pointer(p)).FcTerm = int32(int8(c)) 15709 } 15710 if (*CsvReader)(unsafe.Pointer(p)).Fz != 0 { 15711 *(*int8)(unsafe.Pointer((*CsvReader)(unsafe.Pointer(p)).Fz + uintptr((*CsvReader)(unsafe.Pointer(p)).Fn))) = int8(0) 15712 } 15713 (*CsvReader)(unsafe.Pointer(p)).FbNotFirst = 1 15714 return (*CsvReader)(unsafe.Pointer(p)).Fz 15715 } 15716 15717 type CsvTable1 = struct { 15718 Fbase sqlite3_vtab 15719 FzFilename uintptr 15720 FzData uintptr 15721 FiStart int64 15722 FnCol int32 15723 FtstFlags uint32 15724 } 15725 15726 type CsvTable = CsvTable1 15727 15728 type CsvCursor1 = struct { 15729 Fbase sqlite3_vtab_cursor 15730 Frdr CsvReader 15731 FazVal uintptr 15732 FaLen uintptr 15733 FiRowid sqlite3_int64 15734 } 15735 15736 type CsvCursor = CsvCursor1 15737 15738 func csv_xfer_error(tls *libc.TLS, pTab uintptr, pRdr uintptr) { 15739 bp := tls.Alloc(8) 15740 defer tls.Free(8) 15741 15742 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(pTab)).Fbase.FzErrMsg) 15743 (*CsvTable)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, pRdr+64)) 15744 } 15745 15746 func csvtabDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 15747 var p uintptr = pVtab 15748 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(p)).FzFilename) 15749 sqlite3.Xsqlite3_free(tls, (*CsvTable)(unsafe.Pointer(p)).FzData) 15750 sqlite3.Xsqlite3_free(tls, p) 15751 return SQLITE_OK 15752 } 15753 15754 func csv_skip_whitespace(tls *libc.TLS, z uintptr) uintptr { 15755 for isspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(z))))) != 0 { 15756 z++ 15757 } 15758 return z 15759 } 15760 15761 func csv_trim_whitespace(tls *libc.TLS, z uintptr) { 15762 var n size_t = libc.Xstrlen(tls, z) 15763 for n > uint64(0) && isspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(z + uintptr(n)))))) != 0 { 15764 n-- 15765 } 15766 *(*int8)(unsafe.Pointer(z + uintptr(n))) = int8(0) 15767 } 15768 15769 func csv_dequote(tls *libc.TLS, z uintptr) { 15770 var j int32 15771 var cQuote int8 = *(*int8)(unsafe.Pointer(z)) 15772 var i size_t 15773 var n size_t 15774 15775 if int32(cQuote) != '\'' && int32(cQuote) != '"' { 15776 return 15777 } 15778 n = libc.Xstrlen(tls, z) 15779 if n < uint64(2) || int32(*(*int8)(unsafe.Pointer(z + uintptr(n-uint64(1))))) != int32(*(*int8)(unsafe.Pointer(z))) { 15780 return 15781 } 15782 i = uint64(1) 15783 j = 0 15784 for ; i < n-uint64(1); i++ { 15785 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == int32(cQuote) && int32(*(*int8)(unsafe.Pointer(z + uintptr(i+uint64(1))))) == int32(cQuote) { 15786 i++ 15787 } 15788 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(i))) 15789 } 15790 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 15791 } 15792 15793 func csv_parameter(tls *libc.TLS, zTag uintptr, nTag int32, z uintptr) uintptr { 15794 z = csv_skip_whitespace(tls, z) 15795 if libc.Xstrncmp(tls, zTag, z, uint64(nTag)) != 0 { 15796 return uintptr(0) 15797 } 15798 z = csv_skip_whitespace(tls, z+uintptr(nTag)) 15799 if int32(*(*int8)(unsafe.Pointer(z))) != '=' { 15800 return uintptr(0) 15801 } 15802 return csv_skip_whitespace(tls, z+uintptr(1)) 15803 } 15804 15805 func csv_string_parameter(tls *libc.TLS, p uintptr, zParam uintptr, zArg uintptr, pzVal uintptr) int32 { 15806 bp := tls.Alloc(16) 15807 defer tls.Free(16) 15808 15809 var zValue uintptr 15810 zValue = csv_parameter(tls, zParam, int32(libc.Xstrlen(tls, zParam)), zArg) 15811 if zValue == uintptr(0) { 15812 return 0 15813 } 15814 *(*int8)(unsafe.Pointer(p + 64)) = int8(0) 15815 if *(*uintptr)(unsafe.Pointer(pzVal)) != 0 { 15816 csv_errmsg(tls, p, ts+4505, libc.VaList(bp, zParam)) 15817 return 1 15818 } 15819 *(*uintptr)(unsafe.Pointer(pzVal)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zValue)) 15820 if *(*uintptr)(unsafe.Pointer(pzVal)) == uintptr(0) { 15821 csv_errmsg(tls, p, ts+2069, 0) 15822 return 1 15823 } 15824 csv_trim_whitespace(tls, *(*uintptr)(unsafe.Pointer(pzVal))) 15825 csv_dequote(tls, *(*uintptr)(unsafe.Pointer(pzVal))) 15826 return 1 15827 } 15828 15829 func csv_boolean(tls *libc.TLS, z uintptr) int32 { 15830 if sqlite3.Xsqlite3_stricmp(tls, ts+4174, z) == 0 || 15831 sqlite3.Xsqlite3_stricmp(tls, ts+4178, z) == 0 || 15832 sqlite3.Xsqlite3_stricmp(tls, ts+4534, z) == 0 || 15833 int32(*(*int8)(unsafe.Pointer(z))) == '1' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 0 { 15834 return 1 15835 } 15836 if sqlite3.Xsqlite3_stricmp(tls, ts+4539, z) == 0 || 15837 sqlite3.Xsqlite3_stricmp(tls, ts+4542, z) == 0 || 15838 sqlite3.Xsqlite3_stricmp(tls, ts+4546, z) == 0 || 15839 int32(*(*int8)(unsafe.Pointer(z))) == '0' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 0 { 15840 return 0 15841 } 15842 return -1 15843 } 15844 15845 func csv_boolean_parameter(tls *libc.TLS, zTag uintptr, nTag int32, z uintptr, pValue uintptr) int32 { 15846 var b int32 15847 z = csv_skip_whitespace(tls, z) 15848 if libc.Xstrncmp(tls, zTag, z, uint64(nTag)) != 0 { 15849 return 0 15850 } 15851 z = csv_skip_whitespace(tls, z+uintptr(nTag)) 15852 if int32(*(*int8)(unsafe.Pointer(z))) == 0 { 15853 *(*int32)(unsafe.Pointer(pValue)) = 1 15854 return 1 15855 } 15856 if int32(*(*int8)(unsafe.Pointer(z))) != '=' { 15857 return 0 15858 } 15859 z = csv_skip_whitespace(tls, z+uintptr(1)) 15860 b = csv_boolean(tls, z) 15861 if b >= 0 { 15862 *(*int32)(unsafe.Pointer(pValue)) = b 15863 return 1 15864 } 15865 return 0 15866 } 15867 15868 func csvtabConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 15869 bp := tls.Alloc(372) 15870 defer tls.Free(372) 15871 15872 var pNew uintptr 15873 var bHeader int32 15874 var rc int32 15875 var i int32 15876 var j int32 15877 var tstFlags int32 15878 15879 var nCol int32 15880 15881 var z uintptr 15882 var zValue uintptr 15883 var z1 uintptr 15884 var pStr uintptr 15885 var zSep uintptr 15886 var iCol int32 15887 pNew = uintptr(0) 15888 bHeader = -1 15889 rc = SQLITE_OK 15890 tstFlags = 0 15891 nCol = -99 15892 15893 libc.X__builtin___memset_chk(tls, bp+80, 0, uint64(unsafe.Sizeof(CsvReader{})), libc.X__builtin_object_size(tls, bp+80, 0)) 15894 libc.X__builtin___memset_chk(tls, bp+344, 0, uint64(unsafe.Sizeof([3]uintptr{})), libc.X__builtin_object_size(tls, bp+344, 0)) 15895 i = 3 15896 __1: 15897 if !(i < argc) { 15898 goto __3 15899 } 15900 z = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 15901 j = 0 15902 __4: 15903 if !(uint64(j) < uint64(unsafe.Sizeof(azParam))/uint64(unsafe.Sizeof(uintptr(0)))) { 15904 goto __6 15905 } 15906 if !(csv_string_parameter(tls, bp+80, azParam[j], z, bp+344+uintptr(j)*8) != 0) { 15907 goto __7 15908 } 15909 goto __6 15910 __7: 15911 ; 15912 goto __5 15913 __5: 15914 j++ 15915 goto __4 15916 goto __6 15917 __6: 15918 ; 15919 if !(uint64(j) < uint64(unsafe.Sizeof(azParam))/uint64(unsafe.Sizeof(uintptr(0)))) { 15920 goto __8 15921 } 15922 if !(*(*int8)(unsafe.Pointer(bp + 80 + 64)) != 0) { 15923 goto __10 15924 } 15925 goto csvtab_connect_error 15926 __10: 15927 ; 15928 goto __9 15929 __8: 15930 if !(csv_boolean_parameter(tls, ts+4552, 6, z, bp+368) != 0) { 15931 goto __11 15932 } 15933 if !(bHeader >= 0) { 15934 goto __13 15935 } 15936 csv_errmsg(tls, bp+80, ts+4559, 0) 15937 goto csvtab_connect_error 15938 __13: 15939 ; 15940 bHeader = *(*int32)(unsafe.Pointer(bp + 368)) 15941 goto __12 15942 __11: 15943 if !(libc.AssignUintptr(&zValue, csv_parameter(tls, ts+4592, 9, z)) != uintptr(0)) { 15944 goto __14 15945 } 15946 tstFlags = int32(uint32(libc.Xatoi(tls, zValue))) 15947 goto __15 15948 __14: 15949 if !(libc.AssignUintptr(&zValue, csv_parameter(tls, ts+4602, 7, z)) != uintptr(0)) { 15950 goto __16 15951 } 15952 if !(nCol > 0) { 15953 goto __18 15954 } 15955 csv_errmsg(tls, bp+80, ts+4610, 0) 15956 goto csvtab_connect_error 15957 __18: 15958 ; 15959 nCol = libc.Xatoi(tls, zValue) 15960 if !(nCol <= 0) { 15961 goto __19 15962 } 15963 csv_errmsg(tls, bp+80, ts+4644, 0) 15964 goto csvtab_connect_error 15965 __19: 15966 ; 15967 goto __17 15968 __16: 15969 csv_errmsg(tls, bp+80, ts+4675, libc.VaList(bp, z)) 15970 goto csvtab_connect_error 15971 __17: 15972 ; 15973 __15: 15974 ; 15975 __12: 15976 ; 15977 __9: 15978 ; 15979 goto __2 15980 __2: 15981 i++ 15982 goto __1 15983 goto __3 15984 __3: 15985 ; 15986 if !(libc.Bool32(*(*uintptr)(unsafe.Pointer(bp + 344)) == uintptr(0)) == libc.Bool32(*(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) == uintptr(0))) { 15987 goto __20 15988 } 15989 csv_errmsg(tls, bp+80, ts+4695, 0) 15990 goto csvtab_connect_error 15991 __20: 15992 ; 15993 if !((nCol <= 0 || bHeader == 1) && 15994 csv_reader_open(tls, bp+80, *(*uintptr)(unsafe.Pointer(bp + 344)), *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8))) != 0) { 15995 goto __21 15996 } 15997 goto csvtab_connect_error 15998 __21: 15999 ; 16000 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(CsvTable{}))) 16001 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 16002 if !(pNew == uintptr(0)) { 16003 goto __22 16004 } 16005 goto csvtab_connect_oom 16006 __22: 16007 ; 16008 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(CsvTable{})), libc.X__builtin_object_size(tls, pNew, 0)) 16009 if !(*(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) == uintptr(0)) { 16010 goto __23 16011 } 16012 pStr = sqlite3.Xsqlite3_str_new(tls, uintptr(0)) 16013 zSep = ts + 584 16014 iCol = 0 16015 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+979, 0) 16016 if !(nCol < 0 && bHeader < 1) { 16017 goto __25 16018 } 16019 nCol = 0 16020 __26: 16021 csv_read_one_field(tls, bp+80) 16022 nCol++ 16023 goto __27 16024 __27: 16025 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 16026 goto __26 16027 } 16028 goto __28 16029 __28: 16030 ; 16031 __25: 16032 ; 16033 if !(nCol > 0 && bHeader < 1) { 16034 goto __29 16035 } 16036 iCol = 0 16037 __31: 16038 if !(iCol < nCol) { 16039 goto __33 16040 } 16041 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4747, libc.VaList(bp+8, zSep, iCol)) 16042 zSep = ts + 4758 16043 goto __32 16044 __32: 16045 iCol++ 16046 goto __31 16047 goto __33 16048 __33: 16049 ; 16050 goto __30 16051 __29: 16052 __34: 16053 z1 = csv_read_one_field(tls, bp+80) 16054 if !(nCol > 0 && iCol < nCol || nCol < 0 && bHeader != 0) { 16055 goto __37 16056 } 16057 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4760, libc.VaList(bp+24, zSep, z1)) 16058 zSep = ts + 4758 16059 iCol++ 16060 __37: 16061 ; 16062 goto __35 16063 __35: 16064 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 16065 goto __34 16066 } 16067 goto __36 16068 __36: 16069 ; 16070 if !(nCol < 0) { 16071 goto __38 16072 } 16073 nCol = iCol 16074 goto __39 16075 __38: 16076 __40: 16077 if !(iCol < nCol) { 16078 goto __41 16079 } 16080 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+4747, libc.VaList(bp+40, zSep, libc.PreIncInt32(&iCol, 1))) 16081 zSep = ts + 4758 16082 goto __40 16083 __41: 16084 ; 16085 __39: 16086 ; 16087 __30: 16088 ; 16089 (*CsvTable)(unsafe.Pointer(pNew)).FnCol = nCol 16090 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+585, 0) 16091 *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) = sqlite3.Xsqlite3_str_finish(tls, pStr) 16092 if !(*(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)) == uintptr(0)) { 16093 goto __42 16094 } 16095 goto csvtab_connect_oom 16096 __42: 16097 ; 16098 goto __24 16099 __23: 16100 if !(nCol < 0) { 16101 goto __43 16102 } 16103 __45: 16104 csv_read_one_field(tls, bp+80) 16105 (*CsvTable)(unsafe.Pointer(pNew)).FnCol++ 16106 goto __46 16107 __46: 16108 if (*CsvReader)(unsafe.Pointer(bp+80)).FcTerm == ',' { 16109 goto __45 16110 } 16111 goto __47 16112 __47: 16113 ; 16114 goto __44 16115 __43: 16116 (*CsvTable)(unsafe.Pointer(pNew)).FnCol = nCol 16117 __44: 16118 ; 16119 __24: 16120 ; 16121 (*CsvTable)(unsafe.Pointer(pNew)).FzFilename = *(*uintptr)(unsafe.Pointer(bp + 344)) 16122 *(*uintptr)(unsafe.Pointer(bp + 344)) = uintptr(0) 16123 (*CsvTable)(unsafe.Pointer(pNew)).FzData = *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) 16124 *(*uintptr)(unsafe.Pointer(bp + 344 + 1*8)) = uintptr(0) 16125 (*CsvTable)(unsafe.Pointer(pNew)).FtstFlags = uint32(tstFlags) 16126 if !(bHeader != 1) { 16127 goto __48 16128 } 16129 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int64(0) 16130 goto __49 16131 __48: 16132 if !((*CsvTable)(unsafe.Pointer(pNew)).FzData != 0) { 16133 goto __50 16134 } 16135 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int64(int32((*CsvReader)(unsafe.Pointer(bp + 80)).FiIn)) 16136 goto __51 16137 __50: 16138 (*CsvTable)(unsafe.Pointer(pNew)).FiStart = int64(int32(size_t(libc.Xftell(tls, (*CsvReader)(unsafe.Pointer(bp+80)).Fin)) - (*CsvReader)(unsafe.Pointer(bp+80)).FnIn + (*CsvReader)(unsafe.Pointer(bp+80)).FiIn)) 16139 __51: 16140 ; 16141 __49: 16142 ; 16143 csv_reader_reset(tls, bp+80) 16144 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8))) 16145 if !(rc != 0) { 16146 goto __52 16147 } 16148 csv_errmsg(tls, bp+80, ts+4772, libc.VaList(bp+56, *(*uintptr)(unsafe.Pointer(bp + 344 + 2*8)), sqlite3.Xsqlite3_errmsg(tls, db))) 16149 goto csvtab_connect_error 16150 __52: 16151 ; 16152 i = 0 16153 __53: 16154 if !(uint64(i) < uint64(unsafe.Sizeof([3]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))) { 16155 goto __55 16156 } 16157 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 344 + uintptr(i)*8))) 16158 goto __54 16159 __54: 16160 i++ 16161 goto __53 16162 goto __55 16163 __55: 16164 ; 16165 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_DIRECTONLY, 0) 16166 return SQLITE_OK 16167 16168 csvtab_connect_oom: 16169 rc = SQLITE_NOMEM 16170 csv_errmsg(tls, bp+80, ts+2069, 0) 16171 16172 csvtab_connect_error: 16173 if !(pNew != 0) { 16174 goto __56 16175 } 16176 csvtabDisconnect(tls, pNew) 16177 __56: 16178 ; 16179 i = 0 16180 __57: 16181 if !(uint64(i) < uint64(unsafe.Sizeof([3]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))) { 16182 goto __59 16183 } 16184 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 344 + uintptr(i)*8))) 16185 goto __58 16186 __58: 16187 i++ 16188 goto __57 16189 goto __59 16190 __59: 16191 ; 16192 if !(*(*int8)(unsafe.Pointer(bp + 80 + 64)) != 0) { 16193 goto __60 16194 } 16195 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(pzErr))) 16196 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+72, bp+80+64)) 16197 __60: 16198 ; 16199 csv_reader_reset(tls, bp+80) 16200 if !(rc == SQLITE_OK) { 16201 goto __61 16202 } 16203 rc = SQLITE_ERROR 16204 __61: 16205 ; 16206 return rc 16207 } 16208 16209 var azParam = [3]uintptr{ 16210 ts + 4794, ts + 4803, ts + 4808, 16211 } 16212 16213 func csvtabCursorRowReset(tls *libc.TLS, pCur uintptr) { 16214 var pTab uintptr = (*CsvCursor)(unsafe.Pointer(pCur)).Fbase.FpVtab 16215 var i int32 16216 for i = 0; i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol; i++ { 16217 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8))) 16218 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = uintptr(0) 16219 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = 0 16220 } 16221 } 16222 16223 func csvtabCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 16224 return csvtabConnect(tls, db, pAux, argc, argv, ppVtab, pzErr) 16225 } 16226 16227 func csvtabClose(tls *libc.TLS, cur uintptr) int32 { 16228 var pCur uintptr = cur 16229 csvtabCursorRowReset(tls, pCur) 16230 csv_reader_reset(tls, pCur+8) 16231 sqlite3.Xsqlite3_free(tls, cur) 16232 return SQLITE_OK 16233 } 16234 16235 func csvtabOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 16236 var pTab uintptr = p 16237 var pCur uintptr 16238 var nByte size_t 16239 nByte = uint64(unsafe.Sizeof(CsvCursor{})) + (uint64(unsafe.Sizeof(uintptr(0)))+uint64(unsafe.Sizeof(int32(0))))*uint64((*CsvTable)(unsafe.Pointer(pTab)).FnCol) 16240 pCur = sqlite3.Xsqlite3_malloc64(tls, nByte) 16241 if pCur == uintptr(0) { 16242 return SQLITE_NOMEM 16243 } 16244 libc.X__builtin___memset_chk(tls, pCur, 0, nByte, libc.X__builtin_object_size(tls, pCur, 0)) 16245 (*CsvCursor)(unsafe.Pointer(pCur)).FazVal = pCur + 1*296 16246 (*CsvCursor)(unsafe.Pointer(pCur)).FaLen = (*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr((*CsvTable)(unsafe.Pointer(pTab)).FnCol)*8 16247 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 16248 if csv_reader_open(tls, pCur+8, (*CsvTable)(unsafe.Pointer(pTab)).FzFilename, (*CsvTable)(unsafe.Pointer(pTab)).FzData) != 0 { 16249 csv_xfer_error(tls, pTab, pCur+8) 16250 return SQLITE_ERROR 16251 } 16252 return SQLITE_OK 16253 } 16254 16255 func csvtabNext(tls *libc.TLS, cur uintptr) int32 { 16256 var pCur uintptr = cur 16257 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 16258 var i int32 = 0 16259 var z uintptr 16260 for __ccgo := true; __ccgo; __ccgo = (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FcTerm == ',' { 16261 z = csv_read_one_field(tls, pCur+8) 16262 if z == uintptr(0) { 16263 break 16264 } 16265 if i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 16266 if *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) < (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1 { 16267 var zNew uintptr = sqlite3.Xsqlite3_realloc64(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), uint64((*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1)) 16268 if zNew == uintptr(0) { 16269 csv_errmsg(tls, pCur+8, ts+2069, 0) 16270 csv_xfer_error(tls, pTab, pCur+8) 16271 break 16272 } 16273 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = zNew 16274 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn + 1 16275 } 16276 libc.X__builtin___memcpy_chk(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), z, uint64((*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fn+1), libc.X__builtin_object_size(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), 0)) 16277 i++ 16278 } 16279 } 16280 if z == uintptr(0) || (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FcTerm == -1 && i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 16281 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid = int64(-1) 16282 } else { 16283 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid++ 16284 for i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol { 16285 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8))) 16286 *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) = uintptr(0) 16287 *(*int32)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FaLen + uintptr(i)*4)) = 0 16288 i++ 16289 } 16290 } 16291 return SQLITE_OK 16292 } 16293 16294 func csvtabColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 16295 var pCur uintptr = cur 16296 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 16297 if i >= 0 && i < (*CsvTable)(unsafe.Pointer(pTab)).FnCol && *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)) != uintptr(0) { 16298 sqlite3.Xsqlite3_result_text(tls, ctx, *(*uintptr)(unsafe.Pointer((*CsvCursor)(unsafe.Pointer(pCur)).FazVal + uintptr(i)*8)), -1, libc.UintptrFromInt32(-1)) 16299 } 16300 return SQLITE_OK 16301 } 16302 16303 func csvtabRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 16304 var pCur uintptr = cur 16305 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid 16306 return SQLITE_OK 16307 } 16308 16309 func csvtabEof(tls *libc.TLS, cur uintptr) int32 { 16310 var pCur uintptr = cur 16311 return libc.Bool32((*CsvCursor)(unsafe.Pointer(pCur)).FiRowid < int64(0)) 16312 } 16313 16314 func csvtabFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 16315 var pCur uintptr = pVtabCursor 16316 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 16317 (*CsvCursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 16318 if (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fin == uintptr(0) { 16319 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FiIn = size_t((*CsvTable)(unsafe.Pointer(pTab)).FiStart) 16320 } else { 16321 libc.Xfseek(tls, (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.Fin, (*CsvTable)(unsafe.Pointer(pTab)).FiStart, SEEK_SET) 16322 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FiIn = uint64(0) 16323 (*CsvCursor)(unsafe.Pointer(pCur)).Frdr.FnIn = uint64(0) 16324 } 16325 return csvtabNext(tls, pVtabCursor) 16326 } 16327 16328 func csvtabBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 16329 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1000000) 16330 if (*CsvTable)(unsafe.Pointer(tab)).FtstFlags&uint32(CSVTEST_FIDX) != uint32(0) { 16331 var i int32 16332 var nConst int32 = 0 16333 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 16334 var op uint8 16335 if int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable) == 0 { 16336 continue 16337 } 16338 op = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop 16339 if int32(op) == SQLITE_INDEX_CONSTRAINT_EQ || 16340 int32(op) == SQLITE_INDEX_CONSTRAINT_LIKE || 16341 int32(op) == SQLITE_INDEX_CONSTRAINT_GLOB { 16342 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 16343 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(nConst)*8)).FargvIndex = nConst + 1 16344 nConst++ 16345 } 16346 } 16347 } 16348 return SQLITE_OK 16349 } 16350 16351 var CsvModule = sqlite3_module{ 16352 FxCreate: 0, 16353 FxConnect: 0, 16354 FxBestIndex: 0, 16355 FxDisconnect: 0, 16356 FxDestroy: 0, 16357 FxOpen: 0, 16358 FxClose: 0, 16359 FxFilter: 0, 16360 FxNext: 0, 16361 FxEof: 0, 16362 FxColumn: 0, 16363 FxRowid: 0, 16364 } 16365 16366 func csvtabUpdate(tls *libc.TLS, p uintptr, n int32, v uintptr, x uintptr) int32 { 16367 return SQLITE_READONLY 16368 } 16369 16370 var CsvModuleFauxWrite = sqlite3_module{ 16371 FxCreate: 0, 16372 FxConnect: 0, 16373 FxBestIndex: 0, 16374 FxDisconnect: 0, 16375 FxDestroy: 0, 16376 FxOpen: 0, 16377 FxClose: 0, 16378 FxFilter: 0, 16379 FxNext: 0, 16380 FxEof: 0, 16381 FxColumn: 0, 16382 FxRowid: 0, 16383 FxUpdate: 0, 16384 } 16385 16386 func sqlite3_csv_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 16387 var rc int32 16388 _ = pApi 16389 16390 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4815, uintptr(unsafe.Pointer(&CsvModule)), uintptr(0)) 16391 if rc == SQLITE_OK { 16392 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4819, uintptr(unsafe.Pointer(&CsvModuleFauxWrite)), uintptr(0)) 16393 } 16394 return rc 16395 } 16396 16397 type Decimal1 = struct { 16398 Fsign int8 16399 Foom int8 16400 FisNull int8 16401 FisInit int8 16402 FnDigit int32 16403 FnFrac int32 16404 F__ccgo_pad1 [4]byte 16405 Fa uintptr 16406 } 16407 16408 type Decimal = Decimal1 16409 16410 func decimal_clear(tls *libc.TLS, p uintptr) { 16411 sqlite3.Xsqlite3_free(tls, (*Decimal)(unsafe.Pointer(p)).Fa) 16412 } 16413 16414 func decimal_free(tls *libc.TLS, p uintptr) { 16415 if p != 0 { 16416 decimal_clear(tls, p) 16417 sqlite3.Xsqlite3_free(tls, p) 16418 } 16419 } 16420 16421 func decimal_new(tls *libc.TLS, pCtx uintptr, pIn uintptr, nAlt int32, zAlt uintptr) uintptr { 16422 var p uintptr 16423 var n int32 16424 var i int32 16425 var zIn uintptr 16426 var iExp int32 16427 var j int32 16428 var neg int32 16429 var c int8 16430 var nExtra int32 16431 iExp = 0 16432 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Decimal{}))) 16433 if !(p == uintptr(0)) { 16434 goto __1 16435 } 16436 goto new_no_mem 16437 __1: 16438 ; 16439 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(0) 16440 (*Decimal)(unsafe.Pointer(p)).Foom = int8(0) 16441 (*Decimal)(unsafe.Pointer(p)).FisInit = int8(1) 16442 (*Decimal)(unsafe.Pointer(p)).FisNull = int8(0) 16443 (*Decimal)(unsafe.Pointer(p)).FnDigit = 0 16444 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 16445 if !(zAlt != 0) { 16446 goto __2 16447 } 16448 n = nAlt 16449 zIn = zAlt 16450 goto __3 16451 __2: 16452 if !(sqlite3.Xsqlite3_value_type(tls, pIn) == SQLITE_NULL) { 16453 goto __4 16454 } 16455 (*Decimal)(unsafe.Pointer(p)).Fa = uintptr(0) 16456 (*Decimal)(unsafe.Pointer(p)).FisNull = int8(1) 16457 return p 16458 __4: 16459 ; 16460 n = sqlite3.Xsqlite3_value_bytes(tls, pIn) 16461 zIn = sqlite3.Xsqlite3_value_text(tls, pIn) 16462 __3: 16463 ; 16464 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_malloc64(tls, uint64(n+1)) 16465 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 16466 goto __5 16467 } 16468 goto new_no_mem 16469 __5: 16470 ; 16471 i = 0 16472 __6: 16473 if !(isspace(tls, int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i))))) != 0) { 16474 goto __8 16475 } 16476 goto __7 16477 __7: 16478 i++ 16479 goto __6 16480 goto __8 16481 __8: 16482 ; 16483 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '-') { 16484 goto __9 16485 } 16486 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(1) 16487 i++ 16488 goto __10 16489 __9: 16490 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '+') { 16491 goto __11 16492 } 16493 i++ 16494 __11: 16495 ; 16496 __10: 16497 ; 16498 __12: 16499 if !(i < n && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) == '0') { 16500 goto __13 16501 } 16502 i++ 16503 goto __12 16504 __13: 16505 ; 16506 __14: 16507 if !(i < n) { 16508 goto __15 16509 } 16510 c = int8(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))) 16511 if !(int32(c) >= '0' && int32(c) <= '9') { 16512 goto __16 16513 } 16514 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(libc.PostIncInt32(&(*Decimal)(unsafe.Pointer(p)).FnDigit, 1)))) = int8(int32(c) - '0') 16515 goto __17 16516 __16: 16517 if !(int32(c) == '.') { 16518 goto __18 16519 } 16520 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit + 1 16521 goto __19 16522 __18: 16523 if !(int32(c) == 'e' || int32(c) == 'E') { 16524 goto __20 16525 } 16526 j = i + 1 16527 neg = 0 16528 if !(j >= n) { 16529 goto __21 16530 } 16531 goto __15 16532 __21: 16533 ; 16534 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) == '-') { 16535 goto __22 16536 } 16537 neg = 1 16538 j++ 16539 goto __23 16540 __22: 16541 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) == '+') { 16542 goto __24 16543 } 16544 j++ 16545 __24: 16546 ; 16547 __23: 16548 ; 16549 __25: 16550 if !(j < n && iExp < 1000000) { 16551 goto __26 16552 } 16553 if !(int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) >= '0' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) <= '9') { 16554 goto __27 16555 } 16556 iExp = iExp*10 + int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(j)))) - '0' 16557 __27: 16558 ; 16559 j++ 16560 goto __25 16561 __26: 16562 ; 16563 if !(neg != 0) { 16564 goto __28 16565 } 16566 iExp = -iExp 16567 __28: 16568 ; 16569 goto __15 16570 __20: 16571 ; 16572 __19: 16573 ; 16574 __17: 16575 ; 16576 i++ 16577 goto __14 16578 __15: 16579 ; 16580 if !((*Decimal)(unsafe.Pointer(p)).FnFrac != 0) { 16581 goto __29 16582 } 16583 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit - ((*Decimal)(unsafe.Pointer(p)).FnFrac - 1) 16584 __29: 16585 ; 16586 if !(iExp > 0) { 16587 goto __30 16588 } 16589 if !((*Decimal)(unsafe.Pointer(p)).FnFrac > 0) { 16590 goto __32 16591 } 16592 if !(iExp <= (*Decimal)(unsafe.Pointer(p)).FnFrac) { 16593 goto __33 16594 } 16595 *(*int32)(unsafe.Pointer(p + 8)) -= iExp 16596 iExp = 0 16597 goto __34 16598 __33: 16599 iExp = iExp - (*Decimal)(unsafe.Pointer(p)).FnFrac 16600 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 16601 __34: 16602 ; 16603 __32: 16604 ; 16605 if !(iExp > 0) { 16606 goto __35 16607 } 16608 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit+iExp+1)) 16609 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 16610 goto __36 16611 } 16612 goto new_no_mem 16613 __36: 16614 ; 16615 libc.X__builtin___memset_chk(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0, uint64(iExp), libc.X__builtin_object_size(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0)) 16616 *(*int32)(unsafe.Pointer(p + 4)) += iExp 16617 __35: 16618 ; 16619 goto __31 16620 __30: 16621 if !(iExp < 0) { 16622 goto __37 16623 } 16624 iExp = -iExp 16625 nExtra = (*Decimal)(unsafe.Pointer(p)).FnDigit - (*Decimal)(unsafe.Pointer(p)).FnFrac - 1 16626 if !(nExtra != 0) { 16627 goto __38 16628 } 16629 if !(nExtra >= iExp) { 16630 goto __39 16631 } 16632 *(*int32)(unsafe.Pointer(p + 8)) += iExp 16633 iExp = 0 16634 goto __40 16635 __39: 16636 iExp = iExp - nExtra 16637 (*Decimal)(unsafe.Pointer(p)).FnFrac = (*Decimal)(unsafe.Pointer(p)).FnDigit - 1 16638 __40: 16639 ; 16640 __38: 16641 ; 16642 if !(iExp > 0) { 16643 goto __41 16644 } 16645 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit+iExp+1)) 16646 if !((*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0)) { 16647 goto __42 16648 } 16649 goto new_no_mem 16650 __42: 16651 ; 16652 libc.X__builtin___memmove_chk(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(iExp), (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit), libc.X__builtin_object_size(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(iExp), 0)) 16653 libc.X__builtin___memset_chk(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0, uint64(iExp), libc.X__builtin_object_size(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0)) 16654 *(*int32)(unsafe.Pointer(p + 4)) += iExp 16655 *(*int32)(unsafe.Pointer(p + 8)) += iExp 16656 __41: 16657 ; 16658 __37: 16659 ; 16660 __31: 16661 ; 16662 return p 16663 16664 new_no_mem: 16665 if !(pCtx != 0) { 16666 goto __43 16667 } 16668 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 16669 __43: 16670 ; 16671 sqlite3.Xsqlite3_free(tls, p) 16672 return uintptr(0) 16673 } 16674 16675 func decimal_result(tls *libc.TLS, pCtx uintptr, p uintptr) { 16676 var z uintptr 16677 var i int32 16678 var j int32 16679 var n int32 16680 if p == uintptr(0) || (*Decimal)(unsafe.Pointer(p)).Foom != 0 { 16681 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 16682 return 16683 } 16684 if (*Decimal)(unsafe.Pointer(p)).FisNull != 0 { 16685 sqlite3.Xsqlite3_result_null(tls, pCtx) 16686 return 16687 } 16688 z = sqlite3.Xsqlite3_malloc(tls, (*Decimal)(unsafe.Pointer(p)).FnDigit+4) 16689 if z == uintptr(0) { 16690 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 16691 return 16692 } 16693 i = 0 16694 if (*Decimal)(unsafe.Pointer(p)).FnDigit == 0 || (*Decimal)(unsafe.Pointer(p)).FnDigit == 1 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa))) == 0 { 16695 (*Decimal)(unsafe.Pointer(p)).Fsign = int8(0) 16696 } 16697 if (*Decimal)(unsafe.Pointer(p)).Fsign != 0 { 16698 *(*int8)(unsafe.Pointer(z)) = int8('-') 16699 i = 1 16700 } 16701 n = (*Decimal)(unsafe.Pointer(p)).FnDigit - (*Decimal)(unsafe.Pointer(p)).FnFrac 16702 if n <= 0 { 16703 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8('0') 16704 } 16705 j = 0 16706 for n > 1 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) == 0 { 16707 j++ 16708 n-- 16709 } 16710 for n > 0 { 16711 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8(int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) + '0') 16712 j++ 16713 n-- 16714 } 16715 if (*Decimal)(unsafe.Pointer(p)).FnFrac != 0 { 16716 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8('.') 16717 for __ccgo := true; __ccgo; __ccgo = j < (*Decimal)(unsafe.Pointer(p)).FnDigit { 16718 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1)))) = int8(int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa + uintptr(j)))) + '0') 16719 j++ 16720 } 16721 } 16722 *(*int8)(unsafe.Pointer(z + uintptr(i))) = int8(0) 16723 sqlite3.Xsqlite3_result_text(tls, pCtx, z, i, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 16724 } 16725 16726 func decimalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16727 var p uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 16728 _ = argc 16729 decimal_result(tls, context, p) 16730 decimal_free(tls, p) 16731 } 16732 16733 func decimal_cmp(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 16734 var nASig int32 16735 var nBSig int32 16736 var rc int32 16737 var n int32 16738 if int32((*Decimal)(unsafe.Pointer(pA)).Fsign) != int32((*Decimal)(unsafe.Pointer(pB)).Fsign) { 16739 if (*Decimal)(unsafe.Pointer(pA)).Fsign != 0 { 16740 return -1 16741 } 16742 return +1 16743 } 16744 if (*Decimal)(unsafe.Pointer(pA)).Fsign != 0 { 16745 var pTemp uintptr = pA 16746 pA = pB 16747 pB = pTemp 16748 } 16749 nASig = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pA)).FnFrac 16750 nBSig = (*Decimal)(unsafe.Pointer(pB)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnFrac 16751 if nASig != nBSig { 16752 return nASig - nBSig 16753 } 16754 n = (*Decimal)(unsafe.Pointer(pA)).FnDigit 16755 if n > (*Decimal)(unsafe.Pointer(pB)).FnDigit { 16756 n = (*Decimal)(unsafe.Pointer(pB)).FnDigit 16757 } 16758 rc = libc.Xmemcmp(tls, (*Decimal)(unsafe.Pointer(pA)).Fa, (*Decimal)(unsafe.Pointer(pB)).Fa, uint64(n)) 16759 if rc == 0 { 16760 rc = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnDigit 16761 } 16762 return rc 16763 } 16764 16765 func decimalCmpFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16766 var pA uintptr 16767 var pB uintptr 16768 var rc int32 16769 pA = uintptr(0) 16770 pB = uintptr(0) 16771 16772 _ = argc 16773 pA = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 16774 if !(pA == uintptr(0) || (*Decimal)(unsafe.Pointer(pA)).FisNull != 0) { 16775 goto __1 16776 } 16777 goto cmp_done 16778 __1: 16779 ; 16780 pB = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 16781 if !(pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0) { 16782 goto __2 16783 } 16784 goto cmp_done 16785 __2: 16786 ; 16787 rc = decimal_cmp(tls, pA, pB) 16788 if !(rc < 0) { 16789 goto __3 16790 } 16791 rc = -1 16792 goto __4 16793 __3: 16794 if !(rc > 0) { 16795 goto __5 16796 } 16797 rc = +1 16798 __5: 16799 ; 16800 __4: 16801 ; 16802 sqlite3.Xsqlite3_result_int(tls, context, rc) 16803 cmp_done: 16804 decimal_free(tls, pA) 16805 decimal_free(tls, pB) 16806 } 16807 16808 func decimal_expand(tls *libc.TLS, p uintptr, nDigit int32, nFrac int32) { 16809 var nAddSig int32 16810 var nAddFrac int32 16811 if p == uintptr(0) { 16812 return 16813 } 16814 nAddFrac = nFrac - (*Decimal)(unsafe.Pointer(p)).FnFrac 16815 nAddSig = nDigit - (*Decimal)(unsafe.Pointer(p)).FnDigit - nAddFrac 16816 if nAddFrac == 0 && nAddSig == 0 { 16817 return 16818 } 16819 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_realloc64(tls, (*Decimal)(unsafe.Pointer(p)).Fa, uint64(nDigit+1)) 16820 if (*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0) { 16821 (*Decimal)(unsafe.Pointer(p)).Foom = int8(1) 16822 return 16823 } 16824 if nAddSig != 0 { 16825 libc.X__builtin___memmove_chk(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(nAddSig), (*Decimal)(unsafe.Pointer(p)).Fa, uint64((*Decimal)(unsafe.Pointer(p)).FnDigit), libc.X__builtin_object_size(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr(nAddSig), 0)) 16826 libc.X__builtin___memset_chk(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0, uint64(nAddSig), libc.X__builtin_object_size(tls, (*Decimal)(unsafe.Pointer(p)).Fa, 0)) 16827 *(*int32)(unsafe.Pointer(p + 4)) += nAddSig 16828 } 16829 if nAddFrac != 0 { 16830 libc.X__builtin___memset_chk(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0, uint64(nAddFrac), libc.X__builtin_object_size(tls, (*Decimal)(unsafe.Pointer(p)).Fa+uintptr((*Decimal)(unsafe.Pointer(p)).FnDigit), 0)) 16831 *(*int32)(unsafe.Pointer(p + 4)) += nAddFrac 16832 *(*int32)(unsafe.Pointer(p + 8)) += nAddFrac 16833 } 16834 } 16835 16836 func decimal_add(tls *libc.TLS, pA uintptr, pB uintptr) { 16837 var nSig int32 16838 var nFrac int32 16839 var nDigit int32 16840 var i int32 16841 var rc int32 16842 if pA == uintptr(0) { 16843 return 16844 } 16845 if (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 { 16846 (*Decimal)(unsafe.Pointer(pA)).Foom = int8(1) 16847 return 16848 } 16849 if (*Decimal)(unsafe.Pointer(pA)).FisNull != 0 || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0 { 16850 (*Decimal)(unsafe.Pointer(pA)).FisNull = int8(1) 16851 return 16852 } 16853 nSig = (*Decimal)(unsafe.Pointer(pA)).FnDigit - (*Decimal)(unsafe.Pointer(pA)).FnFrac 16854 if nSig != 0 && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa))) == 0 { 16855 nSig-- 16856 } 16857 if nSig < (*Decimal)(unsafe.Pointer(pB)).FnDigit-(*Decimal)(unsafe.Pointer(pB)).FnFrac { 16858 nSig = (*Decimal)(unsafe.Pointer(pB)).FnDigit - (*Decimal)(unsafe.Pointer(pB)).FnFrac 16859 } 16860 nFrac = (*Decimal)(unsafe.Pointer(pA)).FnFrac 16861 if nFrac < (*Decimal)(unsafe.Pointer(pB)).FnFrac { 16862 nFrac = (*Decimal)(unsafe.Pointer(pB)).FnFrac 16863 } 16864 nDigit = nSig + nFrac + 1 16865 decimal_expand(tls, pA, nDigit, nFrac) 16866 decimal_expand(tls, pB, nDigit, nFrac) 16867 if (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 { 16868 (*Decimal)(unsafe.Pointer(pA)).Foom = int8(1) 16869 } else { 16870 if int32((*Decimal)(unsafe.Pointer(pA)).Fsign) == int32((*Decimal)(unsafe.Pointer(pB)).Fsign) { 16871 var carry int32 = 0 16872 for i = nDigit - 1; i >= 0; i-- { 16873 var x int32 = int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i)))) + int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pB)).Fa + uintptr(i)))) + carry 16874 if x >= 10 { 16875 carry = 1 16876 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x - 10) 16877 } else { 16878 carry = 0 16879 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x) 16880 } 16881 } 16882 } else { 16883 var aA uintptr 16884 var aB uintptr 16885 var borrow int32 = 0 16886 rc = libc.Xmemcmp(tls, (*Decimal)(unsafe.Pointer(pA)).Fa, (*Decimal)(unsafe.Pointer(pB)).Fa, uint64(nDigit)) 16887 if rc < 0 { 16888 aA = (*Decimal)(unsafe.Pointer(pB)).Fa 16889 aB = (*Decimal)(unsafe.Pointer(pA)).Fa 16890 (*Decimal)(unsafe.Pointer(pA)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pA)).Fsign != 0)) 16891 } else { 16892 aA = (*Decimal)(unsafe.Pointer(pA)).Fa 16893 aB = (*Decimal)(unsafe.Pointer(pB)).Fa 16894 } 16895 for i = nDigit - 1; i >= 0; i-- { 16896 var x int32 = int32(*(*int8)(unsafe.Pointer(aA + uintptr(i)))) - int32(*(*int8)(unsafe.Pointer(aB + uintptr(i)))) - borrow 16897 if x < 0 { 16898 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x + 10) 16899 borrow = 1 16900 } else { 16901 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) = int8(x) 16902 borrow = 0 16903 } 16904 } 16905 } 16906 } 16907 } 16908 16909 func decimalCollFunc(tls *libc.TLS, notUsed uintptr, nKey1 int32, pKey1 uintptr, nKey2 int32, pKey2 uintptr) int32 { 16910 var zA uintptr = pKey1 16911 var zB uintptr = pKey2 16912 var pA uintptr = decimal_new(tls, uintptr(0), uintptr(0), nKey1, zA) 16913 var pB uintptr = decimal_new(tls, uintptr(0), uintptr(0), nKey2, zB) 16914 var rc int32 16915 _ = notUsed 16916 if pA == uintptr(0) || pB == uintptr(0) { 16917 rc = 0 16918 } else { 16919 rc = decimal_cmp(tls, pA, pB) 16920 } 16921 decimal_free(tls, pA) 16922 decimal_free(tls, pB) 16923 return rc 16924 } 16925 16926 func decimalAddFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16927 var pA uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 16928 var pB uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 16929 _ = argc 16930 decimal_add(tls, pA, pB) 16931 decimal_result(tls, context, pA) 16932 decimal_free(tls, pA) 16933 decimal_free(tls, pB) 16934 } 16935 16936 func decimalSubFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16937 var pA uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 16938 var pB uintptr = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 16939 _ = argc 16940 if pB != 0 { 16941 (*Decimal)(unsafe.Pointer(pB)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pB)).Fsign != 0)) 16942 decimal_add(tls, pA, pB) 16943 decimal_result(tls, context, pA) 16944 } 16945 decimal_free(tls, pA) 16946 decimal_free(tls, pB) 16947 } 16948 16949 func decimalSumStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16950 var p uintptr 16951 var pArg uintptr 16952 _ = argc 16953 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(Decimal{}))) 16954 if p == uintptr(0) { 16955 return 16956 } 16957 if !(int32((*Decimal)(unsafe.Pointer(p)).FisInit) != 0) { 16958 (*Decimal)(unsafe.Pointer(p)).FisInit = int8(1) 16959 (*Decimal)(unsafe.Pointer(p)).Fa = sqlite3.Xsqlite3_malloc(tls, 2) 16960 if (*Decimal)(unsafe.Pointer(p)).Fa == uintptr(0) { 16961 (*Decimal)(unsafe.Pointer(p)).Foom = int8(1) 16962 } else { 16963 *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(p)).Fa)) = int8(0) 16964 } 16965 (*Decimal)(unsafe.Pointer(p)).FnDigit = 1 16966 (*Decimal)(unsafe.Pointer(p)).FnFrac = 0 16967 } 16968 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 16969 return 16970 } 16971 pArg = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 16972 decimal_add(tls, p, pArg) 16973 decimal_free(tls, pArg) 16974 } 16975 16976 func decimalSumInverse(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 16977 var p uintptr 16978 var pArg uintptr 16979 _ = argc 16980 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(Decimal{}))) 16981 if p == uintptr(0) { 16982 return 16983 } 16984 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 16985 return 16986 } 16987 pArg = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 16988 if pArg != 0 { 16989 (*Decimal)(unsafe.Pointer(pArg)).Fsign = libc.BoolInt8(!((*Decimal)(unsafe.Pointer(pArg)).Fsign != 0)) 16990 } 16991 decimal_add(tls, p, pArg) 16992 decimal_free(tls, pArg) 16993 } 16994 16995 func decimalSumValue(tls *libc.TLS, context uintptr) { 16996 var p uintptr = sqlite3.Xsqlite3_aggregate_context(tls, context, 0) 16997 if p == uintptr(0) { 16998 return 16999 } 17000 decimal_result(tls, context, p) 17001 } 17002 17003 func decimalSumFinalize(tls *libc.TLS, context uintptr) { 17004 var p uintptr = sqlite3.Xsqlite3_aggregate_context(tls, context, 0) 17005 if p == uintptr(0) { 17006 return 17007 } 17008 decimal_result(tls, context, p) 17009 decimal_clear(tls, p) 17010 } 17011 17012 func decimalMulFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 17013 var pA uintptr 17014 var pB uintptr 17015 var acc uintptr 17016 var i int32 17017 var j int32 17018 var k int32 17019 var minFrac int32 17020 var f int8 17021 var carry int32 17022 var x int32 17023 pA = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv)), 0, uintptr(0)) 17024 pB = decimal_new(tls, context, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, uintptr(0)) 17025 acc = uintptr(0) 17026 _ = argc 17027 if !(pA == uintptr(0) || (*Decimal)(unsafe.Pointer(pA)).Foom != 0 || (*Decimal)(unsafe.Pointer(pA)).FisNull != 0 || 17028 pB == uintptr(0) || (*Decimal)(unsafe.Pointer(pB)).Foom != 0 || (*Decimal)(unsafe.Pointer(pB)).FisNull != 0) { 17029 goto __1 17030 } 17031 goto mul_end 17032 __1: 17033 ; 17034 acc = sqlite3.Xsqlite3_malloc64(tls, uint64((*Decimal)(unsafe.Pointer(pA)).FnDigit+(*Decimal)(unsafe.Pointer(pB)).FnDigit+2)) 17035 if !(acc == uintptr(0)) { 17036 goto __2 17037 } 17038 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17039 goto mul_end 17040 __2: 17041 ; 17042 libc.X__builtin___memset_chk(tls, acc, 0, uint64((*Decimal)(unsafe.Pointer(pA)).FnDigit+(*Decimal)(unsafe.Pointer(pB)).FnDigit+2), libc.X__builtin_object_size(tls, acc, 0)) 17043 minFrac = (*Decimal)(unsafe.Pointer(pA)).FnFrac 17044 if !((*Decimal)(unsafe.Pointer(pB)).FnFrac < minFrac) { 17045 goto __3 17046 } 17047 minFrac = (*Decimal)(unsafe.Pointer(pB)).FnFrac 17048 __3: 17049 ; 17050 i = (*Decimal)(unsafe.Pointer(pA)).FnDigit - 1 17051 __4: 17052 if !(i >= 0) { 17053 goto __6 17054 } 17055 f = *(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr(i))) 17056 carry = 0 17057 j = (*Decimal)(unsafe.Pointer(pB)).FnDigit - 1 17058 k = i + j + 3 17059 __7: 17060 if !(j >= 0) { 17061 goto __9 17062 } 17063 x = int32(*(*int8)(unsafe.Pointer(acc + uintptr(k)))) + int32(f)*int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pB)).Fa + uintptr(j)))) + carry 17064 *(*int8)(unsafe.Pointer(acc + uintptr(k))) = int8(x % 10) 17065 carry = x / 10 17066 goto __8 17067 __8: 17068 j-- 17069 k-- 17070 goto __7 17071 goto __9 17072 __9: 17073 ; 17074 x = int32(*(*int8)(unsafe.Pointer(acc + uintptr(k)))) + carry 17075 *(*int8)(unsafe.Pointer(acc + uintptr(k))) = int8(x % 10) 17076 *(*int8)(unsafe.Pointer(acc + uintptr(k-1))) += int8(x / 10) 17077 goto __5 17078 __5: 17079 i-- 17080 goto __4 17081 goto __6 17082 __6: 17083 ; 17084 sqlite3.Xsqlite3_free(tls, (*Decimal)(unsafe.Pointer(pA)).Fa) 17085 (*Decimal)(unsafe.Pointer(pA)).Fa = acc 17086 acc = uintptr(0) 17087 *(*int32)(unsafe.Pointer(pA + 4)) += (*Decimal)(unsafe.Pointer(pB)).FnDigit + 2 17088 *(*int32)(unsafe.Pointer(pA + 8)) += (*Decimal)(unsafe.Pointer(pB)).FnFrac 17089 *(*int8)(unsafe.Pointer(pA)) ^= int8(int32((*Decimal)(unsafe.Pointer(pB)).Fsign)) 17090 __10: 17091 if !((*Decimal)(unsafe.Pointer(pA)).FnFrac > minFrac && int32(*(*int8)(unsafe.Pointer((*Decimal)(unsafe.Pointer(pA)).Fa + uintptr((*Decimal)(unsafe.Pointer(pA)).FnDigit-1)))) == 0) { 17092 goto __11 17093 } 17094 (*Decimal)(unsafe.Pointer(pA)).FnFrac-- 17095 (*Decimal)(unsafe.Pointer(pA)).FnDigit-- 17096 goto __10 17097 __11: 17098 ; 17099 decimal_result(tls, context, pA) 17100 17101 mul_end: 17102 sqlite3.Xsqlite3_free(tls, acc) 17103 decimal_free(tls, pA) 17104 decimal_free(tls, pB) 17105 } 17106 17107 func sqlite3_decimal_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17108 var rc int32 = SQLITE_OK 17109 var i uint32 17110 _ = pzErrMsg 17111 17112 _ = pApi 17113 17114 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(aFunc))/uint64(unsafe.Sizeof(struct { 17115 FzFuncName uintptr 17116 FnArg int32 17117 F__ccgo_pad1 [4]byte 17118 FxFunc uintptr 17119 }{})) && rc == SQLITE_OK; i++ { 17120 rc = sqlite3.Xsqlite3_create_function(tls, db, aFunc[i].FzFuncName, aFunc[i].FnArg, 17121 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 17122 uintptr(0), aFunc[i].FxFunc, uintptr(0), uintptr(0)) 17123 } 17124 if rc == SQLITE_OK { 17125 rc = sqlite3.Xsqlite3_create_window_function(tls, db, ts+4826, 1, 17126 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, uintptr(0), 17127 *(*uintptr)(unsafe.Pointer(&struct { 17128 f func(*libc.TLS, uintptr, int32, uintptr) 17129 }{decimalSumStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{decimalSumFinalize})), 17130 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{decimalSumValue})), *(*uintptr)(unsafe.Pointer(&struct { 17131 f func(*libc.TLS, uintptr, int32, uintptr) 17132 }{decimalSumInverse})), uintptr(0)) 17133 } 17134 if rc == SQLITE_OK { 17135 rc = sqlite3.Xsqlite3_create_collation(tls, db, ts+4838, SQLITE_UTF8, 17136 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 17137 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 17138 }{decimalCollFunc}))) 17139 } 17140 return rc 17141 } 17142 17143 var aFunc = [5]struct { 17144 FzFuncName uintptr 17145 FnArg int32 17146 F__ccgo_pad1 [4]byte 17147 FxFunc uintptr 17148 }{ 17149 {FzFuncName: ts + 4838, FnArg: 1, FxFunc: 0}, 17150 {FzFuncName: ts + 4846, FnArg: 2, FxFunc: 0}, 17151 {FzFuncName: ts + 4858, FnArg: 2, FxFunc: 0}, 17152 {FzFuncName: ts + 4870, FnArg: 2, FxFunc: 0}, 17153 {FzFuncName: ts + 4882, FnArg: 2, FxFunc: 0}, 17154 } 17155 17156 type EvalResult = struct { 17157 Fz uintptr 17158 FzSep uintptr 17159 FszSep int32 17160 F__ccgo_pad1 [4]byte 17161 FnAlloc sqlite3_int64 17162 FnUsed sqlite3_int64 17163 } 17164 17165 func callback(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr, colnames uintptr) int32 { 17166 var p uintptr = pCtx 17167 var i int32 17168 if argv == uintptr(0) { 17169 return 0 17170 } 17171 for i = 0; i < argc; i++ { 17172 var z uintptr 17173 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0 { 17174 z = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 17175 } else { 17176 z = ts + 584 17177 } 17178 var sz size_t = libc.Xstrlen(tls, z) 17179 if sqlite3_int64(sz)+(*EvalResult)(unsafe.Pointer(p)).FnUsed+sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep)+int64(1) > (*EvalResult)(unsafe.Pointer(p)).FnAlloc { 17180 var zNew uintptr 17181 (*EvalResult)(unsafe.Pointer(p)).FnAlloc = sqlite3_int64(uint64((*EvalResult)(unsafe.Pointer(p)).FnAlloc*int64(2)) + sz + uint64((*EvalResult)(unsafe.Pointer(p)).FszSep) + uint64(1)) 17182 17183 if (*EvalResult)(unsafe.Pointer(p)).FnAlloc <= int64(0x7fffffff) { 17184 zNew = sqlite3.Xsqlite3_realloc64(tls, (*EvalResult)(unsafe.Pointer(p)).Fz, uint64((*EvalResult)(unsafe.Pointer(p)).FnAlloc)) 17185 } else { 17186 zNew = uintptr(0) 17187 } 17188 if zNew == uintptr(0) { 17189 sqlite3.Xsqlite3_free(tls, (*EvalResult)(unsafe.Pointer(p)).Fz) 17190 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(EvalResult{})), libc.X__builtin_object_size(tls, p, 0)) 17191 return 1 17192 } 17193 (*EvalResult)(unsafe.Pointer(p)).Fz = zNew 17194 } 17195 if (*EvalResult)(unsafe.Pointer(p)).FnUsed > int64(0) { 17196 libc.X__builtin___memcpy_chk(tls, (*EvalResult)(unsafe.Pointer(p)).Fz+uintptr((*EvalResult)(unsafe.Pointer(p)).FnUsed), (*EvalResult)(unsafe.Pointer(p)).FzSep, uint64((*EvalResult)(unsafe.Pointer(p)).FszSep), libc.X__builtin_object_size(tls, (*EvalResult)(unsafe.Pointer(p)).Fz+uintptr((*EvalResult)(unsafe.Pointer(p)).FnUsed), 0)) 17197 *(*sqlite3_int64)(unsafe.Pointer(p + 32)) += sqlite3_int64((*EvalResult)(unsafe.Pointer(p)).FszSep) 17198 } 17199 libc.X__builtin___memcpy_chk(tls, (*EvalResult)(unsafe.Pointer(p)).Fz+uintptr((*EvalResult)(unsafe.Pointer(p)).FnUsed), z, sz, libc.X__builtin_object_size(tls, (*EvalResult)(unsafe.Pointer(p)).Fz+uintptr((*EvalResult)(unsafe.Pointer(p)).FnUsed), 0)) 17200 *(*sqlite3_int64)(unsafe.Pointer(p + 32)) += sqlite3_int64(sz) 17201 } 17202 return 0 17203 } 17204 17205 func sqlEvalFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 17206 bp := tls.Alloc(48) 17207 defer tls.Free(48) 17208 17209 var zSql uintptr 17210 var db uintptr 17211 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 17212 var rc int32 17213 17214 libc.X__builtin___memset_chk(tls, bp, 0, uint64(unsafe.Sizeof(EvalResult{})), libc.X__builtin_object_size(tls, bp, 0)) 17215 (*EvalResult)(unsafe.Pointer(bp)).FzSep = ts + 4894 17216 zSql = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 17217 if zSql == uintptr(0) { 17218 return 17219 } 17220 if argc > 1 { 17221 (*EvalResult)(unsafe.Pointer(bp)).FzSep = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 17222 if (*EvalResult)(unsafe.Pointer(bp)).FzSep == uintptr(0) { 17223 return 17224 } 17225 } 17226 (*EvalResult)(unsafe.Pointer(bp)).FszSep = int32(libc.Xstrlen(tls, (*EvalResult)(unsafe.Pointer(bp)).FzSep)) 17227 db = sqlite3.Xsqlite3_context_db_handle(tls, context) 17228 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, *(*uintptr)(unsafe.Pointer(&struct { 17229 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 17230 }{callback})), bp, bp+40) 17231 if rc != SQLITE_OK { 17232 sqlite3.Xsqlite3_result_error(tls, context, *(*uintptr)(unsafe.Pointer(bp + 40)), -1) 17233 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) 17234 } else if (*EvalResult)(unsafe.Pointer(bp)).FzSep == uintptr(0) { 17235 sqlite3.Xsqlite3_result_error_nomem(tls, context) 17236 sqlite3.Xsqlite3_free(tls, (*EvalResult)(unsafe.Pointer(bp)).Fz) 17237 } else { 17238 sqlite3.Xsqlite3_result_text(tls, context, (*EvalResult)(unsafe.Pointer(bp)).Fz, int32((*EvalResult)(unsafe.Pointer(bp)).FnUsed), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 17239 } 17240 } 17241 17242 func sqlite3_eval_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17243 var rc int32 = SQLITE_OK 17244 _ = pApi 17245 17246 _ = pzErrMsg 17247 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4896, 1, 17248 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 17249 *(*uintptr)(unsafe.Pointer(&struct { 17250 f func(*libc.TLS, uintptr, int32, uintptr) 17251 }{sqlEvalFunc})), uintptr(0), uintptr(0)) 17252 if rc == SQLITE_OK { 17253 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+4896, 2, 17254 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 17255 *(*uintptr)(unsafe.Pointer(&struct { 17256 f func(*libc.TLS, uintptr, int32, uintptr) 17257 }{sqlEvalFunc})), uintptr(0), uintptr(0)) 17258 } 17259 return rc 17260 } 17261 17262 type explain_vtab1 = struct { 17263 Fbase sqlite3_vtab 17264 Fdb uintptr 17265 } 17266 17267 type explain_vtab = explain_vtab1 17268 17269 type explain_cursor1 = struct { 17270 Fbase sqlite3_vtab_cursor 17271 Fdb uintptr 17272 FzSql uintptr 17273 FpExplain uintptr 17274 Frc int32 17275 F__ccgo_pad1 [4]byte 17276 } 17277 17278 type explain_cursor = explain_cursor1 17279 17280 func explainConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 17281 var pNew uintptr 17282 var rc int32 17283 17284 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 17285 ts+4901) 17286 if rc == SQLITE_OK { 17287 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(explain_vtab{}))) 17288 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 17289 if pNew == uintptr(0) { 17290 return SQLITE_NOMEM 17291 } 17292 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(explain_vtab{})), libc.X__builtin_object_size(tls, pNew, 0)) 17293 (*explain_vtab)(unsafe.Pointer(pNew)).Fdb = db 17294 } 17295 return rc 17296 } 17297 17298 func explainDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 17299 sqlite3.Xsqlite3_free(tls, pVtab) 17300 return SQLITE_OK 17301 } 17302 17303 func explainOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 17304 var pCur uintptr 17305 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(explain_cursor{}))) 17306 if pCur == uintptr(0) { 17307 return SQLITE_NOMEM 17308 } 17309 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(explain_cursor{})), libc.X__builtin_object_size(tls, pCur, 0)) 17310 (*explain_cursor)(unsafe.Pointer(pCur)).Fdb = (*explain_vtab)(unsafe.Pointer(p)).Fdb 17311 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 17312 return SQLITE_OK 17313 } 17314 17315 func explainClose(tls *libc.TLS, cur uintptr) int32 { 17316 var pCur uintptr = cur 17317 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 17318 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 17319 sqlite3.Xsqlite3_free(tls, pCur) 17320 return SQLITE_OK 17321 } 17322 17323 func explainNext(tls *libc.TLS, cur uintptr) int32 { 17324 var pCur uintptr = cur 17325 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = sqlite3.Xsqlite3_step(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 17326 if (*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_DONE && (*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_ROW { 17327 return (*explain_cursor)(unsafe.Pointer(pCur)).Frc 17328 } 17329 return SQLITE_OK 17330 } 17331 17332 func explainColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 17333 var pCur uintptr = cur 17334 if i == EXPLN_COLUMN_SQL { 17335 sqlite3.Xsqlite3_result_text(tls, ctx, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql, -1, libc.UintptrFromInt32(-1)) 17336 } else { 17337 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain, i)) 17338 } 17339 return SQLITE_OK 17340 } 17341 17342 func explainRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 17343 var pCur uintptr = cur 17344 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain, 0) 17345 return SQLITE_OK 17346 } 17347 17348 func explainEof(tls *libc.TLS, cur uintptr) int32 { 17349 var pCur uintptr = cur 17350 return libc.Bool32((*explain_cursor)(unsafe.Pointer(pCur)).Frc != SQLITE_ROW) 17351 } 17352 17353 func explainFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 17354 bp := tls.Alloc(16) 17355 defer tls.Free(16) 17356 17357 var pCur uintptr = pVtabCursor 17358 var zSql uintptr = uintptr(0) 17359 var rc int32 17360 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 17361 (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain = uintptr(0) 17362 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) != SQLITE_TEXT { 17363 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = SQLITE_DONE 17364 return SQLITE_OK 17365 } 17366 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 17367 (*explain_cursor)(unsafe.Pointer(pCur)).FzSql = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))))) 17368 if (*explain_cursor)(unsafe.Pointer(pCur)).FzSql != 0 { 17369 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+4963, libc.VaList(bp+8, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql)) 17370 } 17371 if zSql == uintptr(0) { 17372 rc = SQLITE_NOMEM 17373 } else { 17374 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*explain_cursor)(unsafe.Pointer(pCur)).Fdb, zSql, -1, pCur+24, uintptr(0)) 17375 sqlite3.Xsqlite3_free(tls, zSql) 17376 } 17377 if rc != 0 { 17378 sqlite3.Xsqlite3_finalize(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 17379 (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain = uintptr(0) 17380 sqlite3.Xsqlite3_free(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FzSql) 17381 (*explain_cursor)(unsafe.Pointer(pCur)).FzSql = uintptr(0) 17382 } else { 17383 (*explain_cursor)(unsafe.Pointer(pCur)).Frc = sqlite3.Xsqlite3_step(tls, (*explain_cursor)(unsafe.Pointer(pCur)).FpExplain) 17384 if (*explain_cursor)(unsafe.Pointer(pCur)).Frc == SQLITE_DONE || (*explain_cursor)(unsafe.Pointer(pCur)).Frc == SQLITE_ROW { 17385 rc = SQLITE_OK 17386 } else { 17387 rc = (*explain_cursor)(unsafe.Pointer(pCur)).Frc 17388 } 17389 } 17390 return rc 17391 } 17392 17393 func explainBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 17394 var i int32 17395 var idx int32 = -1 17396 var unusable int32 = 0 17397 17398 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(500) 17399 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 17400 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 17401 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn != EXPLN_COLUMN_SQL { 17402 continue 17403 } 17404 if !(int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable) != 0) { 17405 unusable = 1 17406 } else if int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 17407 idx = i 17408 } 17409 } 17410 if idx >= 0 { 17411 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 17412 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 17413 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idx)*8)).FargvIndex = 1 17414 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idx)*8)).Fomit = uint8(1) 17415 } else if unusable != 0 { 17416 return SQLITE_CONSTRAINT 17417 } 17418 return SQLITE_OK 17419 } 17420 17421 var explainModule = sqlite3_module{ 17422 FxConnect: 0, 17423 FxBestIndex: 0, 17424 FxDisconnect: 0, 17425 FxOpen: 0, 17426 FxClose: 0, 17427 FxFilter: 0, 17428 FxNext: 0, 17429 FxEof: 0, 17430 FxColumn: 0, 17431 FxRowid: 0, 17432 } 17433 17434 func sqlite3ExplainVtabInit(tls *libc.TLS, db uintptr) int32 { 17435 var rc int32 = SQLITE_OK 17436 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+4974, uintptr(unsafe.Pointer(&explainModule)), uintptr(0)) 17437 return rc 17438 } 17439 17440 func sqlite3_explain_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 17441 var rc int32 = SQLITE_OK 17442 _ = pApi 17443 17444 rc = sqlite3ExplainVtabInit(tls, db) 17445 return rc 17446 } 17447 17448 type u_char = uint8 17449 17450 type u_short = uint16 17451 17452 type u_int = uint32 17453 type u_long = uint64 17454 type ushort = uint16 17455 type uint = uint32 17456 17457 type u_quad_t = u_int64_t 17458 type quad_t = int64_t 17459 type qaddr_t = uintptr 17460 17461 type caddr_t = uintptr 17462 17463 type daddr_t = int32_t 17464 17465 type fixpt_t = u_int32_t 17466 17467 type blkcnt_t = int64 17468 17469 type blksize_t = int32 17470 17471 type gid_t = uint32 17472 17473 type in_addr_t = uint32 17474 17475 type in_port_t = uint16 17476 17477 type ino_t = uint64 17478 17479 type ino64_t = uint64 17480 17481 type key_t = int32 17482 17483 type nlink_t = uint16 17484 17485 type segsz_t = int32_t 17486 type swblk_t = int32_t 17487 17488 type clock_t = uint64 17489 17490 type time_t = int64 17491 17492 type useconds_t = uint32 17493 17494 type suseconds_t = int32 17495 17496 type fd_set1 = struct{ Ffds_bits [32]int32 } 17497 17498 type fd_set = fd_set1 17499 17500 func __darwin_check_fd_set(tls *libc.TLS, _a int32, _b uintptr) int32 { 17501 if uintptr_t(uintptr(unsafe.Pointer(&sqlite3.X__darwin_check_fd_set_overflow))) != uint64(0) { 17502 return (*struct { 17503 f func(*libc.TLS, int32, uintptr, int32) int32 17504 })(unsafe.Pointer(&struct{ uintptr }{sqlite3.X__darwin_check_fd_set_overflow})).f(tls, _a, _b, 0) 17505 } else { 17506 return 1 17507 } 17508 return int32(0) 17509 } 17510 17511 func __darwin_fd_isset(tls *libc.TLS, _fd int32, _p uintptr) int32 { 17512 if sqlite3.X__darwin_check_fd_set(tls, _fd, _p) != 0 { 17513 return *(*int32)(unsafe.Pointer(_p + uintptr(uint64(_fd)/(uint64(unsafe.Sizeof(int32(0)))*uint64(8)))*4)) & int32(uint64(1)<<(uint64(_fd)%(uint64(unsafe.Sizeof(int32(0)))*uint64(8)))) 17514 } 17515 17516 return 0 17517 } 17518 17519 func __darwin_fd_set(tls *libc.TLS, _fd int32, _p uintptr) { 17520 if sqlite3.X__darwin_check_fd_set(tls, _fd, _p) != 0 { 17521 *(*int32)(unsafe.Pointer(_p + uintptr(uint64(_fd)/(uint64(unsafe.Sizeof(int32(0)))*uint64(8)))*4)) |= int32(uint64(1) << (uint64(_fd) % (uint64(unsafe.Sizeof(int32(0))) * uint64(8)))) 17522 } 17523 } 17524 17525 func __darwin_fd_clr(tls *libc.TLS, _fd int32, _p uintptr) { 17526 if sqlite3.X__darwin_check_fd_set(tls, _fd, _p) != 0 { 17527 *(*int32)(unsafe.Pointer(_p + uintptr(uint64(_fd)/(uint64(unsafe.Sizeof(int32(0)))*uint64(8)))*4)) &= ^int32(uint64(1) << (uint64(_fd) % (uint64(unsafe.Sizeof(int32(0))) * uint64(8)))) 17528 } 17529 } 17530 17531 type fd_mask = int32 17532 17533 type pthread_cond_t = _opaque_pthread_cond_t 17534 17535 type pthread_condattr_t = _opaque_pthread_condattr_t 17536 17537 type pthread_mutex_t = _opaque_pthread_mutex_t 17538 17539 type pthread_mutexattr_t = _opaque_pthread_mutexattr_t 17540 17541 type pthread_once_t = _opaque_pthread_once_t 17542 17543 type pthread_rwlock_t = _opaque_pthread_rwlock_t 17544 17545 type pthread_rwlockattr_t = _opaque_pthread_rwlockattr_t 17546 17547 type pthread_t = uintptr 17548 17549 type pthread_key_t = uint64 17550 17551 type fsblkcnt_t = uint32 17552 17553 type fsfilcnt_t = uint32 17554 17555 type timespec = struct { 17556 Ftv_sec int64 17557 Ftv_nsec int64 17558 } 17559 17560 type ostat = struct { 17561 Fst_dev uint16 17562 F__ccgo_pad1 [6]byte 17563 Fst_ino ino_t 17564 Fst_mode mode_t 17565 Fst_nlink nlink_t 17566 Fst_uid uint16 17567 Fst_gid uint16 17568 Fst_rdev uint16 17569 F__ccgo_pad2 [2]byte 17570 Fst_size int32 17571 Fst_atimespec struct { 17572 Ftv_sec int64 17573 Ftv_nsec int64 17574 } 17575 Fst_mtimespec struct { 17576 Ftv_sec int64 17577 Ftv_nsec int64 17578 } 17579 Fst_ctimespec struct { 17580 Ftv_sec int64 17581 Ftv_nsec int64 17582 } 17583 Fst_blksize int32 17584 Fst_blocks int32 17585 Fst_flags uint32 17586 Fst_gen uint32 17587 } 17588 17589 type stat64 = struct { 17590 Fst_dev dev_t 17591 Fst_mode mode_t 17592 Fst_nlink nlink_t 17593 Fst_ino uint64 17594 Fst_uid uid_t 17595 Fst_gid gid_t 17596 Fst_rdev dev_t 17597 F__ccgo_pad1 [4]byte 17598 Fst_atimespec struct { 17599 Ftv_sec int64 17600 Ftv_nsec int64 17601 } 17602 Fst_mtimespec struct { 17603 Ftv_sec int64 17604 Ftv_nsec int64 17605 } 17606 Fst_ctimespec struct { 17607 Ftv_sec int64 17608 Ftv_nsec int64 17609 } 17610 Fst_birthtimespec struct { 17611 Ftv_sec int64 17612 Ftv_nsec int64 17613 } 17614 Fst_size off_t 17615 Fst_blocks blkcnt_t 17616 Fst_blksize blksize_t 17617 Fst_flags uint32 17618 Fst_gen uint32 17619 Fst_lspare int32 17620 Fst_qspare [2]int64 17621 } 17622 17623 type filesec_t = uintptr 17624 17625 type flock = struct { 17626 Fl_start off_t 17627 Fl_len off_t 17628 Fl_pid pid_t 17629 Fl_type int16 17630 Fl_whence int16 17631 } 17632 17633 type flocktimeout = struct { 17634 Ffl struct { 17635 Fl_start off_t 17636 Fl_len off_t 17637 Fl_pid pid_t 17638 Fl_type int16 17639 Fl_whence int16 17640 } 17641 Ftimeout struct { 17642 Ftv_sec int64 17643 Ftv_nsec int64 17644 } 17645 } 17646 17647 type radvisory = struct { 17648 Fra_offset off_t 17649 Fra_count int32 17650 F__ccgo_pad1 [4]byte 17651 } 17652 17653 type fcodeblobs = struct { 17654 Ff_cd_hash uintptr 17655 Ff_hash_size size_t 17656 Ff_cd_buffer uintptr 17657 Ff_cd_size size_t 17658 Ff_out_size uintptr 17659 Ff_arch int32 17660 F__padding int32 17661 } 17662 17663 type fcodeblobs_t = fcodeblobs 17664 17665 type fsignatures = struct { 17666 Ffs_file_start off_t 17667 Ffs_blob_start uintptr 17668 Ffs_blob_size size_t 17669 } 17670 17671 type fsignatures_t = fsignatures 17672 17673 type fchecklv = struct { 17674 Flv_file_start off_t 17675 Flv_error_message_size size_t 17676 Flv_error_message uintptr 17677 } 17678 17679 type fchecklv_t = fchecklv 17680 17681 type fstore = struct { 17682 Ffst_flags uint32 17683 Ffst_posmode int32 17684 Ffst_offset off_t 17685 Ffst_length off_t 17686 Ffst_bytesalloc off_t 17687 } 17688 17689 type fstore_t = fstore 17690 17691 type fpunchhole = struct { 17692 Ffp_flags uint32 17693 Freserved uint32 17694 Ffp_offset off_t 17695 Ffp_length off_t 17696 } 17697 17698 type fpunchhole_t = fpunchhole 17699 17700 type ftrimactivefile = struct { 17701 Ffta_offset off_t 17702 Ffta_length off_t 17703 } 17704 17705 type ftrimactivefile_t = ftrimactivefile 17706 17707 type fspecread = struct { 17708 Ffsr_flags uint32 17709 Freserved uint32 17710 Ffsr_offset off_t 17711 Ffsr_length off_t 17712 } 17713 17714 type fspecread_t = fspecread 17715 17716 type fbootstraptransfer = struct { 17717 Ffbt_offset off_t 17718 Ffbt_length size_t 17719 Ffbt_buffer uintptr 17720 } 17721 17722 type fbootstraptransfer_t = fbootstraptransfer 17723 17724 type log2phys = struct { 17725 Fl2p_flags uint32 17726 F__ccgo_pad1 [4]byte 17727 Fl2p_contigbytes off_t 17728 Fl2p_devoffset off_t 17729 } 17730 17731 type filesec_property_t = uint32 17732 17733 type accessx_descriptor = struct { 17734 Fad_name_offset uint32 17735 Fad_flags int32 17736 Fad_pad [2]int32 17737 } 17738 17739 type uuid_t = [16]uint8 17740 17741 type dirent = struct { 17742 Fd_ino uint64 17743 Fd_seekoff uint64 17744 Fd_reclen uint16 17745 Fd_namlen uint16 17746 Fd_type uint8 17747 Fd_name [1024]int8 17748 F__ccgo_pad1 [3]byte 17749 } 17750 17751 type DIR = struct { 17752 F__dd_fd int32 17753 F__ccgo_pad1 [4]byte 17754 F__dd_loc int64 17755 F__dd_size int64 17756 F__dd_buf uintptr 17757 F__dd_len int32 17758 F__ccgo_pad2 [4]byte 17759 F__dd_seek int64 17760 F__padding int64 17761 F__dd_flags int32 17762 F__ccgo_pad3 [4]byte 17763 F__dd_lock _opaque_pthread_mutex_t 17764 F__dd_td uintptr 17765 } 17766 17767 type timeval64 = struct { 17768 Ftv_sec int64 17769 Ftv_usec int64 17770 } 17771 17772 type itimerval = struct { 17773 Fit_interval struct { 17774 Ftv_sec int64 17775 Ftv_usec int32 17776 F__ccgo_pad1 [4]byte 17777 } 17778 Fit_value struct { 17779 Ftv_sec int64 17780 Ftv_usec int32 17781 F__ccgo_pad1 [4]byte 17782 } 17783 } 17784 17785 type timezone = struct { 17786 Ftz_minuteswest int32 17787 Ftz_dsttime int32 17788 } 17789 17790 type clockinfo = struct { 17791 Fhz int32 17792 Ftick int32 17793 Ftickadj int32 17794 Fstathz int32 17795 Fprofhz int32 17796 } 17797 17798 type tm = struct { 17799 Ftm_sec int32 17800 Ftm_min int32 17801 Ftm_hour int32 17802 Ftm_mday int32 17803 Ftm_mon int32 17804 Ftm_year int32 17805 Ftm_wday int32 17806 Ftm_yday int32 17807 Ftm_isdst int32 17808 F__ccgo_pad1 [4]byte 17809 Ftm_gmtoff int64 17810 Ftm_zone uintptr 17811 } 17812 17813 type clockid_t = uint32 17814 17815 func readFileContents(tls *libc.TLS, ctx uintptr, zName uintptr) { 17816 var in uintptr 17817 var nIn sqlite3_int64 17818 var pBuf uintptr 17819 var db uintptr 17820 var mxBlob int32 17821 17822 in = libc.Xfopen(tls, zName, ts+4402) 17823 if in == uintptr(0) { 17824 return 17825 } 17826 libc.Xfseek(tls, in, int64(0), SEEK_END) 17827 nIn = libc.Xftell(tls, in) 17828 libc.Xrewind(tls, in) 17829 db = sqlite3.Xsqlite3_context_db_handle(tls, ctx) 17830 mxBlob = sqlite3.Xsqlite3_limit(tls, db, SQLITE_LIMIT_LENGTH, -1) 17831 if nIn > sqlite3_int64(mxBlob) { 17832 sqlite3.Xsqlite3_result_error_code(tls, ctx, SQLITE_TOOBIG) 17833 libc.Xfclose(tls, in) 17834 return 17835 } 17836 pBuf = sqlite3.Xsqlite3_malloc64(tls, func() uint64 { 17837 if nIn != 0 { 17838 return uint64(nIn) 17839 } 17840 return uint64(1) 17841 }()) 17842 if pBuf == uintptr(0) { 17843 sqlite3.Xsqlite3_result_error_nomem(tls, ctx) 17844 libc.Xfclose(tls, in) 17845 return 17846 } 17847 if nIn == sqlite3_int64(libc.Xfread(tls, pBuf, uint64(1), size_t(nIn), in)) { 17848 sqlite3.Xsqlite3_result_blob64(tls, ctx, pBuf, uint64(nIn), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 17849 } else { 17850 sqlite3.Xsqlite3_result_error_code(tls, ctx, SQLITE_IOERR) 17851 sqlite3.Xsqlite3_free(tls, pBuf) 17852 } 17853 libc.Xfclose(tls, in) 17854 } 17855 17856 func readfileFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 17857 var zName uintptr 17858 _ = argc 17859 zName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 17860 if zName == uintptr(0) { 17861 return 17862 } 17863 readFileContents(tls, context, zName) 17864 } 17865 17866 func ctxErrorMsg(tls *libc.TLS, ctx uintptr, zFmt uintptr, va uintptr) { 17867 var zMsg uintptr = uintptr(0) 17868 var ap va_list 17869 _ = ap 17870 ap = va 17871 zMsg = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 17872 sqlite3.Xsqlite3_result_error(tls, ctx, zMsg, -1) 17873 sqlite3.Xsqlite3_free(tls, zMsg) 17874 _ = ap 17875 } 17876 17877 func fileStat(tls *libc.TLS, zPath uintptr, pStatBuf uintptr) int32 { 17878 return libc.Xstat(tls, zPath, pStatBuf) 17879 } 17880 17881 func fileLinkStat(tls *libc.TLS, zPath uintptr, pStatBuf uintptr) int32 { 17882 return libc.Xlstat(tls, zPath, pStatBuf) 17883 } 17884 17885 func makeDirectory(tls *libc.TLS, zFile uintptr) int32 { 17886 bp := tls.Alloc(152) 17887 defer tls.Free(152) 17888 17889 var zCopy uintptr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zFile)) 17890 var rc int32 = SQLITE_OK 17891 17892 if zCopy == uintptr(0) { 17893 rc = SQLITE_NOMEM 17894 } else { 17895 var nCopy int32 = int32(libc.Xstrlen(tls, zCopy)) 17896 var i int32 = 1 17897 17898 for rc == SQLITE_OK { 17899 var rc2 int32 17900 17901 for ; int32(*(*int8)(unsafe.Pointer(zCopy + uintptr(i)))) != '/' && i < nCopy; i++ { 17902 } 17903 if i == nCopy { 17904 break 17905 } 17906 *(*int8)(unsafe.Pointer(zCopy + uintptr(i))) = int8(0) 17907 17908 rc2 = fileStat(tls, zCopy, bp+8) 17909 if rc2 != 0 { 17910 if libc.Xmkdir(tls, zCopy, uint16(0777)) != 0 { 17911 rc = SQLITE_ERROR 17912 } 17913 } else { 17914 if !(int32((*stat)(unsafe.Pointer(bp+8)).Fst_mode)&S_IFMT == S_IFDIR) { 17915 rc = SQLITE_ERROR 17916 } 17917 } 17918 *(*int8)(unsafe.Pointer(zCopy + uintptr(i))) = int8('/') 17919 i++ 17920 } 17921 17922 sqlite3.Xsqlite3_free(tls, zCopy) 17923 } 17924 17925 return rc 17926 } 17927 17928 func writeFile(tls *libc.TLS, pCtx uintptr, zFile uintptr, pData uintptr, mode mode_t, mtime sqlite3_int64) int32 { 17929 bp := tls.Alloc(176) 17930 defer tls.Free(176) 17931 17932 if zFile == uintptr(0) { 17933 return 1 17934 } 17935 if int32(mode)&S_IFMT == S_IFLNK { 17936 var zTo uintptr = sqlite3.Xsqlite3_value_text(tls, pData) 17937 if zTo == uintptr(0) || libc.Xsymlink(tls, zTo, zFile) < 0 { 17938 return 1 17939 } 17940 } else { 17941 if int32(mode)&S_IFMT == S_IFDIR { 17942 if libc.Xmkdir(tls, zFile, mode) != 0 { 17943 if *(*int32)(unsafe.Pointer(libc.X__error(tls))) != EEXIST || 17944 0 != fileStat(tls, zFile, bp) || 17945 !(int32((*stat)(unsafe.Pointer(bp)).Fst_mode)&S_IFMT == S_IFDIR) || 17946 int32((*stat)(unsafe.Pointer(bp)).Fst_mode)&0777 != int32(mode)&0777 && 0 != libc.Xchmod(tls, zFile, uint16(int32(mode)&0777)) { 17947 return 1 17948 } 17949 } 17950 } else { 17951 var nWrite sqlite3_int64 = int64(0) 17952 var z uintptr 17953 var rc int32 = 0 17954 var out uintptr = libc.Xfopen(tls, zFile, ts+4982) 17955 if out == uintptr(0) { 17956 return 1 17957 } 17958 z = sqlite3.Xsqlite3_value_blob(tls, pData) 17959 if z != 0 { 17960 var n sqlite3_int64 = sqlite3_int64(libc.Xfwrite(tls, z, uint64(1), uint64(sqlite3.Xsqlite3_value_bytes(tls, pData)), out)) 17961 nWrite = sqlite3_int64(sqlite3.Xsqlite3_value_bytes(tls, pData)) 17962 if nWrite != n { 17963 rc = 1 17964 } 17965 } 17966 libc.Xfclose(tls, out) 17967 if rc == 0 && mode != 0 && libc.Xchmod(tls, zFile, uint16(int32(mode)&0777)) != 0 { 17968 rc = 1 17969 } 17970 if rc != 0 { 17971 return 2 17972 } 17973 sqlite3.Xsqlite3_result_int64(tls, pCtx, nWrite) 17974 } 17975 } 17976 17977 if mtime >= int64(0) { 17978 (*timeval)(unsafe.Pointer(bp + 144)).Ftv_usec = libc.AssignPtrInt32(bp+144+1*16+8, 0) 17979 (*timeval)(unsafe.Pointer(bp + 144)).Ftv_sec = libc.Xtime(tls, uintptr(0)) 17980 (*timeval)(unsafe.Pointer(bp + 144 + 1*16)).Ftv_sec = mtime 17981 if libc.Xutimes(tls, zFile, bp+144) != 0 { 17982 return 1 17983 } 17984 } 17985 17986 return 0 17987 } 17988 17989 func writefileFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 17990 bp := tls.Alloc(24) 17991 defer tls.Free(24) 17992 17993 var zFile uintptr 17994 var mode mode_t = mode_t(0) 17995 var res int32 17996 var mtime sqlite3_int64 = int64(-1) 17997 17998 if argc < 2 || argc > 4 { 17999 sqlite3.Xsqlite3_result_error(tls, context, 18000 ts+4985, -1) 18001 return 18002 } 18003 18004 zFile = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 18005 if zFile == uintptr(0) { 18006 return 18007 } 18008 if argc >= 3 { 18009 mode = mode_t(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 18010 } 18011 if argc == 4 { 18012 mtime = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 18013 } 18014 18015 res = writeFile(tls, context, zFile, *(*uintptr)(unsafe.Pointer(argv + 1*8)), mode, mtime) 18016 if res == 1 && *(*int32)(unsafe.Pointer(libc.X__error(tls))) == ENOENT { 18017 if makeDirectory(tls, zFile) == SQLITE_OK { 18018 res = writeFile(tls, context, zFile, *(*uintptr)(unsafe.Pointer(argv + 1*8)), mode, mtime) 18019 } 18020 } 18021 18022 if argc > 2 && res != 0 { 18023 if int32(mode)&S_IFMT == S_IFLNK { 18024 ctxErrorMsg(tls, context, ts+5035, libc.VaList(bp, zFile)) 18025 } else if int32(mode)&S_IFMT == S_IFDIR { 18026 ctxErrorMsg(tls, context, ts+5064, libc.VaList(bp+8, zFile)) 18027 } else { 18028 ctxErrorMsg(tls, context, ts+5095, libc.VaList(bp+16, zFile)) 18029 } 18030 } 18031 } 18032 18033 func lsModeFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 18034 bp := tls.Alloc(16) 18035 defer tls.Free(16) 18036 18037 var i int32 18038 var iMode int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 18039 18040 _ = argc 18041 if iMode&S_IFMT == S_IFLNK { 18042 *(*int8)(unsafe.Pointer(bp)) = int8('l') 18043 } else if iMode&S_IFMT == S_IFREG { 18044 *(*int8)(unsafe.Pointer(bp)) = int8('-') 18045 } else if iMode&S_IFMT == S_IFDIR { 18046 *(*int8)(unsafe.Pointer(bp)) = int8('d') 18047 } else { 18048 *(*int8)(unsafe.Pointer(bp)) = int8('?') 18049 } 18050 for i = 0; i < 3; i++ { 18051 var m int32 = iMode >> ((2 - i) * 3) 18052 var a uintptr = bp + uintptr(1+i*3) 18053 *(*int8)(unsafe.Pointer(a)) = func() int8 { 18054 if m&0x4 != 0 { 18055 return int8('r') 18056 } 18057 return int8('-') 18058 }() 18059 *(*int8)(unsafe.Pointer(a + 1)) = func() int8 { 18060 if m&0x2 != 0 { 18061 return int8('w') 18062 } 18063 return int8('-') 18064 }() 18065 *(*int8)(unsafe.Pointer(a + 2)) = func() int8 { 18066 if m&0x1 != 0 { 18067 return int8('x') 18068 } 18069 return int8('-') 18070 }() 18071 } 18072 *(*int8)(unsafe.Pointer(bp + 10)) = int8(0) 18073 sqlite3.Xsqlite3_result_text(tls, context, bp, -1, libc.UintptrFromInt32(-1)) 18074 } 18075 18076 type fsdir_cursor1 = struct { 18077 Fbase sqlite3_vtab_cursor 18078 FnLvl int32 18079 FiLvl int32 18080 FaLvl uintptr 18081 FzBase uintptr 18082 FnBase int32 18083 F__ccgo_pad1 [4]byte 18084 FsStat struct { 18085 Fst_dev dev_t 18086 Fst_mode mode_t 18087 Fst_nlink nlink_t 18088 Fst_ino uint64 18089 Fst_uid uid_t 18090 Fst_gid gid_t 18091 Fst_rdev dev_t 18092 F__ccgo_pad1 [4]byte 18093 Fst_atimespec struct { 18094 Ftv_sec int64 18095 Ftv_nsec int64 18096 } 18097 Fst_mtimespec struct { 18098 Ftv_sec int64 18099 Ftv_nsec int64 18100 } 18101 Fst_ctimespec struct { 18102 Ftv_sec int64 18103 Ftv_nsec int64 18104 } 18105 Fst_birthtimespec struct { 18106 Ftv_sec int64 18107 Ftv_nsec int64 18108 } 18109 Fst_size off_t 18110 Fst_blocks blkcnt_t 18111 Fst_blksize blksize_t 18112 Fst_flags uint32 18113 Fst_gen uint32 18114 Fst_lspare int32 18115 Fst_qspare [2]int64 18116 } 18117 FzPath uintptr 18118 FiRowid sqlite3_int64 18119 } 18120 18121 type fsdir_cursor = fsdir_cursor1 18122 type FsdirLevel1 = struct { 18123 FpDir uintptr 18124 FzDir uintptr 18125 } 18126 18127 type FsdirLevel = FsdirLevel1 18128 18129 type fsdir_tab1 = struct{ Fbase sqlite3_vtab } 18130 18131 type fsdir_tab = fsdir_tab1 18132 18133 func fsdirConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 18134 var pNew uintptr = uintptr(0) 18135 var rc int32 18136 _ = pAux 18137 _ = argc 18138 _ = argv 18139 _ = pzErr 18140 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+5120) 18141 if rc == SQLITE_OK { 18142 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fsdir_tab{}))) 18143 if pNew == uintptr(0) { 18144 return SQLITE_NOMEM 18145 } 18146 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(fsdir_tab{})), libc.X__builtin_object_size(tls, pNew, 0)) 18147 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_DIRECTONLY, 0) 18148 } 18149 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 18150 return rc 18151 } 18152 18153 func fsdirDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 18154 sqlite3.Xsqlite3_free(tls, pVtab) 18155 return SQLITE_OK 18156 } 18157 18158 func fsdirOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 18159 var pCur uintptr 18160 _ = p 18161 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fsdir_cursor{}))) 18162 if pCur == uintptr(0) { 18163 return SQLITE_NOMEM 18164 } 18165 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(fsdir_cursor{})), libc.X__builtin_object_size(tls, pCur, 0)) 18166 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = -1 18167 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 18168 return SQLITE_OK 18169 } 18170 18171 func fsdirResetCursor(tls *libc.TLS, pCur uintptr) { 18172 var i int32 18173 for i = 0; i <= (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl; i++ { 18174 var pLvl uintptr = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr(i)*16 18175 if (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir != 0 { 18176 libc.Xclosedir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 18177 } 18178 sqlite3.Xsqlite3_free(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 18179 } 18180 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 18181 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl) 18182 (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl = uintptr(0) 18183 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 18184 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase = uintptr(0) 18185 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase = 0 18186 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl = 0 18187 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = -1 18188 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 18189 } 18190 18191 func fsdirClose(tls *libc.TLS, cur uintptr) int32 { 18192 var pCur uintptr = cur 18193 18194 fsdirResetCursor(tls, pCur) 18195 sqlite3.Xsqlite3_free(tls, pCur) 18196 return SQLITE_OK 18197 } 18198 18199 func fsdirSetErrmsg(tls *libc.TLS, pCur uintptr, zFmt uintptr, va uintptr) { 18200 var ap va_list 18201 _ = ap 18202 ap = va 18203 (*sqlite3_vtab)(unsafe.Pointer((*fsdir_cursor)(unsafe.Pointer(pCur)).Fbase.FpVtab)).FzErrMsg = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 18204 _ = ap 18205 } 18206 18207 func fsdirNext(tls *libc.TLS, cur uintptr) int32 { 18208 bp := tls.Alloc(32) 18209 defer tls.Free(32) 18210 18211 var pCur uintptr = cur 18212 var m mode_t = (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode 18213 18214 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid++ 18215 if int32(m)&S_IFMT == S_IFDIR { 18216 var iNew int32 = (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl + 1 18217 var pLvl uintptr 18218 if iNew >= (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl { 18219 var nNew int32 = iNew + 1 18220 var nByte sqlite3_int64 = sqlite3_int64(uint64(nNew) * uint64(unsafe.Sizeof(FsdirLevel{}))) 18221 var aNew uintptr = sqlite3.Xsqlite3_realloc64(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl, uint64(nByte)) 18222 if aNew == uintptr(0) { 18223 return SQLITE_NOMEM 18224 } 18225 libc.X__builtin___memset_chk(tls, aNew+uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl)*16, 0, uint64(unsafe.Sizeof(FsdirLevel{}))*uint64(nNew-(*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl), libc.X__builtin_object_size(tls, aNew+uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl)*16, 0)) 18226 (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl = aNew 18227 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnLvl = nNew 18228 } 18229 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl = iNew 18230 pLvl = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr(iNew)*16 18231 18232 (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir = (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath 18233 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 18234 (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir = libc.Xopendir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 18235 if (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir == uintptr(0) { 18236 fsdirSetErrmsg(tls, pCur, ts+5180, libc.VaList(bp, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 18237 return SQLITE_ERROR 18238 } 18239 } 18240 18241 for (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl >= 0 { 18242 var pLvl uintptr = (*fsdir_cursor)(unsafe.Pointer(pCur)).FaLvl + uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl)*16 18243 var pEntry uintptr = libc.Xreaddir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 18244 if pEntry != 0 { 18245 if int32(*(*int8)(unsafe.Pointer(pEntry + 21))) == '.' { 18246 if int32(*(*int8)(unsafe.Pointer(pEntry + 21 + 1))) == '.' && int32(*(*int8)(unsafe.Pointer(pEntry + 21 + 2))) == 0 { 18247 continue 18248 } 18249 if int32(*(*int8)(unsafe.Pointer(pEntry + 21 + 1))) == 0 { 18250 continue 18251 } 18252 } 18253 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 18254 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts+5206, libc.VaList(bp+8, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir, pEntry+21)) 18255 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0) { 18256 return SQLITE_NOMEM 18257 } 18258 if fileLinkStat(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, pCur+40) != 0 { 18259 fsdirSetErrmsg(tls, pCur, ts+5212, libc.VaList(bp+24, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 18260 return SQLITE_ERROR 18261 } 18262 return SQLITE_OK 18263 } 18264 libc.Xclosedir(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir) 18265 sqlite3.Xsqlite3_free(tls, (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir) 18266 (*FsdirLevel)(unsafe.Pointer(pLvl)).FpDir = uintptr(0) 18267 (*FsdirLevel)(unsafe.Pointer(pLvl)).FzDir = uintptr(0) 18268 (*fsdir_cursor)(unsafe.Pointer(pCur)).FiLvl-- 18269 } 18270 18271 sqlite3.Xsqlite3_free(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 18272 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = uintptr(0) 18273 return SQLITE_OK 18274 } 18275 18276 func fsdirColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 18277 bp := tls.Alloc(64) 18278 defer tls.Free(64) 18279 18280 var pCur uintptr = cur 18281 switch i { 18282 case FSDIR_COLUMN_NAME: 18283 { 18284 sqlite3.Xsqlite3_result_text(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath+uintptr((*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase), -1, libc.UintptrFromInt32(-1)) 18285 break 18286 18287 } 18288 18289 case FSDIR_COLUMN_MODE: 18290 sqlite3.Xsqlite3_result_int64(tls, ctx, int64((*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode)) 18291 break 18292 18293 case FSDIR_COLUMN_MTIME: 18294 sqlite3.Xsqlite3_result_int64(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mtimespec.Ftv_sec) 18295 break 18296 18297 case FSDIR_COLUMN_DATA: 18298 { 18299 var m mode_t = (*fsdir_cursor)(unsafe.Pointer(pCur)).FsStat.Fst_mode 18300 if int32(m)&S_IFMT == S_IFDIR { 18301 sqlite3.Xsqlite3_result_null(tls, ctx) 18302 } else if int32(m)&S_IFMT == S_IFLNK { 18303 var aBuf uintptr = bp 18304 var nBuf sqlite3_int64 = int64(64) 18305 var n int32 18306 18307 for 1 != 0 { 18308 n = int32(libc.Xreadlink(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, aBuf, uint64(nBuf))) 18309 if sqlite3_int64(n) < nBuf { 18310 break 18311 } 18312 if aBuf != bp { 18313 sqlite3.Xsqlite3_free(tls, aBuf) 18314 } 18315 nBuf = nBuf * int64(2) 18316 aBuf = sqlite3.Xsqlite3_malloc64(tls, uint64(nBuf)) 18317 if aBuf == uintptr(0) { 18318 sqlite3.Xsqlite3_result_error_nomem(tls, ctx) 18319 return SQLITE_NOMEM 18320 } 18321 } 18322 18323 sqlite3.Xsqlite3_result_text(tls, ctx, aBuf, n, libc.UintptrFromInt32(-1)) 18324 if aBuf != bp { 18325 sqlite3.Xsqlite3_free(tls, aBuf) 18326 } 18327 } else { 18328 readFileContents(tls, ctx, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath) 18329 } 18330 18331 } 18332 fallthrough 18333 case FSDIR_COLUMN_PATH: 18334 fallthrough 18335 default: 18336 { 18337 break 18338 18339 } 18340 } 18341 return SQLITE_OK 18342 } 18343 18344 func fsdirRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 18345 var pCur uintptr = cur 18346 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*fsdir_cursor)(unsafe.Pointer(pCur)).FiRowid 18347 return SQLITE_OK 18348 } 18349 18350 func fsdirEof(tls *libc.TLS, cur uintptr) int32 { 18351 var pCur uintptr = cur 18352 return libc.Bool32((*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0)) 18353 } 18354 18355 func fsdirFilter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 18356 bp := tls.Alloc(32) 18357 defer tls.Free(32) 18358 18359 var zDir uintptr = uintptr(0) 18360 var pCur uintptr = cur 18361 _ = idxStr 18362 fsdirResetCursor(tls, pCur) 18363 18364 if idxNum == 0 { 18365 fsdirSetErrmsg(tls, pCur, ts+5233, 0) 18366 return SQLITE_ERROR 18367 } 18368 18369 zDir = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 18370 if zDir == uintptr(0) { 18371 fsdirSetErrmsg(tls, pCur, ts+5275, 0) 18372 return SQLITE_ERROR 18373 } 18374 if argc == 2 { 18375 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 18376 } 18377 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase != 0 { 18378 (*fsdir_cursor)(unsafe.Pointer(pCur)).FnBase = int32(libc.Xstrlen(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase)) + 1 18379 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts+5206, libc.VaList(bp, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzBase, zDir)) 18380 } else { 18381 (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zDir)) 18382 } 18383 18384 if (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath == uintptr(0) { 18385 return SQLITE_NOMEM 18386 } 18387 if fileLinkStat(tls, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath, pCur+40) != 0 { 18388 fsdirSetErrmsg(tls, pCur, ts+5212, libc.VaList(bp+24, (*fsdir_cursor)(unsafe.Pointer(pCur)).FzPath)) 18389 return SQLITE_ERROR 18390 } 18391 18392 return SQLITE_OK 18393 } 18394 18395 func fsdirBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 18396 var i int32 18397 var idxPath int32 = -1 18398 var idxDir int32 = -1 18399 var seenPath int32 = 0 18400 var seenDir int32 = 0 18401 var pConstraint uintptr 18402 18403 _ = tab 18404 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 18405 i = 0 18406 __1: 18407 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 18408 goto __3 18409 } 18410 { 18411 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 18412 goto __2 18413 } 18414 switch (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn { 18415 case FSDIR_COLUMN_PATH: 18416 { 18417 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable != 0 { 18418 idxPath = i 18419 seenPath = 0 18420 } else if idxPath < 0 { 18421 seenPath = 1 18422 } 18423 break 18424 18425 } 18426 case FSDIR_COLUMN_DIR: 18427 { 18428 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable != 0 { 18429 idxDir = i 18430 seenDir = 0 18431 } else if idxDir < 0 { 18432 seenDir = 1 18433 } 18434 break 18435 18436 } 18437 } 18438 18439 } 18440 goto __2 18441 __2: 18442 i++ 18443 pConstraint += 12 18444 goto __1 18445 goto __3 18446 __3: 18447 ; 18448 if seenPath != 0 || seenDir != 0 { 18449 return SQLITE_CONSTRAINT 18450 } 18451 18452 if idxPath < 0 { 18453 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 18454 18455 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(0x7fffffff) 18456 } else { 18457 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxPath)*8)).Fomit = uint8(1) 18458 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxPath)*8)).FargvIndex = 1 18459 if idxDir >= 0 { 18460 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxDir)*8)).Fomit = uint8(1) 18461 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(idxDir)*8)).FargvIndex = 2 18462 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 2 18463 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 18464 } else { 18465 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 18466 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 100.0 18467 } 18468 } 18469 18470 return SQLITE_OK 18471 } 18472 18473 func fsdirRegister(tls *libc.TLS, db uintptr) int32 { 18474 var rc int32 = sqlite3.Xsqlite3_create_module(tls, db, ts+5325, uintptr(unsafe.Pointer(&fsdirModule1)), uintptr(0)) 18475 return rc 18476 } 18477 18478 var fsdirModule1 = sqlite3_module{ 18479 FxConnect: 0, 18480 FxBestIndex: 0, 18481 FxDisconnect: 0, 18482 FxOpen: 0, 18483 FxClose: 0, 18484 FxFilter: 0, 18485 FxNext: 0, 18486 FxEof: 0, 18487 FxColumn: 0, 18488 FxRowid: 0, 18489 } 18490 18491 func sqlite3_fileio_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 18492 var rc int32 = SQLITE_OK 18493 _ = pApi 18494 18495 _ = pzErrMsg 18496 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5331, 1, 18497 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 18498 *(*uintptr)(unsafe.Pointer(&struct { 18499 f func(*libc.TLS, uintptr, int32, uintptr) 18500 }{readfileFunc})), uintptr(0), uintptr(0)) 18501 if rc == SQLITE_OK { 18502 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5340, -1, 18503 SQLITE_UTF8|SQLITE_DIRECTONLY, uintptr(0), 18504 *(*uintptr)(unsafe.Pointer(&struct { 18505 f func(*libc.TLS, uintptr, int32, uintptr) 18506 }{writefileFunc})), uintptr(0), uintptr(0)) 18507 } 18508 if rc == SQLITE_OK { 18509 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5350, 1, SQLITE_UTF8, uintptr(0), 18510 *(*uintptr)(unsafe.Pointer(&struct { 18511 f func(*libc.TLS, uintptr, int32, uintptr) 18512 }{lsModeFunc})), uintptr(0), uintptr(0)) 18513 } 18514 if rc == SQLITE_OK { 18515 rc = fsdirRegister(tls, db) 18516 } 18517 return rc 18518 } 18519 18520 type fuzzer_vtab1 = struct { 18521 Fbase sqlite3_vtab 18522 FzClassName uintptr 18523 FpRule uintptr 18524 FnCursor int32 18525 F__ccgo_pad1 [4]byte 18526 } 18527 18528 type fuzzer_vtab = fuzzer_vtab1 18529 type fuzzer_cursor1 = struct { 18530 Fbase sqlite3_vtab_cursor 18531 FiRowid sqlite3_int64 18532 FpVtab uintptr 18533 FrLimit fuzzer_cost 18534 F__ccgo_pad1 [4]byte 18535 FpStem uintptr 18536 FpDone uintptr 18537 FaQueue [20]uintptr 18538 FmxQueue int32 18539 F__ccgo_pad2 [4]byte 18540 FzBuf uintptr 18541 FnBuf int32 18542 FnStem int32 18543 FiRuleset int32 18544 F__ccgo_pad3 [4]byte 18545 FnullRule fuzzer_rule 18546 FapHash [4001]uintptr 18547 } 18548 18549 type fuzzer_cursor = fuzzer_cursor1 18550 type fuzzer_rule1 = struct { 18551 FpNext uintptr 18552 FzFrom uintptr 18553 FrCost fuzzer_cost 18554 FnFrom fuzzer_len 18555 FnTo fuzzer_len 18556 F__ccgo_pad1 [2]byte 18557 FiRuleset fuzzer_ruleid 18558 FzTo [4]int8 18559 } 18560 18561 type fuzzer_rule = fuzzer_rule1 18562 type fuzzer_stem1 = struct { 18563 FzBasis uintptr 18564 FpRule uintptr 18565 FpNext uintptr 18566 FpHash uintptr 18567 FrBaseCost fuzzer_cost 18568 FrCostX fuzzer_cost 18569 FnBasis fuzzer_len 18570 Fn fuzzer_len 18571 F__ccgo_pad1 [6]byte 18572 } 18573 18574 type fuzzer_stem = fuzzer_stem1 18575 18576 type fuzzer_cost = int32 18577 type fuzzer_len = int8 18578 type fuzzer_ruleid = int32 18579 18580 func fuzzerMergeRules(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 18581 bp := tls.Alloc(32) 18582 defer tls.Free(32) 18583 18584 var pTail uintptr 18585 18586 pTail = bp 18587 for pA != 0 && pB != 0 { 18588 if (*fuzzer_rule)(unsafe.Pointer(pA)).FrCost <= (*fuzzer_rule)(unsafe.Pointer(pB)).FrCost { 18589 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pA 18590 pTail = pA 18591 pA = (*fuzzer_rule)(unsafe.Pointer(pA)).FpNext 18592 } else { 18593 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pB 18594 pTail = pB 18595 pB = (*fuzzer_rule)(unsafe.Pointer(pB)).FpNext 18596 } 18597 } 18598 if pA == uintptr(0) { 18599 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pB 18600 } else { 18601 (*fuzzer_rule)(unsafe.Pointer(pTail)).FpNext = pA 18602 } 18603 return (*fuzzer_rule)(unsafe.Pointer(bp)).FpNext 18604 } 18605 18606 func fuzzerLoadOneRule(tls *libc.TLS, p uintptr, pStmt uintptr, ppRule uintptr, pzErr uintptr) int32 { 18607 bp := tls.Alloc(48) 18608 defer tls.Free(48) 18609 18610 var iRuleset sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 18611 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 18612 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 2) 18613 var nCost int32 = sqlite3.Xsqlite3_column_int(tls, pStmt, 3) 18614 18615 var rc int32 = SQLITE_OK 18616 var nFrom int32 18617 var nTo int32 18618 var pRule uintptr = uintptr(0) 18619 18620 if zFrom == uintptr(0) { 18621 zFrom = ts + 584 18622 } 18623 if zTo == uintptr(0) { 18624 zTo = ts + 584 18625 } 18626 nFrom = int32(libc.Xstrlen(tls, zFrom)) 18627 nTo = int32(libc.Xstrlen(tls, zTo)) 18628 18629 if libc.Xstrcmp(tls, zFrom, zTo) == 0 { 18630 *(*uintptr)(unsafe.Pointer(ppRule)) = uintptr(0) 18631 return SQLITE_OK 18632 } 18633 18634 if nCost <= 0 || nCost > FUZZER_MX_COST { 18635 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3304, 18636 libc.VaList(bp, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_COST)) 18637 rc = SQLITE_ERROR 18638 } else if nFrom > FUZZER_MX_LENGTH || nTo > FUZZER_MX_LENGTH { 18639 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3338, 18640 libc.VaList(bp+16, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_LENGTH)) 18641 rc = SQLITE_ERROR 18642 } else if iRuleset < int64(0) || iRuleset > int64(FUZZER_MX_RULEID) { 18643 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+5357, 18644 libc.VaList(bp+32, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, FUZZER_MX_RULEID)) 18645 rc = SQLITE_ERROR 18646 } else { 18647 pRule = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_rule{}))+uint64(nFrom)+uint64(nTo)) 18648 if pRule == uintptr(0) { 18649 rc = SQLITE_NOMEM 18650 } else { 18651 libc.X__builtin___memset_chk(tls, pRule, 0, uint64(unsafe.Sizeof(fuzzer_rule{})), libc.X__builtin_object_size(tls, pRule, 0)) 18652 (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom = pRule + 28 18653 *(*uintptr)(unsafe.Pointer(pRule + 8)) += uintptr(nTo + 1) 18654 (*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom = fuzzer_len(nFrom) 18655 libc.X__builtin___memcpy_chk(tls, (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom, zFrom, uint64(nFrom+1), libc.X__builtin_object_size(tls, (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom, 0)) 18656 libc.X__builtin___memcpy_chk(tls, pRule+28, zTo, uint64(nTo+1), libc.X__builtin_object_size(tls, pRule+28, 0)) 18657 (*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo = fuzzer_len(nTo) 18658 (*fuzzer_rule)(unsafe.Pointer(pRule)).FrCost = nCost 18659 (*fuzzer_rule)(unsafe.Pointer(pRule)).FiRuleset = int32(iRuleset) 18660 } 18661 } 18662 18663 *(*uintptr)(unsafe.Pointer(ppRule)) = pRule 18664 return rc 18665 } 18666 18667 func fuzzerLoadRules(tls *libc.TLS, db uintptr, p uintptr, zDb uintptr, zData uintptr, pzErr uintptr) int32 { 18668 bp := tls.Alloc(192) 18669 defer tls.Free(192) 18670 18671 var rc int32 = SQLITE_OK 18672 var zSql uintptr 18673 var pHead uintptr = uintptr(0) 18674 18675 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp, zDb, zData)) 18676 if zSql == uintptr(0) { 18677 rc = SQLITE_NOMEM 18678 } else { 18679 var rc2 int32 18680 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 18681 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+56, uintptr(0)) 18682 if rc != SQLITE_OK { 18683 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3427, libc.VaList(bp+16, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, sqlite3.Xsqlite3_errmsg(tls, db))) 18684 } else if sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) != 4 { 18685 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+3434, 18686 libc.VaList(bp+32, (*fuzzer_vtab)(unsafe.Pointer(p)).FzClassName, zData, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 56))))) 18687 rc = SQLITE_ERROR 18688 } else { 18689 for rc == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) { 18690 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 18691 rc = fuzzerLoadOneRule(tls, p, *(*uintptr)(unsafe.Pointer(bp + 56)), bp+64, pzErr) 18692 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 18693 (*fuzzer_rule)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 64)))).FpNext = pHead 18694 pHead = *(*uintptr)(unsafe.Pointer(bp + 64)) 18695 } 18696 } 18697 } 18698 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 18699 if rc == SQLITE_OK { 18700 rc = rc2 18701 } 18702 } 18703 sqlite3.Xsqlite3_free(tls, zSql) 18704 18705 if rc == SQLITE_OK { 18706 var i uint32 18707 var pX uintptr 18708 18709 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 18710 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 18711 } 18712 for libc.AssignUintptr(&pX, pHead) != uintptr(0) { 18713 pHead = (*fuzzer_rule)(unsafe.Pointer(pX)).FpNext 18714 (*fuzzer_rule)(unsafe.Pointer(pX)).FpNext = uintptr(0) 18715 for i = uint32(0); *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) != 0 && uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0)))-uint64(1); i++ { 18716 pX = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 18717 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = uintptr(0) 18718 } 18719 *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)) = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 18720 } 18721 pX = *(*uintptr)(unsafe.Pointer(bp + 72)) 18722 i = uint32(1) 18723 for ; uint64(i) < uint64(unsafe.Sizeof([15]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 18724 pX = fuzzerMergeRules(tls, *(*uintptr)(unsafe.Pointer(bp + 72 + uintptr(i)*8)), pX) 18725 } 18726 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = fuzzerMergeRules(tls, (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule, pX) 18727 } else { 18728 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = pHead 18729 } 18730 18731 return rc 18732 } 18733 18734 func fuzzerDequote(tls *libc.TLS, zIn uintptr) uintptr { 18735 var nIn sqlite3_int64 18736 var zOut uintptr 18737 18738 nIn = sqlite3_int64(libc.Xstrlen(tls, zIn)) 18739 zOut = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+int64(1))) 18740 if zOut != 0 { 18741 var q int8 = *(*int8)(unsafe.Pointer(zIn)) 18742 18743 if int32(q) != '[' && int32(q) != '\'' && int32(q) != '"' && int32(q) != '`' { 18744 libc.X__builtin___memcpy_chk(tls, zOut, zIn, size_t(nIn+int64(1)), libc.X__builtin_object_size(tls, zOut, 0)) 18745 } else { 18746 var iOut int32 = 0 18747 var iIn int32 18748 18749 if int32(q) == '[' { 18750 q = int8(']') 18751 } 18752 for iIn = 1; sqlite3_int64(iIn) < nIn; iIn++ { 18753 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iIn)))) == int32(q) { 18754 iIn++ 18755 } 18756 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(zIn + uintptr(iIn))) 18757 } 18758 } 18759 18760 } 18761 return zOut 18762 } 18763 18764 func fuzzerDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 18765 var p uintptr = pVtab 18766 18767 for (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule != 0 { 18768 var pRule uintptr = (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule 18769 (*fuzzer_vtab)(unsafe.Pointer(p)).FpRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 18770 sqlite3.Xsqlite3_free(tls, pRule) 18771 } 18772 sqlite3.Xsqlite3_free(tls, p) 18773 return SQLITE_OK 18774 } 18775 18776 func fuzzerConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 18777 bp := tls.Alloc(8) 18778 defer tls.Free(8) 18779 18780 var rc int32 = SQLITE_OK 18781 var pNew uintptr = uintptr(0) 18782 var zModule uintptr = *(*uintptr)(unsafe.Pointer(argv)) 18783 var zDb uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 18784 18785 if argc != 4 { 18786 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 18787 ts+5394, libc.VaList(bp, zModule)) 18788 rc = SQLITE_ERROR 18789 } else { 18790 var nModule sqlite3_int64 18791 18792 nModule = sqlite3_int64(libc.Xstrlen(tls, zModule)) 18793 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_vtab{}))+uint64(nModule)+uint64(1)) 18794 if pNew == uintptr(0) { 18795 rc = SQLITE_NOMEM 18796 } else { 18797 var zTab uintptr 18798 18799 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(fuzzer_vtab{})), libc.X__builtin_object_size(tls, pNew, 0)) 18800 (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName = pNew + 1*48 18801 libc.X__builtin___memcpy_chk(tls, (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName, zModule, size_t(nModule+int64(1)), libc.X__builtin_object_size(tls, (*fuzzer_vtab)(unsafe.Pointer(pNew)).FzClassName, 0)) 18802 18803 zTab = fuzzerDequote(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 18804 if zTab == uintptr(0) { 18805 rc = SQLITE_NOMEM 18806 } else { 18807 rc = fuzzerLoadRules(tls, db, pNew, zDb, zTab, pzErr) 18808 sqlite3.Xsqlite3_free(tls, zTab) 18809 } 18810 18811 if rc == SQLITE_OK { 18812 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+5445) 18813 } 18814 if rc != SQLITE_OK { 18815 fuzzerDisconnect(tls, pNew) 18816 pNew = uintptr(0) 18817 } else { 18818 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 18819 } 18820 } 18821 } 18822 18823 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 18824 return rc 18825 } 18826 18827 func fuzzerOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 18828 var p uintptr = pVTab 18829 var pCur uintptr 18830 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(fuzzer_cursor{}))) 18831 if pCur == uintptr(0) { 18832 return SQLITE_NOMEM 18833 } 18834 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(fuzzer_cursor{})), libc.X__builtin_object_size(tls, pCur, 0)) 18835 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab = p 18836 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 18837 (*fuzzer_vtab)(unsafe.Pointer(p)).FnCursor++ 18838 return SQLITE_OK 18839 } 18840 18841 func fuzzerClearStemList(tls *libc.TLS, pStem uintptr) { 18842 for pStem != 0 { 18843 var pNext uintptr = (*fuzzer_stem)(unsafe.Pointer(pStem)).FpNext 18844 sqlite3.Xsqlite3_free(tls, pStem) 18845 pStem = pNext 18846 } 18847 } 18848 18849 func fuzzerClearCursor(tls *libc.TLS, pCur uintptr, clearHash int32) { 18850 var i int32 18851 fuzzerClearStemList(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) 18852 fuzzerClearStemList(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone) 18853 for i = 0; i < FUZZER_NQUEUE; i++ { 18854 fuzzerClearStemList(tls, *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8))) 18855 } 18856 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 18857 if clearHash != 0 && (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem != 0 { 18858 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue = 0 18859 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 18860 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = uintptr(0) 18861 libc.X__builtin___memset_chk(tls, pCur+48, 0, uint64(unsafe.Sizeof([20]uintptr{})), libc.X__builtin_object_size(tls, pCur+48, 0)) 18862 libc.X__builtin___memset_chk(tls, pCur+272, 0, uint64(unsafe.Sizeof([4001]uintptr{})), libc.X__builtin_object_size(tls, pCur+272, 0)) 18863 } 18864 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem = 0 18865 } 18866 18867 func fuzzerClose(tls *libc.TLS, cur uintptr) int32 { 18868 var pCur uintptr = cur 18869 fuzzerClearCursor(tls, pCur, 0) 18870 sqlite3.Xsqlite3_free(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) 18871 (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FnCursor-- 18872 sqlite3.Xsqlite3_free(tls, pCur) 18873 return SQLITE_OK 18874 } 18875 18876 func fuzzerRender(tls *libc.TLS, pStem uintptr, pzBuf uintptr, pnBuf uintptr) int32 { 18877 var pRule uintptr = (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule 18878 var n int32 18879 var z uintptr 18880 18881 n = int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis) + int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo) - int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) 18882 if *(*int32)(unsafe.Pointer(pnBuf)) < n+1 { 18883 *(*uintptr)(unsafe.Pointer(pzBuf)) = sqlite3.Xsqlite3_realloc(tls, *(*uintptr)(unsafe.Pointer(pzBuf)), n+100) 18884 if *(*uintptr)(unsafe.Pointer(pzBuf)) == uintptr(0) { 18885 return SQLITE_NOMEM 18886 } 18887 *(*int32)(unsafe.Pointer(pnBuf)) = n + 100 18888 } 18889 n = int32((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn) 18890 z = *(*uintptr)(unsafe.Pointer(pzBuf)) 18891 if n < 0 { 18892 libc.X__builtin___memcpy_chk(tls, z, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis, uint64(int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)+1), libc.X__builtin_object_size(tls, z, 0)) 18893 } else { 18894 libc.X__builtin___memcpy_chk(tls, z, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis, uint64(n), libc.X__builtin_object_size(tls, z, 0)) 18895 libc.X__builtin___memcpy_chk(tls, z+uintptr(n), pRule+28, uint64((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo), libc.X__builtin_object_size(tls, z+uintptr(n), 0)) 18896 libc.X__builtin___memcpy_chk(tls, z+uintptr(n+int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo)), (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis+uintptr(n+int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom)), uint64(int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)-n-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom)+1), libc.X__builtin_object_size(tls, z+uintptr(n+int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo)), 0)) 18897 } 18898 18899 return SQLITE_OK 18900 } 18901 18902 func fuzzerHash(tls *libc.TLS, z uintptr) uint32 { 18903 var h uint32 = uint32(0) 18904 for *(*int8)(unsafe.Pointer(z)) != 0 { 18905 h = h<<3 ^ h>>29 ^ uint32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 18906 } 18907 return h % uint32(FUZZER_HASH) 18908 } 18909 18910 func fuzzerCost(tls *libc.TLS, pStem uintptr) fuzzer_cost { 18911 return libc.AssignPtrInt32(pStem+36, (*fuzzer_stem)(unsafe.Pointer(pStem)).FrBaseCost+(*fuzzer_rule)(unsafe.Pointer((*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule)).FrCost) 18912 } 18913 18914 func fuzzerSeen(tls *libc.TLS, pCur uintptr, pStem uintptr) int32 { 18915 var h uint32 18916 var pLookup uintptr 18917 18918 if fuzzerRender(tls, pStem, pCur+216, pCur+224) == SQLITE_NOMEM { 18919 return -1 18920 } 18921 h = fuzzerHash(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) 18922 pLookup = *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) 18923 for pLookup != 0 && libc.Xstrcmp(tls, (*fuzzer_stem)(unsafe.Pointer(pLookup)).FzBasis, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf) != 0 { 18924 pLookup = (*fuzzer_stem)(unsafe.Pointer(pLookup)).FpHash 18925 } 18926 return libc.Bool32(pLookup != uintptr(0)) 18927 } 18928 18929 func fuzzerSkipRule(tls *libc.TLS, pRule uintptr, pStem uintptr, iRuleset int32) int32 { 18930 return libc.Bool32(pRule != 0 && ((*fuzzer_rule)(unsafe.Pointer(pRule)).FiRuleset != iRuleset || 18931 int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)+int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnTo)-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) > FUZZER_MX_OUTPUT_LENGTH)) 18932 } 18933 18934 func fuzzerAdvance(tls *libc.TLS, pCur uintptr, pStem uintptr) int32 { 18935 var pRule uintptr 18936 for libc.AssignUintptr(&pRule, (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule) != uintptr(0) { 18937 for int32((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn) < int32((*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis)-int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) { 18938 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn++ 18939 if int32((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom) == 0 || 18940 libc.Xmemcmp(tls, (*fuzzer_stem)(unsafe.Pointer(pStem)).FzBasis+uintptr((*fuzzer_stem)(unsafe.Pointer(pStem)).Fn), (*fuzzer_rule)(unsafe.Pointer(pRule)).FzFrom, uint64((*fuzzer_rule)(unsafe.Pointer(pRule)).FnFrom)) == 0 { 18941 var rc int32 = fuzzerSeen(tls, pCur, pStem) 18942 if rc < 0 { 18943 return -1 18944 } 18945 if rc == 0 { 18946 fuzzerCost(tls, pStem) 18947 return 1 18948 } 18949 } 18950 } 18951 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn = int8(-1) 18952 for __ccgo := true; __ccgo; __ccgo = fuzzerSkipRule(tls, pRule, pStem, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset) != 0 { 18953 pRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 18954 } 18955 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = pRule 18956 if pRule != 0 && fuzzerCost(tls, pStem) > (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit { 18957 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = uintptr(0) 18958 } 18959 } 18960 return 0 18961 } 18962 18963 func fuzzerMergeStems(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 18964 bp := tls.Alloc(48) 18965 defer tls.Free(48) 18966 18967 var pTail uintptr 18968 18969 pTail = bp 18970 for pA != 0 && pB != 0 { 18971 if (*fuzzer_stem)(unsafe.Pointer(pA)).FrCostX <= (*fuzzer_stem)(unsafe.Pointer(pB)).FrCostX { 18972 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pA 18973 pTail = pA 18974 pA = (*fuzzer_stem)(unsafe.Pointer(pA)).FpNext 18975 } else { 18976 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pB 18977 pTail = pB 18978 pB = (*fuzzer_stem)(unsafe.Pointer(pB)).FpNext 18979 } 18980 } 18981 if pA == uintptr(0) { 18982 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pB 18983 } else { 18984 (*fuzzer_stem)(unsafe.Pointer(pTail)).FpNext = pA 18985 } 18986 return (*fuzzer_stem)(unsafe.Pointer(bp)).FpNext 18987 } 18988 18989 func fuzzerLowestCostStem(tls *libc.TLS, pCur uintptr) uintptr { 18990 var pBest uintptr 18991 var pX uintptr 18992 var iBest int32 18993 var i int32 18994 18995 if (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem == uintptr(0) { 18996 iBest = -1 18997 pBest = uintptr(0) 18998 for i = 0; i <= (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue; i++ { 18999 pX = *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) 19000 if pX == uintptr(0) { 19001 continue 19002 } 19003 if pBest == uintptr(0) || (*fuzzer_stem)(unsafe.Pointer(pBest)).FrCostX > (*fuzzer_stem)(unsafe.Pointer(pX)).FrCostX { 19004 pBest = pX 19005 iBest = i 19006 } 19007 } 19008 if pBest != 0 { 19009 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(iBest)*8)) = (*fuzzer_stem)(unsafe.Pointer(pBest)).FpNext 19010 (*fuzzer_stem)(unsafe.Pointer(pBest)).FpNext = uintptr(0) 19011 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = pBest 19012 } 19013 } 19014 return (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem 19015 } 19016 19017 func fuzzerInsert(tls *libc.TLS, pCur uintptr, pNew uintptr) uintptr { 19018 var pX uintptr 19019 var i int32 19020 19021 if libc.AssignUintptr(&pX, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) != uintptr(0) && (*fuzzer_stem)(unsafe.Pointer(pX)).FrCostX > (*fuzzer_stem)(unsafe.Pointer(pNew)).FrCostX { 19022 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = uintptr(0) 19023 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = pNew 19024 pNew = pX 19025 } 19026 19027 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = uintptr(0) 19028 pX = pNew 19029 for i = 0; i <= (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue; i++ { 19030 if *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) != 0 { 19031 pX = fuzzerMergeStems(tls, pX, *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8))) 19032 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = uintptr(0) 19033 } else { 19034 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = pX 19035 break 19036 } 19037 } 19038 if i > (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue { 19039 if i < FUZZER_NQUEUE { 19040 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FmxQueue = i 19041 *(*uintptr)(unsafe.Pointer(pCur + 48 + uintptr(i)*8)) = pX 19042 } else { 19043 pX = fuzzerMergeStems(tls, pX, *(*uintptr)(unsafe.Pointer(pCur + 48 + 19*8))) 19044 *(*uintptr)(unsafe.Pointer(pCur + 48 + 19*8)) = pX 19045 } 19046 } 19047 19048 return fuzzerLowestCostStem(tls, pCur) 19049 } 19050 19051 func fuzzerNewStem(tls *libc.TLS, pCur uintptr, zWord uintptr, rBaseCost fuzzer_cost) uintptr { 19052 var pNew uintptr 19053 var pRule uintptr 19054 var h uint32 19055 19056 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(fuzzer_stem{}))+libc.Xstrlen(tls, zWord)+uint64(1)) 19057 if pNew == uintptr(0) { 19058 return uintptr(0) 19059 } 19060 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(fuzzer_stem{})), libc.X__builtin_object_size(tls, pNew, 0)) 19061 (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis = pNew + 1*48 19062 (*fuzzer_stem)(unsafe.Pointer(pNew)).FnBasis = fuzzer_len(libc.Xstrlen(tls, zWord)) 19063 libc.X__builtin___memcpy_chk(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis, zWord, uint64(int32((*fuzzer_stem)(unsafe.Pointer(pNew)).FnBasis)+1), libc.X__builtin_object_size(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis, 0)) 19064 pRule = (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FpRule 19065 for fuzzerSkipRule(tls, pRule, pNew, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset) != 0 { 19066 pRule = (*fuzzer_rule)(unsafe.Pointer(pRule)).FpNext 19067 } 19068 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpRule = pRule 19069 (*fuzzer_stem)(unsafe.Pointer(pNew)).Fn = int8(-1) 19070 (*fuzzer_stem)(unsafe.Pointer(pNew)).FrBaseCost = libc.AssignPtrInt32(pNew+36, rBaseCost) 19071 h = fuzzerHash(tls, (*fuzzer_stem)(unsafe.Pointer(pNew)).FzBasis) 19072 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpHash = *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) 19073 *(*uintptr)(unsafe.Pointer(pCur + 272 + uintptr(h)*8)) = pNew 19074 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnStem++ 19075 return pNew 19076 } 19077 19078 func fuzzerNext(tls *libc.TLS, cur uintptr) int32 { 19079 var pCur uintptr = cur 19080 var rc int32 19081 var pStem uintptr 19082 var pNew uintptr 19083 19084 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid++ 19085 19086 pStem = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem 19087 if (*fuzzer_stem)(unsafe.Pointer(pStem)).FrCostX > 0 { 19088 rc = fuzzerRender(tls, pStem, pCur+216, pCur+224) 19089 if rc == SQLITE_NOMEM { 19090 return SQLITE_NOMEM 19091 } 19092 pNew = fuzzerNewStem(tls, pCur, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf, (*fuzzer_stem)(unsafe.Pointer(pStem)).FrCostX) 19093 if pNew != 0 { 19094 if fuzzerAdvance(tls, pCur, pNew) == 0 { 19095 (*fuzzer_stem)(unsafe.Pointer(pNew)).FpNext = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone 19096 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = pNew 19097 } else { 19098 if fuzzerInsert(tls, pCur, pNew) == pNew { 19099 return SQLITE_OK 19100 } 19101 } 19102 } else { 19103 return SQLITE_NOMEM 19104 } 19105 } 19106 19107 for libc.AssignUintptr(&pStem, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) != uintptr(0) { 19108 var res int32 = fuzzerAdvance(tls, pCur, pStem) 19109 if res < 0 { 19110 return SQLITE_NOMEM 19111 } else if res > 0 { 19112 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 19113 pStem = fuzzerInsert(tls, pCur, pStem) 19114 if libc.AssignInt32(&rc, fuzzerSeen(tls, pCur, pStem)) != 0 { 19115 if rc < 0 { 19116 return SQLITE_NOMEM 19117 } 19118 continue 19119 } 19120 return SQLITE_OK 19121 } 19122 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = uintptr(0) 19123 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpNext = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone 19124 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpDone = pStem 19125 if fuzzerLowestCostStem(tls, pCur) != 0 { 19126 rc = fuzzerSeen(tls, pCur, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem) 19127 if rc < 0 { 19128 return SQLITE_NOMEM 19129 } 19130 if rc == 0 { 19131 return SQLITE_OK 19132 } 19133 } 19134 } 19135 19136 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 19137 return SQLITE_OK 19138 } 19139 19140 func fuzzerFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 19141 var pCur uintptr = pVtabCursor 19142 var zWord uintptr = ts + 584 19143 var pStem uintptr 19144 var idx int32 19145 19146 fuzzerClearCursor(tls, pCur, 1) 19147 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 2147483647 19148 idx = 0 19149 if idxNum&1 != 0 { 19150 zWord = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 19151 idx++ 19152 } 19153 if idxNum&2 != 0 { 19154 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 19155 idx++ 19156 } 19157 if idxNum&4 != 0 { 19158 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRuleset = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(idx)*8))) 19159 idx++ 19160 } 19161 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FpNext = (*fuzzer_vtab)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpVtab)).FpRule 19162 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FrCost = 0 19163 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FnFrom = int8(0) 19164 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FnTo = int8(0) 19165 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FnullRule.FzFrom = ts + 584 19166 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 19167 19168 if int32(libc.Xstrlen(tls, zWord)) < FUZZER_MX_OUTPUT_LENGTH { 19169 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem = libc.AssignUintptr(&pStem, fuzzerNewStem(tls, pCur, zWord, 0)) 19170 if pStem == uintptr(0) { 19171 return SQLITE_NOMEM 19172 } 19173 (*fuzzer_stem)(unsafe.Pointer(pStem)).FpRule = pCur + 240 19174 (*fuzzer_stem)(unsafe.Pointer(pStem)).Fn = (*fuzzer_stem)(unsafe.Pointer(pStem)).FnBasis 19175 } else { 19176 (*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit = 0 19177 } 19178 19179 return SQLITE_OK 19180 } 19181 19182 func fuzzerColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 19183 var pCur uintptr = cur 19184 if i == 0 { 19185 if fuzzerRender(tls, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem, pCur+216, pCur+224) == SQLITE_NOMEM { 19186 return SQLITE_NOMEM 19187 } 19188 sqlite3.Xsqlite3_result_text(tls, ctx, (*fuzzer_cursor)(unsafe.Pointer(pCur)).FzBuf, -1, libc.UintptrFromInt32(-1)) 19189 } else if i == 1 { 19190 sqlite3.Xsqlite3_result_int(tls, ctx, (*fuzzer_stem)(unsafe.Pointer((*fuzzer_cursor)(unsafe.Pointer(pCur)).FpStem)).FrCostX) 19191 } else { 19192 sqlite3.Xsqlite3_result_null(tls, ctx) 19193 } 19194 return SQLITE_OK 19195 } 19196 19197 func fuzzerRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 19198 var pCur uintptr = cur 19199 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*fuzzer_cursor)(unsafe.Pointer(pCur)).FiRowid 19200 return SQLITE_OK 19201 } 19202 19203 func fuzzerEof(tls *libc.TLS, cur uintptr) int32 { 19204 var pCur uintptr = cur 19205 return libc.Bool32((*fuzzer_cursor)(unsafe.Pointer(pCur)).FrLimit <= 0) 19206 } 19207 19208 func fuzzerBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 19209 var iPlan int32 = 0 19210 var iDistTerm int32 = -1 19211 var iRulesetTerm int32 = -1 19212 var i int32 19213 var seenMatch int32 = 0 19214 var pConstraint uintptr 19215 var rCost float64 = 1e12 19216 19217 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 19218 i = 0 19219 __1: 19220 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 19221 goto __3 19222 } 19223 { 19224 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 19225 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 19226 seenMatch = 1 19227 } 19228 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 19229 goto __2 19230 } 19231 if iPlan&1 == 0 && 19232 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 0 && 19233 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 19234 iPlan = iPlan | 1 19235 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 19236 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 19237 rCost = rCost / 1e6 19238 } 19239 if iPlan&2 == 0 && 19240 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 1 && 19241 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 19242 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 19243 iPlan = iPlan | 2 19244 iDistTerm = i 19245 rCost = rCost / 10.0 19246 } 19247 if iPlan&4 == 0 && 19248 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == 2 && 19249 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 19250 iPlan = iPlan | 4 19251 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 19252 iRulesetTerm = i 19253 rCost = rCost / 10.0 19254 } 19255 19256 } 19257 goto __2 19258 __2: 19259 i++ 19260 pConstraint += 12 19261 goto __1 19262 goto __3 19263 __3: 19264 ; 19265 if iPlan&2 != 0 { 19266 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = 1 + libc.Bool32(iPlan&1 != 0) 19267 } 19268 if iPlan&4 != 0 { 19269 var idx int32 = 1 19270 if iPlan&1 != 0 { 19271 idx++ 19272 } 19273 if iPlan&2 != 0 { 19274 idx++ 19275 } 19276 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRulesetTerm)*8)).FargvIndex = idx 19277 } 19278 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 19279 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 19280 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 1 && 19281 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 19282 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 19283 } 19284 if seenMatch != 0 && iPlan&1 == 0 { 19285 rCost = 1e99 19286 } 19287 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = rCost 19288 19289 return SQLITE_OK 19290 } 19291 19292 var fuzzerModule = sqlite3_module{ 19293 FxCreate: 0, 19294 FxConnect: 0, 19295 FxBestIndex: 0, 19296 FxDisconnect: 0, 19297 FxDestroy: 0, 19298 FxOpen: 0, 19299 FxClose: 0, 19300 FxFilter: 0, 19301 FxNext: 0, 19302 FxEof: 0, 19303 FxColumn: 0, 19304 FxRowid: 0, 19305 } 19306 19307 func sqlite3_fuzzer_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19308 var rc int32 = SQLITE_OK 19309 _ = pApi 19310 19311 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+5483, uintptr(unsafe.Pointer(&fuzzerModule)), uintptr(0)) 19312 return rc 19313 } 19314 19315 func ieee754func(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19316 bp := tls.Alloc(160) 19317 defer tls.Free(160) 19318 19319 if argc == 1 { 19320 var m sqlite3_int64 19321 19322 var e int32 19323 var isNeg int32 19324 19325 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_BLOB && 19326 uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) == uint64(unsafe.Sizeof(float64(0))) { 19327 var x uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 19328 var i uint32 19329 *(*sqlite3_uint64)(unsafe.Pointer(bp + 24)) = uint64(0) 19330 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 19331 *(*sqlite3_uint64)(unsafe.Pointer(bp + 24)) = *(*sqlite3_uint64)(unsafe.Pointer(bp + 24))<<8 | sqlite3_uint64(*(*uint8)(unsafe.Pointer(x + uintptr(i)))) 19332 } 19333 libc.X__builtin___memcpy_chk(tls, bp+16, bp+24, uint64(unsafe.Sizeof(float64(0))), libc.X__builtin_object_size(tls, bp+16, 0)) 19334 } else { 19335 *(*float64)(unsafe.Pointer(bp + 16)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 19336 } 19337 if *(*float64)(unsafe.Pointer(bp + 16)) < 0.0 { 19338 isNeg = 1 19339 *(*float64)(unsafe.Pointer(bp + 16)) = -*(*float64)(unsafe.Pointer(bp + 16)) 19340 } else { 19341 isNeg = 0 19342 } 19343 libc.X__builtin___memcpy_chk(tls, bp+32, bp+16, uint64(unsafe.Sizeof(sqlite3_int64(0))), libc.X__builtin_object_size(tls, bp+32, 0)) 19344 if *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) == int64(0) { 19345 e = 0 19346 m = int64(0) 19347 } else { 19348 e = int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 32)) >> 52) 19349 m = *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) & (int64(1)<<52 - int64(1)) 19350 if e == 0 { 19351 m <<= 1 19352 } else { 19353 m = m | int64(1)<<52 19354 } 19355 for e < 1075 && m > int64(0) && m&int64(1) == int64(0) { 19356 m >>= 1 19357 e++ 19358 } 19359 if isNeg != 0 { 19360 m = -m 19361 } 19362 } 19363 switch *(*int32)(unsafe.Pointer(sqlite3.Xsqlite3_user_data(tls, context))) { 19364 case 0: 19365 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+5490, 19366 libc.VaList(bp, m, e-1075)) 19367 sqlite3.Xsqlite3_result_text(tls, context, bp+40, -1, libc.UintptrFromInt32(-1)) 19368 break 19369 fallthrough 19370 case 1: 19371 sqlite3.Xsqlite3_result_int64(tls, context, m) 19372 break 19373 fallthrough 19374 case 2: 19375 sqlite3.Xsqlite3_result_int(tls, context, e-1075) 19376 break 19377 } 19378 } else { 19379 var m sqlite3_int64 19380 var e sqlite3_int64 19381 19382 var isNeg int32 = 0 19383 m = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 19384 e = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 19385 19386 if e > int64(10000) { 19387 e = int64(10000) 19388 } else if e < int64(-10000) { 19389 e = int64(-10000) 19390 } 19391 19392 if m < int64(0) { 19393 isNeg = 1 19394 m = -m 19395 if m < int64(0) { 19396 return 19397 } 19398 } else if m == int64(0) && e > int64(-1000) && e < int64(1000) { 19399 sqlite3.Xsqlite3_result_double(tls, context, 0.0) 19400 return 19401 } 19402 for m>>32&int64(0xffe00000) != 0 { 19403 m >>= 1 19404 e++ 19405 } 19406 for m != int64(0) && m>>32&int64(0xfff00000) == int64(0) { 19407 m <<= 1 19408 e-- 19409 } 19410 e = e + int64(1075) 19411 if e <= int64(0) { 19412 if int64(1)-e >= int64(64) { 19413 m = int64(0) 19414 } else { 19415 m >>= int64(1) - e 19416 } 19417 e = int64(0) 19418 } else if e > int64(0x7ff) { 19419 e = int64(0x7ff) 19420 } 19421 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) = m & (int64(1)<<52 - int64(1)) 19422 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) |= e << 52 19423 if isNeg != 0 { 19424 *(*sqlite3_int64)(unsafe.Pointer(bp + 152)) |= libc.Int64FromUint64(uint64(1) << 63) 19425 } 19426 libc.X__builtin___memcpy_chk(tls, bp+144, bp+152, uint64(unsafe.Sizeof(float64(0))), libc.X__builtin_object_size(tls, bp+144, 0)) 19427 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 144))) 19428 } 19429 } 19430 19431 func ieee754func_from_blob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19432 bp := tls.Alloc(16) 19433 defer tls.Free(16) 19434 19435 _ = argc 19436 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_BLOB && 19437 uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) == uint64(unsafe.Sizeof(float64(0))) { 19438 var x uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 19439 var i uint32 19440 *(*sqlite3_uint64)(unsafe.Pointer(bp + 8)) = uint64(0) 19441 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 19442 *(*sqlite3_uint64)(unsafe.Pointer(bp + 8)) = *(*sqlite3_uint64)(unsafe.Pointer(bp + 8))<<8 | sqlite3_uint64(*(*uint8)(unsafe.Pointer(x + uintptr(i)))) 19443 } 19444 libc.X__builtin___memcpy_chk(tls, bp, bp+8, uint64(unsafe.Sizeof(float64(0))), libc.X__builtin_object_size(tls, bp, 0)) 19445 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp))) 19446 } 19447 } 19448 19449 func ieee754func_to_blob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19450 bp := tls.Alloc(24) 19451 defer tls.Free(24) 19452 19453 _ = argc 19454 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_FLOAT || 19455 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_INTEGER { 19456 *(*float64)(unsafe.Pointer(bp + 8)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 19457 19458 var i uint32 19459 libc.X__builtin___memcpy_chk(tls, bp, bp+8, uint64(unsafe.Sizeof(float64(0))), libc.X__builtin_object_size(tls, bp, 0)) 19460 for i = uint32(1); uint64(i) <= uint64(unsafe.Sizeof(float64(0))); i++ { 19461 *(*uint8)(unsafe.Pointer(bp + 16 + uintptr(uint64(unsafe.Sizeof(float64(0)))-uint64(i)))) = uint8(*(*sqlite3_uint64)(unsafe.Pointer(bp)) & uint64(0xff)) 19462 *(*sqlite3_uint64)(unsafe.Pointer(bp)) >>= 8 19463 } 19464 sqlite3.Xsqlite3_result_blob(tls, context, bp+16, int32(unsafe.Sizeof(float64(0))), libc.UintptrFromInt32(-1)) 19465 } 19466 } 19467 19468 func sqlite3_ieee_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19469 var i uint32 19470 var rc int32 = SQLITE_OK 19471 _ = pApi 19472 19473 _ = pzErrMsg 19474 for i = uint32(0); uint64(i) < uint64(unsafe.Sizeof(aFunc1))/uint64(unsafe.Sizeof(struct { 19475 FzFName uintptr 19476 FnArg int32 19477 FiAux int32 19478 FxFunc uintptr 19479 }{})) && rc == SQLITE_OK; i++ { 19480 rc = sqlite3.Xsqlite3_create_function(tls, db, aFunc1[i].FzFName, aFunc1[i].FnArg, 19481 SQLITE_UTF8|SQLITE_INNOCUOUS, 19482 uintptr(unsafe.Pointer(&aFunc1))+uintptr(i)*24+12, 19483 aFunc1[i].FxFunc, uintptr(0), uintptr(0)) 19484 } 19485 return rc 19486 } 19487 19488 var aFunc1 = [6]struct { 19489 FzFName uintptr 19490 FnArg int32 19491 FiAux int32 19492 FxFunc uintptr 19493 }{ 19494 {FzFName: ts + 5507, FnArg: 1, FxFunc: 0}, 19495 {FzFName: ts + 5507, FnArg: 2, FxFunc: 0}, 19496 {FzFName: ts + 5515, FnArg: 1, FiAux: 1, FxFunc: 0}, 19497 {FzFName: ts + 5532, FnArg: 1, FiAux: 2, FxFunc: 0}, 19498 {FzFName: ts + 5549, FnArg: 1, FxFunc: 0}, 19499 {FzFName: ts + 5565, FnArg: 1, FxFunc: 0}, 19500 } 19501 19502 func sqlite3_mmap_warm(tls *libc.TLS, db uintptr, zDb uintptr) int32 { 19503 bp := tls.Alloc(88) 19504 defer tls.Free(88) 19505 19506 var rc int32 = SQLITE_OK 19507 var zSql uintptr = uintptr(0) 19508 var pgsz int32 = 0 19509 var nTotal int32 = 0 19510 19511 if 0 == sqlite3.Xsqlite3_get_autocommit(tls, db) { 19512 return SQLITE_MISUSE 19513 } 19514 19515 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+5583, 19516 libc.VaList(bp, func() uintptr { 19517 if zDb != 0 { 19518 return ts + 5624 19519 } 19520 return ts + 584 19521 }(), func() uintptr { 19522 if zDb != 0 { 19523 return zDb 19524 } 19525 return ts + 584 19526 }(), func() uintptr { 19527 if zDb != 0 { 19528 return ts + 5626 19529 } 19530 return ts + 584 19531 }())) 19532 if zSql == uintptr(0) { 19533 return SQLITE_NOMEM 19534 } 19535 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 19536 sqlite3.Xsqlite3_free(tls, zSql) 19537 19538 if rc == SQLITE_OK { 19539 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+5629, 19540 libc.VaList(bp+24, func() uintptr { 19541 if zDb != 0 { 19542 return ts + 5624 19543 } 19544 return ts + 584 19545 }(), func() uintptr { 19546 if zDb != 0 { 19547 return zDb 19548 } 19549 return ts + 584 19550 }(), func() uintptr { 19551 if zDb != 0 { 19552 return ts + 5626 19553 } 19554 return ts + 584 19555 }())) 19556 if zSql == uintptr(0) { 19557 rc = SQLITE_NOMEM 19558 } else { 19559 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 19560 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+64, uintptr(0)) 19561 sqlite3.Xsqlite3_free(tls, zSql) 19562 if rc == SQLITE_OK { 19563 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) == SQLITE_ROW { 19564 pgsz = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 19565 } 19566 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 19567 } 19568 if rc == SQLITE_OK && pgsz == 0 { 19569 rc = SQLITE_ERROR 19570 } 19571 } 19572 } 19573 19574 if rc == SQLITE_OK { 19575 var rc2 int32 19576 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 19577 rc = sqlite3.Xsqlite3_file_control(tls, db, zDb, SQLITE_FCNTL_FILE_POINTER, bp+72) 19578 if rc == SQLITE_OK && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)))).FpMethods)).FiVersion >= 3 { 19579 var iPg sqlite3_int64 = int64(1) 19580 var p uintptr = (*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)))).FpMethods 19581 for 1 != 0 { 19582 rc = (*struct { 19583 f func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32 19584 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods)(unsafe.Pointer(p)).FxFetch})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), sqlite3_int64(pgsz)*iPg, pgsz, bp+80) 19585 if rc != SQLITE_OK || *(*uintptr)(unsafe.Pointer(bp + 80)) == uintptr(0) { 19586 break 19587 } 19588 19589 nTotal = nTotal + int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80))))) 19590 nTotal = nTotal + int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80)) + uintptr(pgsz-1)))) 19591 19592 rc = (*struct { 19593 f func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32 19594 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods)(unsafe.Pointer(p)).FxUnfetch})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), sqlite3_int64(pgsz)*iPg, *(*uintptr)(unsafe.Pointer(bp + 80))) 19595 if rc != SQLITE_OK { 19596 break 19597 } 19598 iPg++ 19599 } 19600 sqlite3.Xsqlite3_log(tls, SQLITE_OK, 19601 ts+5652, libc.VaList(bp+48, func() int64 { 19602 if iPg == int64(1) { 19603 return int64(0) 19604 } 19605 return iPg 19606 }(), 19607 sqlite3.Xsqlite3_db_filename(tls, db, zDb))) 19608 } 19609 19610 rc2 = sqlite3.Xsqlite3_exec(tls, db, ts+5702, uintptr(0), uintptr(0), uintptr(0)) 19611 if rc == SQLITE_OK { 19612 rc = rc2 19613 } 19614 } 19615 19616 return rc 19617 } 19618 19619 type nextCharContext1 = struct { 19620 Fdb uintptr 19621 FpStmt uintptr 19622 FzPrefix uintptr 19623 FnPrefix int32 19624 FnAlloc int32 19625 FnUsed int32 19626 F__ccgo_pad1 [4]byte 19627 FaResult uintptr 19628 FmallocFailed int32 19629 FotherError int32 19630 } 19631 19632 type nextCharContext = nextCharContext1 19633 19634 func nextCharAppend(tls *libc.TLS, p uintptr, c uint32) { 19635 var i int32 19636 for i = 0; i < (*nextCharContext)(unsafe.Pointer(p)).FnUsed; i++ { 19637 if *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(p)).FaResult + uintptr(i)*4)) == c { 19638 return 19639 } 19640 } 19641 if (*nextCharContext)(unsafe.Pointer(p)).FnUsed+1 > (*nextCharContext)(unsafe.Pointer(p)).FnAlloc { 19642 var aNew uintptr 19643 var n int32 = (*nextCharContext)(unsafe.Pointer(p)).FnAlloc*2 + 30 19644 aNew = sqlite3.Xsqlite3_realloc64(tls, (*nextCharContext)(unsafe.Pointer(p)).FaResult, uint64(n)*uint64(unsafe.Sizeof(uint32(0)))) 19645 if aNew == uintptr(0) { 19646 (*nextCharContext)(unsafe.Pointer(p)).FmallocFailed = 1 19647 return 19648 } else { 19649 (*nextCharContext)(unsafe.Pointer(p)).FaResult = aNew 19650 (*nextCharContext)(unsafe.Pointer(p)).FnAlloc = n 19651 } 19652 } 19653 *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(p)).FaResult + uintptr(libc.PostIncInt32(&(*nextCharContext)(unsafe.Pointer(p)).FnUsed, 1))*4)) = c 19654 } 19655 19656 func writeUtf8(tls *libc.TLS, z uintptr, c uint32) int32 { 19657 if c < uint32(0x00080) { 19658 *(*uint8)(unsafe.Pointer(z)) = uint8(c & uint32(0xff)) 19659 return 1 19660 } 19661 if c < uint32(0x00800) { 19662 *(*uint8)(unsafe.Pointer(z)) = uint8(0xC0 + int32(uint8(c>>6&uint32(0x1F)))) 19663 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 19664 return 2 19665 } 19666 if c < uint32(0x10000) { 19667 *(*uint8)(unsafe.Pointer(z)) = uint8(0xE0 + int32(uint8(c>>12&uint32(0x0F)))) 19668 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c>>6&uint32(0x3F)))) 19669 *(*uint8)(unsafe.Pointer(z + 2)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 19670 return 3 19671 } 19672 *(*uint8)(unsafe.Pointer(z)) = uint8(0xF0 + int32(uint8(c>>18&uint32(0x07)))) 19673 *(*uint8)(unsafe.Pointer(z + 1)) = uint8(0x80 + int32(uint8(c>>12&uint32(0x3F)))) 19674 *(*uint8)(unsafe.Pointer(z + 2)) = uint8(0x80 + int32(uint8(c>>6&uint32(0x3F)))) 19675 *(*uint8)(unsafe.Pointer(z + 3)) = uint8(0x80 + int32(uint8(c&uint32(0x3F)))) 19676 return 4 19677 } 19678 19679 func readUtf8(tls *libc.TLS, z uintptr, pOut uintptr) int32 { 19680 var c uint32 = uint32(*(*uint8)(unsafe.Pointer(z))) 19681 if c < uint32(0xc0) { 19682 *(*uint32)(unsafe.Pointer(pOut)) = c 19683 return 1 19684 } else { 19685 var n int32 = 1 19686 c = uint32(validBits[c-uint32(0xc0)]) 19687 for int32(*(*uint8)(unsafe.Pointer(z + uintptr(n))))&0xc0 == 0x80 { 19688 c = c<<6 + uint32(0x3f&int32(*(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&n, 1)))))) 19689 } 19690 if c < uint32(0x80) || c&0xFFFFF800 == uint32(0xD800) || c&0xFFFFFFFE == uint32(0xFFFE) { 19691 c = uint32(0xFFFD) 19692 } 19693 *(*uint32)(unsafe.Pointer(pOut)) = c 19694 return n 19695 } 19696 return int32(0) 19697 } 19698 19699 var validBits = [64]uint8{ 19700 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 19701 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 19702 uint8(0x10), uint8(0x11), uint8(0x12), uint8(0x13), uint8(0x14), uint8(0x15), uint8(0x16), uint8(0x17), 19703 uint8(0x18), uint8(0x19), uint8(0x1a), uint8(0x1b), uint8(0x1c), uint8(0x1d), uint8(0x1e), uint8(0x1f), 19704 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 19705 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 19706 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 19707 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x00), uint8(0x01), uint8(0x00), uint8(0x00), 19708 } 19709 19710 func findNextChars(tls *libc.TLS, p uintptr) { 19711 bp := tls.Alloc(12) 19712 defer tls.Free(12) 19713 19714 var cPrev uint32 = uint32(0) 19715 19716 var n int32 19717 var rc int32 19718 19719 for { 19720 sqlite3.Xsqlite3_bind_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 1, (*nextCharContext)(unsafe.Pointer(p)).FzPrefix, (*nextCharContext)(unsafe.Pointer(p)).FnPrefix, 19721 uintptr(0)) 19722 n = writeUtf8(tls, bp, cPrev+uint32(1)) 19723 sqlite3.Xsqlite3_bind_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 2, bp, n, uintptr(0)) 19724 rc = sqlite3.Xsqlite3_step(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 19725 if rc == SQLITE_DONE { 19726 sqlite3.Xsqlite3_reset(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 19727 return 19728 } else if rc != SQLITE_ROW { 19729 (*nextCharContext)(unsafe.Pointer(p)).FotherError = rc 19730 return 19731 } else { 19732 var zOut uintptr = sqlite3.Xsqlite3_column_text(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt, 0) 19733 19734 n = readUtf8(tls, zOut+uintptr((*nextCharContext)(unsafe.Pointer(p)).FnPrefix), bp+8) 19735 sqlite3.Xsqlite3_reset(tls, (*nextCharContext)(unsafe.Pointer(p)).FpStmt) 19736 nextCharAppend(tls, p, *(*uint32)(unsafe.Pointer(bp + 8))) 19737 cPrev = *(*uint32)(unsafe.Pointer(bp + 8)) 19738 if (*nextCharContext)(unsafe.Pointer(p)).FmallocFailed != 0 { 19739 return 19740 } 19741 } 19742 } 19743 } 19744 19745 func nextCharFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 19746 bp := tls.Alloc(136) 19747 defer tls.Free(136) 19748 19749 var zTable uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 19750 var zField uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 19751 var zWhere uintptr 19752 var zCollName uintptr 19753 var zWhereClause uintptr = uintptr(0) 19754 var zColl uintptr = uintptr(0) 19755 var zSql uintptr 19756 var rc int32 19757 19758 libc.X__builtin___memset_chk(tls, bp+80, 0, uint64(unsafe.Sizeof(nextCharContext{})), libc.X__builtin_object_size(tls, bp+80, 0)) 19759 (*nextCharContext)(unsafe.Pointer(bp + 80)).Fdb = sqlite3.Xsqlite3_context_db_handle(tls, context) 19760 (*nextCharContext)(unsafe.Pointer(bp + 80)).FzPrefix = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 19761 (*nextCharContext)(unsafe.Pointer(bp + 80)).FnPrefix = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 19762 if zTable == uintptr(0) || zField == uintptr(0) || (*nextCharContext)(unsafe.Pointer(bp+80)).FzPrefix == uintptr(0) { 19763 return 19764 } 19765 if argc >= 4 && 19766 libc.AssignUintptr(&zWhere, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) != uintptr(0) && 19767 int32(*(*uint8)(unsafe.Pointer(zWhere))) != 0 { 19768 zWhereClause = sqlite3.Xsqlite3_mprintf(tls, ts+5706, libc.VaList(bp, zWhere)) 19769 if zWhereClause == uintptr(0) { 19770 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19771 return 19772 } 19773 } else { 19774 zWhereClause = ts + 584 19775 } 19776 if argc >= 5 && 19777 libc.AssignUintptr(&zCollName, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)))) != uintptr(0) && 19778 int32(*(*uint8)(unsafe.Pointer(zCollName))) != 0 { 19779 zColl = sqlite3.Xsqlite3_mprintf(tls, ts+5715, libc.VaList(bp+8, zCollName)) 19780 if zColl == uintptr(0) { 19781 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19782 if *(*int8)(unsafe.Pointer(zWhereClause)) != 0 { 19783 sqlite3.Xsqlite3_free(tls, zWhereClause) 19784 } 19785 return 19786 } 19787 } else { 19788 zColl = ts + 584 19789 } 19790 zSql = sqlite3.Xsqlite3_mprintf(tls, 19791 ts+5728, 19792 libc.VaList(bp+16, zField, zTable, zField, zColl, zField, zColl, zWhereClause, zColl)) 19793 if *(*int8)(unsafe.Pointer(zWhereClause)) != 0 { 19794 sqlite3.Xsqlite3_free(tls, zWhereClause) 19795 } 19796 if *(*int8)(unsafe.Pointer(zColl)) != 0 { 19797 sqlite3.Xsqlite3_free(tls, zColl) 19798 } 19799 if zSql == uintptr(0) { 19800 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19801 return 19802 } 19803 19804 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).Fdb, zSql, -1, bp+80+8, uintptr(0)) 19805 sqlite3.Xsqlite3_free(tls, zSql) 19806 if rc != 0 { 19807 sqlite3.Xsqlite3_result_error(tls, context, sqlite3.Xsqlite3_errmsg(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).Fdb), -1) 19808 return 19809 } 19810 findNextChars(tls, bp+80) 19811 if (*nextCharContext)(unsafe.Pointer(bp+80)).FmallocFailed != 0 { 19812 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19813 } else { 19814 var pRes uintptr 19815 pRes = sqlite3.Xsqlite3_malloc64(tls, uint64((*nextCharContext)(unsafe.Pointer(bp+80)).FnUsed*4+1)) 19816 if pRes == uintptr(0) { 19817 sqlite3.Xsqlite3_result_error_nomem(tls, context) 19818 } else { 19819 var i int32 19820 var n int32 = 0 19821 for i = 0; i < (*nextCharContext)(unsafe.Pointer(bp+80)).FnUsed; i++ { 19822 n = n + writeUtf8(tls, pRes+uintptr(n), *(*uint32)(unsafe.Pointer((*nextCharContext)(unsafe.Pointer(bp+80)).FaResult + uintptr(i)*4))) 19823 } 19824 *(*uint8)(unsafe.Pointer(pRes + uintptr(n))) = uint8(0) 19825 sqlite3.Xsqlite3_result_text(tls, context, pRes, n, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 19826 } 19827 } 19828 sqlite3.Xsqlite3_finalize(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).FpStmt) 19829 sqlite3.Xsqlite3_free(tls, (*nextCharContext)(unsafe.Pointer(bp+80)).FaResult) 19830 } 19831 19832 func sqlite3_nextchar_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 19833 var rc int32 = SQLITE_OK 19834 _ = pApi 19835 19836 _ = pzErrMsg 19837 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 3, 19838 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 19839 *(*uintptr)(unsafe.Pointer(&struct { 19840 f func(*libc.TLS, uintptr, int32, uintptr) 19841 }{nextCharFunc})), uintptr(0), uintptr(0)) 19842 if rc == SQLITE_OK { 19843 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 4, 19844 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 19845 *(*uintptr)(unsafe.Pointer(&struct { 19846 f func(*libc.TLS, uintptr, int32, uintptr) 19847 }{nextCharFunc})), uintptr(0), uintptr(0)) 19848 } 19849 if rc == SQLITE_OK { 19850 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+5836, 5, 19851 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 19852 *(*uintptr)(unsafe.Pointer(&struct { 19853 f func(*libc.TLS, uintptr, int32, uintptr) 19854 }{nextCharFunc})), uintptr(0), uintptr(0)) 19855 } 19856 return rc 19857 } 19858 19859 var aiClass = [256]uint8{ 19860 uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(7), uint8(7), uint8(27), uint8(7), uint8(7), uint8(27), uint8(27), 19861 uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), uint8(27), 19862 uint8(7), uint8(15), uint8(8), uint8(5), uint8(4), uint8(22), uint8(24), uint8(8), uint8(17), uint8(18), uint8(21), uint8(20), uint8(23), uint8(11), uint8(26), uint8(16), 19863 uint8(3), uint8(3), uint8(3), uint8(3), uint8(3), uint8(3), uint8(3), uint8(3), uint8(3), uint8(3), uint8(5), uint8(19), uint8(12), uint8(14), uint8(13), uint8(6), 19864 uint8(5), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), 19865 uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(0), uint8(1), uint8(1), uint8(9), uint8(27), uint8(27), uint8(27), uint8(1), 19866 uint8(8), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), 19867 uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(1), uint8(0), uint8(1), uint8(1), uint8(27), uint8(10), uint8(27), uint8(25), uint8(27), 19868 uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), 19869 uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), 19870 uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), 19871 uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), 19872 uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), 19873 uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), 19874 uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), 19875 uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), uint8(2), 19876 } 19877 19878 var sqlite3UpperToLower = [256]uint8{ 19879 uint8(0), uint8(1), uint8(2), uint8(3), uint8(4), uint8(5), uint8(6), uint8(7), uint8(8), uint8(9), uint8(10), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(17), 19880 uint8(18), uint8(19), uint8(20), uint8(21), uint8(22), uint8(23), uint8(24), uint8(25), uint8(26), uint8(27), uint8(28), uint8(29), uint8(30), uint8(31), uint8(32), uint8(33), uint8(34), uint8(35), 19881 uint8(36), uint8(37), uint8(38), uint8(39), uint8(40), uint8(41), uint8(42), uint8(43), uint8(44), uint8(45), uint8(46), uint8(47), uint8(48), uint8(49), uint8(50), uint8(51), uint8(52), uint8(53), 19882 uint8(54), uint8(55), uint8(56), uint8(57), uint8(58), uint8(59), uint8(60), uint8(61), uint8(62), uint8(63), uint8(64), uint8(97), uint8(98), uint8(99), uint8(100), uint8(101), uint8(102), uint8(103), 19883 uint8(104), uint8(105), uint8(106), uint8(107), uint8(108), uint8(109), uint8(110), uint8(111), uint8(112), uint8(113), uint8(114), uint8(115), uint8(116), uint8(117), uint8(118), uint8(119), uint8(120), uint8(121), 19884 uint8(122), uint8(91), uint8(92), uint8(93), uint8(94), uint8(95), uint8(96), uint8(97), uint8(98), uint8(99), uint8(100), uint8(101), uint8(102), uint8(103), uint8(104), uint8(105), uint8(106), uint8(107), 19885 uint8(108), uint8(109), uint8(110), uint8(111), uint8(112), uint8(113), uint8(114), uint8(115), uint8(116), uint8(117), uint8(118), uint8(119), uint8(120), uint8(121), uint8(122), uint8(123), uint8(124), uint8(125), 19886 uint8(126), uint8(127), uint8(128), uint8(129), uint8(130), uint8(131), uint8(132), uint8(133), uint8(134), uint8(135), uint8(136), uint8(137), uint8(138), uint8(139), uint8(140), uint8(141), uint8(142), uint8(143), 19887 uint8(144), uint8(145), uint8(146), uint8(147), uint8(148), uint8(149), uint8(150), uint8(151), uint8(152), uint8(153), uint8(154), uint8(155), uint8(156), uint8(157), uint8(158), uint8(159), uint8(160), uint8(161), 19888 uint8(162), uint8(163), uint8(164), uint8(165), uint8(166), uint8(167), uint8(168), uint8(169), uint8(170), uint8(171), uint8(172), uint8(173), uint8(174), uint8(175), uint8(176), uint8(177), uint8(178), uint8(179), 19889 uint8(180), uint8(181), uint8(182), uint8(183), uint8(184), uint8(185), uint8(186), uint8(187), uint8(188), uint8(189), uint8(190), uint8(191), uint8(192), uint8(193), uint8(194), uint8(195), uint8(196), uint8(197), 19890 uint8(198), uint8(199), uint8(200), uint8(201), uint8(202), uint8(203), uint8(204), uint8(205), uint8(206), uint8(207), uint8(208), uint8(209), uint8(210), uint8(211), uint8(212), uint8(213), uint8(214), uint8(215), 19891 uint8(216), uint8(217), uint8(218), uint8(219), uint8(220), uint8(221), uint8(222), uint8(223), uint8(224), uint8(225), uint8(226), uint8(227), uint8(228), uint8(229), uint8(230), uint8(231), uint8(232), uint8(233), 19892 uint8(234), uint8(235), uint8(236), uint8(237), uint8(238), uint8(239), uint8(240), uint8(241), uint8(242), uint8(243), uint8(244), uint8(245), uint8(246), uint8(247), uint8(248), uint8(249), uint8(250), uint8(251), 19893 uint8(252), uint8(253), uint8(254), uint8(255), 19894 } 19895 19896 var sqlite3CtypeMap = [256]uint8{ 19897 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 19898 uint8(0x00), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x01), uint8(0x00), uint8(0x00), 19899 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 19900 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 19901 uint8(0x01), uint8(0x00), uint8(0x80), uint8(0x00), uint8(0x40), uint8(0x00), uint8(0x00), uint8(0x80), 19902 uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 19903 uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), uint8(0x0c), 19904 uint8(0x0c), uint8(0x0c), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 19905 uint8(0x00), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x0a), uint8(0x02), 19906 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), 19907 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x02), 19908 uint8(0x02), uint8(0x02), uint8(0x02), uint8(0x80), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x40), 19909 uint8(0x80), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x2a), uint8(0x22), 19910 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), 19911 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x22), 19912 uint8(0x22), uint8(0x22), uint8(0x22), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), uint8(0x00), 19913 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19914 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19915 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19916 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19917 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19918 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19919 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19920 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19921 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19922 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19923 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19924 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19925 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19926 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19927 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19928 uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), uint8(0x40), 19929 } 19930 19931 func sqlite3GetToken(tls *libc.TLS, z uintptr, tokenType uintptr) int32 { 19932 var i int32 19933 var c int32 19934 switch int32(aiClass[*(*uint8)(unsafe.Pointer(z))]) { 19935 case CC_SPACE: 19936 { 19937 for i = 1; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x01 != 0; i++ { 19938 } 19939 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 19940 return i 19941 19942 } 19943 case CC_MINUS: 19944 { 19945 if int32(*(*uint8)(unsafe.Pointer(z + 1))) == '-' { 19946 for i = 2; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0 && c != '\n'; i++ { 19947 } 19948 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 19949 return i 19950 } 19951 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 19952 return 1 19953 19954 } 19955 case CC_LP: 19956 { 19957 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 19958 return 1 19959 19960 } 19961 case CC_RP: 19962 { 19963 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 19964 return 1 19965 19966 } 19967 case CC_SEMI: 19968 { 19969 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 19970 return 1 19971 19972 } 19973 case CC_PLUS: 19974 { 19975 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 19976 return 1 19977 19978 } 19979 case CC_STAR: 19980 { 19981 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 19982 return 1 19983 19984 } 19985 case CC_SLASH: 19986 { 19987 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '*' || int32(*(*uint8)(unsafe.Pointer(z + 2))) == 0 { 19988 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 19989 return 1 19990 } 19991 i = 3 19992 c = int32(*(*uint8)(unsafe.Pointer(z + 2))) 19993 for ; (c != '*' || int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '/') && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 19994 } 19995 if c != 0 { 19996 i++ 19997 } 19998 *(*int32)(unsafe.Pointer(tokenType)) = TK_SPACE 19999 return i 20000 20001 } 20002 case CC_PERCENT: 20003 { 20004 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20005 return 1 20006 20007 } 20008 case CC_EQ: 20009 { 20010 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20011 return 1 + libc.Bool32(int32(*(*uint8)(unsafe.Pointer(z + 1))) == '=') 20012 20013 } 20014 case CC_LT: 20015 { 20016 if libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + 1)))) == '=' { 20017 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20018 return 2 20019 } else if c == '>' { 20020 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20021 return 2 20022 } else if c == '<' { 20023 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20024 return 2 20025 } else { 20026 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20027 return 1 20028 } 20029 20030 } 20031 fallthrough 20032 case CC_GT: 20033 { 20034 if libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + 1)))) == '=' { 20035 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20036 return 2 20037 } else if c == '>' { 20038 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20039 return 2 20040 } else { 20041 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20042 return 1 20043 } 20044 20045 } 20046 fallthrough 20047 case CC_BANG: 20048 { 20049 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '=' { 20050 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 20051 return 1 20052 } else { 20053 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20054 return 2 20055 } 20056 20057 } 20058 fallthrough 20059 case CC_PIPE: 20060 { 20061 if int32(*(*uint8)(unsafe.Pointer(z + 1))) != '|' { 20062 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20063 return 1 20064 } else { 20065 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20066 return 2 20067 } 20068 20069 } 20070 fallthrough 20071 case CC_COMMA: 20072 { 20073 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20074 return 1 20075 20076 } 20077 case CC_AND: 20078 { 20079 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20080 return 1 20081 20082 } 20083 case CC_TILDA: 20084 { 20085 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20086 return 1 20087 20088 } 20089 case CC_QUOTE: 20090 { 20091 var delim int32 = int32(*(*uint8)(unsafe.Pointer(z))) 20092 20093 for i = 1; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 20094 if c == delim { 20095 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == delim { 20096 i++ 20097 } else { 20098 break 20099 } 20100 } 20101 } 20102 if c == '\'' { 20103 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 20104 return i + 1 20105 } else if c != 0 { 20106 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 20107 return i + 1 20108 } else { 20109 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 20110 return i 20111 } 20112 20113 } 20114 fallthrough 20115 case CC_DOT: 20116 { 20117 if !(int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + 1))])&0x04 != 0) { 20118 *(*int32)(unsafe.Pointer(tokenType)) = TK_PUNCT 20119 return 1 20120 } 20121 20122 } 20123 fallthrough 20124 case CC_DIGIT: 20125 { 20126 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 20127 if int32(*(*uint8)(unsafe.Pointer(z))) == '0' && (int32(*(*uint8)(unsafe.Pointer(z + 1))) == 'x' || int32(*(*uint8)(unsafe.Pointer(z + 1))) == 'X') && int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + 2))])&0x08 != 0 { 20128 for i = 3; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x08 != 0; i++ { 20129 } 20130 return i 20131 } 20132 for i = 0; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0; i++ { 20133 } 20134 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == '.' { 20135 i++ 20136 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0 { 20137 i++ 20138 } 20139 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 20140 } 20141 if (int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == 'e' || int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) == 'E') && (int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))])&0x04 != 0 || 20142 (int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == '+' || int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == '-') && int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i+2)))])&0x04 != 0) { 20143 i = i + 2 20144 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0 { 20145 i++ 20146 } 20147 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 20148 } 20149 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 20150 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 20151 i++ 20152 } 20153 return i 20154 20155 } 20156 case CC_QUOTE2: 20157 { 20158 i = 1 20159 c = int32(*(*uint8)(unsafe.Pointer(z))) 20160 for ; c != ']' && libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 20161 } 20162 *(*int32)(unsafe.Pointer(tokenType)) = func() int32 { 20163 if c == ']' { 20164 return TK_NAME 20165 } 20166 return TK_ERROR 20167 }() 20168 return i 20169 20170 } 20171 case CC_VARNUM: 20172 { 20173 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 20174 for i = 1; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x04 != 0; i++ { 20175 } 20176 return i 20177 20178 } 20179 case CC_DOLLAR: 20180 fallthrough 20181 case CC_VARALPHA: 20182 { 20183 var n int32 = 0 20184 20185 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 20186 for i = 1; libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0; i++ { 20187 if int32(sqlite3CtypeMap[uint8(c)])&0x46 != 0 { 20188 n++ 20189 } else if c == '(' && n > 0 { 20190 for __ccgo := true; __ccgo; __ccgo = libc.AssignInt32(&c, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))) != 0 && !(int32(sqlite3CtypeMap[uint8(c)])&0x01 != 0) && c != ')' { 20191 i++ 20192 } 20193 if c == ')' { 20194 i++ 20195 } else { 20196 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 20197 } 20198 break 20199 } else if c == ':' && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i+1)))) == ':' { 20200 i++ 20201 } else { 20202 break 20203 } 20204 } 20205 if n == 0 { 20206 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 20207 } 20208 return i 20209 20210 } 20211 case CC_KYWD: 20212 { 20213 for i = 1; int32(aiClass[*(*uint8)(unsafe.Pointer(z + uintptr(i)))]) <= CC_KYWD; i++ { 20214 } 20215 if int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 20216 i++ 20217 break 20218 } 20219 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 20220 return i 20221 20222 } 20223 case CC_X: 20224 { 20225 if int32(*(*uint8)(unsafe.Pointer(z + 1))) == '\'' { 20226 *(*int32)(unsafe.Pointer(tokenType)) = TK_LITERAL 20227 for i = 2; int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x08 != 0; i++ { 20228 } 20229 if int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '\'' || i%2 != 0 { 20230 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 20231 for *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0 && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) != '\'' { 20232 i++ 20233 } 20234 } 20235 if *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0 { 20236 i++ 20237 } 20238 return i 20239 } 20240 20241 } 20242 fallthrough 20243 case CC_ID: 20244 { 20245 i = 1 20246 break 20247 20248 } 20249 default: 20250 { 20251 *(*int32)(unsafe.Pointer(tokenType)) = TK_ERROR 20252 return 1 20253 20254 } 20255 } 20256 for int32(sqlite3CtypeMap[*(*uint8)(unsafe.Pointer(z + uintptr(i)))])&0x46 != 0 { 20257 i++ 20258 } 20259 *(*int32)(unsafe.Pointer(tokenType)) = TK_NAME 20260 return i 20261 } 20262 20263 func sqlite3_normalize(tls *libc.TLS, zSql uintptr) uintptr { 20264 bp := tls.Alloc(4) 20265 defer tls.Free(4) 20266 20267 var z uintptr 20268 var nZ sqlite3_int64 20269 var nSql sqlite3_int64 20270 var i int32 20271 var j int32 20272 20273 var n int32 20274 var k int32 20275 20276 nSql = sqlite3_int64(libc.Xstrlen(tls, zSql)) 20277 nZ = nSql 20278 z = sqlite3.Xsqlite3_malloc64(tls, uint64(nZ+int64(2))) 20279 if z == uintptr(0) { 20280 return uintptr(0) 20281 } 20282 for i = libc.AssignInt32(&j, 0); *(*int8)(unsafe.Pointer(zSql + uintptr(i))) != 0; i = i + n { 20283 n = sqlite3GetToken(tls, zSql+uintptr(i), bp) 20284 switch *(*int32)(unsafe.Pointer(bp)) { 20285 case TK_SPACE: 20286 { 20287 break 20288 20289 } 20290 case TK_ERROR: 20291 { 20292 sqlite3.Xsqlite3_free(tls, z) 20293 return uintptr(0) 20294 20295 } 20296 case TK_LITERAL: 20297 { 20298 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 20299 break 20300 20301 } 20302 case TK_PUNCT: 20303 fallthrough 20304 case TK_NAME: 20305 { 20306 if n == 4 && sqlite3.Xsqlite3_strnicmp(tls, zSql+uintptr(i), ts+5846, 4) == 0 { 20307 if j >= 3 && libc.Xstrncmp(tls, z+uintptr(j)-uintptr(2), ts+5851, uint64(2)) == 0 && !(int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z + uintptr(j-3))))])&0x46 != 0) || 20308 j >= 4 && libc.Xstrncmp(tls, z+uintptr(j)-uintptr(3), ts+5854, uint64(3)) == 0 && !(int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z + uintptr(j-4))))])&0x46 != 0) { 20309 } else { 20310 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 20311 break 20312 } 20313 } 20314 if j > 0 && int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z + uintptr(j-1))))])&0x46 != 0 && int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zSql + uintptr(i))))])&0x46 != 0 { 20315 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(' ') 20316 } 20317 for k = 0; k < n; k++ { 20318 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(sqlite3UpperToLower[uint8(*(*int8)(unsafe.Pointer(zSql + uintptr(i+k))))]) 20319 } 20320 break 20321 20322 } 20323 } 20324 } 20325 for j > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(j-1)))) == ' ' { 20326 j-- 20327 } 20328 if j > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(j-1)))) != ';' { 20329 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(';') 20330 } 20331 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 20332 20333 for i = 0; i < j; i = n { 20334 var zIn uintptr = libc.Xstrstr(tls, z+uintptr(i), ts+5858) 20335 var nParen int32 20336 if zIn == uintptr(0) { 20337 break 20338 } 20339 n = int32((int64(zIn)-int64(z))/1) + 3 20340 if n != 0 && int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + libc.UintptrFromInt32(-1))))])&0x46 != 0 { 20341 continue 20342 } 20343 if libc.Xstrncmp(tls, zIn, ts+5862, uint64(9)) == 0 && !(int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + 9)))])&0x46 != 0) { 20344 continue 20345 } 20346 if libc.Xstrncmp(tls, zIn, ts+5872, uint64(7)) == 0 && !(int32(sqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(zIn + 7)))])&0x46 != 0) { 20347 continue 20348 } 20349 nParen = 1 20350 k = 0 20351 for ; *(*int8)(unsafe.Pointer(z + uintptr(n+k))) != 0; k++ { 20352 if int32(*(*int8)(unsafe.Pointer(z + uintptr(n+k)))) == '(' { 20353 nParen++ 20354 } 20355 if int32(*(*int8)(unsafe.Pointer(z + uintptr(n+k)))) == ')' { 20356 nParen-- 20357 if nParen == 0 { 20358 break 20359 } 20360 } 20361 } 20362 20363 if k < 5 { 20364 z = sqlite3.Xsqlite3_realloc64(tls, z, uint64(j+(5-k)+1)) 20365 if z == uintptr(0) { 20366 return uintptr(0) 20367 } 20368 libc.X__builtin___memmove_chk(tls, z+uintptr(n)+uintptr(5), z+uintptr(n)+uintptr(k), uint64(j-(n+k)), libc.X__builtin_object_size(tls, z+uintptr(n)+uintptr(5), 0)) 20369 } else if k > 5 { 20370 libc.X__builtin___memmove_chk(tls, z+uintptr(n)+uintptr(5), z+uintptr(n)+uintptr(k), uint64(j-(n+k)), libc.X__builtin_object_size(tls, z+uintptr(n)+uintptr(5), 0)) 20371 } 20372 j = j - k + 5 20373 *(*int8)(unsafe.Pointer(z + uintptr(j))) = int8(0) 20374 libc.X__builtin___memcpy_chk(tls, z+uintptr(n), ts+5880, uint64(5), libc.X__builtin_object_size(tls, z+uintptr(n), 0)) 20375 } 20376 return z 20377 } 20378 20379 type Percentile1 = struct { 20380 FnAlloc uint32 20381 FnUsed uint32 20382 FrPct float64 20383 Fa uintptr 20384 } 20385 20386 type Percentile = Percentile1 20387 20388 func isInfinity(tls *libc.TLS, r float64) int32 { 20389 bp := tls.Alloc(16) 20390 defer tls.Free(16) 20391 *(*float64)(unsafe.Pointer(bp + 8)) = r 20392 20393 libc.X__builtin___memcpy_chk(tls, bp, bp+8, uint64(unsafe.Sizeof(sqlite3_uint64(0))), libc.X__builtin_object_size(tls, bp, 0)) 20394 return libc.Bool32(*(*sqlite3_uint64)(unsafe.Pointer(bp))>>52&uint64(0x7ff) == uint64(0x7ff)) 20395 } 20396 20397 func sameValue(tls *libc.TLS, a float64, b float64) int32 { 20398 a = a - b 20399 return libc.Bool32(a >= -0.001 && a <= 0.001) 20400 } 20401 20402 func percentStep(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 20403 var p uintptr 20404 var rPct float64 20405 var eType int32 20406 var y float64 20407 20408 eType = sqlite3.Xsqlite3_value_numeric_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 20409 rPct = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 20410 if eType != SQLITE_INTEGER && eType != SQLITE_FLOAT || 20411 rPct < 0.0 || rPct > 100.0 { 20412 sqlite3.Xsqlite3_result_error(tls, pCtx, 20413 ts+5886, -1) 20414 return 20415 } 20416 20417 p = sqlite3.Xsqlite3_aggregate_context(tls, pCtx, int32(unsafe.Sizeof(Percentile{}))) 20418 if p == uintptr(0) { 20419 return 20420 } 20421 20422 if (*Percentile)(unsafe.Pointer(p)).FrPct == 0.0 { 20423 (*Percentile)(unsafe.Pointer(p)).FrPct = rPct + 1.0 20424 } else if !(sameValue(tls, (*Percentile)(unsafe.Pointer(p)).FrPct, rPct+1.0) != 0) { 20425 sqlite3.Xsqlite3_result_error(tls, pCtx, 20426 ts+5953, -1) 20427 return 20428 } 20429 20430 eType = sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) 20431 if eType == SQLITE_NULL { 20432 return 20433 } 20434 20435 if eType != SQLITE_INTEGER && eType != SQLITE_FLOAT { 20436 sqlite3.Xsqlite3_result_error(tls, pCtx, 20437 ts+6017, -1) 20438 return 20439 } 20440 20441 y = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 20442 if isInfinity(tls, y) != 0 { 20443 sqlite3.Xsqlite3_result_error(tls, pCtx, ts+6061, -1) 20444 return 20445 } 20446 20447 if (*Percentile)(unsafe.Pointer(p)).FnUsed >= (*Percentile)(unsafe.Pointer(p)).FnAlloc { 20448 var n uint32 = (*Percentile)(unsafe.Pointer(p)).FnAlloc*uint32(2) + uint32(250) 20449 var a uintptr = sqlite3.Xsqlite3_realloc64(tls, (*Percentile)(unsafe.Pointer(p)).Fa, uint64(unsafe.Sizeof(float64(0)))*uint64(n)) 20450 if a == uintptr(0) { 20451 sqlite3.Xsqlite3_free(tls, (*Percentile)(unsafe.Pointer(p)).Fa) 20452 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(Percentile{})), libc.X__builtin_object_size(tls, p, 0)) 20453 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 20454 return 20455 } 20456 (*Percentile)(unsafe.Pointer(p)).FnAlloc = n 20457 (*Percentile)(unsafe.Pointer(p)).Fa = a 20458 } 20459 *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(libc.PostIncUint32(&(*Percentile)(unsafe.Pointer(p)).FnUsed, 1))*8)) = y 20460 } 20461 20462 func doubleCmp(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 20463 var a float64 = *(*float64)(unsafe.Pointer(pA)) 20464 var b float64 = *(*float64)(unsafe.Pointer(pB)) 20465 if a == b { 20466 return 0 20467 } 20468 if a < b { 20469 return -1 20470 } 20471 return +1 20472 } 20473 20474 func percentFinal(tls *libc.TLS, pCtx uintptr) { 20475 var p uintptr 20476 var i1 uint32 20477 var i2 uint32 20478 var v1 float64 20479 var v2 float64 20480 var ix float64 20481 var vx float64 20482 p = sqlite3.Xsqlite3_aggregate_context(tls, pCtx, 0) 20483 if p == uintptr(0) { 20484 return 20485 } 20486 if (*Percentile)(unsafe.Pointer(p)).Fa == uintptr(0) { 20487 return 20488 } 20489 if (*Percentile)(unsafe.Pointer(p)).FnUsed != 0 { 20490 libc.Xqsort(tls, (*Percentile)(unsafe.Pointer(p)).Fa, uint64((*Percentile)(unsafe.Pointer(p)).FnUsed), uint64(unsafe.Sizeof(float64(0))), *(*uintptr)(unsafe.Pointer(&struct { 20491 f func(*libc.TLS, uintptr, uintptr) int32 20492 }{doubleCmp}))) 20493 ix = ((*Percentile)(unsafe.Pointer(p)).FrPct - 1.0) * float64((*Percentile)(unsafe.Pointer(p)).FnUsed-uint32(1)) * 0.01 20494 i1 = uint32(ix) 20495 if ix == float64(i1) || i1 == (*Percentile)(unsafe.Pointer(p)).FnUsed-uint32(1) { 20496 i2 = i1 20497 } else { 20498 i2 = i1 + uint32(1) 20499 } 20500 v1 = *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(i1)*8)) 20501 v2 = *(*float64)(unsafe.Pointer((*Percentile)(unsafe.Pointer(p)).Fa + uintptr(i2)*8)) 20502 vx = v1 + (v2-v1)*(ix-float64(i1)) 20503 sqlite3.Xsqlite3_result_double(tls, pCtx, vx) 20504 } 20505 sqlite3.Xsqlite3_free(tls, (*Percentile)(unsafe.Pointer(p)).Fa) 20506 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(Percentile{})), libc.X__builtin_object_size(tls, p, 0)) 20507 } 20508 20509 func sqlite3_percentile_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 20510 var rc int32 = SQLITE_OK 20511 _ = pApi 20512 20513 _ = pzErrMsg 20514 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6087, 2, 20515 SQLITE_UTF8|SQLITE_INNOCUOUS, uintptr(0), 20516 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 20517 f func(*libc.TLS, uintptr, int32, uintptr) 20518 }{percentStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{percentFinal}))) 20519 return rc 20520 } 20521 20522 type prefixes_vtab1 = struct{ Fbase sqlite3_vtab } 20523 20524 type prefixes_vtab = prefixes_vtab1 20525 20526 type prefixes_cursor1 = struct { 20527 Fbase sqlite3_vtab_cursor 20528 FiRowid sqlite3_int64 20529 FzStr uintptr 20530 FnStr int32 20531 F__ccgo_pad1 [4]byte 20532 } 20533 20534 type prefixes_cursor = prefixes_cursor1 20535 20536 func prefixesConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 20537 var pNew uintptr 20538 var rc int32 20539 20540 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 20541 ts+6098) 20542 if rc == SQLITE_OK { 20543 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(prefixes_vtab{}))) 20544 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 20545 if pNew == uintptr(0) { 20546 return SQLITE_NOMEM 20547 } 20548 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(prefixes_vtab{})), libc.X__builtin_object_size(tls, pNew, 0)) 20549 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 20550 } 20551 return rc 20552 } 20553 20554 func prefixesDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 20555 var p uintptr = pVtab 20556 sqlite3.Xsqlite3_free(tls, p) 20557 return SQLITE_OK 20558 } 20559 20560 func prefixesOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 20561 var pCur uintptr 20562 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(prefixes_cursor{}))) 20563 if pCur == uintptr(0) { 20564 return SQLITE_NOMEM 20565 } 20566 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(prefixes_cursor{})), libc.X__builtin_object_size(tls, pCur, 0)) 20567 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 20568 return SQLITE_OK 20569 } 20570 20571 func prefixesClose(tls *libc.TLS, cur uintptr) int32 { 20572 var pCur uintptr = cur 20573 sqlite3.Xsqlite3_free(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr) 20574 sqlite3.Xsqlite3_free(tls, pCur) 20575 return SQLITE_OK 20576 } 20577 20578 func prefixesNext(tls *libc.TLS, cur uintptr) int32 { 20579 var pCur uintptr = cur 20580 (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid++ 20581 return SQLITE_OK 20582 } 20583 20584 func prefixesColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 20585 var pCur uintptr = cur 20586 switch i { 20587 case 0: 20588 sqlite3.Xsqlite3_result_text(tls, ctx, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr, (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr-int32((*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid), 20589 uintptr(0)) 20590 break 20591 default: 20592 sqlite3.Xsqlite3_result_text(tls, ctx, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr, (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr, uintptr(0)) 20593 break 20594 } 20595 return SQLITE_OK 20596 } 20597 20598 func prefixesRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 20599 var pCur uintptr = cur 20600 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid 20601 return SQLITE_OK 20602 } 20603 20604 func prefixesEof(tls *libc.TLS, cur uintptr) int32 { 20605 var pCur uintptr = cur 20606 return libc.Bool32((*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid > sqlite3_int64((*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr)) 20607 } 20608 20609 func prefixesFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 20610 bp := tls.Alloc(8) 20611 defer tls.Free(8) 20612 20613 var pCur uintptr = pVtabCursor 20614 sqlite3.Xsqlite3_free(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr) 20615 if argc > 0 { 20616 (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))))) 20617 (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr = func() int32 { 20618 if (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr != 0 { 20619 return int32(libc.Xstrlen(tls, (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr)) 20620 } 20621 return 0 20622 }() 20623 } else { 20624 (*prefixes_cursor)(unsafe.Pointer(pCur)).FzStr = uintptr(0) 20625 (*prefixes_cursor)(unsafe.Pointer(pCur)).FnStr = 0 20626 } 20627 (*prefixes_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 20628 return SQLITE_OK 20629 } 20630 20631 func prefixesBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 20632 var i int32 20633 var p uintptr 20634 20635 i = 0 20636 p = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 20637 __1: 20638 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 20639 goto __3 20640 } 20641 { 20642 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn != 1 { 20643 goto __2 20644 } 20645 if int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) != SQLITE_INDEX_CONSTRAINT_EQ { 20646 goto __2 20647 } 20648 if !(int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable) != 0) { 20649 goto __2 20650 } 20651 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 20652 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 20653 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 20654 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(10) 20655 return SQLITE_OK 20656 20657 } 20658 goto __2 20659 __2: 20660 i++ 20661 p += 12 20662 goto __1 20663 goto __3 20664 __3: 20665 ; 20666 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1000000000) 20667 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1000000000) 20668 return SQLITE_OK 20669 } 20670 20671 var prefixesModule = sqlite3_module{ 20672 FxConnect: 0, 20673 FxBestIndex: 0, 20674 FxDisconnect: 0, 20675 FxOpen: 0, 20676 FxClose: 0, 20677 FxFilter: 0, 20678 FxNext: 0, 20679 FxEof: 0, 20680 FxColumn: 0, 20681 FxRowid: 0, 20682 } 20683 20684 func prefixLengthFunc(tls *libc.TLS, ctx uintptr, nVal int32, apVal uintptr) { 20685 var nByte int32 20686 var nRet int32 = 0 20687 var zL uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal))) 20688 var zR uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apVal + 1*8))) 20689 var nL int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal))) 20690 var nR int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal + 1*8))) 20691 var i int32 20692 20693 nByte = func() int32 { 20694 if nL > nR { 20695 return nL 20696 } 20697 return nR 20698 }() 20699 for i = 0; i < nByte; i++ { 20700 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i)))) != int32(*(*uint8)(unsafe.Pointer(zR + uintptr(i)))) { 20701 break 20702 } 20703 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i))))&0xC0 != 0x80 { 20704 nRet++ 20705 } 20706 } 20707 20708 if int32(*(*uint8)(unsafe.Pointer(zL + uintptr(i))))&0xC0 == 0x80 { 20709 nRet-- 20710 } 20711 sqlite3.Xsqlite3_result_int(tls, ctx, nRet) 20712 } 20713 20714 func sqlite3_prefixes_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 20715 var rc int32 = SQLITE_OK 20716 _ = pApi 20717 20718 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+6162, uintptr(unsafe.Pointer(&prefixesModule)), uintptr(0)) 20719 if rc == SQLITE_OK { 20720 rc = sqlite3.Xsqlite3_create_function(tls, 20721 db, ts+6171, 2, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 20722 f func(*libc.TLS, uintptr, int32, uintptr) 20723 }{prefixLengthFunc})), uintptr(0), uintptr(0)) 20724 } 20725 return rc 20726 } 20727 20728 type qpvtab_vtab1 = struct{ Fbase sqlite3_vtab } 20729 20730 type qpvtab_vtab = qpvtab_vtab1 20731 20732 type qpvtab_cursor1 = struct { 20733 Fbase sqlite3_vtab_cursor 20734 FiRowid sqlite3_int64 20735 FzData uintptr 20736 FnData int32 20737 Fflags int32 20738 } 20739 20740 type qpvtab_cursor = qpvtab_cursor1 20741 20742 var azColname = [13]uintptr{ 20743 ts + 6185, 20744 ts + 6188, 20745 ts + 6191, 20746 ts + 6194, 20747 ts + 6197, 20748 ts + 6200, 20749 ts + 6204, ts + 6206, ts + 6208, ts + 6210, ts + 6212, 20750 ts + 6214, 20751 ts + 584, 20752 } 20753 20754 func qpvtabConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 20755 var pNew uintptr 20756 var rc int32 20757 20758 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 20759 ts+6220) 20760 if rc == SQLITE_OK { 20761 pNew = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(qpvtab_vtab{}))) 20762 *(*uintptr)(unsafe.Pointer(ppVtab)) = pNew 20763 if pNew == uintptr(0) { 20764 return SQLITE_NOMEM 20765 } 20766 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(qpvtab_vtab{})), libc.X__builtin_object_size(tls, pNew, 0)) 20767 } 20768 return rc 20769 } 20770 20771 func qpvtabDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 20772 var p uintptr = pVtab 20773 sqlite3.Xsqlite3_free(tls, p) 20774 return SQLITE_OK 20775 } 20776 20777 func qpvtabOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 20778 var pCur uintptr 20779 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(qpvtab_cursor{}))) 20780 if pCur == uintptr(0) { 20781 return SQLITE_NOMEM 20782 } 20783 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(qpvtab_cursor{})), libc.X__builtin_object_size(tls, pCur, 0)) 20784 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 20785 return SQLITE_OK 20786 } 20787 20788 func qpvtabClose(tls *libc.TLS, cur uintptr) int32 { 20789 var pCur uintptr = cur 20790 sqlite3.Xsqlite3_free(tls, pCur) 20791 return SQLITE_OK 20792 } 20793 20794 func qpvtabNext(tls *libc.TLS, cur uintptr) int32 { 20795 var pCur uintptr = cur 20796 if (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid < sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData) { 20797 var z uintptr = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData + uintptr((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid) 20798 var zEnd uintptr = libc.Xstrchr(tls, z, '\n') 20799 if zEnd != 0 { 20800 zEnd++ 20801 } 20802 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid = sqlite3_int64(int32((int64(zEnd) - int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData)) / 1)) 20803 } 20804 return SQLITE_OK 20805 } 20806 20807 func qpvtabColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 20808 bp := tls.Alloc(1) 20809 defer tls.Free(1) 20810 20811 var pCur uintptr = cur 20812 if i >= QPVTAB_VN && i <= QPVTAB_RHS && (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid < sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData) { 20813 var z uintptr = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData + uintptr((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid) 20814 var zEnd uintptr 20815 var j int32 20816 j = QPVTAB_VN 20817 for 1 != 0 { 20818 zEnd = libc.Xstrchr(tls, z, func() int32 { 20819 if j == QPVTAB_RHS { 20820 return '\n' 20821 } 20822 return ',' 20823 }()) 20824 if j == i || zEnd == uintptr(0) { 20825 break 20826 } 20827 z = zEnd + uintptr(1) 20828 j++ 20829 } 20830 if zEnd == z { 20831 sqlite3.Xsqlite3_result_null(tls, ctx) 20832 } else if i == QPVTAB_IX || i == QPVTAB_OP || i == QPVTAB_UX { 20833 sqlite3.Xsqlite3_result_int(tls, ctx, libc.Xatoi(tls, z)) 20834 } else { 20835 sqlite3.Xsqlite3_result_text64(tls, ctx, z, uint64((int64(zEnd)-int64(z))/1), libc.UintptrFromInt32(-1), uint8(SQLITE_UTF8)) 20836 } 20837 } else if i >= QPVTAB_A && i <= QPVTAB_E { 20838 if (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags&0x001 != 0 { 20839 sqlite3.Xsqlite3_result_int(tls, ctx, i-QPVTAB_A+1) 20840 } else { 20841 *(*int8)(unsafe.Pointer(bp)) = int8('a' + i - QPVTAB_A) 20842 sqlite3.Xsqlite3_result_text64(tls, ctx, bp, uint64(1), libc.UintptrFromInt32(-1), uint8(SQLITE_UTF8)) 20843 } 20844 } else if i == QPVTAB_FLAGS { 20845 sqlite3.Xsqlite3_result_int(tls, ctx, (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags) 20846 } 20847 return SQLITE_OK 20848 } 20849 20850 func qpvtabRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 20851 var pCur uintptr = cur 20852 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid 20853 return SQLITE_OK 20854 } 20855 20856 func qpvtabEof(tls *libc.TLS, cur uintptr) int32 { 20857 var pCur uintptr = cur 20858 return libc.Bool32((*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid >= sqlite3_int64((*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData)) 20859 } 20860 20861 func qpvtabFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 20862 var pCur uintptr = pVtabCursor 20863 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(0) 20864 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FzData = idxStr 20865 (*qpvtab_cursor)(unsafe.Pointer(pCur)).FnData = int32(libc.Xstrlen(tls, idxStr)) 20866 (*qpvtab_cursor)(unsafe.Pointer(pCur)).Fflags = idxNum 20867 return SQLITE_OK 20868 } 20869 20870 func qpvtabStrAppendValue(tls *libc.TLS, pStr uintptr, pVal uintptr) { 20871 bp := tls.Alloc(25) 20872 defer tls.Free(25) 20873 20874 switch sqlite3.Xsqlite3_value_type(tls, pVal) { 20875 case SQLITE_NULL: 20876 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+5846, 0) 20877 break 20878 case SQLITE_INTEGER: 20879 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6325, libc.VaList(bp, sqlite3.Xsqlite3_value_int64(tls, pVal))) 20880 break 20881 case SQLITE_FLOAT: 20882 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6330, libc.VaList(bp+8, sqlite3.Xsqlite3_value_double(tls, pVal))) 20883 break 20884 case SQLITE_TEXT: 20885 { 20886 var i int32 20887 var a uintptr = sqlite3.Xsqlite3_value_text(tls, pVal) 20888 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 20889 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 20890 for i = 0; i < n; i++ { 20891 *(*int8)(unsafe.Pointer(bp + 24)) = *(*int8)(unsafe.Pointer(a + uintptr(i))) 20892 if int32(*(*int8)(unsafe.Pointer(bp + 24))) == '\n' { 20893 *(*int8)(unsafe.Pointer(bp + 24)) = int8(' ') 20894 } 20895 sqlite3.Xsqlite3_str_append(tls, pStr, bp+24, 1) 20896 if int32(*(*int8)(unsafe.Pointer(bp + 24))) == '\'' { 20897 sqlite3.Xsqlite3_str_append(tls, pStr, bp+24, 1) 20898 } 20899 } 20900 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 20901 break 20902 20903 } 20904 case SQLITE_BLOB: 20905 { 20906 var i int32 20907 var a uintptr = sqlite3.Xsqlite3_value_blob(tls, pVal) 20908 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 20909 sqlite3.Xsqlite3_str_append(tls, pStr, ts+6334, 2) 20910 for i = 0; i < n; i++ { 20911 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6337, libc.VaList(bp+16, int32(*(*uint8)(unsafe.Pointer(a + uintptr(i)))))) 20912 } 20913 sqlite3.Xsqlite3_str_append(tls, pStr, ts+5624, 1) 20914 break 20915 20916 } 20917 } 20918 } 20919 20920 func qpvtabBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 20921 bp := tls.Alloc(120) 20922 defer tls.Free(120) 20923 20924 var pStr uintptr = sqlite3.Xsqlite3_str_new(tls, uintptr(0)) 20925 var i int32 20926 var k int32 = 0 20927 var rc int32 20928 _ = rc 20929 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6342, libc.VaList(bp, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint)) 20930 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 20931 var iCol int32 = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).FiColumn 20932 var op int32 = int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop) 20933 if iCol == QPVTAB_FLAGS && (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 { 20934 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 20935 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, i, bp+112) 20936 20937 if *(*uintptr)(unsafe.Pointer(bp + 112)) != 0 { 20938 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(bp + 112))) 20939 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum&0x002 != 0 { 20940 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 20941 } 20942 } 20943 } 20944 if op == SQLITE_INDEX_CONSTRAINT_LIMIT || 20945 op == SQLITE_INDEX_CONSTRAINT_OFFSET { 20946 iCol = QPVTAB_NONE 20947 } 20948 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6362, 20949 libc.VaList(bp+8, i, 20950 azColname[iCol], 20951 op, 20952 int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable))) 20953 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 20954 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, i, bp+112) 20955 20956 if *(*uintptr)(unsafe.Pointer(bp + 112)) != 0 { 20957 qpvtabStrAppendValue(tls, pStr, *(*uintptr)(unsafe.Pointer(bp + 112))) 20958 } 20959 sqlite3.Xsqlite3_str_append(tls, pStr, ts+6387, 1) 20960 } 20961 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 20962 var iCol int32 = (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).FiColumn 20963 var op int32 = int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12)).Fop) 20964 if op == SQLITE_INDEX_CONSTRAINT_LIMIT || 20965 op == SQLITE_INDEX_CONSTRAINT_OFFSET { 20966 iCol = QPVTAB_NONE 20967 } 20968 if iCol >= QPVTAB_A && (*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(i)*12)).Fusable != 0 { 20969 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = libc.PreIncInt32(&k, 1) 20970 if iCol <= QPVTAB_FLAGS || (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum&0x004 != 0 { 20971 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 20972 } 20973 } 20974 } 20975 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6389, libc.VaList(bp+40, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy)) 20976 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy; i++ { 20977 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(i)*8)).FiColumn 20978 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6406, libc.VaList(bp+48, i, 20979 func() uintptr { 20980 if iCol >= 0 { 20981 return azColname[iCol] 20982 } 20983 return ts + 6427 20984 }(), 20985 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy+uintptr(i)*8)).Fdesc))) 20986 } 20987 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6433, 20988 libc.VaList(bp+72, sqlite3.Xsqlite3_vtab_distinct(tls, pIdxInfo))) 20989 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6463, libc.VaList(bp+80, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxFlags)) 20990 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6480, libc.VaList(bp+88, int32((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed))) 20991 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(10) 20992 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(10) 20993 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6496, libc.VaList(bp+96, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum)) 20994 sqlite3.Xsqlite3_str_appendf(tls, pStr, ts+6511, 20995 libc.VaList(bp+104, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed)) 20996 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = sqlite3.Xsqlite3_str_finish(tls, pStr) 20997 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 20998 return SQLITE_OK 20999 } 21000 21001 var qpvtabModule = sqlite3_module{ 21002 FxConnect: 0, 21003 FxBestIndex: 0, 21004 FxDisconnect: 0, 21005 FxOpen: 0, 21006 FxClose: 0, 21007 FxFilter: 0, 21008 FxNext: 0, 21009 FxEof: 0, 21010 FxColumn: 0, 21011 FxRowid: 0, 21012 } 21013 21014 func sqlite3_qpvtab_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 21015 var rc int32 = SQLITE_OK 21016 _ = pApi 21017 21018 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+6535, uintptr(unsafe.Pointer(&qpvtabModule)), uintptr(0)) 21019 return rc 21020 } 21021 21022 type ReStateNumber = uint16 21023 21024 type ReStateSet1 = struct { 21025 FnState uint32 21026 F__ccgo_pad1 [4]byte 21027 FaState uintptr 21028 } 21029 21030 type ReStateSet = ReStateSet1 21031 21032 type ReInput1 = struct { 21033 Fz uintptr 21034 Fi int32 21035 Fmx int32 21036 } 21037 21038 type ReInput = ReInput1 21039 21040 type ReCompiled1 = struct { 21041 FsIn ReInput 21042 FzErr uintptr 21043 FaOp uintptr 21044 FaArg uintptr 21045 FxNextChar uintptr 21046 FzInit [12]uint8 21047 FnInit int32 21048 FnState uint32 21049 FnAlloc uint32 21050 } 21051 21052 type ReCompiled = ReCompiled1 21053 21054 func re_add_state(tls *libc.TLS, pSet uintptr, newState int32) { 21055 var i uint32 21056 for i = uint32(0); i < (*ReStateSet)(unsafe.Pointer(pSet)).FnState; i++ { 21057 if int32(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pSet)).FaState + uintptr(i)*2))) == newState { 21058 return 21059 } 21060 } 21061 *(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pSet)).FaState + uintptr(libc.PostIncUint32(&(*ReStateSet)(unsafe.Pointer(pSet)).FnState, 1))*2)) = ReStateNumber(newState) 21062 } 21063 21064 func re_next_char(tls *libc.TLS, p uintptr) uint32 { 21065 var c uint32 21066 if (*ReInput)(unsafe.Pointer(p)).Fi >= (*ReInput)(unsafe.Pointer(p)).Fmx { 21067 return uint32(0) 21068 } 21069 c = uint32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*ReInput)(unsafe.Pointer(p)).Fi, 1))))) 21070 if c >= uint32(0x80) { 21071 if c&uint32(0xe0) == uint32(0xc0) && (*ReInput)(unsafe.Pointer(p)).Fi < (*ReInput)(unsafe.Pointer(p)).Fmx && int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi))))&0xc0 == 0x80 { 21072 c = c&uint32(0x1f)<<6 | uint32(int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*ReInput)(unsafe.Pointer(p)).Fi, 1)))))&0x3f) 21073 if c < uint32(0x80) { 21074 c = uint32(0xfffd) 21075 } 21076 } else if c&uint32(0xf0) == uint32(0xe0) && (*ReInput)(unsafe.Pointer(p)).Fi+1 < (*ReInput)(unsafe.Pointer(p)).Fmx && int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi))))&0xc0 == 0x80 && 21077 int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+1))))&0xc0 == 0x80 { 21078 c = c&uint32(0x0f)<<12 | uint32(int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi))))&0x3f<<6) | uint32(int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+1))))&0x3f) 21079 *(*int32)(unsafe.Pointer(p + 8)) += 2 21080 if c <= uint32(0x7ff) || c >= uint32(0xd800) && c <= uint32(0xdfff) { 21081 c = uint32(0xfffd) 21082 } 21083 } else if c&uint32(0xf8) == uint32(0xf0) && (*ReInput)(unsafe.Pointer(p)).Fi+3 < (*ReInput)(unsafe.Pointer(p)).Fmx && int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi))))&0xc0 == 0x80 && 21084 int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+1))))&0xc0 == 0x80 && int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+2))))&0xc0 == 0x80 { 21085 c = c&uint32(0x07)<<18 | uint32(int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi))))&0x3f<<12) | uint32(int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+1))))&0x3f<<6) | 21086 uint32(int32(*(*uint8)(unsafe.Pointer((*ReInput)(unsafe.Pointer(p)).Fz + uintptr((*ReInput)(unsafe.Pointer(p)).Fi+2))))&0x3f) 21087 *(*int32)(unsafe.Pointer(p + 8)) += 3 21088 if c <= uint32(0xffff) || c > uint32(0x10ffff) { 21089 c = uint32(0xfffd) 21090 } 21091 } else { 21092 c = uint32(0xfffd) 21093 } 21094 } 21095 return c 21096 } 21097 21098 func re_next_char_nocase(tls *libc.TLS, p uintptr) uint32 { 21099 var c uint32 = re_next_char(tls, p) 21100 if c >= uint32('A') && c <= uint32('Z') { 21101 c = c + uint32('a'-'A') 21102 } 21103 return c 21104 } 21105 21106 func re_word_char(tls *libc.TLS, c int32) int32 { 21107 return libc.Bool32(c >= '0' && c <= '9' || c >= 'a' && c <= 'z' || 21108 c >= 'A' && c <= 'Z' || c == '_') 21109 } 21110 21111 func re_digit_char(tls *libc.TLS, c int32) int32 { 21112 return libc.Bool32(c >= '0' && c <= '9') 21113 } 21114 21115 func re_space_char(tls *libc.TLS, c int32) int32 { 21116 return libc.Bool32(c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '\v' || c == '\f') 21117 } 21118 21119 func sqlite3re_match(tls *libc.TLS, pRe uintptr, zIn uintptr, nIn int32) int32 { 21120 bp := tls.Alloc(248) 21121 defer tls.Free(248) 21122 21123 var pThis uintptr 21124 var pNext uintptr 21125 21126 var pToFree uintptr 21127 var i uint32 21128 var iSwap uint32 21129 var c int32 21130 var cPrev int32 21131 var rc int32 21132 21133 var x uint8 21134 var j int32 21135 var n int32 21136 var hit int32 21137 var x1 int32 21138 i = uint32(0) 21139 iSwap = uint32(0) 21140 c = RE_EOF + 1 21141 cPrev = 0 21142 rc = 0 21143 21144 (*ReInput)(unsafe.Pointer(bp + 232)).Fz = zIn 21145 (*ReInput)(unsafe.Pointer(bp + 232)).Fi = 0 21146 (*ReInput)(unsafe.Pointer(bp + 232)).Fmx = func() int32 { 21147 if nIn >= 0 { 21148 return nIn 21149 } 21150 return int32(libc.Xstrlen(tls, zIn)) 21151 }() 21152 21153 if !((*ReCompiled)(unsafe.Pointer(pRe)).FnInit != 0) { 21154 goto __1 21155 } 21156 x = *(*uint8)(unsafe.Pointer(pRe + 48)) 21157 __2: 21158 if !((*ReInput)(unsafe.Pointer(bp+232)).Fi+(*ReCompiled)(unsafe.Pointer(pRe)).FnInit <= (*ReInput)(unsafe.Pointer(bp+232)).Fmx && 21159 (int32(*(*uint8)(unsafe.Pointer(zIn + uintptr((*ReInput)(unsafe.Pointer(bp+232)).Fi)))) != int32(x) || libc.Xstrncmp(tls, zIn+uintptr((*ReInput)(unsafe.Pointer(bp+232)).Fi), pRe+48, uint64((*ReCompiled)(unsafe.Pointer(pRe)).FnInit)) != 0)) { 21160 goto __3 21161 } 21162 (*ReInput)(unsafe.Pointer(bp+232)).Fi++ 21163 goto __2 21164 __3: 21165 ; 21166 if !((*ReInput)(unsafe.Pointer(bp+232)).Fi+(*ReCompiled)(unsafe.Pointer(pRe)).FnInit > (*ReInput)(unsafe.Pointer(bp+232)).Fmx) { 21167 goto __4 21168 } 21169 return 0 21170 __4: 21171 ; 21172 __1: 21173 ; 21174 if !(uint64((*ReCompiled)(unsafe.Pointer(pRe)).FnState) <= uint64(unsafe.Sizeof([100]ReStateNumber{}))/(uint64(unsafe.Sizeof(ReStateNumber(0)))*uint64(2))) { 21175 goto __5 21176 } 21177 pToFree = uintptr(0) 21178 (*ReStateSet)(unsafe.Pointer(bp)).FaState = bp + 32 21179 goto __6 21180 __5: 21181 pToFree = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(ReStateNumber(0)))*uint64(2)*uint64((*ReCompiled)(unsafe.Pointer(pRe)).FnState)) 21182 if !(pToFree == uintptr(0)) { 21183 goto __7 21184 } 21185 return -1 21186 __7: 21187 ; 21188 (*ReStateSet)(unsafe.Pointer(bp)).FaState = pToFree 21189 __6: 21190 ; 21191 (*ReStateSet)(unsafe.Pointer(bp + 1*16)).FaState = (*ReStateSet)(unsafe.Pointer(bp)).FaState + uintptr((*ReCompiled)(unsafe.Pointer(pRe)).FnState)*2 21192 pNext = bp + 1*16 21193 (*ReStateSet)(unsafe.Pointer(pNext)).FnState = uint32(0) 21194 re_add_state(tls, pNext, 0) 21195 __8: 21196 if !(c != RE_EOF && (*ReStateSet)(unsafe.Pointer(pNext)).FnState > uint32(0)) { 21197 goto __9 21198 } 21199 cPrev = c 21200 c = int32((*struct { 21201 f func(*libc.TLS, uintptr) uint32 21202 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(pRe)).FxNextChar})).f(tls, bp+232)) 21203 pThis = pNext 21204 pNext = bp + uintptr(iSwap)*16 21205 iSwap = uint32(1) - iSwap 21206 (*ReStateSet)(unsafe.Pointer(pNext)).FnState = uint32(0) 21207 i = uint32(0) 21208 __10: 21209 if !(i < (*ReStateSet)(unsafe.Pointer(pThis)).FnState) { 21210 goto __12 21211 } 21212 x1 = int32(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pThis)).FaState + uintptr(i)*2))) 21213 switch int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1)))) { 21214 case RE_OP_MATCH: 21215 goto __14 21216 case RE_OP_ANY: 21217 goto __15 21218 case RE_OP_WORD: 21219 goto __16 21220 case RE_OP_NOTWORD: 21221 goto __17 21222 case RE_OP_DIGIT: 21223 goto __18 21224 case RE_OP_NOTDIGIT: 21225 goto __19 21226 case RE_OP_SPACE: 21227 goto __20 21228 case RE_OP_NOTSPACE: 21229 goto __21 21230 case RE_OP_BOUNDARY: 21231 goto __22 21232 case RE_OP_ANYSTAR: 21233 goto __23 21234 case RE_OP_FORK: 21235 goto __24 21236 case RE_OP_GOTO: 21237 goto __25 21238 case RE_OP_ACCEPT: 21239 goto __26 21240 case RE_OP_CC_EXC: 21241 goto __27 21242 case RE_OP_CC_INC: 21243 goto __28 21244 } 21245 goto __13 21246 __14: 21247 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4)) == c) { 21248 goto __29 21249 } 21250 re_add_state(tls, pNext, x1+1) 21251 __29: 21252 ; 21253 goto __13 21254 21255 __15: 21256 if !(c != 0) { 21257 goto __30 21258 } 21259 re_add_state(tls, pNext, x1+1) 21260 __30: 21261 ; 21262 goto __13 21263 21264 __16: 21265 if !(re_word_char(tls, c) != 0) { 21266 goto __31 21267 } 21268 re_add_state(tls, pNext, x1+1) 21269 __31: 21270 ; 21271 goto __13 21272 21273 __17: 21274 if !(!(re_word_char(tls, c) != 0) && c != 0) { 21275 goto __32 21276 } 21277 re_add_state(tls, pNext, x1+1) 21278 __32: 21279 ; 21280 goto __13 21281 21282 __18: 21283 if !(re_digit_char(tls, c) != 0) { 21284 goto __33 21285 } 21286 re_add_state(tls, pNext, x1+1) 21287 __33: 21288 ; 21289 goto __13 21290 21291 __19: 21292 if !(!(re_digit_char(tls, c) != 0) && c != 0) { 21293 goto __34 21294 } 21295 re_add_state(tls, pNext, x1+1) 21296 __34: 21297 ; 21298 goto __13 21299 21300 __20: 21301 if !(re_space_char(tls, c) != 0) { 21302 goto __35 21303 } 21304 re_add_state(tls, pNext, x1+1) 21305 __35: 21306 ; 21307 goto __13 21308 21309 __21: 21310 if !(!(re_space_char(tls, c) != 0) && c != 0) { 21311 goto __36 21312 } 21313 re_add_state(tls, pNext, x1+1) 21314 __36: 21315 ; 21316 goto __13 21317 21318 __22: 21319 if !(re_word_char(tls, c) != re_word_char(tls, cPrev)) { 21320 goto __37 21321 } 21322 re_add_state(tls, pThis, x1+1) 21323 __37: 21324 ; 21325 goto __13 21326 21327 __23: 21328 re_add_state(tls, pNext, x1) 21329 re_add_state(tls, pThis, x1+1) 21330 goto __13 21331 21332 __24: 21333 re_add_state(tls, pThis, x1+*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4))) 21334 re_add_state(tls, pThis, x1+1) 21335 goto __13 21336 21337 __25: 21338 re_add_state(tls, pThis, x1+*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4))) 21339 goto __13 21340 21341 __26: 21342 rc = 1 21343 goto re_match_end 21344 21345 __27: 21346 if !(c == 0) { 21347 goto __38 21348 } 21349 goto __13 21350 __38: 21351 ; 21352 goto re_op_cc_inc 21353 21354 __28: 21355 re_op_cc_inc: 21356 j = 1 21357 n = *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1)*4)) 21358 hit = 0 21359 j = 1 21360 __39: 21361 if !(j > 0 && j < n) { 21362 goto __41 21363 } 21364 if !(int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1+j)))) == RE_OP_CC_VALUE) { 21365 goto __42 21366 } 21367 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1+j)*4)) == c) { 21368 goto __44 21369 } 21370 hit = 1 21371 j = -1 21372 __44: 21373 ; 21374 goto __43 21375 __42: 21376 if !(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1+j)*4)) <= c && *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(x1+j+1)*4)) >= c) { 21377 goto __45 21378 } 21379 hit = 1 21380 j = -1 21381 goto __46 21382 __45: 21383 j++ 21384 __46: 21385 ; 21386 __43: 21387 ; 21388 goto __40 21389 __40: 21390 j++ 21391 goto __39 21392 goto __41 21393 __41: 21394 ; 21395 if !(int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(x1)))) == RE_OP_CC_EXC) { 21396 goto __47 21397 } 21398 hit = libc.BoolInt32(!(hit != 0)) 21399 __47: 21400 ; 21401 if !(hit != 0) { 21402 goto __48 21403 } 21404 re_add_state(tls, pNext, x1+n) 21405 __48: 21406 ; 21407 goto __13 21408 21409 __13: 21410 ; 21411 goto __11 21412 __11: 21413 i++ 21414 goto __10 21415 goto __12 21416 __12: 21417 ; 21418 goto __8 21419 __9: 21420 ; 21421 i = uint32(0) 21422 __49: 21423 if !(i < (*ReStateSet)(unsafe.Pointer(pNext)).FnState) { 21424 goto __51 21425 } 21426 if !(int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(*(*ReStateNumber)(unsafe.Pointer((*ReStateSet)(unsafe.Pointer(pNext)).FaState + uintptr(i)*2)))))) == RE_OP_ACCEPT) { 21427 goto __52 21428 } 21429 rc = 1 21430 goto __51 21431 __52: 21432 ; 21433 goto __50 21434 __50: 21435 i++ 21436 goto __49 21437 goto __51 21438 __51: 21439 ; 21440 re_match_end: 21441 sqlite3.Xsqlite3_free(tls, pToFree) 21442 return rc 21443 } 21444 21445 func re_resize(tls *libc.TLS, p uintptr, N int32) int32 { 21446 var aOp uintptr 21447 var aArg uintptr 21448 aOp = sqlite3.Xsqlite3_realloc64(tls, (*ReCompiled)(unsafe.Pointer(p)).FaOp, uint64(N)*uint64(unsafe.Sizeof(int8(0)))) 21449 if aOp == uintptr(0) { 21450 return 1 21451 } 21452 (*ReCompiled)(unsafe.Pointer(p)).FaOp = aOp 21453 aArg = sqlite3.Xsqlite3_realloc64(tls, (*ReCompiled)(unsafe.Pointer(p)).FaArg, uint64(N)*uint64(unsafe.Sizeof(int32(0)))) 21454 if aArg == uintptr(0) { 21455 return 1 21456 } 21457 (*ReCompiled)(unsafe.Pointer(p)).FaArg = aArg 21458 (*ReCompiled)(unsafe.Pointer(p)).FnAlloc = uint32(N) 21459 return 0 21460 } 21461 21462 func re_insert(tls *libc.TLS, p uintptr, iBefore int32, op int32, arg int32) int32 { 21463 var i int32 21464 if (*ReCompiled)(unsafe.Pointer(p)).FnAlloc <= (*ReCompiled)(unsafe.Pointer(p)).FnState && re_resize(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnAlloc*uint32(2))) != 0 { 21465 return 0 21466 } 21467 for i = int32((*ReCompiled)(unsafe.Pointer(p)).FnState); i > iBefore; i-- { 21468 *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(i))) = *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(i-1))) 21469 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(i)*4)) = *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(i-1)*4)) 21470 } 21471 (*ReCompiled)(unsafe.Pointer(p)).FnState++ 21472 *(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaOp + uintptr(iBefore))) = int8(op) 21473 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iBefore)*4)) = arg 21474 return iBefore 21475 } 21476 21477 func re_append(tls *libc.TLS, p uintptr, op int32, arg int32) int32 { 21478 return re_insert(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnState), op, arg) 21479 } 21480 21481 func re_copy(tls *libc.TLS, p uintptr, iStart int32, N int32) { 21482 if (*ReCompiled)(unsafe.Pointer(p)).FnState+uint32(N) >= (*ReCompiled)(unsafe.Pointer(p)).FnAlloc && re_resize(tls, p, int32((*ReCompiled)(unsafe.Pointer(p)).FnAlloc*uint32(2)+uint32(N))) != 0 { 21483 return 21484 } 21485 libc.X__builtin___memcpy_chk(tls, (*ReCompiled)(unsafe.Pointer(p)).FaOp+uintptr((*ReCompiled)(unsafe.Pointer(p)).FnState), (*ReCompiled)(unsafe.Pointer(p)).FaOp+uintptr(iStart), uint64(N)*uint64(unsafe.Sizeof(int8(0))), libc.X__builtin_object_size(tls, (*ReCompiled)(unsafe.Pointer(p)).FaOp+uintptr((*ReCompiled)(unsafe.Pointer(p)).FnState), 0)) 21486 libc.X__builtin___memcpy_chk(tls, (*ReCompiled)(unsafe.Pointer(p)).FaArg+uintptr((*ReCompiled)(unsafe.Pointer(p)).FnState)*4, (*ReCompiled)(unsafe.Pointer(p)).FaArg+uintptr(iStart)*4, uint64(N)*uint64(unsafe.Sizeof(int32(0))), libc.X__builtin_object_size(tls, (*ReCompiled)(unsafe.Pointer(p)).FaArg+uintptr((*ReCompiled)(unsafe.Pointer(p)).FnState)*4, 0)) 21487 *(*uint32)(unsafe.Pointer(p + 64)) += uint32(N) 21488 } 21489 21490 func re_hex(tls *libc.TLS, c int32, pV uintptr) int32 { 21491 if c >= '0' && c <= '9' { 21492 c = c - '0' 21493 } else if c >= 'a' && c <= 'f' { 21494 c = c - ('a' - 10) 21495 } else if c >= 'A' && c <= 'F' { 21496 c = c - ('A' - 10) 21497 } else { 21498 return 0 21499 } 21500 *(*int32)(unsafe.Pointer(pV)) = *(*int32)(unsafe.Pointer(pV))*16 + c&0xff 21501 return 1 21502 } 21503 21504 func re_esc_char(tls *libc.TLS, p uintptr) uint32 { 21505 bp := tls.Alloc(4) 21506 defer tls.Free(4) 21507 21508 var i int32 21509 *(*int32)(unsafe.Pointer(bp)) = 0 21510 var c int8 21511 if (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi >= (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 21512 return uint32(0) 21513 } 21514 c = int8(*(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi)))) 21515 if int32(c) == 'u' && (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi+4 < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 21516 var zIn uintptr = (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi) 21517 if re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 1))), bp) != 0 && 21518 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 2))), bp) != 0 && 21519 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 3))), bp) != 0 && 21520 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 4))), bp) != 0 { 21521 *(*int32)(unsafe.Pointer(p + 8)) += 5 21522 return uint32(*(*int32)(unsafe.Pointer(bp))) 21523 } 21524 } 21525 if int32(c) == 'x' && (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi+2 < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 21526 var zIn uintptr = (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi) 21527 if re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 1))), bp) != 0 && 21528 re_hex(tls, int32(*(*uint8)(unsafe.Pointer(zIn + 2))), bp) != 0 { 21529 *(*int32)(unsafe.Pointer(p + 8)) += 3 21530 return uint32(*(*int32)(unsafe.Pointer(bp))) 21531 } 21532 } 21533 for i = 0; zEsc[i] != 0 && int32(zEsc[i]) != int32(c); i++ { 21534 } 21535 if zEsc[i] != 0 { 21536 if i < 6 { 21537 c = zTrans[i] 21538 } 21539 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 21540 } else { 21541 (*ReCompiled)(unsafe.Pointer(p)).FzErr = ts + 6542 21542 } 21543 return uint32(c) 21544 } 21545 21546 var zEsc = *(*[21]int8)(unsafe.Pointer(ts + 6559)) 21547 var zTrans = *(*[7]int8)(unsafe.Pointer(ts + 6580)) 21548 21549 func rePeek(tls *libc.TLS, p uintptr) uint8 { 21550 if (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi < (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fmx { 21551 return *(*uint8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fz + uintptr((*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi))) 21552 } 21553 return uint8(0) 21554 } 21555 21556 func re_subcompile_re(tls *libc.TLS, p uintptr) uintptr { 21557 var zErr uintptr 21558 var iStart int32 21559 var iEnd int32 21560 var iGoto int32 21561 iStart = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 21562 zErr = re_subcompile_string(tls, p) 21563 if zErr != 0 { 21564 return zErr 21565 } 21566 for int32(rePeek(tls, p)) == '|' { 21567 iEnd = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 21568 re_insert(tls, p, iStart, RE_OP_FORK, iEnd+2-iStart) 21569 iGoto = re_append(tls, p, RE_OP_GOTO, 0) 21570 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 21571 zErr = re_subcompile_string(tls, p) 21572 if zErr != 0 { 21573 return zErr 21574 } 21575 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iGoto)*4)) = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iGoto)) 21576 } 21577 return uintptr(0) 21578 } 21579 21580 func re_subcompile_string(tls *libc.TLS, p uintptr) uintptr { 21581 var iPrev int32 = -1 21582 var iStart int32 21583 var c uint32 21584 var zErr uintptr 21585 for libc.AssignUint32(&c, (*struct { 21586 f func(*libc.TLS, uintptr) uint32 21587 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p)) != uint32(0) { 21588 iStart = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 21589 switch c { 21590 case uint32('|'): 21591 fallthrough 21592 case uint32('$'): 21593 fallthrough 21594 case uint32(')'): 21595 { 21596 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi-- 21597 return uintptr(0) 21598 21599 } 21600 case uint32('('): 21601 { 21602 zErr = re_subcompile_re(tls, p) 21603 if zErr != 0 { 21604 return zErr 21605 } 21606 if int32(rePeek(tls, p)) != ')' { 21607 return ts + 6587 21608 } 21609 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 21610 break 21611 21612 } 21613 case uint32('.'): 21614 { 21615 if int32(rePeek(tls, p)) == '*' { 21616 re_append(tls, p, RE_OP_ANYSTAR, 0) 21617 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 21618 } else { 21619 re_append(tls, p, RE_OP_ANY, 0) 21620 } 21621 break 21622 21623 } 21624 case uint32('*'): 21625 { 21626 if iPrev < 0 { 21627 return ts + 6601 21628 } 21629 re_insert(tls, p, iPrev, RE_OP_GOTO, int32((*ReCompiled)(unsafe.Pointer(p)).FnState-uint32(iPrev)+uint32(1))) 21630 re_append(tls, p, RE_OP_FORK, int32(uint32(iPrev)-(*ReCompiled)(unsafe.Pointer(p)).FnState+uint32(1))) 21631 break 21632 21633 } 21634 case uint32('+'): 21635 { 21636 if iPrev < 0 { 21637 return ts + 6621 21638 } 21639 re_append(tls, p, RE_OP_FORK, int32(uint32(iPrev)-(*ReCompiled)(unsafe.Pointer(p)).FnState)) 21640 break 21641 21642 } 21643 case uint32('?'): 21644 { 21645 if iPrev < 0 { 21646 return ts + 6641 21647 } 21648 re_insert(tls, p, iPrev, RE_OP_FORK, int32((*ReCompiled)(unsafe.Pointer(p)).FnState-uint32(iPrev)+uint32(1))) 21649 break 21650 21651 } 21652 case uint32('{'): 21653 { 21654 var m int32 = 0 21655 var n int32 = 0 21656 var sz int32 21657 var j int32 21658 if iPrev < 0 { 21659 return ts + 6661 21660 } 21661 for libc.AssignUint32(&c, uint32(rePeek(tls, p))) >= uint32('0') && c <= uint32('9') { 21662 m = int32(uint32(m*10) + c - uint32('0')) 21663 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 21664 } 21665 n = m 21666 if c == uint32(',') { 21667 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 21668 n = 0 21669 for libc.AssignUint32(&c, uint32(rePeek(tls, p))) >= uint32('0') && c <= uint32('9') { 21670 n = int32(uint32(n*10) + c - uint32('0')) 21671 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 21672 } 21673 } 21674 if c != uint32('}') { 21675 return ts + 6685 21676 } 21677 if n > 0 && n < m { 21678 return ts + 6699 21679 } 21680 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 21681 sz = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iPrev)) 21682 if m == 0 { 21683 if n == 0 { 21684 return ts + 6724 21685 } 21686 re_insert(tls, p, iPrev, RE_OP_FORK, sz+1) 21687 n-- 21688 } else { 21689 for j = 1; j < m; j++ { 21690 re_copy(tls, p, iPrev, sz) 21691 } 21692 } 21693 for j = m; j < n; j++ { 21694 re_append(tls, p, RE_OP_FORK, sz+1) 21695 re_copy(tls, p, iPrev, sz) 21696 } 21697 if n == 0 && m > 0 { 21698 re_append(tls, p, RE_OP_FORK, -sz) 21699 } 21700 break 21701 21702 } 21703 case uint32('['): 21704 { 21705 var iFirst int32 = int32((*ReCompiled)(unsafe.Pointer(p)).FnState) 21706 if int32(rePeek(tls, p)) == '^' { 21707 re_append(tls, p, RE_OP_CC_EXC, 0) 21708 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 21709 } else { 21710 re_append(tls, p, RE_OP_CC_INC, 0) 21711 } 21712 for libc.AssignUint32(&c, (*struct { 21713 f func(*libc.TLS, uintptr) uint32 21714 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p)) != uint32(0) { 21715 if c == uint32('[') && int32(rePeek(tls, p)) == ':' { 21716 return ts + 6757 21717 } 21718 if c == uint32('\\') { 21719 c = re_esc_char(tls, p) 21720 } 21721 if int32(rePeek(tls, p)) == '-' { 21722 re_append(tls, p, RE_OP_CC_RANGE, int32(c)) 21723 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 21724 c = (*struct { 21725 f func(*libc.TLS, uintptr) uint32 21726 })(unsafe.Pointer(&struct{ uintptr }{(*ReCompiled)(unsafe.Pointer(p)).FxNextChar})).f(tls, p) 21727 if c == uint32('\\') { 21728 c = re_esc_char(tls, p) 21729 } 21730 re_append(tls, p, RE_OP_CC_RANGE, int32(c)) 21731 } else { 21732 re_append(tls, p, RE_OP_CC_VALUE, int32(c)) 21733 } 21734 if int32(rePeek(tls, p)) == ']' { 21735 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 21736 break 21737 } 21738 } 21739 if c == uint32(0) { 21740 return ts + 6795 21741 } 21742 *(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(p)).FaArg + uintptr(iFirst)*4)) = int32((*ReCompiled)(unsafe.Pointer(p)).FnState - uint32(iFirst)) 21743 break 21744 21745 } 21746 case uint32('\\'): 21747 { 21748 var specialOp int32 = 0 21749 switch int32(rePeek(tls, p)) { 21750 case 'b': 21751 specialOp = RE_OP_BOUNDARY 21752 break 21753 case 'd': 21754 specialOp = RE_OP_DIGIT 21755 break 21756 case 'D': 21757 specialOp = RE_OP_NOTDIGIT 21758 break 21759 case 's': 21760 specialOp = RE_OP_SPACE 21761 break 21762 case 'S': 21763 specialOp = RE_OP_NOTSPACE 21764 break 21765 case 'w': 21766 specialOp = RE_OP_WORD 21767 break 21768 case 'W': 21769 specialOp = RE_OP_NOTWORD 21770 break 21771 } 21772 if specialOp != 0 { 21773 (*ReCompiled)(unsafe.Pointer(p)).FsIn.Fi++ 21774 re_append(tls, p, specialOp, 0) 21775 } else { 21776 c = re_esc_char(tls, p) 21777 re_append(tls, p, RE_OP_MATCH, int32(c)) 21778 } 21779 break 21780 21781 } 21782 default: 21783 { 21784 re_append(tls, p, RE_OP_MATCH, int32(c)) 21785 break 21786 21787 } 21788 } 21789 iPrev = iStart 21790 } 21791 return uintptr(0) 21792 } 21793 21794 func sqlite3re_free(tls *libc.TLS, pRe uintptr) { 21795 if pRe != 0 { 21796 sqlite3.Xsqlite3_free(tls, (*ReCompiled)(unsafe.Pointer(pRe)).FaOp) 21797 sqlite3.Xsqlite3_free(tls, (*ReCompiled)(unsafe.Pointer(pRe)).FaArg) 21798 sqlite3.Xsqlite3_free(tls, pRe) 21799 } 21800 } 21801 21802 func sqlite3re_compile(tls *libc.TLS, ppRe uintptr, zIn uintptr, noCase int32) uintptr { 21803 var pRe uintptr 21804 var zErr uintptr 21805 var i int32 21806 var j int32 21807 21808 *(*uintptr)(unsafe.Pointer(ppRe)) = uintptr(0) 21809 pRe = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(ReCompiled{}))) 21810 if pRe == uintptr(0) { 21811 return ts + 2069 21812 } 21813 libc.X__builtin___memset_chk(tls, pRe, 0, uint64(unsafe.Sizeof(ReCompiled{})), libc.X__builtin_object_size(tls, pRe, 0)) 21814 (*ReCompiled)(unsafe.Pointer(pRe)).FxNextChar = func() uintptr { 21815 if noCase != 0 { 21816 return *(*uintptr)(unsafe.Pointer(&struct { 21817 f func(*libc.TLS, uintptr) uint32 21818 }{re_next_char_nocase})) 21819 } 21820 return *(*uintptr)(unsafe.Pointer(&struct { 21821 f func(*libc.TLS, uintptr) uint32 21822 }{re_next_char})) 21823 }() 21824 if re_resize(tls, pRe, 30) != 0 { 21825 sqlite3re_free(tls, pRe) 21826 return ts + 2069 21827 } 21828 if int32(*(*int8)(unsafe.Pointer(zIn))) == '^' { 21829 zIn++ 21830 } else { 21831 re_append(tls, pRe, RE_OP_ANYSTAR, 0) 21832 } 21833 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fz = zIn 21834 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi = 0 21835 (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx = int32(libc.Xstrlen(tls, zIn)) 21836 zErr = re_subcompile_re(tls, pRe) 21837 if zErr != 0 { 21838 sqlite3re_free(tls, pRe) 21839 return zErr 21840 } 21841 if int32(rePeek(tls, pRe)) == '$' && (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi+1 >= (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx { 21842 re_append(tls, pRe, RE_OP_MATCH, RE_EOF) 21843 re_append(tls, pRe, RE_OP_ACCEPT, 0) 21844 *(*uintptr)(unsafe.Pointer(ppRe)) = pRe 21845 } else if (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fi >= (*ReCompiled)(unsafe.Pointer(pRe)).FsIn.Fmx { 21846 re_append(tls, pRe, RE_OP_ACCEPT, 0) 21847 *(*uintptr)(unsafe.Pointer(ppRe)) = pRe 21848 } else { 21849 sqlite3re_free(tls, pRe) 21850 return ts + 6808 21851 } 21852 21853 if int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp))) == RE_OP_ANYSTAR && !(noCase != 0) { 21854 j = 0 21855 i = 1 21856 for ; j < int32(unsafe.Sizeof([12]uint8{}))-2 && int32(*(*int8)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaOp + uintptr(i)))) == RE_OP_MATCH; i++ { 21857 var x uint32 = uint32(*(*int32)(unsafe.Pointer((*ReCompiled)(unsafe.Pointer(pRe)).FaArg + uintptr(i)*4))) 21858 if x <= uint32(127) { 21859 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(x) 21860 } else if x <= uint32(0xfff) { 21861 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0xc0) | x>>6) 21862 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x&uint32(0x3f)) 21863 } else if x <= uint32(0xffff) { 21864 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0xe0) | x>>12) 21865 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x>>6&uint32(0x3f)) 21866 *(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(libc.PostIncInt32(&j, 1)))) = uint8(uint32(0x80) | x&uint32(0x3f)) 21867 } else { 21868 break 21869 } 21870 } 21871 if j > 0 && int32(*(*uint8)(unsafe.Pointer(pRe + 48 + uintptr(j-1)))) == 0 { 21872 j-- 21873 } 21874 (*ReCompiled)(unsafe.Pointer(pRe)).FnInit = j 21875 } 21876 return (*ReCompiled)(unsafe.Pointer(pRe)).FzErr 21877 } 21878 21879 func re_sql_func(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 21880 bp := tls.Alloc(8) 21881 defer tls.Free(8) 21882 21883 var zPattern uintptr 21884 var zStr uintptr 21885 var zErr uintptr 21886 var setAux int32 = 0 21887 21888 _ = argc 21889 *(*uintptr)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_get_auxdata(tls, context, 0) 21890 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 21891 zPattern = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 21892 if zPattern == uintptr(0) { 21893 return 21894 } 21895 zErr = sqlite3re_compile(tls, bp, zPattern, libc.Bool32(sqlite3.Xsqlite3_user_data(tls, context) != uintptr(0))) 21896 if zErr != 0 { 21897 sqlite3re_free(tls, *(*uintptr)(unsafe.Pointer(bp))) 21898 sqlite3.Xsqlite3_result_error(tls, context, zErr, -1) 21899 return 21900 } 21901 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 21902 sqlite3.Xsqlite3_result_error_nomem(tls, context) 21903 return 21904 } 21905 setAux = 1 21906 } 21907 zStr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 21908 if zStr != uintptr(0) { 21909 sqlite3.Xsqlite3_result_int(tls, context, sqlite3re_match(tls, *(*uintptr)(unsafe.Pointer(bp)), zStr, -1)) 21910 } 21911 if setAux != 0 { 21912 sqlite3.Xsqlite3_set_auxdata(tls, context, 0, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3re_free}))) 21913 } 21914 } 21915 21916 func sqlite3_regexp_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 21917 var rc int32 = SQLITE_OK 21918 _ = pApi 21919 21920 _ = pzErrMsg 21921 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6831, 2, 21922 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 21923 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 21924 f func(*libc.TLS, uintptr, int32, uintptr) 21925 }{re_sql_func})), uintptr(0), uintptr(0)) 21926 if rc == SQLITE_OK { 21927 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6838, 2, 21928 SQLITE_UTF8|SQLITE_INNOCUOUS|SQLITE_DETERMINISTIC, 21929 db, *(*uintptr)(unsafe.Pointer(&struct { 21930 f func(*libc.TLS, uintptr, int32, uintptr) 21931 }{re_sql_func})), uintptr(0), uintptr(0)) 21932 } 21933 return rc 21934 } 21935 21936 func rememberFunc(tls *libc.TLS, pCtx uintptr, argc int32, argv uintptr) { 21937 var v sqlite3_int64 21938 var ptr uintptr 21939 21940 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 21941 ptr = sqlite3.Xsqlite3_value_pointer(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4060) 21942 if ptr != 0 { 21943 *(*sqlite3_int64)(unsafe.Pointer(ptr)) = v 21944 } 21945 sqlite3.Xsqlite3_result_int64(tls, pCtx, v) 21946 } 21947 21948 func sqlite3_remember_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 21949 var rc int32 = SQLITE_OK 21950 _ = pApi 21951 21952 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+6846, 2, SQLITE_UTF8, uintptr(0), 21953 *(*uintptr)(unsafe.Pointer(&struct { 21954 f func(*libc.TLS, uintptr, int32, uintptr) 21955 }{rememberFunc})), uintptr(0), uintptr(0)) 21956 return rc 21957 } 21958 21959 type series_cursor1 = struct { 21960 Fbase sqlite3_vtab_cursor 21961 FisDesc int32 21962 F__ccgo_pad1 [4]byte 21963 FiRowid sqlite3_int64 21964 FiValue sqlite3_int64 21965 FmnValue sqlite3_int64 21966 FmxValue sqlite3_int64 21967 FiStep sqlite3_int64 21968 } 21969 21970 type series_cursor = series_cursor1 21971 21972 func seriesConnect(tls *libc.TLS, db uintptr, pUnused uintptr, argcUnused int32, argvUnused uintptr, ppVtab uintptr, pzErrUnused uintptr) int32 { 21973 var pNew uintptr 21974 var rc int32 21975 21976 _ = pUnused 21977 _ = argcUnused 21978 _ = argvUnused 21979 _ = pzErrUnused 21980 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, 21981 ts+6855) 21982 if rc == SQLITE_OK { 21983 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 21984 if pNew == uintptr(0) { 21985 return SQLITE_NOMEM 21986 } 21987 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{})), libc.X__builtin_object_size(tls, pNew, 0)) 21988 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 21989 } 21990 return rc 21991 } 21992 21993 func seriesDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 21994 sqlite3.Xsqlite3_free(tls, pVtab) 21995 return SQLITE_OK 21996 } 21997 21998 func seriesOpen(tls *libc.TLS, pUnused uintptr, ppCursor uintptr) int32 { 21999 var pCur uintptr 22000 _ = pUnused 22001 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(series_cursor{}))) 22002 if pCur == uintptr(0) { 22003 return SQLITE_NOMEM 22004 } 22005 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(series_cursor{})), libc.X__builtin_object_size(tls, pCur, 0)) 22006 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 22007 return SQLITE_OK 22008 } 22009 22010 func seriesClose(tls *libc.TLS, cur uintptr) int32 { 22011 sqlite3.Xsqlite3_free(tls, cur) 22012 return SQLITE_OK 22013 } 22014 22015 func seriesNext(tls *libc.TLS, cur uintptr) int32 { 22016 var pCur uintptr = cur 22017 if (*series_cursor)(unsafe.Pointer(pCur)).FisDesc != 0 { 22018 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) -= (*series_cursor)(unsafe.Pointer(pCur)).FiStep 22019 } else { 22020 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) += (*series_cursor)(unsafe.Pointer(pCur)).FiStep 22021 } 22022 (*series_cursor)(unsafe.Pointer(pCur)).FiRowid++ 22023 return SQLITE_OK 22024 } 22025 22026 func seriesColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 22027 var pCur uintptr = cur 22028 var x sqlite3_int64 = int64(0) 22029 switch i { 22030 case SERIES_COLUMN_START: 22031 x = (*series_cursor)(unsafe.Pointer(pCur)).FmnValue 22032 break 22033 case SERIES_COLUMN_STOP: 22034 x = (*series_cursor)(unsafe.Pointer(pCur)).FmxValue 22035 break 22036 case SERIES_COLUMN_STEP: 22037 x = (*series_cursor)(unsafe.Pointer(pCur)).FiStep 22038 break 22039 default: 22040 x = (*series_cursor)(unsafe.Pointer(pCur)).FiValue 22041 break 22042 } 22043 sqlite3.Xsqlite3_result_int64(tls, ctx, x) 22044 return SQLITE_OK 22045 } 22046 22047 func seriesRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 22048 var pCur uintptr = cur 22049 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*series_cursor)(unsafe.Pointer(pCur)).FiRowid 22050 return SQLITE_OK 22051 } 22052 22053 func seriesEof(tls *libc.TLS, cur uintptr) int32 { 22054 var pCur uintptr = cur 22055 if (*series_cursor)(unsafe.Pointer(pCur)).FisDesc != 0 { 22056 return libc.Bool32((*series_cursor)(unsafe.Pointer(pCur)).FiValue < (*series_cursor)(unsafe.Pointer(pCur)).FmnValue) 22057 } else { 22058 return libc.Bool32((*series_cursor)(unsafe.Pointer(pCur)).FiValue > (*series_cursor)(unsafe.Pointer(pCur)).FmxValue) 22059 } 22060 return int32(0) 22061 } 22062 22063 func seriesFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStrUnused uintptr, argc int32, argv uintptr) int32 { 22064 var pCur uintptr = pVtabCursor 22065 var i int32 = 0 22066 _ = idxStrUnused 22067 if idxNum&1 != 0 { 22068 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 22069 } else { 22070 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = int64(0) 22071 } 22072 if idxNum&2 != 0 { 22073 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 22074 } else { 22075 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0xffffffff) 22076 } 22077 if idxNum&4 != 0 { 22078 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&i, 1))*8))) 22079 if (*series_cursor)(unsafe.Pointer(pCur)).FiStep == int64(0) { 22080 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = int64(1) 22081 } else if (*series_cursor)(unsafe.Pointer(pCur)).FiStep < int64(0) { 22082 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = -(*series_cursor)(unsafe.Pointer(pCur)).FiStep 22083 if idxNum&16 == 0 { 22084 idxNum = idxNum | 8 22085 } 22086 } 22087 } else { 22088 (*series_cursor)(unsafe.Pointer(pCur)).FiStep = int64(1) 22089 } 22090 for i = 0; i < argc; i++ { 22091 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) == SQLITE_NULL { 22092 (*series_cursor)(unsafe.Pointer(pCur)).FmnValue = int64(1) 22093 (*series_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0) 22094 break 22095 } 22096 } 22097 if idxNum&8 != 0 { 22098 (*series_cursor)(unsafe.Pointer(pCur)).FisDesc = 1 22099 (*series_cursor)(unsafe.Pointer(pCur)).FiValue = (*series_cursor)(unsafe.Pointer(pCur)).FmxValue 22100 if (*series_cursor)(unsafe.Pointer(pCur)).FiStep > int64(0) { 22101 *(*sqlite3_int64)(unsafe.Pointer(pCur + 24)) -= ((*series_cursor)(unsafe.Pointer(pCur)).FmxValue - (*series_cursor)(unsafe.Pointer(pCur)).FmnValue) % (*series_cursor)(unsafe.Pointer(pCur)).FiStep 22102 } 22103 } else { 22104 (*series_cursor)(unsafe.Pointer(pCur)).FisDesc = 0 22105 (*series_cursor)(unsafe.Pointer(pCur)).FiValue = (*series_cursor)(unsafe.Pointer(pCur)).FmnValue 22106 } 22107 (*series_cursor)(unsafe.Pointer(pCur)).FiRowid = int64(1) 22108 return SQLITE_OK 22109 } 22110 22111 func seriesBestIndex(tls *libc.TLS, pVTab uintptr, pIdxInfo uintptr) int32 { 22112 bp := tls.Alloc(12) 22113 defer tls.Free(12) 22114 22115 var i int32 22116 var j int32 22117 var idxNum int32 = 0 22118 var bStartSeen int32 = 0 22119 var unusableMask int32 = 0 22120 var nArg int32 = 0 22121 22122 var pConstraint uintptr 22123 22124 *(*int32)(unsafe.Pointer(bp)) = libc.AssignPtrInt32(bp+1*4, libc.AssignPtrInt32(bp+2*4, -1)) 22125 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 22126 i = 0 22127 __1: 22128 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 22129 goto __3 22130 } 22131 { 22132 var iCol int32 22133 var iMask int32 22134 if (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn < SERIES_COLUMN_START { 22135 goto __2 22136 } 22137 iCol = (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn - SERIES_COLUMN_START 22138 22139 iMask = int32(1) << iCol 22140 if iCol == 0 { 22141 bStartSeen = 1 22142 } 22143 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 22144 unusableMask = unusableMask | iMask 22145 goto __2 22146 } else if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 22147 idxNum = idxNum | iMask 22148 *(*int32)(unsafe.Pointer(bp + uintptr(iCol)*4)) = i 22149 } 22150 22151 } 22152 goto __2 22153 __2: 22154 i++ 22155 pConstraint += 12 22156 goto __1 22157 goto __3 22158 __3: 22159 ; 22160 for i = 0; i < 3; i++ { 22161 if libc.AssignInt32(&j, *(*int32)(unsafe.Pointer(bp + uintptr(i)*4))) >= 0 { 22162 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(j)*8)).FargvIndex = libc.PreIncInt32(&nArg, 1) 22163 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(j)*8)).Fomit = libc.BoolUint8(!(1 != 0)) 22164 } 22165 } 22166 22167 if !(bStartSeen != 0) { 22168 sqlite3.Xsqlite3_free(tls, (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg) 22169 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, 22170 ts+6914, 0) 22171 return SQLITE_ERROR 22172 } 22173 if unusableMask & ^idxNum != 0 { 22174 return SQLITE_CONSTRAINT 22175 } 22176 if idxNum&3 == 3 { 22177 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(2 - libc.Bool32(idxNum&4 != 0)) 22178 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1000) 22179 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy >= 1 && (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == 0 { 22180 if (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc != 0 { 22181 idxNum = idxNum | 8 22182 } else { 22183 idxNum = idxNum | 16 22184 } 22185 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 22186 } 22187 } else { 22188 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(2147483647) 22189 } 22190 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 22191 return SQLITE_OK 22192 } 22193 22194 var seriesModule = sqlite3_module{ 22195 FxConnect: 0, 22196 FxBestIndex: 0, 22197 FxDisconnect: 0, 22198 FxOpen: 0, 22199 FxClose: 0, 22200 FxFilter: 0, 22201 FxNext: 0, 22202 FxEof: 0, 22203 FxColumn: 0, 22204 FxRowid: 0, 22205 } 22206 22207 func sqlite3_series_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 22208 var rc int32 = SQLITE_OK 22209 _ = pApi 22210 22211 if sqlite3.Xsqlite3_libversion_number(tls) < 3008012 && pzErrMsg != uintptr(0) { 22212 *(*uintptr)(unsafe.Pointer(pzErrMsg)) = sqlite3.Xsqlite3_mprintf(tls, 22213 ts+6972, 0) 22214 return SQLITE_ERROR 22215 } 22216 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+7022, uintptr(unsafe.Pointer(&seriesModule)), uintptr(0)) 22217 return rc 22218 } 22219 22220 type u16 = uint16 22221 22222 var midClass = [128]uint8{ 22223 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22224 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22225 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22226 uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22227 uint8(CCLASS_SPACE), uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), 22228 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22229 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22230 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22231 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22232 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22233 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_SPACE), 22234 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22235 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22236 uint8(CCLASS_SILENT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22237 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22238 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22239 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 22240 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 22241 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 22242 uint8(CCLASS_DIGIT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22243 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22244 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), 22245 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_D), 22246 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 22247 uint8(CCLASS_SILENT), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 22248 uint8(CCLASS_C), uint8(CCLASS_L), uint8(CCLASS_M), 22249 uint8(CCLASS_M), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 22250 uint8(CCLASS_C), uint8(CCLASS_R), uint8(CCLASS_C), 22251 uint8(CCLASS_D), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 22252 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_VOWEL), 22253 uint8(CCLASS_C), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22254 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22255 uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 22256 uint8(CCLASS_C), uint8(CCLASS_D), uint8(CCLASS_VOWEL), 22257 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_SILENT), 22258 uint8(CCLASS_VOWEL), uint8(CCLASS_C), uint8(CCLASS_C), 22259 uint8(CCLASS_L), uint8(CCLASS_M), uint8(CCLASS_M), 22260 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 22261 uint8(CCLASS_R), uint8(CCLASS_C), uint8(CCLASS_D), 22262 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_B), 22263 uint8(CCLASS_C), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 22264 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22265 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22266 } 22267 22268 var initClass = [128]uint8{ 22269 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22270 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22271 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22272 uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22273 uint8(CCLASS_SPACE), uint8(CCLASS_SPACE), uint8(CCLASS_OTHER), 22274 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22275 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22276 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22277 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22278 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22279 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_SPACE), 22280 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22281 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22282 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22283 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22284 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22285 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 22286 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 22287 uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), uint8(CCLASS_DIGIT), 22288 uint8(CCLASS_DIGIT), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22289 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22290 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), 22291 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_D), 22292 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 22293 uint8(CCLASS_SILENT), uint8(CCLASS_VOWEL), uint8(CCLASS_C), 22294 uint8(CCLASS_C), uint8(CCLASS_L), uint8(CCLASS_M), 22295 uint8(CCLASS_M), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 22296 uint8(CCLASS_C), uint8(CCLASS_R), uint8(CCLASS_C), 22297 uint8(CCLASS_D), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 22298 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_Y), 22299 uint8(CCLASS_C), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22300 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22301 uint8(CCLASS_OTHER), uint8(CCLASS_VOWEL), uint8(CCLASS_B), 22302 uint8(CCLASS_C), uint8(CCLASS_D), uint8(CCLASS_VOWEL), 22303 uint8(CCLASS_B), uint8(CCLASS_C), uint8(CCLASS_SILENT), 22304 uint8(CCLASS_VOWEL), uint8(CCLASS_C), uint8(CCLASS_C), 22305 uint8(CCLASS_L), uint8(CCLASS_M), uint8(CCLASS_M), 22306 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_C), 22307 uint8(CCLASS_R), uint8(CCLASS_C), uint8(CCLASS_D), 22308 uint8(CCLASS_VOWEL), uint8(CCLASS_B), uint8(CCLASS_B), 22309 uint8(CCLASS_C), uint8(CCLASS_Y), uint8(CCLASS_C), 22310 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22311 uint8(CCLASS_OTHER), uint8(CCLASS_OTHER), 22312 } 22313 22314 var className = *(*[14]uint8)(unsafe.Pointer(ts + 7038)) 22315 22316 func phoneticHash(tls *libc.TLS, zIn uintptr, nIn int32) uintptr { 22317 var zOut uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn+1)) 22318 var i int32 22319 var nOut int32 = 0 22320 var cPrev int8 = int8(0x77) 22321 var cPrevX int8 = int8(0x77) 22322 var aClass uintptr = uintptr(unsafe.Pointer(&initClass)) 22323 22324 if zOut == uintptr(0) { 22325 return uintptr(0) 22326 } 22327 if nIn > 2 { 22328 switch int32(*(*uint8)(unsafe.Pointer(zIn))) { 22329 case 'g': 22330 fallthrough 22331 case 'k': 22332 { 22333 if int32(*(*uint8)(unsafe.Pointer(zIn + 1))) == 'n' { 22334 zIn++ 22335 nIn-- 22336 } 22337 break 22338 22339 } 22340 } 22341 } 22342 for i = 0; i < nIn; i++ { 22343 var c uint8 = *(*uint8)(unsafe.Pointer(zIn + uintptr(i))) 22344 if i+1 < nIn { 22345 if int32(c) == 'w' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'r' { 22346 continue 22347 } 22348 if int32(c) == 'd' && (int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'j' || int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'g') { 22349 continue 22350 } 22351 if i+2 < nIn { 22352 if int32(c) == 't' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+1)))) == 'c' && int32(*(*uint8)(unsafe.Pointer(zIn + uintptr(i+2)))) == 'h' { 22353 continue 22354 } 22355 } 22356 } 22357 c = *(*uint8)(unsafe.Pointer(aClass + uintptr(int32(c)&0x7f))) 22358 if int32(c) == CCLASS_SPACE { 22359 continue 22360 } 22361 if int32(c) == CCLASS_OTHER && int32(cPrev) != CCLASS_DIGIT { 22362 continue 22363 } 22364 aClass = uintptr(unsafe.Pointer(&midClass)) 22365 if int32(c) == CCLASS_VOWEL && (int32(cPrevX) == CCLASS_R || int32(cPrevX) == CCLASS_L) { 22366 continue 22367 } 22368 if (int32(c) == CCLASS_R || int32(c) == CCLASS_L) && int32(cPrevX) == CCLASS_VOWEL { 22369 nOut-- 22370 } 22371 cPrev = int8(c) 22372 if int32(c) == CCLASS_SILENT { 22373 continue 22374 } 22375 cPrevX = int8(c) 22376 c = className[c] 22377 22378 if nOut == 0 || int32(c) != int32(*(*uint8)(unsafe.Pointer(zOut + uintptr(nOut-1)))) { 22379 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = c 22380 } 22381 } 22382 *(*uint8)(unsafe.Pointer(zOut + uintptr(nOut))) = uint8(0) 22383 return zOut 22384 } 22385 22386 func phoneticHashSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 22387 var zIn uintptr 22388 var zOut uintptr 22389 22390 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 22391 if zIn == uintptr(0) { 22392 return 22393 } 22394 zOut = phoneticHash(tls, zIn, sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) 22395 if zOut == uintptr(0) { 22396 sqlite3.Xsqlite3_result_error_nomem(tls, context) 22397 } else { 22398 sqlite3.Xsqlite3_result_text(tls, context, zOut, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 22399 } 22400 } 22401 22402 func characterClass(tls *libc.TLS, cPrev int8, c int8) int8 { 22403 if int32(cPrev) == 0 { 22404 return int8(initClass[int32(c)&0x7f]) 22405 } 22406 return int8(midClass[int32(c)&0x7f]) 22407 } 22408 22409 func insertOrDeleteCost(tls *libc.TLS, cPrev int8, c int8, cNext int8) int32 { 22410 var classC int8 = characterClass(tls, cPrev, c) 22411 var classCprev int8 22412 22413 if int32(classC) == CCLASS_SILENT { 22414 return 1 22415 } 22416 if int32(cPrev) == int32(c) { 22417 return 10 22418 } 22419 if int32(classC) == CCLASS_VOWEL && (int32(cPrev) == 'r' || int32(cNext) == 'r') { 22420 return 20 22421 } 22422 classCprev = characterClass(tls, cPrev, cPrev) 22423 if int32(classC) == int32(classCprev) { 22424 if int32(classC) == CCLASS_VOWEL { 22425 return 15 22426 } else { 22427 return 50 22428 } 22429 } 22430 22431 return 100 22432 } 22433 22434 func substituteCost(tls *libc.TLS, cPrev int8, cFrom int8, cTo int8) int32 { 22435 var classFrom int8 22436 var classTo int8 22437 if int32(cFrom) == int32(cTo) { 22438 return 0 22439 } 22440 if int32(cFrom) == int32(cTo)^0x20 && (int32(cTo) >= 'A' && int32(cTo) <= 'Z' || int32(cTo) >= 'a' && int32(cTo) <= 'z') { 22441 return 0 22442 } 22443 classFrom = characterClass(tls, cPrev, cFrom) 22444 classTo = characterClass(tls, cPrev, cTo) 22445 if int32(classFrom) == int32(classTo) { 22446 return 40 22447 } 22448 if int32(classFrom) >= CCLASS_B && int32(classFrom) <= CCLASS_Y && 22449 int32(classTo) >= CCLASS_B && int32(classTo) <= CCLASS_Y { 22450 return 75 22451 } 22452 22453 return 100 22454 } 22455 22456 func editdist1(tls *libc.TLS, zA uintptr, zB uintptr, pnMatch uintptr) int32 { 22457 bp := tls.Alloc(300) 22458 defer tls.Free(300) 22459 22460 var nA int32 22461 var nB int32 22462 var xA int32 22463 var xB int32 22464 var cA int8 = int8(0) 22465 var cB int8 22466 var cAprev int8 22467 var cBprev int8 22468 var cAnext int8 22469 var cBnext int8 22470 var d int32 22471 var dc int32 = 0 22472 var res int32 22473 var m uintptr 22474 var cx uintptr 22475 var toFree uintptr = uintptr(0) 22476 var nMatch int32 = 0 22477 22478 if zA == uintptr(0) || zB == uintptr(0) { 22479 return -1 22480 } 22481 22482 for *(*int8)(unsafe.Pointer(zA)) != 0 && int32(*(*int8)(unsafe.Pointer(zA))) == int32(*(*int8)(unsafe.Pointer(zB))) { 22483 dc = int32(*(*int8)(unsafe.Pointer(zA))) 22484 zA++ 22485 zB++ 22486 nMatch++ 22487 } 22488 if pnMatch != 0 { 22489 *(*int32)(unsafe.Pointer(pnMatch)) = nMatch 22490 } 22491 if int32(*(*int8)(unsafe.Pointer(zA))) == 0 && int32(*(*int8)(unsafe.Pointer(zB))) == 0 { 22492 return 0 22493 } 22494 22495 for nA = 0; *(*int8)(unsafe.Pointer(zA + uintptr(nA))) != 0; nA++ { 22496 if int32(*(*int8)(unsafe.Pointer(zA + uintptr(nA))))&0x80 != 0 { 22497 return -2 22498 } 22499 } 22500 for nB = 0; *(*int8)(unsafe.Pointer(zB + uintptr(nB))) != 0; nB++ { 22501 if int32(*(*int8)(unsafe.Pointer(zB + uintptr(nB))))&0x80 != 0 { 22502 return -2 22503 } 22504 } 22505 22506 if nA == 0 { 22507 cBprev = int8(dc) 22508 for xB = libc.AssignInt32(&res, 0); int32(libc.AssignInt8(&cB, *(*int8)(unsafe.Pointer(zB + uintptr(xB))))) != 0; xB++ { 22509 res = res + insertOrDeleteCost(tls, cBprev, cB, *(*int8)(unsafe.Pointer(zB + uintptr(xB+1))))/FINAL_INS_COST_DIV 22510 cBprev = cB 22511 } 22512 return res 22513 } 22514 if nB == 0 { 22515 cAprev = int8(dc) 22516 for xA = libc.AssignInt32(&res, 0); int32(libc.AssignInt8(&cA, *(*int8)(unsafe.Pointer(zA + uintptr(xA))))) != 0; xA++ { 22517 res = res + insertOrDeleteCost(tls, cAprev, cA, *(*int8)(unsafe.Pointer(zA + uintptr(xA+1)))) 22518 cAprev = cA 22519 } 22520 return res 22521 } 22522 22523 if int32(*(*int8)(unsafe.Pointer(zA))) == '*' && int32(*(*int8)(unsafe.Pointer(zA + 1))) == 0 { 22524 return 0 22525 } 22526 22527 if uint64(nB) < uint64(unsafe.Sizeof([75]int32{}))*uint64(4)/(uint64(unsafe.Sizeof(int32(0)))*uint64(5)) { 22528 m = bp 22529 } else { 22530 m = libc.AssignUintptr(&toFree, sqlite3.Xsqlite3_malloc64(tls, uint64((nB+1)*5)*uint64(unsafe.Sizeof(int32(0)))/uint64(4))) 22531 if m == uintptr(0) { 22532 return -3 22533 } 22534 } 22535 cx = m + uintptr(nB+1)*4 22536 22537 *(*int32)(unsafe.Pointer(m)) = 0 22538 *(*int8)(unsafe.Pointer(cx)) = int8(dc) 22539 cBprev = int8(dc) 22540 for xB = 1; xB <= nB; xB++ { 22541 cBnext = *(*int8)(unsafe.Pointer(zB + uintptr(xB))) 22542 cB = *(*int8)(unsafe.Pointer(zB + uintptr(xB-1))) 22543 *(*int8)(unsafe.Pointer(cx + uintptr(xB))) = cB 22544 *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) = *(*int32)(unsafe.Pointer(m + uintptr(xB-1)*4)) + insertOrDeleteCost(tls, cBprev, cB, cBnext) 22545 cBprev = cB 22546 } 22547 cAprev = int8(dc) 22548 for xA = 1; xA <= nA; xA++ { 22549 var lastA int32 = libc.Bool32(xA == nA) 22550 cA = *(*int8)(unsafe.Pointer(zA + uintptr(xA-1))) 22551 cAnext = *(*int8)(unsafe.Pointer(zA + uintptr(xA))) 22552 if int32(cA) == '*' && lastA != 0 { 22553 break 22554 } 22555 d = *(*int32)(unsafe.Pointer(m)) 22556 dc = int32(*(*int8)(unsafe.Pointer(cx))) 22557 *(*int32)(unsafe.Pointer(m)) = d + insertOrDeleteCost(tls, cAprev, cA, cAnext) 22558 cBprev = int8(0) 22559 for xB = 1; xB <= nB; xB++ { 22560 var totalCost int32 22561 var insCost int32 22562 var delCost int32 22563 var subCost int32 22564 var ncx int32 22565 cB = *(*int8)(unsafe.Pointer(zB + uintptr(xB-1))) 22566 cBnext = *(*int8)(unsafe.Pointer(zB + uintptr(xB))) 22567 22568 insCost = insertOrDeleteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB-1))), cB, cBnext) 22569 if lastA != 0 { 22570 insCost = insCost / FINAL_INS_COST_DIV 22571 } 22572 22573 delCost = insertOrDeleteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB))), cA, cBnext) 22574 22575 subCost = substituteCost(tls, *(*int8)(unsafe.Pointer(cx + uintptr(xB-1))), cA, cB) 22576 22577 totalCost = insCost + *(*int32)(unsafe.Pointer(m + uintptr(xB-1)*4)) 22578 ncx = int32(cB) 22579 if delCost+*(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) < totalCost { 22580 totalCost = delCost + *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 22581 ncx = int32(cA) 22582 } 22583 if subCost+d < totalCost { 22584 totalCost = subCost + d 22585 } 22586 22587 d = *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 22588 dc = int32(*(*int8)(unsafe.Pointer(cx + uintptr(xB)))) 22589 *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) = totalCost 22590 *(*int8)(unsafe.Pointer(cx + uintptr(xB))) = int8(ncx) 22591 cBprev = cB 22592 } 22593 cAprev = cA 22594 } 22595 22596 if int32(cA) == '*' { 22597 res = *(*int32)(unsafe.Pointer(m + 1*4)) 22598 for xB = 1; xB <= nB; xB++ { 22599 if *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) < res { 22600 res = *(*int32)(unsafe.Pointer(m + uintptr(xB)*4)) 22601 if pnMatch != 0 { 22602 *(*int32)(unsafe.Pointer(pnMatch)) = xB + nMatch 22603 } 22604 } 22605 } 22606 } else { 22607 res = *(*int32)(unsafe.Pointer(m + uintptr(nB)*4)) 22608 22609 } 22610 sqlite3.Xsqlite3_free(tls, toFree) 22611 return res 22612 } 22613 22614 func editdistSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 22615 var res int32 = editdist1(tls, 22616 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), 22617 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))), 22618 uintptr(0)) 22619 if res < 0 { 22620 if res == -3 { 22621 sqlite3.Xsqlite3_result_error_nomem(tls, context) 22622 } else if res == -2 { 22623 sqlite3.Xsqlite3_result_error(tls, context, ts+7052, -1) 22624 } else { 22625 sqlite3.Xsqlite3_result_error(tls, context, ts+7082, -1) 22626 } 22627 } else { 22628 sqlite3.Xsqlite3_result_int(tls, context, res) 22629 } 22630 } 22631 22632 type EditDist3Cost1 = struct { 22633 FpNext uintptr 22634 FnFrom u8 22635 FnTo u8 22636 FiCost u16 22637 Fa [4]int8 22638 } 22639 22640 type EditDist3Cost = EditDist3Cost1 22641 type EditDist3Config1 = struct { 22642 FnLang int32 22643 F__ccgo_pad1 [4]byte 22644 Fa uintptr 22645 } 22646 22647 type EditDist3Config = EditDist3Config1 22648 type EditDist3From1 = struct { 22649 FnSubst int32 22650 FnDel int32 22651 FnByte int32 22652 F__ccgo_pad1 [4]byte 22653 FapSubst uintptr 22654 FapDel uintptr 22655 } 22656 22657 type EditDist3From = EditDist3From1 22658 type EditDist3FromString1 = struct { 22659 Fz uintptr 22660 Fn int32 22661 FisPrefix int32 22662 Fa uintptr 22663 } 22664 22665 type EditDist3FromString = EditDist3FromString1 22666 type EditDist3To1 = struct { 22667 FnIns int32 22668 FnByte int32 22669 FapIns uintptr 22670 } 22671 22672 type EditDist3To = EditDist3To1 22673 type EditDist3ToString1 = struct { 22674 Fz uintptr 22675 Fn int32 22676 F__ccgo_pad1 [4]byte 22677 Fa uintptr 22678 } 22679 22680 type EditDist3ToString = EditDist3ToString1 22681 type EditDist3Lang1 = struct { 22682 FiLang int32 22683 FiInsCost int32 22684 FiDelCost int32 22685 FiSubCost int32 22686 FpCost uintptr 22687 } 22688 22689 type EditDist3Lang = EditDist3Lang1 22690 22691 var editDist3Lang = EditDist3Lang{FiInsCost: 100, FiDelCost: 100, FiSubCost: 150} 22692 22693 func editDist3ConfigClear(tls *libc.TLS, p uintptr) { 22694 var i int32 22695 if p == uintptr(0) { 22696 return 22697 } 22698 for i = 0; i < (*EditDist3Config)(unsafe.Pointer(p)).FnLang; i++ { 22699 var pCost uintptr 22700 var pNext uintptr 22701 pCost = (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr(i)*24)).FpCost 22702 for pCost != 0 { 22703 pNext = (*EditDist3Cost)(unsafe.Pointer(pCost)).FpNext 22704 sqlite3.Xsqlite3_free(tls, pCost) 22705 pCost = pNext 22706 } 22707 } 22708 sqlite3.Xsqlite3_free(tls, (*EditDist3Config)(unsafe.Pointer(p)).Fa) 22709 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(EditDist3Config{})), libc.X__builtin_object_size(tls, p, 0)) 22710 } 22711 22712 func editDist3ConfigDelete(tls *libc.TLS, pIn uintptr) { 22713 var p uintptr = pIn 22714 editDist3ConfigClear(tls, p) 22715 sqlite3.Xsqlite3_free(tls, p) 22716 } 22717 22718 func editDist3CostCompare(tls *libc.TLS, pA uintptr, pB uintptr) int32 { 22719 var n int32 = int32((*EditDist3Cost)(unsafe.Pointer(pA)).FnFrom) 22720 var rc int32 22721 if n > int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) { 22722 n = int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) 22723 } 22724 rc = libc.Xstrncmp(tls, pA+12, pB+12, uint64(n)) 22725 if rc == 0 { 22726 rc = int32((*EditDist3Cost)(unsafe.Pointer(pA)).FnFrom) - int32((*EditDist3Cost)(unsafe.Pointer(pB)).FnFrom) 22727 } 22728 return rc 22729 } 22730 22731 func editDist3CostMerge(tls *libc.TLS, pA uintptr, pB uintptr) uintptr { 22732 bp := tls.Alloc(8) 22733 defer tls.Free(8) 22734 22735 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 22736 var ppTail uintptr = bp 22737 var p uintptr 22738 for pA != 0 && pB != 0 { 22739 if editDist3CostCompare(tls, pA, pB) <= 0 { 22740 p = pA 22741 pA = (*EditDist3Cost)(unsafe.Pointer(pA)).FpNext 22742 } else { 22743 p = pB 22744 pB = (*EditDist3Cost)(unsafe.Pointer(pB)).FpNext 22745 } 22746 *(*uintptr)(unsafe.Pointer(ppTail)) = p 22747 ppTail = p 22748 } 22749 if pA != 0 { 22750 *(*uintptr)(unsafe.Pointer(ppTail)) = pA 22751 } else { 22752 *(*uintptr)(unsafe.Pointer(ppTail)) = pB 22753 } 22754 return *(*uintptr)(unsafe.Pointer(bp)) 22755 } 22756 22757 func editDist3CostSort(tls *libc.TLS, pList uintptr) uintptr { 22758 bp := tls.Alloc(480) 22759 defer tls.Free(480) 22760 22761 var p uintptr 22762 var i int32 22763 var mx int32 = 0 22764 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 22765 *(*uintptr)(unsafe.Pointer(bp + 1*8)) = uintptr(0) 22766 for pList != 0 { 22767 p = pList 22768 pList = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext 22769 (*EditDist3Cost)(unsafe.Pointer(p)).FpNext = uintptr(0) 22770 for i = 0; *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) != 0; i++ { 22771 p = editDist3CostMerge(tls, *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)), p) 22772 *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = uintptr(0) 22773 } 22774 *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) = p 22775 if i > mx { 22776 mx = i 22777 *(*uintptr)(unsafe.Pointer(bp + uintptr(i+1)*8)) = uintptr(0) 22778 } 22779 } 22780 p = uintptr(0) 22781 for i = 0; i <= mx; i++ { 22782 if *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8)) != 0 { 22783 p = editDist3CostMerge(tls, p, *(*uintptr)(unsafe.Pointer(bp + uintptr(i)*8))) 22784 } 22785 } 22786 return p 22787 } 22788 22789 func editDist3ConfigLoad(tls *libc.TLS, p uintptr, db uintptr, zTable uintptr) int32 { 22790 bp := tls.Alloc(16) 22791 defer tls.Free(16) 22792 22793 var rc int32 22794 var rc2 int32 22795 var zSql uintptr 22796 var iLangPrev int32 = -9999 22797 var pLang uintptr = uintptr(0) 22798 22799 zSql = sqlite3.Xsqlite3_mprintf(tls, 22800 ts+7107, libc.VaList(bp, zTable)) 22801 if zSql == uintptr(0) { 22802 return SQLITE_NOMEM 22803 } 22804 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+8, uintptr(0)) 22805 sqlite3.Xsqlite3_free(tls, zSql) 22806 if rc != 0 { 22807 return rc 22808 } 22809 editDist3ConfigClear(tls, p) 22810 for sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) == SQLITE_ROW { 22811 var iLang int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0) 22812 var zFrom uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 22813 var nFrom int32 22814 if zFrom != 0 { 22815 nFrom = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 1) 22816 } else { 22817 nFrom = 0 22818 } 22819 var zTo uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 2) 22820 var nTo int32 22821 if zTo != 0 { 22822 nTo = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 2) 22823 } else { 22824 nTo = 0 22825 } 22826 var iCost int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 3) 22827 22828 if nFrom > 100 || nTo > 100 { 22829 continue 22830 } 22831 if iCost < 0 { 22832 continue 22833 } 22834 if iCost >= 10000 { 22835 continue 22836 } 22837 if pLang == uintptr(0) || iLang != iLangPrev { 22838 var pNew uintptr 22839 pNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3Config)(unsafe.Pointer(p)).Fa, uint64((*EditDist3Config)(unsafe.Pointer(p)).FnLang+1)*uint64(unsafe.Sizeof(EditDist3Lang{}))) 22840 if pNew == uintptr(0) { 22841 rc = SQLITE_NOMEM 22842 break 22843 } 22844 (*EditDist3Config)(unsafe.Pointer(p)).Fa = pNew 22845 pLang = (*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr((*EditDist3Config)(unsafe.Pointer(p)).FnLang)*24 22846 (*EditDist3Config)(unsafe.Pointer(p)).FnLang++ 22847 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiLang = iLang 22848 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost = 100 22849 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost = 100 22850 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost = 150 22851 (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost = uintptr(0) 22852 iLangPrev = iLang 22853 } 22854 if nFrom == 1 && int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && nTo == 0 { 22855 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost = iCost 22856 } else if nFrom == 0 && nTo == 1 && int32(*(*int8)(unsafe.Pointer(zTo))) == '?' { 22857 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost = iCost 22858 } else if nFrom == 1 && nTo == 1 && int32(*(*int8)(unsafe.Pointer(zFrom))) == '?' && int32(*(*int8)(unsafe.Pointer(zTo))) == '?' { 22859 (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost = iCost 22860 } else { 22861 var pCost uintptr 22862 var nExtra int32 = nFrom + nTo - 4 22863 if nExtra < 0 { 22864 nExtra = 0 22865 } 22866 pCost = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Cost{}))+uint64(nExtra)) 22867 if pCost == uintptr(0) { 22868 rc = SQLITE_NOMEM 22869 break 22870 } 22871 (*EditDist3Cost)(unsafe.Pointer(pCost)).FnFrom = u8(nFrom) 22872 (*EditDist3Cost)(unsafe.Pointer(pCost)).FnTo = u8(nTo) 22873 (*EditDist3Cost)(unsafe.Pointer(pCost)).FiCost = u16(iCost) 22874 libc.X__builtin___memcpy_chk(tls, pCost+12, zFrom, uint64(nFrom), libc.X__builtin_object_size(tls, pCost+12, 0)) 22875 libc.X__builtin___memcpy_chk(tls, pCost+12+uintptr(nFrom), zTo, uint64(nTo), libc.X__builtin_object_size(tls, pCost+12+uintptr(nFrom), 0)) 22876 (*EditDist3Cost)(unsafe.Pointer(pCost)).FpNext = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost 22877 (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost = pCost 22878 } 22879 } 22880 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 22881 if rc == SQLITE_OK { 22882 rc = rc2 22883 } 22884 if rc == SQLITE_OK { 22885 var iLang int32 22886 for iLang = 0; iLang < (*EditDist3Config)(unsafe.Pointer(p)).FnLang; iLang++ { 22887 (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(p)).Fa + uintptr(iLang)*24)).FpCost = editDist3CostSort(tls, (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(p)).Fa+uintptr(iLang)*24)).FpCost) 22888 } 22889 } 22890 return rc 22891 } 22892 22893 func utf8Len(tls *libc.TLS, c uint8, N int32) int32 { 22894 var len int32 = 1 22895 if int32(c) > 0x7f { 22896 if int32(c)&0xe0 == 0xc0 { 22897 len = 2 22898 } else if int32(c)&0xf0 == 0xe0 { 22899 len = 3 22900 } else { 22901 len = 4 22902 } 22903 } 22904 if len > N { 22905 len = N 22906 } 22907 return len 22908 } 22909 22910 func matchTo(tls *libc.TLS, p uintptr, z uintptr, n int32) int32 { 22911 if int32(*(*int8)(unsafe.Pointer(p + 12 + uintptr((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)))) != int32(*(*int8)(unsafe.Pointer(z))) { 22912 return 0 22913 } 22914 if int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) > n { 22915 return 0 22916 } 22917 if libc.Xstrncmp(tls, p+12+uintptr((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), z, uint64((*EditDist3Cost)(unsafe.Pointer(p)).FnTo)) != 0 { 22918 return 0 22919 } 22920 return 1 22921 } 22922 22923 func matchFrom(tls *libc.TLS, p uintptr, z uintptr, n int32) int32 { 22924 if (*EditDist3Cost)(unsafe.Pointer(p)).FnFrom != 0 { 22925 if int32(*(*int8)(unsafe.Pointer(p + 12))) != int32(*(*int8)(unsafe.Pointer(z))) { 22926 return 0 22927 } 22928 if libc.Xstrncmp(tls, p+12, z, uint64((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)) != 0 { 22929 return 0 22930 } 22931 } 22932 return 1 22933 } 22934 22935 func matchFromTo(tls *libc.TLS, pStr uintptr, n1 int32, z2 uintptr, n2 int32) int32 { 22936 var b1 int32 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(n1)*32)).FnByte 22937 if b1 > n2 { 22938 return 0 22939 } 22940 22941 if int32(*(*int8)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fz + uintptr(n1)))) != int32(*(*int8)(unsafe.Pointer(z2))) { 22942 return 0 22943 } 22944 if libc.Xstrncmp(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz+uintptr(n1), z2, uint64(b1)) != 0 { 22945 return 0 22946 } 22947 return 1 22948 } 22949 22950 func editDist3FromStringDelete(tls *libc.TLS, p uintptr) { 22951 var i int32 22952 if p != 0 { 22953 for i = 0; i < (*EditDist3FromString)(unsafe.Pointer(p)).Fn; i++ { 22954 sqlite3.Xsqlite3_free(tls, (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(p)).Fa+uintptr(i)*32)).FapDel) 22955 sqlite3.Xsqlite3_free(tls, (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(p)).Fa+uintptr(i)*32)).FapSubst) 22956 } 22957 sqlite3.Xsqlite3_free(tls, p) 22958 } 22959 } 22960 22961 func editDist3FromStringNew(tls *libc.TLS, pLang uintptr, z uintptr, n int32) uintptr { 22962 var pStr uintptr 22963 var p uintptr 22964 var i int32 22965 22966 if z == uintptr(0) { 22967 return uintptr(0) 22968 } 22969 if n < 0 { 22970 n = int32(libc.Xstrlen(tls, z)) 22971 } 22972 pStr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3FromString{}))+uint64(unsafe.Sizeof(EditDist3From{}))*uint64(n)+uint64(n)+uint64(1)) 22973 if pStr == uintptr(0) { 22974 return uintptr(0) 22975 } 22976 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa = pStr + 1*24 22977 libc.X__builtin___memset_chk(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa, 0, uint64(unsafe.Sizeof(EditDist3From{}))*uint64(n), libc.X__builtin_object_size(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa, 0)) 22978 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fn = n 22979 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz = (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(n)*32 22980 libc.X__builtin___memcpy_chk(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz, z, uint64(n+1), libc.X__builtin_object_size(tls, (*EditDist3FromString)(unsafe.Pointer(pStr)).Fz, 0)) 22981 if n != 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(n-1)))) == '*' { 22982 (*EditDist3FromString)(unsafe.Pointer(pStr)).FisPrefix = 1 22983 n-- 22984 (*EditDist3FromString)(unsafe.Pointer(pStr)).Fn-- 22985 *(*int8)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(pStr)).Fz + uintptr(n))) = int8(0) 22986 } else { 22987 (*EditDist3FromString)(unsafe.Pointer(pStr)).FisPrefix = 0 22988 } 22989 22990 for i = 0; i < n; i++ { 22991 var pFrom uintptr = (*EditDist3FromString)(unsafe.Pointer(pStr)).Fa + uintptr(i)*32 22992 libc.X__builtin___memset_chk(tls, pFrom, 0, uint64(unsafe.Sizeof(EditDist3From{})), libc.X__builtin_object_size(tls, pFrom, 0)) 22993 (*EditDist3From)(unsafe.Pointer(pFrom)).FnByte = utf8Len(tls, uint8(*(*int8)(unsafe.Pointer(z + uintptr(i)))), n-i) 22994 for p = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost; p != 0; p = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext { 22995 var apNew uintptr 22996 if i+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom) > n { 22997 continue 22998 } 22999 if matchFrom(tls, p, z+uintptr(i), n-i) == 0 { 23000 continue 23001 } 23002 if int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) == 0 { 23003 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3From)(unsafe.Pointer(pFrom)).FapDel, 23004 uint64(unsafe.Sizeof(uintptr(0)))*uint64((*EditDist3From)(unsafe.Pointer(pFrom)).FnDel+1)) 23005 if apNew == uintptr(0) { 23006 break 23007 } 23008 (*EditDist3From)(unsafe.Pointer(pFrom)).FapDel = apNew 23009 *(*uintptr)(unsafe.Pointer(apNew + uintptr(libc.PostIncInt32(&(*EditDist3From)(unsafe.Pointer(pFrom)).FnDel, 1))*8)) = p 23010 } else { 23011 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3From)(unsafe.Pointer(pFrom)).FapSubst, 23012 uint64(unsafe.Sizeof(uintptr(0)))*uint64((*EditDist3From)(unsafe.Pointer(pFrom)).FnSubst+1)) 23013 if apNew == uintptr(0) { 23014 break 23015 } 23016 (*EditDist3From)(unsafe.Pointer(pFrom)).FapSubst = apNew 23017 *(*uintptr)(unsafe.Pointer(apNew + uintptr(libc.PostIncInt32(&(*EditDist3From)(unsafe.Pointer(pFrom)).FnSubst, 1))*8)) = p 23018 } 23019 } 23020 if p != 0 { 23021 editDist3FromStringDelete(tls, pStr) 23022 pStr = uintptr(0) 23023 break 23024 } 23025 } 23026 return pStr 23027 } 23028 23029 func updateCost(tls *libc.TLS, m uintptr, i int32, j int32, iCost int32) { 23030 var b uint32 23031 23032 b = *(*uint32)(unsafe.Pointer(m + uintptr(j)*4)) + uint32(iCost) 23033 if b < *(*uint32)(unsafe.Pointer(m + uintptr(i)*4)) { 23034 *(*uint32)(unsafe.Pointer(m + uintptr(i)*4)) = b 23035 } 23036 } 23037 23038 func editDist3Core(tls *libc.TLS, pFrom uintptr, z2 uintptr, n2 int32, pLang uintptr, pnMatch uintptr) int32 { 23039 bp := tls.Alloc(1048) 23040 defer tls.Free(1048) 23041 23042 var k int32 23043 var n int32 23044 var i1 int32 23045 var b1 int32 23046 var i2 int32 23047 var b2 int32 23048 23049 var a2 uintptr 23050 var m uintptr 23051 var pToFree uintptr 23052 var szRow int32 23053 var p uintptr 23054 var res int32 23055 var nByte sqlite3_uint64 23056 23057 var apNew uintptr 23058 var cx int32 23059 var cxp int32 23060 var cxd int32 23061 var cxu int32 23062 var rx int32 23063 var rxp int32 23064 var b int32 23065 var nExtra int32 23066 *(*EditDist3FromString)(unsafe.Pointer(bp + 1024)) = *(*EditDist3FromString)(unsafe.Pointer(pFrom)) 23067 23068 n = ((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn + 1) * (n2 + 1) 23069 n = (n + 1) & libc.CplInt32(1) 23070 nByte = uint64(n)*uint64(unsafe.Sizeof(uint32(0))) + uint64(unsafe.Sizeof(EditDist3To{}))*uint64(n2) 23071 if !(nByte <= sqlite3_uint64(unsafe.Sizeof([256]uint32{}))) { 23072 goto __1 23073 } 23074 m = bp 23075 pToFree = uintptr(0) 23076 goto __2 23077 __1: 23078 m = libc.AssignUintptr(&pToFree, sqlite3.Xsqlite3_malloc64(tls, nByte)) 23079 if !(m == uintptr(0)) { 23080 goto __3 23081 } 23082 return -1 23083 __3: 23084 ; 23085 __2: 23086 ; 23087 a2 = m + uintptr(n)*4 23088 libc.X__builtin___memset_chk(tls, a2, 0, uint64(unsafe.Sizeof(EditDist3To{}))*uint64(n2), libc.X__builtin_object_size(tls, a2, 0)) 23089 23090 i2 = 0 23091 __4: 23092 if !(i2 < n2) { 23093 goto __6 23094 } 23095 (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FnByte = utf8Len(tls, uint8(*(*int8)(unsafe.Pointer(z2 + uintptr(i2)))), n2-i2) 23096 p = (*EditDist3Lang)(unsafe.Pointer(pLang)).FpCost 23097 __7: 23098 if !(p != 0) { 23099 goto __9 23100 } 23101 if !(int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom) > 0) { 23102 goto __10 23103 } 23104 goto __9 23105 __10: 23106 ; 23107 if !(i2+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo) > n2) { 23108 goto __11 23109 } 23110 goto __8 23111 __11: 23112 ; 23113 if !(int32(*(*int8)(unsafe.Pointer(p + 12))) > int32(*(*int8)(unsafe.Pointer(z2 + uintptr(i2))))) { 23114 goto __12 23115 } 23116 goto __9 23117 __12: 23118 ; 23119 if !(matchTo(tls, p, z2+uintptr(i2), n2-i2) == 0) { 23120 goto __13 23121 } 23122 goto __8 23123 __13: 23124 ; 23125 (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns++ 23126 apNew = sqlite3.Xsqlite3_realloc64(tls, (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns, uint64(unsafe.Sizeof(uintptr(0)))*uint64((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns)) 23127 if !(apNew == uintptr(0)) { 23128 goto __14 23129 } 23130 res = -1 23131 goto editDist3Abort 23132 __14: 23133 ; 23134 (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FapIns = apNew 23135 *(*uintptr)(unsafe.Pointer((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns + uintptr((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns-1)*8)) = p 23136 goto __8 23137 __8: 23138 p = (*EditDist3Cost)(unsafe.Pointer(p)).FpNext 23139 goto __7 23140 goto __9 23141 __9: 23142 ; 23143 goto __5 23144 __5: 23145 i2++ 23146 goto __4 23147 goto __6 23148 __6: 23149 ; 23150 szRow = (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn + 1 23151 libc.X__builtin___memset_chk(tls, m, 0x01, uint64((n2+1)*szRow)*uint64(unsafe.Sizeof(uint32(0))), libc.X__builtin_object_size(tls, m, 0)) 23152 *(*uint32)(unsafe.Pointer(m)) = uint32(0) 23153 23154 i1 = 0 23155 __15: 23156 if !(i1 < (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn) { 23157 goto __17 23158 } 23159 b1 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa + uintptr(i1)*32)).FnByte 23160 updateCost(tls, m, i1+b1, i1, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost) 23161 k = 0 23162 __18: 23163 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnDel) { 23164 goto __20 23165 } 23166 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapDel + uintptr(k)*8)) 23167 updateCost(tls, m, i1+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), i1, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 23168 goto __19 23169 __19: 23170 k++ 23171 goto __18 23172 goto __20 23173 __20: 23174 ; 23175 goto __16 23176 __16: 23177 i1 = i1 + b1 23178 goto __15 23179 goto __17 23180 __17: 23181 ; 23182 i2 = 0 23183 __21: 23184 if !(i2 < n2) { 23185 goto __23 23186 } 23187 b2 = (*EditDist3To)(unsafe.Pointer(a2 + uintptr(i2)*16)).FnByte 23188 rx = szRow * (i2 + b2) 23189 rxp = szRow * i2 23190 updateCost(tls, m, rx, rxp, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost) 23191 k = 0 23192 __24: 23193 if !(k < (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FnIns) { 23194 goto __26 23195 } 23196 p = *(*uintptr)(unsafe.Pointer((*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns + uintptr(k)*8)) 23197 updateCost(tls, m, szRow*(i2+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo)), rxp, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 23198 goto __25 23199 __25: 23200 k++ 23201 goto __24 23202 goto __26 23203 __26: 23204 ; 23205 i1 = 0 23206 __27: 23207 if !(i1 < (*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fn) { 23208 goto __29 23209 } 23210 b1 = (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa + uintptr(i1)*32)).FnByte 23211 cxp = rx + i1 23212 cx = cxp + b1 23213 cxd = rxp + i1 23214 cxu = cxd + b1 23215 updateCost(tls, m, cx, cxp, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiDelCost) 23216 k = 0 23217 __30: 23218 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnDel) { 23219 goto __32 23220 } 23221 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapDel + uintptr(k)*8)) 23222 updateCost(tls, m, cxp+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom), cxp, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 23223 goto __31 23224 __31: 23225 k++ 23226 goto __30 23227 goto __32 23228 __32: 23229 ; 23230 updateCost(tls, m, cx, cxu, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiInsCost) 23231 if !(matchFromTo(tls, bp+1024, i1, z2+uintptr(i2), n2-i2) != 0) { 23232 goto __33 23233 } 23234 updateCost(tls, m, cx, cxd, 0) 23235 __33: 23236 ; 23237 updateCost(tls, m, cx, cxd, (*EditDist3Lang)(unsafe.Pointer(pLang)).FiSubCost) 23238 k = 0 23239 __34: 23240 if !(k < (*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FnSubst) { 23241 goto __36 23242 } 23243 p = *(*uintptr)(unsafe.Pointer((*EditDist3From)(unsafe.Pointer((*EditDist3FromString)(unsafe.Pointer(bp+1024)).Fa+uintptr(i1)*32)).FapSubst + uintptr(k)*8)) 23244 if !(matchTo(tls, p, z2+uintptr(i2), n2-i2) != 0) { 23245 goto __37 23246 } 23247 updateCost(tls, m, cxd+int32((*EditDist3Cost)(unsafe.Pointer(p)).FnFrom)+szRow*int32((*EditDist3Cost)(unsafe.Pointer(p)).FnTo), cxd, int32((*EditDist3Cost)(unsafe.Pointer(p)).FiCost)) 23248 __37: 23249 ; 23250 goto __35 23251 __35: 23252 k++ 23253 goto __34 23254 goto __36 23255 __36: 23256 ; 23257 goto __28 23258 __28: 23259 i1 = i1 + b1 23260 goto __27 23261 goto __29 23262 __29: 23263 ; 23264 goto __22 23265 __22: 23266 i2 = i2 + b2 23267 goto __21 23268 goto __23 23269 __23: 23270 ; 23271 res = int32(*(*uint32)(unsafe.Pointer(m + uintptr(szRow*(n2+1)-1)*4))) 23272 n = n2 23273 if !((*EditDist3FromString)(unsafe.Pointer(bp+1024)).FisPrefix != 0) { 23274 goto __38 23275 } 23276 i2 = 1 23277 __39: 23278 if !(i2 <= n2) { 23279 goto __41 23280 } 23281 b = int32(*(*uint32)(unsafe.Pointer(m + uintptr(szRow*i2-1)*4))) 23282 if !(b <= res) { 23283 goto __42 23284 } 23285 res = b 23286 n = i2 - 1 23287 __42: 23288 ; 23289 goto __40 23290 __40: 23291 i2++ 23292 goto __39 23293 goto __41 23294 __41: 23295 ; 23296 __38: 23297 ; 23298 if !(pnMatch != 0) { 23299 goto __43 23300 } 23301 nExtra = 0 23302 k = 0 23303 __44: 23304 if !(k < n) { 23305 goto __46 23306 } 23307 if !(int32(*(*int8)(unsafe.Pointer(z2 + uintptr(k))))&0xc0 == 0x80) { 23308 goto __47 23309 } 23310 nExtra++ 23311 __47: 23312 ; 23313 goto __45 23314 __45: 23315 k++ 23316 goto __44 23317 goto __46 23318 __46: 23319 ; 23320 *(*int32)(unsafe.Pointer(pnMatch)) = n - nExtra 23321 __43: 23322 ; 23323 editDist3Abort: 23324 i2 = 0 23325 __48: 23326 if !(i2 < n2) { 23327 goto __50 23328 } 23329 sqlite3.Xsqlite3_free(tls, (*EditDist3To)(unsafe.Pointer(a2+uintptr(i2)*16)).FapIns) 23330 goto __49 23331 __49: 23332 i2++ 23333 goto __48 23334 goto __50 23335 __50: 23336 ; 23337 sqlite3.Xsqlite3_free(tls, pToFree) 23338 return res 23339 } 23340 23341 func editDist3FindLang(tls *libc.TLS, pConfig uintptr, iLang int32) uintptr { 23342 var i int32 23343 for i = 0; i < (*EditDist3Config)(unsafe.Pointer(pConfig)).FnLang; i++ { 23344 if (*EditDist3Lang)(unsafe.Pointer((*EditDist3Config)(unsafe.Pointer(pConfig)).Fa+uintptr(i)*24)).FiLang == iLang { 23345 return (*EditDist3Config)(unsafe.Pointer(pConfig)).Fa + uintptr(i)*24 23346 } 23347 } 23348 return uintptr(unsafe.Pointer(&editDist3Lang)) 23349 } 23350 23351 func editDist3SqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 23352 var pConfig uintptr = sqlite3.Xsqlite3_user_data(tls, context) 23353 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 23354 var rc int32 23355 if argc == 1 { 23356 var zTable uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 23357 rc = editDist3ConfigLoad(tls, pConfig, db, zTable) 23358 if rc != 0 { 23359 sqlite3.Xsqlite3_result_error_code(tls, context, rc) 23360 } 23361 } else { 23362 var zA uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 23363 var zB uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 23364 var nA int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 23365 var nB int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 23366 var iLang int32 23367 if argc == 3 { 23368 iLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 23369 } else { 23370 iLang = 0 23371 } 23372 var pLang uintptr = editDist3FindLang(tls, pConfig, iLang) 23373 var pFrom uintptr 23374 var dist int32 23375 23376 pFrom = editDist3FromStringNew(tls, pLang, zA, nA) 23377 if pFrom == uintptr(0) { 23378 sqlite3.Xsqlite3_result_error_nomem(tls, context) 23379 return 23380 } 23381 dist = editDist3Core(tls, pFrom, zB, nB, pLang, uintptr(0)) 23382 editDist3FromStringDelete(tls, pFrom) 23383 if dist == -1 { 23384 sqlite3.Xsqlite3_result_error_nomem(tls, context) 23385 } else { 23386 sqlite3.Xsqlite3_result_int(tls, context, dist) 23387 } 23388 } 23389 } 23390 23391 func editDist3Install(tls *libc.TLS, db uintptr) int32 { 23392 var rc int32 23393 var pConfig uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Config{}))) 23394 if pConfig == uintptr(0) { 23395 return SQLITE_NOMEM 23396 } 23397 libc.X__builtin___memset_chk(tls, pConfig, 0, uint64(unsafe.Sizeof(EditDist3Config{})), libc.X__builtin_object_size(tls, pConfig, 0)) 23398 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 23399 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 23400 *(*uintptr)(unsafe.Pointer(&struct { 23401 f func(*libc.TLS, uintptr, int32, uintptr) 23402 }{editDist3SqlFunc})), uintptr(0), uintptr(0), uintptr(0)) 23403 if rc == SQLITE_OK { 23404 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 23405 3, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 23406 *(*uintptr)(unsafe.Pointer(&struct { 23407 f func(*libc.TLS, uintptr, int32, uintptr) 23408 }{editDist3SqlFunc})), uintptr(0), uintptr(0), uintptr(0)) 23409 } 23410 if rc == SQLITE_OK { 23411 rc = sqlite3.Xsqlite3_create_function_v2(tls, db, ts+7179, 23412 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, pConfig, 23413 *(*uintptr)(unsafe.Pointer(&struct { 23414 f func(*libc.TLS, uintptr, int32, uintptr) 23415 }{editDist3SqlFunc})), uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{editDist3ConfigDelete}))) 23416 } else { 23417 sqlite3.Xsqlite3_free(tls, pConfig) 23418 } 23419 return rc 23420 } 23421 23422 var sqlite3Utf8Trans1 = [64]uint8{ 23423 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 23424 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 23425 uint8(0x10), uint8(0x11), uint8(0x12), uint8(0x13), uint8(0x14), uint8(0x15), uint8(0x16), uint8(0x17), 23426 uint8(0x18), uint8(0x19), uint8(0x1a), uint8(0x1b), uint8(0x1c), uint8(0x1d), uint8(0x1e), uint8(0x1f), 23427 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 23428 uint8(0x08), uint8(0x09), uint8(0x0a), uint8(0x0b), uint8(0x0c), uint8(0x0d), uint8(0x0e), uint8(0x0f), 23429 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x04), uint8(0x05), uint8(0x06), uint8(0x07), 23430 uint8(0x00), uint8(0x01), uint8(0x02), uint8(0x03), uint8(0x00), uint8(0x01), uint8(0x00), uint8(0x00), 23431 } 23432 23433 func utf8Read(tls *libc.TLS, z uintptr, n int32, pSize uintptr) int32 { 23434 var c int32 23435 var i int32 23436 23437 if 0 != 0 { 23438 c = libc.AssignInt32(&i, 0) 23439 } else { 23440 c = int32(*(*uint8)(unsafe.Pointer(z))) 23441 i = 1 23442 if c >= 0xc0 { 23443 c = int32(sqlite3Utf8Trans1[c-0xc0]) 23444 for i < n && int32(*(*uint8)(unsafe.Pointer(z + uintptr(i))))&0xc0 == 0x80 { 23445 c = c<<6 + 0x3f&int32(*(*uint8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&i, 1))))) 23446 } 23447 } 23448 } 23449 *(*int32)(unsafe.Pointer(pSize)) = i 23450 return c 23451 } 23452 23453 func utf8Charlen(tls *libc.TLS, zIn uintptr, nIn int32) int32 { 23454 bp := tls.Alloc(4) 23455 defer tls.Free(4) 23456 23457 var i int32 23458 var nChar int32 = 0 23459 for i = 0; i < nIn; nChar++ { 23460 utf8Read(tls, zIn+uintptr(i), nIn-i, bp) 23461 i = i + *(*int32)(unsafe.Pointer(bp)) 23462 } 23463 return nChar 23464 } 23465 23466 type Transliteration1 = struct { 23467 FcFrom uint16 23468 FcTo0 uint8 23469 FcTo1 uint8 23470 FcTo2 uint8 23471 FcTo3 uint8 23472 } 23473 23474 type Transliteration = Transliteration1 23475 23476 var translit = [389]Transliteration{ 23477 {FcFrom: uint16(0x00A0), FcTo0: uint8(0x20)}, 23478 {FcFrom: uint16(0x00B5), FcTo0: uint8(0x75)}, 23479 {FcFrom: uint16(0x00C0), FcTo0: uint8(0x41)}, 23480 {FcFrom: uint16(0x00C1), FcTo0: uint8(0x41)}, 23481 {FcFrom: uint16(0x00C2), FcTo0: uint8(0x41)}, 23482 {FcFrom: uint16(0x00C3), FcTo0: uint8(0x41)}, 23483 {FcFrom: uint16(0x00C4), FcTo0: uint8(0x41), FcTo1: uint8(0x65)}, 23484 {FcFrom: uint16(0x00C5), FcTo0: uint8(0x41), FcTo1: uint8(0x61)}, 23485 {FcFrom: uint16(0x00C6), FcTo0: uint8(0x41), FcTo1: uint8(0x45)}, 23486 {FcFrom: uint16(0x00C7), FcTo0: uint8(0x43)}, 23487 {FcFrom: uint16(0x00C8), FcTo0: uint8(0x45)}, 23488 {FcFrom: uint16(0x00C9), FcTo0: uint8(0x45)}, 23489 {FcFrom: uint16(0x00CA), FcTo0: uint8(0x45)}, 23490 {FcFrom: uint16(0x00CB), FcTo0: uint8(0x45)}, 23491 {FcFrom: uint16(0x00CC), FcTo0: uint8(0x49)}, 23492 {FcFrom: uint16(0x00CD), FcTo0: uint8(0x49)}, 23493 {FcFrom: uint16(0x00CE), FcTo0: uint8(0x49)}, 23494 {FcFrom: uint16(0x00CF), FcTo0: uint8(0x49)}, 23495 {FcFrom: uint16(0x00D0), FcTo0: uint8(0x44)}, 23496 {FcFrom: uint16(0x00D1), FcTo0: uint8(0x4E)}, 23497 {FcFrom: uint16(0x00D2), FcTo0: uint8(0x4F)}, 23498 {FcFrom: uint16(0x00D3), FcTo0: uint8(0x4F)}, 23499 {FcFrom: uint16(0x00D4), FcTo0: uint8(0x4F)}, 23500 {FcFrom: uint16(0x00D5), FcTo0: uint8(0x4F)}, 23501 {FcFrom: uint16(0x00D6), FcTo0: uint8(0x4F), FcTo1: uint8(0x65)}, 23502 {FcFrom: uint16(0x00D7), FcTo0: uint8(0x78)}, 23503 {FcFrom: uint16(0x00D8), FcTo0: uint8(0x4F)}, 23504 {FcFrom: uint16(0x00D9), FcTo0: uint8(0x55)}, 23505 {FcFrom: uint16(0x00DA), FcTo0: uint8(0x55)}, 23506 {FcFrom: uint16(0x00DB), FcTo0: uint8(0x55)}, 23507 {FcFrom: uint16(0x00DC), FcTo0: uint8(0x55), FcTo1: uint8(0x65)}, 23508 {FcFrom: uint16(0x00DD), FcTo0: uint8(0x59)}, 23509 {FcFrom: uint16(0x00DE), FcTo0: uint8(0x54), FcTo1: uint8(0x68)}, 23510 {FcFrom: uint16(0x00DF), FcTo0: uint8(0x73), FcTo1: uint8(0x73)}, 23511 {FcFrom: uint16(0x00E0), FcTo0: uint8(0x61)}, 23512 {FcFrom: uint16(0x00E1), FcTo0: uint8(0x61)}, 23513 {FcFrom: uint16(0x00E2), FcTo0: uint8(0x61)}, 23514 {FcFrom: uint16(0x00E3), FcTo0: uint8(0x61)}, 23515 {FcFrom: uint16(0x00E4), FcTo0: uint8(0x61), FcTo1: uint8(0x65)}, 23516 {FcFrom: uint16(0x00E5), FcTo0: uint8(0x61), FcTo1: uint8(0x61)}, 23517 {FcFrom: uint16(0x00E6), FcTo0: uint8(0x61), FcTo1: uint8(0x65)}, 23518 {FcFrom: uint16(0x00E7), FcTo0: uint8(0x63)}, 23519 {FcFrom: uint16(0x00E8), FcTo0: uint8(0x65)}, 23520 {FcFrom: uint16(0x00E9), FcTo0: uint8(0x65)}, 23521 {FcFrom: uint16(0x00EA), FcTo0: uint8(0x65)}, 23522 {FcFrom: uint16(0x00EB), FcTo0: uint8(0x65)}, 23523 {FcFrom: uint16(0x00EC), FcTo0: uint8(0x69)}, 23524 {FcFrom: uint16(0x00ED), FcTo0: uint8(0x69)}, 23525 {FcFrom: uint16(0x00EE), FcTo0: uint8(0x69)}, 23526 {FcFrom: uint16(0x00EF), FcTo0: uint8(0x69)}, 23527 {FcFrom: uint16(0x00F0), FcTo0: uint8(0x64)}, 23528 {FcFrom: uint16(0x00F1), FcTo0: uint8(0x6E)}, 23529 {FcFrom: uint16(0x00F2), FcTo0: uint8(0x6F)}, 23530 {FcFrom: uint16(0x00F3), FcTo0: uint8(0x6F)}, 23531 {FcFrom: uint16(0x00F4), FcTo0: uint8(0x6F)}, 23532 {FcFrom: uint16(0x00F5), FcTo0: uint8(0x6F)}, 23533 {FcFrom: uint16(0x00F6), FcTo0: uint8(0x6F), FcTo1: uint8(0x65)}, 23534 {FcFrom: uint16(0x00F7), FcTo0: uint8(0x3A)}, 23535 {FcFrom: uint16(0x00F8), FcTo0: uint8(0x6F)}, 23536 {FcFrom: uint16(0x00F9), FcTo0: uint8(0x75)}, 23537 {FcFrom: uint16(0x00FA), FcTo0: uint8(0x75)}, 23538 {FcFrom: uint16(0x00FB), FcTo0: uint8(0x75)}, 23539 {FcFrom: uint16(0x00FC), FcTo0: uint8(0x75), FcTo1: uint8(0x65)}, 23540 {FcFrom: uint16(0x00FD), FcTo0: uint8(0x79)}, 23541 {FcFrom: uint16(0x00FE), FcTo0: uint8(0x74), FcTo1: uint8(0x68)}, 23542 {FcFrom: uint16(0x00FF), FcTo0: uint8(0x79)}, 23543 {FcFrom: uint16(0x0100), FcTo0: uint8(0x41)}, 23544 {FcFrom: uint16(0x0101), FcTo0: uint8(0x61)}, 23545 {FcFrom: uint16(0x0102), FcTo0: uint8(0x41)}, 23546 {FcFrom: uint16(0x0103), FcTo0: uint8(0x61)}, 23547 {FcFrom: uint16(0x0104), FcTo0: uint8(0x41)}, 23548 {FcFrom: uint16(0x0105), FcTo0: uint8(0x61)}, 23549 {FcFrom: uint16(0x0106), FcTo0: uint8(0x43)}, 23550 {FcFrom: uint16(0x0107), FcTo0: uint8(0x63)}, 23551 {FcFrom: uint16(0x0108), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 23552 {FcFrom: uint16(0x0109), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 23553 {FcFrom: uint16(0x010A), FcTo0: uint8(0x43)}, 23554 {FcFrom: uint16(0x010B), FcTo0: uint8(0x63)}, 23555 {FcFrom: uint16(0x010C), FcTo0: uint8(0x43)}, 23556 {FcFrom: uint16(0x010D), FcTo0: uint8(0x63)}, 23557 {FcFrom: uint16(0x010E), FcTo0: uint8(0x44)}, 23558 {FcFrom: uint16(0x010F), FcTo0: uint8(0x64)}, 23559 {FcFrom: uint16(0x0110), FcTo0: uint8(0x44)}, 23560 {FcFrom: uint16(0x0111), FcTo0: uint8(0x64)}, 23561 {FcFrom: uint16(0x0112), FcTo0: uint8(0x45)}, 23562 {FcFrom: uint16(0x0113), FcTo0: uint8(0x65)}, 23563 {FcFrom: uint16(0x0114), FcTo0: uint8(0x45)}, 23564 {FcFrom: uint16(0x0115), FcTo0: uint8(0x65)}, 23565 {FcFrom: uint16(0x0116), FcTo0: uint8(0x45)}, 23566 {FcFrom: uint16(0x0117), FcTo0: uint8(0x65)}, 23567 {FcFrom: uint16(0x0118), FcTo0: uint8(0x45)}, 23568 {FcFrom: uint16(0x0119), FcTo0: uint8(0x65)}, 23569 {FcFrom: uint16(0x011A), FcTo0: uint8(0x45)}, 23570 {FcFrom: uint16(0x011B), FcTo0: uint8(0x65)}, 23571 {FcFrom: uint16(0x011C), FcTo0: uint8(0x47), FcTo1: uint8(0x68)}, 23572 {FcFrom: uint16(0x011D), FcTo0: uint8(0x67), FcTo1: uint8(0x68)}, 23573 {FcFrom: uint16(0x011E), FcTo0: uint8(0x47)}, 23574 {FcFrom: uint16(0x011F), FcTo0: uint8(0x67)}, 23575 {FcFrom: uint16(0x0120), FcTo0: uint8(0x47)}, 23576 {FcFrom: uint16(0x0121), FcTo0: uint8(0x67)}, 23577 {FcFrom: uint16(0x0122), FcTo0: uint8(0x47)}, 23578 {FcFrom: uint16(0x0123), FcTo0: uint8(0x67)}, 23579 {FcFrom: uint16(0x0124), FcTo0: uint8(0x48), FcTo1: uint8(0x68)}, 23580 {FcFrom: uint16(0x0125), FcTo0: uint8(0x68), FcTo1: uint8(0x68)}, 23581 {FcFrom: uint16(0x0126), FcTo0: uint8(0x48)}, 23582 {FcFrom: uint16(0x0127), FcTo0: uint8(0x68)}, 23583 {FcFrom: uint16(0x0128), FcTo0: uint8(0x49)}, 23584 {FcFrom: uint16(0x0129), FcTo0: uint8(0x69)}, 23585 {FcFrom: uint16(0x012A), FcTo0: uint8(0x49)}, 23586 {FcFrom: uint16(0x012B), FcTo0: uint8(0x69)}, 23587 {FcFrom: uint16(0x012C), FcTo0: uint8(0x49)}, 23588 {FcFrom: uint16(0x012D), FcTo0: uint8(0x69)}, 23589 {FcFrom: uint16(0x012E), FcTo0: uint8(0x49)}, 23590 {FcFrom: uint16(0x012F), FcTo0: uint8(0x69)}, 23591 {FcFrom: uint16(0x0130), FcTo0: uint8(0x49)}, 23592 {FcFrom: uint16(0x0131), FcTo0: uint8(0x69)}, 23593 {FcFrom: uint16(0x0132), FcTo0: uint8(0x49), FcTo1: uint8(0x4A)}, 23594 {FcFrom: uint16(0x0133), FcTo0: uint8(0x69), FcTo1: uint8(0x6A)}, 23595 {FcFrom: uint16(0x0134), FcTo0: uint8(0x4A), FcTo1: uint8(0x68)}, 23596 {FcFrom: uint16(0x0135), FcTo0: uint8(0x6A), FcTo1: uint8(0x68)}, 23597 {FcFrom: uint16(0x0136), FcTo0: uint8(0x4B)}, 23598 {FcFrom: uint16(0x0137), FcTo0: uint8(0x6B)}, 23599 {FcFrom: uint16(0x0138), FcTo0: uint8(0x6B)}, 23600 {FcFrom: uint16(0x0139), FcTo0: uint8(0x4C)}, 23601 {FcFrom: uint16(0x013A), FcTo0: uint8(0x6C)}, 23602 {FcFrom: uint16(0x013B), FcTo0: uint8(0x4C)}, 23603 {FcFrom: uint16(0x013C), FcTo0: uint8(0x6C)}, 23604 {FcFrom: uint16(0x013D), FcTo0: uint8(0x4C)}, 23605 {FcFrom: uint16(0x013E), FcTo0: uint8(0x6C)}, 23606 {FcFrom: uint16(0x013F), FcTo0: uint8(0x4C), FcTo1: uint8(0x2E)}, 23607 {FcFrom: uint16(0x0140), FcTo0: uint8(0x6C), FcTo1: uint8(0x2E)}, 23608 {FcFrom: uint16(0x0141), FcTo0: uint8(0x4C)}, 23609 {FcFrom: uint16(0x0142), FcTo0: uint8(0x6C)}, 23610 {FcFrom: uint16(0x0143), FcTo0: uint8(0x4E)}, 23611 {FcFrom: uint16(0x0144), FcTo0: uint8(0x6E)}, 23612 {FcFrom: uint16(0x0145), FcTo0: uint8(0x4E)}, 23613 {FcFrom: uint16(0x0146), FcTo0: uint8(0x6E)}, 23614 {FcFrom: uint16(0x0147), FcTo0: uint8(0x4E)}, 23615 {FcFrom: uint16(0x0148), FcTo0: uint8(0x6E)}, 23616 {FcFrom: uint16(0x0149), FcTo0: uint8(0x27), FcTo1: uint8(0x6E)}, 23617 {FcFrom: uint16(0x014A), FcTo0: uint8(0x4E), FcTo1: uint8(0x47)}, 23618 {FcFrom: uint16(0x014B), FcTo0: uint8(0x6E), FcTo1: uint8(0x67)}, 23619 {FcFrom: uint16(0x014C), FcTo0: uint8(0x4F)}, 23620 {FcFrom: uint16(0x014D), FcTo0: uint8(0x6F)}, 23621 {FcFrom: uint16(0x014E), FcTo0: uint8(0x4F)}, 23622 {FcFrom: uint16(0x014F), FcTo0: uint8(0x6F)}, 23623 {FcFrom: uint16(0x0150), FcTo0: uint8(0x4F)}, 23624 {FcFrom: uint16(0x0151), FcTo0: uint8(0x6F)}, 23625 {FcFrom: uint16(0x0152), FcTo0: uint8(0x4F), FcTo1: uint8(0x45)}, 23626 {FcFrom: uint16(0x0153), FcTo0: uint8(0x6F), FcTo1: uint8(0x65)}, 23627 {FcFrom: uint16(0x0154), FcTo0: uint8(0x52)}, 23628 {FcFrom: uint16(0x0155), FcTo0: uint8(0x72)}, 23629 {FcFrom: uint16(0x0156), FcTo0: uint8(0x52)}, 23630 {FcFrom: uint16(0x0157), FcTo0: uint8(0x72)}, 23631 {FcFrom: uint16(0x0158), FcTo0: uint8(0x52)}, 23632 {FcFrom: uint16(0x0159), FcTo0: uint8(0x72)}, 23633 {FcFrom: uint16(0x015A), FcTo0: uint8(0x53)}, 23634 {FcFrom: uint16(0x015B), FcTo0: uint8(0x73)}, 23635 {FcFrom: uint16(0x015C), FcTo0: uint8(0x53), FcTo1: uint8(0x68)}, 23636 {FcFrom: uint16(0x015D), FcTo0: uint8(0x73), FcTo1: uint8(0x68)}, 23637 {FcFrom: uint16(0x015E), FcTo0: uint8(0x53)}, 23638 {FcFrom: uint16(0x015F), FcTo0: uint8(0x73)}, 23639 {FcFrom: uint16(0x0160), FcTo0: uint8(0x53)}, 23640 {FcFrom: uint16(0x0161), FcTo0: uint8(0x73)}, 23641 {FcFrom: uint16(0x0162), FcTo0: uint8(0x54)}, 23642 {FcFrom: uint16(0x0163), FcTo0: uint8(0x74)}, 23643 {FcFrom: uint16(0x0164), FcTo0: uint8(0x54)}, 23644 {FcFrom: uint16(0x0165), FcTo0: uint8(0x74)}, 23645 {FcFrom: uint16(0x0166), FcTo0: uint8(0x54)}, 23646 {FcFrom: uint16(0x0167), FcTo0: uint8(0x74)}, 23647 {FcFrom: uint16(0x0168), FcTo0: uint8(0x55)}, 23648 {FcFrom: uint16(0x0169), FcTo0: uint8(0x75)}, 23649 {FcFrom: uint16(0x016A), FcTo0: uint8(0x55)}, 23650 {FcFrom: uint16(0x016B), FcTo0: uint8(0x75)}, 23651 {FcFrom: uint16(0x016C), FcTo0: uint8(0x55)}, 23652 {FcFrom: uint16(0x016D), FcTo0: uint8(0x75)}, 23653 {FcFrom: uint16(0x016E), FcTo0: uint8(0x55)}, 23654 {FcFrom: uint16(0x016F), FcTo0: uint8(0x75)}, 23655 {FcFrom: uint16(0x0170), FcTo0: uint8(0x55)}, 23656 {FcFrom: uint16(0x0171), FcTo0: uint8(0x75)}, 23657 {FcFrom: uint16(0x0172), FcTo0: uint8(0x55)}, 23658 {FcFrom: uint16(0x0173), FcTo0: uint8(0x75)}, 23659 {FcFrom: uint16(0x0174), FcTo0: uint8(0x57)}, 23660 {FcFrom: uint16(0x0175), FcTo0: uint8(0x77)}, 23661 {FcFrom: uint16(0x0176), FcTo0: uint8(0x59)}, 23662 {FcFrom: uint16(0x0177), FcTo0: uint8(0x79)}, 23663 {FcFrom: uint16(0x0178), FcTo0: uint8(0x59)}, 23664 {FcFrom: uint16(0x0179), FcTo0: uint8(0x5A)}, 23665 {FcFrom: uint16(0x017A), FcTo0: uint8(0x7A)}, 23666 {FcFrom: uint16(0x017B), FcTo0: uint8(0x5A)}, 23667 {FcFrom: uint16(0x017C), FcTo0: uint8(0x7A)}, 23668 {FcFrom: uint16(0x017D), FcTo0: uint8(0x5A)}, 23669 {FcFrom: uint16(0x017E), FcTo0: uint8(0x7A)}, 23670 {FcFrom: uint16(0x017F), FcTo0: uint8(0x73)}, 23671 {FcFrom: uint16(0x0192), FcTo0: uint8(0x66)}, 23672 {FcFrom: uint16(0x0218), FcTo0: uint8(0x53)}, 23673 {FcFrom: uint16(0x0219), FcTo0: uint8(0x73)}, 23674 {FcFrom: uint16(0x021A), FcTo0: uint8(0x54)}, 23675 {FcFrom: uint16(0x021B), FcTo0: uint8(0x74)}, 23676 {FcFrom: uint16(0x0386), FcTo0: uint8(0x41)}, 23677 {FcFrom: uint16(0x0388), FcTo0: uint8(0x45)}, 23678 {FcFrom: uint16(0x0389), FcTo0: uint8(0x49)}, 23679 {FcFrom: uint16(0x038A), FcTo0: uint8(0x49)}, 23680 {FcFrom: uint16(0x038C), FcTo0: uint8(0x4f)}, 23681 {FcFrom: uint16(0x038E), FcTo0: uint8(0x59)}, 23682 {FcFrom: uint16(0x038F), FcTo0: uint8(0x4f)}, 23683 {FcFrom: uint16(0x0390), FcTo0: uint8(0x69)}, 23684 {FcFrom: uint16(0x0391), FcTo0: uint8(0x41)}, 23685 {FcFrom: uint16(0x0392), FcTo0: uint8(0x42)}, 23686 {FcFrom: uint16(0x0393), FcTo0: uint8(0x47)}, 23687 {FcFrom: uint16(0x0394), FcTo0: uint8(0x44)}, 23688 {FcFrom: uint16(0x0395), FcTo0: uint8(0x45)}, 23689 {FcFrom: uint16(0x0396), FcTo0: uint8(0x5a)}, 23690 {FcFrom: uint16(0x0397), FcTo0: uint8(0x49)}, 23691 {FcFrom: uint16(0x0398), FcTo0: uint8(0x54), FcTo1: uint8(0x68)}, 23692 {FcFrom: uint16(0x0399), FcTo0: uint8(0x49)}, 23693 {FcFrom: uint16(0x039A), FcTo0: uint8(0x4b)}, 23694 {FcFrom: uint16(0x039B), FcTo0: uint8(0x4c)}, 23695 {FcFrom: uint16(0x039C), FcTo0: uint8(0x4d)}, 23696 {FcFrom: uint16(0x039D), FcTo0: uint8(0x4e)}, 23697 {FcFrom: uint16(0x039E), FcTo0: uint8(0x58)}, 23698 {FcFrom: uint16(0x039F), FcTo0: uint8(0x4f)}, 23699 {FcFrom: uint16(0x03A0), FcTo0: uint8(0x50)}, 23700 {FcFrom: uint16(0x03A1), FcTo0: uint8(0x52)}, 23701 {FcFrom: uint16(0x03A3), FcTo0: uint8(0x53)}, 23702 {FcFrom: uint16(0x03A4), FcTo0: uint8(0x54)}, 23703 {FcFrom: uint16(0x03A5), FcTo0: uint8(0x59)}, 23704 {FcFrom: uint16(0x03A6), FcTo0: uint8(0x46)}, 23705 {FcFrom: uint16(0x03A7), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 23706 {FcFrom: uint16(0x03A8), FcTo0: uint8(0x50), FcTo1: uint8(0x73)}, 23707 {FcFrom: uint16(0x03A9), FcTo0: uint8(0x4f)}, 23708 {FcFrom: uint16(0x03AA), FcTo0: uint8(0x49)}, 23709 {FcFrom: uint16(0x03AB), FcTo0: uint8(0x59)}, 23710 {FcFrom: uint16(0x03AC), FcTo0: uint8(0x61)}, 23711 {FcFrom: uint16(0x03AD), FcTo0: uint8(0x65)}, 23712 {FcFrom: uint16(0x03AE), FcTo0: uint8(0x69)}, 23713 {FcFrom: uint16(0x03AF), FcTo0: uint8(0x69)}, 23714 {FcFrom: uint16(0x03B1), FcTo0: uint8(0x61)}, 23715 {FcFrom: uint16(0x03B2), FcTo0: uint8(0x62)}, 23716 {FcFrom: uint16(0x03B3), FcTo0: uint8(0x67)}, 23717 {FcFrom: uint16(0x03B4), FcTo0: uint8(0x64)}, 23718 {FcFrom: uint16(0x03B5), FcTo0: uint8(0x65)}, 23719 {FcFrom: uint16(0x03B6), FcTo0: uint8(0x7a)}, 23720 {FcFrom: uint16(0x03B7), FcTo0: uint8(0x69)}, 23721 {FcFrom: uint16(0x03B8), FcTo0: uint8(0x74), FcTo1: uint8(0x68)}, 23722 {FcFrom: uint16(0x03B9), FcTo0: uint8(0x69)}, 23723 {FcFrom: uint16(0x03BA), FcTo0: uint8(0x6b)}, 23724 {FcFrom: uint16(0x03BB), FcTo0: uint8(0x6c)}, 23725 {FcFrom: uint16(0x03BC), FcTo0: uint8(0x6d)}, 23726 {FcFrom: uint16(0x03BD), FcTo0: uint8(0x6e)}, 23727 {FcFrom: uint16(0x03BE), FcTo0: uint8(0x78)}, 23728 {FcFrom: uint16(0x03BF), FcTo0: uint8(0x6f)}, 23729 {FcFrom: uint16(0x03C0), FcTo0: uint8(0x70)}, 23730 {FcFrom: uint16(0x03C1), FcTo0: uint8(0x72)}, 23731 {FcFrom: uint16(0x03C3), FcTo0: uint8(0x73)}, 23732 {FcFrom: uint16(0x03C4), FcTo0: uint8(0x74)}, 23733 {FcFrom: uint16(0x03C5), FcTo0: uint8(0x79)}, 23734 {FcFrom: uint16(0x03C6), FcTo0: uint8(0x66)}, 23735 {FcFrom: uint16(0x03C7), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 23736 {FcFrom: uint16(0x03C8), FcTo0: uint8(0x70), FcTo1: uint8(0x73)}, 23737 {FcFrom: uint16(0x03C9), FcTo0: uint8(0x6f)}, 23738 {FcFrom: uint16(0x03CA), FcTo0: uint8(0x69)}, 23739 {FcFrom: uint16(0x03CB), FcTo0: uint8(0x79)}, 23740 {FcFrom: uint16(0x03CC), FcTo0: uint8(0x6f)}, 23741 {FcFrom: uint16(0x03CD), FcTo0: uint8(0x79)}, 23742 {FcFrom: uint16(0x03CE), FcTo0: uint8(0x69)}, 23743 {FcFrom: uint16(0x0400), FcTo0: uint8(0x45)}, 23744 {FcFrom: uint16(0x0401), FcTo0: uint8(0x45)}, 23745 {FcFrom: uint16(0x0402), FcTo0: uint8(0x44)}, 23746 {FcFrom: uint16(0x0403), FcTo0: uint8(0x47)}, 23747 {FcFrom: uint16(0x0404), FcTo0: uint8(0x45)}, 23748 {FcFrom: uint16(0x0405), FcTo0: uint8(0x5a)}, 23749 {FcFrom: uint16(0x0406), FcTo0: uint8(0x49)}, 23750 {FcFrom: uint16(0x0407), FcTo0: uint8(0x49)}, 23751 {FcFrom: uint16(0x0408), FcTo0: uint8(0x4a)}, 23752 {FcFrom: uint16(0x0409), FcTo0: uint8(0x49)}, 23753 {FcFrom: uint16(0x040A), FcTo0: uint8(0x4e)}, 23754 {FcFrom: uint16(0x040B), FcTo0: uint8(0x44)}, 23755 {FcFrom: uint16(0x040C), FcTo0: uint8(0x4b)}, 23756 {FcFrom: uint16(0x040D), FcTo0: uint8(0x49)}, 23757 {FcFrom: uint16(0x040E), FcTo0: uint8(0x55)}, 23758 {FcFrom: uint16(0x040F), FcTo0: uint8(0x44)}, 23759 {FcFrom: uint16(0x0410), FcTo0: uint8(0x41)}, 23760 {FcFrom: uint16(0x0411), FcTo0: uint8(0x42)}, 23761 {FcFrom: uint16(0x0412), FcTo0: uint8(0x56)}, 23762 {FcFrom: uint16(0x0413), FcTo0: uint8(0x47)}, 23763 {FcFrom: uint16(0x0414), FcTo0: uint8(0x44)}, 23764 {FcFrom: uint16(0x0415), FcTo0: uint8(0x45)}, 23765 {FcFrom: uint16(0x0416), FcTo0: uint8(0x5a), FcTo1: uint8(0x68)}, 23766 {FcFrom: uint16(0x0417), FcTo0: uint8(0x5a)}, 23767 {FcFrom: uint16(0x0418), FcTo0: uint8(0x49)}, 23768 {FcFrom: uint16(0x0419), FcTo0: uint8(0x49)}, 23769 {FcFrom: uint16(0x041A), FcTo0: uint8(0x4b)}, 23770 {FcFrom: uint16(0x041B), FcTo0: uint8(0x4c)}, 23771 {FcFrom: uint16(0x041C), FcTo0: uint8(0x4d)}, 23772 {FcFrom: uint16(0x041D), FcTo0: uint8(0x4e)}, 23773 {FcFrom: uint16(0x041E), FcTo0: uint8(0x4f)}, 23774 {FcFrom: uint16(0x041F), FcTo0: uint8(0x50)}, 23775 {FcFrom: uint16(0x0420), FcTo0: uint8(0x52)}, 23776 {FcFrom: uint16(0x0421), FcTo0: uint8(0x53)}, 23777 {FcFrom: uint16(0x0422), FcTo0: uint8(0x54)}, 23778 {FcFrom: uint16(0x0423), FcTo0: uint8(0x55)}, 23779 {FcFrom: uint16(0x0424), FcTo0: uint8(0x46)}, 23780 {FcFrom: uint16(0x0425), FcTo0: uint8(0x4b), FcTo1: uint8(0x68)}, 23781 {FcFrom: uint16(0x0426), FcTo0: uint8(0x54), FcTo1: uint8(0x63)}, 23782 {FcFrom: uint16(0x0427), FcTo0: uint8(0x43), FcTo1: uint8(0x68)}, 23783 {FcFrom: uint16(0x0428), FcTo0: uint8(0x53), FcTo1: uint8(0x68)}, 23784 {FcFrom: uint16(0x0429), FcTo0: uint8(0x53), FcTo1: uint8(0x68), FcTo2: uint8(0x63), FcTo3: uint8(0x68)}, 23785 {FcFrom: uint16(0x042A), FcTo0: uint8(0x61)}, 23786 {FcFrom: uint16(0x042B), FcTo0: uint8(0x59)}, 23787 {FcFrom: uint16(0x042C), FcTo0: uint8(0x59)}, 23788 {FcFrom: uint16(0x042D), FcTo0: uint8(0x45)}, 23789 {FcFrom: uint16(0x042E), FcTo0: uint8(0x49), FcTo1: uint8(0x75)}, 23790 {FcFrom: uint16(0x042F), FcTo0: uint8(0x49), FcTo1: uint8(0x61)}, 23791 {FcFrom: uint16(0x0430), FcTo0: uint8(0x61)}, 23792 {FcFrom: uint16(0x0431), FcTo0: uint8(0x62)}, 23793 {FcFrom: uint16(0x0432), FcTo0: uint8(0x76)}, 23794 {FcFrom: uint16(0x0433), FcTo0: uint8(0x67)}, 23795 {FcFrom: uint16(0x0434), FcTo0: uint8(0x64)}, 23796 {FcFrom: uint16(0x0435), FcTo0: uint8(0x65)}, 23797 {FcFrom: uint16(0x0436), FcTo0: uint8(0x7a), FcTo1: uint8(0x68)}, 23798 {FcFrom: uint16(0x0437), FcTo0: uint8(0x7a)}, 23799 {FcFrom: uint16(0x0438), FcTo0: uint8(0x69)}, 23800 {FcFrom: uint16(0x0439), FcTo0: uint8(0x69)}, 23801 {FcFrom: uint16(0x043A), FcTo0: uint8(0x6b)}, 23802 {FcFrom: uint16(0x043B), FcTo0: uint8(0x6c)}, 23803 {FcFrom: uint16(0x043C), FcTo0: uint8(0x6d)}, 23804 {FcFrom: uint16(0x043D), FcTo0: uint8(0x6e)}, 23805 {FcFrom: uint16(0x043E), FcTo0: uint8(0x6f)}, 23806 {FcFrom: uint16(0x043F), FcTo0: uint8(0x70)}, 23807 {FcFrom: uint16(0x0440), FcTo0: uint8(0x72)}, 23808 {FcFrom: uint16(0x0441), FcTo0: uint8(0x73)}, 23809 {FcFrom: uint16(0x0442), FcTo0: uint8(0x74)}, 23810 {FcFrom: uint16(0x0443), FcTo0: uint8(0x75)}, 23811 {FcFrom: uint16(0x0444), FcTo0: uint8(0x66)}, 23812 {FcFrom: uint16(0x0445), FcTo0: uint8(0x6b), FcTo1: uint8(0x68)}, 23813 {FcFrom: uint16(0x0446), FcTo0: uint8(0x74), FcTo1: uint8(0x63)}, 23814 {FcFrom: uint16(0x0447), FcTo0: uint8(0x63), FcTo1: uint8(0x68)}, 23815 {FcFrom: uint16(0x0448), FcTo0: uint8(0x73), FcTo1: uint8(0x68)}, 23816 {FcFrom: uint16(0x0449), FcTo0: uint8(0x73), FcTo1: uint8(0x68), FcTo2: uint8(0x63), FcTo3: uint8(0x68)}, 23817 {FcFrom: uint16(0x044A), FcTo0: uint8(0x61)}, 23818 {FcFrom: uint16(0x044B), FcTo0: uint8(0x79)}, 23819 {FcFrom: uint16(0x044C), FcTo0: uint8(0x79)}, 23820 {FcFrom: uint16(0x044D), FcTo0: uint8(0x65)}, 23821 {FcFrom: uint16(0x044E), FcTo0: uint8(0x69), FcTo1: uint8(0x75)}, 23822 {FcFrom: uint16(0x044F), FcTo0: uint8(0x69), FcTo1: uint8(0x61)}, 23823 {FcFrom: uint16(0x0450), FcTo0: uint8(0x65)}, 23824 {FcFrom: uint16(0x0451), FcTo0: uint8(0x65)}, 23825 {FcFrom: uint16(0x0452), FcTo0: uint8(0x64)}, 23826 {FcFrom: uint16(0x0453), FcTo0: uint8(0x67)}, 23827 {FcFrom: uint16(0x0454), FcTo0: uint8(0x65)}, 23828 {FcFrom: uint16(0x0455), FcTo0: uint8(0x7a)}, 23829 {FcFrom: uint16(0x0456), FcTo0: uint8(0x69)}, 23830 {FcFrom: uint16(0x0457), FcTo0: uint8(0x69)}, 23831 {FcFrom: uint16(0x0458), FcTo0: uint8(0x6a)}, 23832 {FcFrom: uint16(0x0459), FcTo0: uint8(0x69)}, 23833 {FcFrom: uint16(0x045A), FcTo0: uint8(0x6e)}, 23834 {FcFrom: uint16(0x045B), FcTo0: uint8(0x64)}, 23835 {FcFrom: uint16(0x045C), FcTo0: uint8(0x6b)}, 23836 {FcFrom: uint16(0x045D), FcTo0: uint8(0x69)}, 23837 {FcFrom: uint16(0x045E), FcTo0: uint8(0x75)}, 23838 {FcFrom: uint16(0x045F), FcTo0: uint8(0x64)}, 23839 {FcFrom: uint16(0x1E02), FcTo0: uint8(0x42)}, 23840 {FcFrom: uint16(0x1E03), FcTo0: uint8(0x62)}, 23841 {FcFrom: uint16(0x1E0A), FcTo0: uint8(0x44)}, 23842 {FcFrom: uint16(0x1E0B), FcTo0: uint8(0x64)}, 23843 {FcFrom: uint16(0x1E1E), FcTo0: uint8(0x46)}, 23844 {FcFrom: uint16(0x1E1F), FcTo0: uint8(0x66)}, 23845 {FcFrom: uint16(0x1E40), FcTo0: uint8(0x4D)}, 23846 {FcFrom: uint16(0x1E41), FcTo0: uint8(0x6D)}, 23847 {FcFrom: uint16(0x1E56), FcTo0: uint8(0x50)}, 23848 {FcFrom: uint16(0x1E57), FcTo0: uint8(0x70)}, 23849 {FcFrom: uint16(0x1E60), FcTo0: uint8(0x53)}, 23850 {FcFrom: uint16(0x1E61), FcTo0: uint8(0x73)}, 23851 {FcFrom: uint16(0x1E6A), FcTo0: uint8(0x54)}, 23852 {FcFrom: uint16(0x1E6B), FcTo0: uint8(0x74)}, 23853 {FcFrom: uint16(0x1E80), FcTo0: uint8(0x57)}, 23854 {FcFrom: uint16(0x1E81), FcTo0: uint8(0x77)}, 23855 {FcFrom: uint16(0x1E82), FcTo0: uint8(0x57)}, 23856 {FcFrom: uint16(0x1E83), FcTo0: uint8(0x77)}, 23857 {FcFrom: uint16(0x1E84), FcTo0: uint8(0x57)}, 23858 {FcFrom: uint16(0x1E85), FcTo0: uint8(0x77)}, 23859 {FcFrom: uint16(0x1EF2), FcTo0: uint8(0x59)}, 23860 {FcFrom: uint16(0x1EF3), FcTo0: uint8(0x79)}, 23861 {FcFrom: uint16(0xFB00), FcTo0: uint8(0x66), FcTo1: uint8(0x66)}, 23862 {FcFrom: uint16(0xFB01), FcTo0: uint8(0x66), FcTo1: uint8(0x69)}, 23863 {FcFrom: uint16(0xFB02), FcTo0: uint8(0x66), FcTo1: uint8(0x6C)}, 23864 {FcFrom: uint16(0xFB05), FcTo0: uint8(0x73), FcTo1: uint8(0x74)}, 23865 {FcFrom: uint16(0xFB06), FcTo0: uint8(0x73), FcTo1: uint8(0x74)}, 23866 } 23867 23868 func spellfixFindTranslit(tls *libc.TLS, c int32, pxTop uintptr) uintptr { 23869 *(*int32)(unsafe.Pointer(pxTop)) = int32(uint64(unsafe.Sizeof(translit))/uint64(unsafe.Sizeof(Transliteration{})) - uint64(1)) 23870 return uintptr(unsafe.Pointer(&translit)) 23871 } 23872 23873 func transliterate(tls *libc.TLS, zIn uintptr, nIn int32) uintptr { 23874 bp := tls.Alloc(8) 23875 defer tls.Free(8) 23876 23877 var zOut uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(nIn*4+1)) 23878 var c int32 23879 23880 var nOut int32 23881 if zOut == uintptr(0) { 23882 return uintptr(0) 23883 } 23884 nOut = 0 23885 for nIn > 0 { 23886 c = utf8Read(tls, zIn, nIn, bp) 23887 zIn += uintptr(*(*int32)(unsafe.Pointer(bp))) 23888 nIn = nIn - *(*int32)(unsafe.Pointer(bp)) 23889 if c <= 127 { 23890 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = uint8(c) 23891 } else { 23892 var xBtm int32 23893 var x int32 23894 var tbl uintptr = spellfixFindTranslit(tls, c, bp+4) 23895 xBtm = 0 23896 for *(*int32)(unsafe.Pointer(bp + 4)) >= xBtm { 23897 x = (*(*int32)(unsafe.Pointer(bp + 4)) + xBtm) / 2 23898 if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) == c { 23899 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo0 23900 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo1 != 0 { 23901 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo1 23902 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo2 != 0 { 23903 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo2 23904 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo3 != 0 { 23905 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = (*Transliteration)(unsafe.Pointer(tbl + uintptr(x)*6)).FcTo3 23906 } 23907 } 23908 } 23909 c = 0 23910 break 23911 } else if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) > c { 23912 *(*int32)(unsafe.Pointer(bp + 4)) = x - 1 23913 } else { 23914 xBtm = x + 1 23915 } 23916 } 23917 if c != 0 { 23918 *(*uint8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&nOut, 1)))) = uint8('?') 23919 } 23920 } 23921 } 23922 *(*uint8)(unsafe.Pointer(zOut + uintptr(nOut))) = uint8(0) 23923 return zOut 23924 } 23925 23926 func translen_to_charlen(tls *libc.TLS, zIn uintptr, nIn int32, nTrans int32) int32 { 23927 bp := tls.Alloc(8) 23928 defer tls.Free(8) 23929 23930 var i int32 23931 var c int32 23932 23933 var nOut int32 23934 var nChar int32 23935 23936 i = libc.AssignInt32(&nOut, 0) 23937 for nChar = 0; i < nIn && nOut < nTrans; nChar++ { 23938 c = utf8Read(tls, zIn+uintptr(i), nIn-i, bp) 23939 i = i + *(*int32)(unsafe.Pointer(bp)) 23940 23941 nOut++ 23942 if c >= 128 { 23943 var xBtm int32 23944 var x int32 23945 var tbl uintptr = spellfixFindTranslit(tls, c, bp+4) 23946 xBtm = 0 23947 for *(*int32)(unsafe.Pointer(bp + 4)) >= xBtm { 23948 x = (*(*int32)(unsafe.Pointer(bp + 4)) + xBtm) / 2 23949 if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) == c { 23950 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo1 != 0 { 23951 nOut++ 23952 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo2 != 0 { 23953 nOut++ 23954 if (*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcTo3 != 0 { 23955 nOut++ 23956 } 23957 } 23958 } 23959 break 23960 } else if int32((*Transliteration)(unsafe.Pointer(tbl+uintptr(x)*6)).FcFrom) > c { 23961 *(*int32)(unsafe.Pointer(bp + 4)) = x - 1 23962 } else { 23963 xBtm = x + 1 23964 } 23965 } 23966 } 23967 } 23968 23969 return nChar 23970 } 23971 23972 func transliterateSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 23973 var zIn uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 23974 var nIn int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 23975 var zOut uintptr = transliterate(tls, zIn, nIn) 23976 if zOut == uintptr(0) { 23977 sqlite3.Xsqlite3_result_error_nomem(tls, context) 23978 } else { 23979 sqlite3.Xsqlite3_result_text(tls, context, zOut, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 23980 } 23981 } 23982 23983 func scriptCodeSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 23984 bp := tls.Alloc(4) 23985 defer tls.Free(4) 23986 23987 var zIn uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 23988 var nIn int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 23989 var c int32 23990 23991 var scriptMask int32 = 0 23992 var res int32 23993 var seenDigit int32 = 0 23994 23995 for nIn > 0 { 23996 c = utf8Read(tls, zIn, nIn, bp) 23997 zIn += uintptr(*(*int32)(unsafe.Pointer(bp))) 23998 nIn = nIn - *(*int32)(unsafe.Pointer(bp)) 23999 if c < 0x02af { 24000 if c >= 0x80 || int32(midClass[c&0x7f]) < CCLASS_DIGIT { 24001 scriptMask = scriptMask | SCRIPT_LATIN 24002 } else if c >= '0' && c <= '9' { 24003 seenDigit = 1 24004 } 24005 } else if c >= 0x0400 && c <= 0x04ff { 24006 scriptMask = scriptMask | SCRIPT_CYRILLIC 24007 } else if c >= 0x0386 && c <= 0x03ce { 24008 scriptMask = scriptMask | SCRIPT_GREEK 24009 } else if c >= 0x0590 && c <= 0x05ff { 24010 scriptMask = scriptMask | SCRIPT_HEBREW 24011 } else if c >= 0x0600 && c <= 0x06ff { 24012 scriptMask = scriptMask | SCRIPT_ARABIC 24013 } 24014 } 24015 if scriptMask == 0 && seenDigit != 0 { 24016 scriptMask = SCRIPT_LATIN 24017 } 24018 switch scriptMask { 24019 case 0: 24020 res = 999 24021 break 24022 case SCRIPT_LATIN: 24023 res = 215 24024 break 24025 case SCRIPT_CYRILLIC: 24026 res = 220 24027 break 24028 case SCRIPT_GREEK: 24029 res = 200 24030 break 24031 case SCRIPT_HEBREW: 24032 res = 125 24033 break 24034 case SCRIPT_ARABIC: 24035 res = 160 24036 break 24037 default: 24038 res = 998 24039 break 24040 } 24041 sqlite3.Xsqlite3_result_int(tls, context, res) 24042 } 24043 24044 type spellfix1_vtab1 = struct { 24045 Fbase sqlite3_vtab 24046 Fdb uintptr 24047 FzDbName uintptr 24048 FzTableName uintptr 24049 FzCostTable uintptr 24050 FpConfig3 uintptr 24051 } 24052 24053 type spellfix1_vtab = spellfix1_vtab1 24054 type spellfix1_cursor1 = struct { 24055 Fbase sqlite3_vtab_cursor 24056 FpVTab uintptr 24057 FzPattern uintptr 24058 FidxNum int32 24059 FnRow int32 24060 FnAlloc int32 24061 FiRow int32 24062 FiLang int32 24063 FiTop int32 24064 FiScope int32 24065 FnSearch int32 24066 FpFullScan uintptr 24067 Fa uintptr 24068 } 24069 24070 type spellfix1_cursor = spellfix1_cursor1 24071 24072 type spellfix1_row = struct { 24073 FiRowid sqlite3_int64 24074 FzWord uintptr 24075 FiRank int32 24076 FiDistance int32 24077 FiScore int32 24078 FiMatchlen int32 24079 FzHash [32]int8 24080 } 24081 24082 func spellfix1DbExec(tls *libc.TLS, pRc uintptr, db uintptr, zFormat uintptr, va uintptr) { 24083 var ap va_list 24084 _ = ap 24085 var zSql uintptr 24086 if *(*int32)(unsafe.Pointer(pRc)) != 0 { 24087 return 24088 } 24089 ap = va 24090 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFormat, ap) 24091 _ = ap 24092 if zSql == uintptr(0) { 24093 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 24094 } else { 24095 *(*int32)(unsafe.Pointer(pRc)) = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 24096 sqlite3.Xsqlite3_free(tls, zSql) 24097 } 24098 } 24099 24100 func spellfix1Uninit(tls *libc.TLS, isDestroy int32, pVTab uintptr) int32 { 24101 bp := tls.Alloc(20) 24102 defer tls.Free(20) 24103 24104 var p uintptr = pVTab 24105 *(*int32)(unsafe.Pointer(bp + 16)) = SQLITE_OK 24106 if isDestroy != 0 { 24107 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 24108 spellfix1DbExec(tls, bp+16, db, ts+7189, 24109 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName)) 24110 } 24111 if *(*int32)(unsafe.Pointer(bp + 16)) == SQLITE_OK { 24112 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName) 24113 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 24114 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 24115 sqlite3.Xsqlite3_free(tls, p) 24116 } 24117 return *(*int32)(unsafe.Pointer(bp + 16)) 24118 } 24119 24120 func spellfix1Disconnect(tls *libc.TLS, pVTab uintptr) int32 { 24121 return spellfix1Uninit(tls, 0, pVTab) 24122 } 24123 24124 func spellfix1Destroy(tls *libc.TLS, pVTab uintptr) int32 { 24125 return spellfix1Uninit(tls, 1, pVTab) 24126 } 24127 24128 func spellfix1Dequote(tls *libc.TLS, zIn uintptr) uintptr { 24129 bp := tls.Alloc(8) 24130 defer tls.Free(8) 24131 24132 var zOut uintptr 24133 var i int32 24134 var j int32 24135 var c int8 24136 for isspace(tls, int32(uint8(*(*int8)(unsafe.Pointer(zIn))))) != 0 { 24137 zIn++ 24138 } 24139 zOut = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zIn)) 24140 if zOut == uintptr(0) { 24141 return uintptr(0) 24142 } 24143 i = int32(libc.Xstrlen(tls, zOut)) 24144 *(*int8)(unsafe.Pointer(zOut + uintptr(i))) = int8(0) 24145 c = *(*int8)(unsafe.Pointer(zOut)) 24146 if int32(c) == '\'' || int32(c) == '"' { 24147 i = 1 24148 j = 0 24149 for ; 1 != 0; i++ { 24150 *(*int8)(unsafe.Pointer(zOut + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(zOut + uintptr(i))) 24151 if int32(*(*int8)(unsafe.Pointer(zOut + uintptr(i)))) == int32(c) { 24152 if int32(*(*int8)(unsafe.Pointer(zOut + uintptr(i+1)))) == int32(c) { 24153 i++ 24154 } else { 24155 *(*int8)(unsafe.Pointer(zOut + uintptr(j-1))) = int8(0) 24156 break 24157 } 24158 } 24159 } 24160 } 24161 return zOut 24162 } 24163 24164 func spellfix1Init(tls *libc.TLS, isCreate int32, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 24165 bp := tls.Alloc(60) 24166 defer tls.Free(60) 24167 24168 var pNew uintptr = uintptr(0) 24169 24170 var zDbName uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 24171 var zTableName uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 24172 var nDbName int32 24173 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_OK 24174 var i int32 24175 24176 nDbName = int32(libc.Xstrlen(tls, zDbName)) 24177 pNew = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(spellfix1_vtab{}))+uint64(nDbName)+uint64(1)) 24178 if pNew == uintptr(0) { 24179 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 24180 } else { 24181 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(spellfix1_vtab{})), libc.X__builtin_object_size(tls, pNew, 0)) 24182 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName = pNew + 1*64 24183 libc.X__builtin___memcpy_chk(tls, (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName, zDbName, uint64(nDbName+1), libc.X__builtin_object_size(tls, (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzDbName, 0)) 24184 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zTableName)) 24185 (*spellfix1_vtab)(unsafe.Pointer(pNew)).Fdb = db 24186 if (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzTableName == uintptr(0) { 24187 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 24188 } else { 24189 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 24190 *(*int32)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_declare_vtab(tls, db, 24191 ts+7226) 24192 } 24193 if *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && isCreate != 0 { 24194 spellfix1DbExec(tls, bp+56, db, 24195 ts+7380, 24196 libc.VaList(bp+8, zDbName, zTableName)) 24197 spellfix1DbExec(tls, bp+56, db, 24198 ts+7514, 24199 libc.VaList(bp+24, zDbName, zTableName, zTableName)) 24200 } 24201 for i = 3; *(*int32)(unsafe.Pointer(bp + 56)) == SQLITE_OK && i < argc; i++ { 24202 if libc.Xstrncmp(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), ts+7599, uint64(16)) == 0 && (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable == uintptr(0) { 24203 (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable = spellfix1Dequote(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))+16) 24204 if (*spellfix1_vtab)(unsafe.Pointer(pNew)).FzCostTable == uintptr(0) { 24205 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_NOMEM 24206 } 24207 continue 24208 } 24209 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+7616, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 24210 *(*int32)(unsafe.Pointer(bp + 56)) = SQLITE_ERROR 24211 } 24212 } 24213 24214 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 && pNew != 0 { 24215 *(*uintptr)(unsafe.Pointer(ppVTab)) = uintptr(0) 24216 spellfix1Uninit(tls, 0, pNew) 24217 } else { 24218 *(*uintptr)(unsafe.Pointer(ppVTab)) = pNew 24219 } 24220 return *(*int32)(unsafe.Pointer(bp + 56)) 24221 } 24222 24223 func spellfix1Connect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 24224 return spellfix1Init(tls, 0, db, pAux, argc, argv, ppVTab, pzErr) 24225 } 24226 24227 func spellfix1Create(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVTab uintptr, pzErr uintptr) int32 { 24228 return spellfix1Init(tls, 1, db, pAux, argc, argv, ppVTab, pzErr) 24229 } 24230 24231 func spellfix1ResetCursor(tls *libc.TLS, pCur uintptr) { 24232 var i int32 24233 for i = 0; i < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow; i++ { 24234 sqlite3.Xsqlite3_free(tls, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(i)*64)).FzWord) 24235 } 24236 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow = 0 24237 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = 0 24238 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch = 0 24239 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 24240 sqlite3.Xsqlite3_finalize(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 24241 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan = uintptr(0) 24242 } 24243 } 24244 24245 func spellfix1ResizeCursor(tls *libc.TLS, pCur uintptr, N int32) { 24246 var aNew uintptr 24247 24248 aNew = sqlite3.Xsqlite3_realloc64(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa, uint64(unsafe.Sizeof(spellfix1_row{}))*uint64(N)) 24249 if aNew == uintptr(0) && N > 0 { 24250 spellfix1ResetCursor(tls, pCur) 24251 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa) 24252 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc = 0 24253 (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa = uintptr(0) 24254 } else { 24255 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc = N 24256 (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa = aNew 24257 } 24258 } 24259 24260 func spellfix1Close(tls *libc.TLS, cur uintptr) int32 { 24261 var pCur uintptr = cur 24262 spellfix1ResetCursor(tls, pCur) 24263 spellfix1ResizeCursor(tls, pCur, 0) 24264 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern) 24265 sqlite3.Xsqlite3_free(tls, pCur) 24266 return SQLITE_OK 24267 } 24268 24269 func spellfix1BestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 24270 var iPlan int32 = 0 24271 var iLangTerm int32 = -1 24272 var iTopTerm int32 = -1 24273 var iScopeTerm int32 = -1 24274 var iDistTerm int32 = -1 24275 var iRowidTerm int32 = -1 24276 var i int32 24277 var pConstraint uintptr 24278 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 24279 i = 0 24280 __1: 24281 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 24282 goto __3 24283 } 24284 { 24285 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 24286 goto __2 24287 } 24288 24289 if iPlan&SPELLFIX_IDXNUM_MATCH == 0 && 24290 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_WORD && 24291 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH { 24292 iPlan = iPlan | SPELLFIX_IDXNUM_MATCH 24293 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).FargvIndex = 1 24294 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(i)*8)).Fomit = uint8(1) 24295 } 24296 24297 if iPlan&SPELLFIX_IDXNUM_LANGID == 0 && 24298 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_LANGID && 24299 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 24300 iPlan = iPlan | SPELLFIX_IDXNUM_LANGID 24301 iLangTerm = i 24302 } 24303 24304 if iPlan&SPELLFIX_IDXNUM_TOP == 0 && 24305 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_TOP && 24306 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 24307 iPlan = iPlan | SPELLFIX_IDXNUM_TOP 24308 iTopTerm = i 24309 } 24310 24311 if iPlan&SPELLFIX_IDXNUM_SCOPE == 0 && 24312 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_SCOPE && 24313 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 24314 iPlan = iPlan | SPELLFIX_IDXNUM_SCOPE 24315 iScopeTerm = i 24316 } 24317 24318 if iPlan&(0x10|0x20) == 0 && 24319 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn == SPELLFIX_COL_DISTANCE && 24320 (int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT || 24321 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE) { 24322 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 24323 iPlan = iPlan | SPELLFIX_IDXNUM_DISTLT 24324 } else { 24325 iPlan = iPlan | SPELLFIX_IDXNUM_DISTLE 24326 } 24327 iDistTerm = i 24328 } 24329 24330 if iPlan&SPELLFIX_IDXNUM_ROWID == 0 && 24331 (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn < 0 && 24332 int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 24333 iPlan = iPlan | SPELLFIX_IDXNUM_ROWID 24334 iRowidTerm = i 24335 } 24336 24337 } 24338 goto __2 24339 __2: 24340 i++ 24341 pConstraint += 12 24342 goto __1 24343 goto __3 24344 __3: 24345 ; 24346 if iPlan&SPELLFIX_IDXNUM_MATCH != 0 { 24347 var idx int32 = 2 24348 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = iPlan 24349 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 24350 (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn == SPELLFIX_COL_SCORE && 24351 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 24352 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 24353 } 24354 if iPlan&SPELLFIX_IDXNUM_LANGID != 0 { 24355 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 24356 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLangTerm)*8)).Fomit = uint8(1) 24357 } 24358 if iPlan&SPELLFIX_IDXNUM_TOP != 0 { 24359 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iTopTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 24360 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iTopTerm)*8)).Fomit = uint8(1) 24361 } 24362 if iPlan&SPELLFIX_IDXNUM_SCOPE != 0 { 24363 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iScopeTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 24364 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iScopeTerm)*8)).Fomit = uint8(1) 24365 } 24366 if iPlan&(0x10|0x20) != 0 { 24367 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).FargvIndex = libc.PostIncInt32(&idx, 1) 24368 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iDistTerm)*8)).Fomit = uint8(1) 24369 } 24370 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e5 24371 } else if iPlan&SPELLFIX_IDXNUM_ROWID != 0 { 24372 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = SPELLFIX_IDXNUM_ROWID 24373 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRowidTerm)*8)).FargvIndex = 1 24374 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iRowidTerm)*8)).Fomit = uint8(1) 24375 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(5) 24376 } else { 24377 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 0 24378 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e50 24379 } 24380 return SQLITE_OK 24381 } 24382 24383 func spellfix1Open(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 24384 var p uintptr = pVTab 24385 var pCur uintptr 24386 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(spellfix1_cursor{}))) 24387 if pCur == uintptr(0) { 24388 return SQLITE_NOMEM 24389 } 24390 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(spellfix1_cursor{})), libc.X__builtin_object_size(tls, pCur, 0)) 24391 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab = p 24392 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 24393 return SQLITE_OK 24394 } 24395 24396 func spellfix1Score(tls *libc.TLS, iDistance int32, iRank int32) int32 { 24397 var iLog2 int32 24398 iLog2 = 0 24399 __1: 24400 if !(iRank > 0) { 24401 goto __3 24402 } 24403 { 24404 } 24405 goto __2 24406 __2: 24407 iLog2++ 24408 iRank >>= 1 24409 goto __1 24410 goto __3 24411 __3: 24412 ; 24413 return iDistance + 32 - iLog2 24414 } 24415 24416 func spellfix1RowCompare(tls *libc.TLS, A uintptr, B uintptr) int32 { 24417 var a uintptr = A 24418 var b uintptr = B 24419 return (*spellfix1_row)(unsafe.Pointer(a)).FiScore - (*spellfix1_row)(unsafe.Pointer(b)).FiScore 24420 } 24421 24422 type MatchQuery1 = struct { 24423 FpCur uintptr 24424 FpStmt uintptr 24425 FzHash [32]int8 24426 FzPattern uintptr 24427 FnPattern int32 24428 F__ccgo_pad1 [4]byte 24429 FpMatchStr3 uintptr 24430 FpConfig3 uintptr 24431 FpLang uintptr 24432 FiLang int32 24433 FiScope int32 24434 FiMaxDist int32 24435 Frc int32 24436 FnRun int32 24437 FazPrior [1][32]int8 24438 F__ccgo_pad2 [4]byte 24439 } 24440 24441 type MatchQuery = MatchQuery1 24442 24443 func spellfix1RunQuery(tls *libc.TLS, p uintptr, zQuery uintptr, nQuery int32) { 24444 bp := tls.Alloc(76) 24445 defer tls.Free(76) 24446 24447 var zK1 uintptr 24448 var zWord uintptr 24449 var iDist int32 24450 var iRank int32 24451 var iScore int32 24452 var iWorst int32 = 0 24453 var idx int32 24454 var idxWorst int32 = -1 24455 var i int32 24456 var iScope int32 = (*MatchQuery)(unsafe.Pointer(p)).FiScope 24457 var pCur uintptr = (*MatchQuery)(unsafe.Pointer(p)).FpCur 24458 var pStmt uintptr = (*MatchQuery)(unsafe.Pointer(p)).FpStmt 24459 24460 var zClass uintptr 24461 var nClass int32 24462 var rc int32 24463 24464 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa == uintptr(0) || (*MatchQuery)(unsafe.Pointer(p)).Frc != 0 { 24465 return 24466 } 24467 zClass = phoneticHash(tls, zQuery, nQuery) 24468 if zClass == uintptr(0) { 24469 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 24470 return 24471 } 24472 nClass = int32(libc.Xstrlen(tls, zClass)) 24473 if nClass > SPELLFIX_MX_HASH-2 { 24474 nClass = SPELLFIX_MX_HASH - 2 24475 *(*int8)(unsafe.Pointer(zClass + uintptr(nClass))) = int8(0) 24476 } 24477 if nClass <= iScope { 24478 if nClass > 2 { 24479 iScope = nClass - 1 24480 } else { 24481 iScope = nClass 24482 } 24483 } 24484 libc.X__builtin___memcpy_chk(tls, bp+8, zClass, uint64(iScope), libc.X__builtin_object_size(tls, bp+8, 0)) 24485 sqlite3.Xsqlite3_free(tls, zClass) 24486 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(iScope))) = int8(0) 24487 libc.X__builtin___memcpy_chk(tls, bp+40, bp+8, uint64(iScope), libc.X__builtin_object_size(tls, bp+40, 0)) 24488 *(*int8)(unsafe.Pointer(bp + 40 + uintptr(iScope))) = int8('Z') 24489 *(*int8)(unsafe.Pointer(bp + 40 + uintptr(iScope+1))) = int8(0) 24490 24491 libc.X__builtin___memcpy_chk(tls, p+108+uintptr(libc.PostIncInt32(&(*MatchQuery)(unsafe.Pointer(p)).FnRun, 1))*32, bp+8, uint64(iScope+1), libc.X__builtin_object_size(tls, p+108+uintptr(libc.PostIncInt32(&(*MatchQuery)(unsafe.Pointer(p)).FnRun, 1))*32, 0)) 24492 if sqlite3.Xsqlite3_bind_text(tls, pStmt, 1, bp+8, -1, uintptr(0)) == SQLITE_NOMEM || 24493 sqlite3.Xsqlite3_bind_text(tls, pStmt, 2, bp+40, -1, uintptr(0)) == SQLITE_NOMEM { 24494 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 24495 return 24496 } 24497 for sqlite3.Xsqlite3_step(tls, pStmt) == SQLITE_ROW { 24498 *(*int32)(unsafe.Pointer(bp + 72)) = -1 24499 iRank = sqlite3.Xsqlite3_column_int(tls, pStmt, 2) 24500 if (*MatchQuery)(unsafe.Pointer(p)).FpMatchStr3 != 0 { 24501 var nWord int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, 1) 24502 zWord = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 24503 iDist = editDist3Core(tls, (*MatchQuery)(unsafe.Pointer(p)).FpMatchStr3, zWord, nWord, (*MatchQuery)(unsafe.Pointer(p)).FpLang, bp+72) 24504 } else { 24505 zK1 = sqlite3.Xsqlite3_column_text(tls, pStmt, 3) 24506 if zK1 == uintptr(0) { 24507 continue 24508 } 24509 iDist = editdist1(tls, (*MatchQuery)(unsafe.Pointer(p)).FzPattern, zK1, uintptr(0)) 24510 } 24511 if iDist < 0 { 24512 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 24513 break 24514 } 24515 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch++ 24516 24517 if (*MatchQuery)(unsafe.Pointer(p)).FiMaxDist >= 0 { 24518 if iDist > (*MatchQuery)(unsafe.Pointer(p)).FiMaxDist { 24519 continue 24520 } 24521 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow >= (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc && (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum&SPELLFIX_IDXNUM_TOP == 0 { 24522 spellfix1ResizeCursor(tls, pCur, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc*2+10) 24523 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa == uintptr(0) { 24524 break 24525 } 24526 } 24527 } 24528 24529 iScore = spellfix1Score(tls, iDist, iRank) 24530 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 24531 idx = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow 24532 } else if iScore < iWorst { 24533 idx = idxWorst 24534 sqlite3.Xsqlite3_free(tls, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64)).FzWord) 24535 } else { 24536 continue 24537 } 24538 24539 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FzWord = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_column_text(tls, pStmt, 1))) 24540 if (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64)).FzWord == uintptr(0) { 24541 (*MatchQuery)(unsafe.Pointer(p)).Frc = SQLITE_NOMEM 24542 break 24543 } 24544 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiRowid = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 24545 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiRank = iRank 24546 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiDistance = iDist 24547 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiScore = iScore 24548 (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(idx)*64)).FiMatchlen = *(*int32)(unsafe.Pointer(bp + 72)) 24549 libc.X__builtin___memcpy_chk(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64+32, bp+8, uint64(iScope+1), libc.X__builtin_object_size(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr(idx)*64+32, 0)) 24550 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 24551 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow++ 24552 } 24553 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow == (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnAlloc { 24554 iWorst = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa)).FiScore 24555 idxWorst = 0 24556 for i = 1; i < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow; i++ { 24557 iScore = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr(i)*64)).FiScore 24558 if iWorst < iScore { 24559 iWorst = iScore 24560 idxWorst = i 24561 } 24562 } 24563 } 24564 } 24565 rc = sqlite3.Xsqlite3_reset(tls, pStmt) 24566 if rc != 0 { 24567 (*MatchQuery)(unsafe.Pointer(p)).Frc = rc 24568 } 24569 } 24570 24571 func spellfix1FilterForMatch(tls *libc.TLS, pCur uintptr, argc int32, argv uintptr) int32 { 24572 bp := tls.Alloc(176) 24573 defer tls.Free(176) 24574 24575 var idxNum int32 24576 var zMatchThis uintptr 24577 var pMatchStr3 uintptr 24578 var zPattern uintptr 24579 var nPattern int32 24580 var iLimit int32 24581 var iScope int32 24582 var iLang int32 24583 var zSql uintptr 24584 24585 var rc int32 24586 var idx int32 24587 var p uintptr 24588 24589 idxNum = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum 24590 pMatchStr3 = uintptr(0) 24591 iLimit = 20 24592 iScope = 3 24593 iLang = 0 24594 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 24595 idx = 1 24596 p = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab 24597 24598 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable != uintptr(0) && (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 == uintptr(0)) { 24599 goto __1 24600 } 24601 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(EditDist3Config{}))) 24602 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 == uintptr(0)) { 24603 goto __2 24604 } 24605 return SQLITE_NOMEM 24606 __2: 24607 ; 24608 libc.X__builtin___memset_chk(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, 0, uint64(unsafe.Sizeof(EditDist3Config{})), libc.X__builtin_object_size(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, 0)) 24609 rc = editDist3ConfigLoad(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 24610 if !(rc != 0) { 24611 goto __3 24612 } 24613 return rc 24614 __3: 24615 ; 24616 __1: 24617 ; 24618 libc.X__builtin___memset_chk(tls, bp+24, 0, uint64(unsafe.Sizeof(MatchQuery{})), libc.X__builtin_object_size(tls, bp+24, 0)) 24619 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = 3 24620 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = -1 24621 24622 if !(idxNum&2 != 0) { 24623 goto __4 24624 } 24625 iLang = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 24626 __4: 24627 ; 24628 if !(idxNum&4 != 0) { 24629 goto __5 24630 } 24631 iLimit = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 24632 if !(iLimit < 1) { 24633 goto __6 24634 } 24635 iLimit = 1 24636 __6: 24637 ; 24638 __5: 24639 ; 24640 if !(idxNum&8 != 0) { 24641 goto __7 24642 } 24643 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 24644 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiScope < 1) { 24645 goto __8 24646 } 24647 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = 1 24648 __8: 24649 ; 24650 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiScope > SPELLFIX_MX_HASH-2) { 24651 goto __9 24652 } 24653 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiScope = SPELLFIX_MX_HASH - 2 24654 __9: 24655 ; 24656 __7: 24657 ; 24658 if !(idxNum&(16|32) != 0) { 24659 goto __10 24660 } 24661 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(libc.PostIncInt32(&idx, 1))*8))) 24662 if !(idxNum&16 != 0) { 24663 goto __11 24664 } 24665 (*MatchQuery)(unsafe.Pointer(bp+24)).FiMaxDist-- 24666 __11: 24667 ; 24668 if !((*MatchQuery)(unsafe.Pointer(bp+24)).FiMaxDist < 0) { 24669 goto __12 24670 } 24671 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiMaxDist = 0 24672 __12: 24673 ; 24674 __10: 24675 ; 24676 spellfix1ResetCursor(tls, pCur) 24677 spellfix1ResizeCursor(tls, pCur, iLimit) 24678 zMatchThis = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 24679 if !(zMatchThis == uintptr(0)) { 24680 goto __13 24681 } 24682 return SQLITE_OK 24683 __13: 24684 ; 24685 if !((*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 != 0) { 24686 goto __14 24687 } 24688 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpLang = editDist3FindLang(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3, iLang) 24689 pMatchStr3 = editDist3FromStringNew(tls, (*MatchQuery)(unsafe.Pointer(bp+24)).FpLang, zMatchThis, -1) 24690 if !(pMatchStr3 == uintptr(0)) { 24691 goto __16 24692 } 24693 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 24694 goto filter_exit 24695 __16: 24696 ; 24697 goto __15 24698 __14: 24699 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpLang = uintptr(0) 24700 __15: 24701 ; 24702 zPattern = transliterate(tls, zMatchThis, sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv)))) 24703 sqlite3.Xsqlite3_free(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern) 24704 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern = zPattern 24705 if !(zPattern == uintptr(0)) { 24706 goto __17 24707 } 24708 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 24709 goto filter_exit 24710 __17: 24711 ; 24712 nPattern = int32(libc.Xstrlen(tls, zPattern)) 24713 if !(int32(*(*int8)(unsafe.Pointer(zPattern + uintptr(nPattern-1)))) == '*') { 24714 goto __18 24715 } 24716 nPattern-- 24717 __18: 24718 ; 24719 zSql = sqlite3.Xsqlite3_mprintf(tls, 24720 ts+7650, 24721 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, iLang)) 24722 if !(zSql == uintptr(0)) { 24723 goto __19 24724 } 24725 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 24726 *(*uintptr)(unsafe.Pointer(bp + 168)) = uintptr(0) 24727 goto filter_exit 24728 __19: 24729 ; 24730 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb, zSql, -1, bp+168, uintptr(0)) 24731 sqlite3.Xsqlite3_free(tls, zSql) 24732 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiLang = iLang 24733 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpCur = pCur 24734 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpStmt = *(*uintptr)(unsafe.Pointer(bp + 168)) 24735 (*MatchQuery)(unsafe.Pointer(bp + 24)).FzPattern = zPattern 24736 (*MatchQuery)(unsafe.Pointer(bp + 24)).FnPattern = nPattern 24737 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpMatchStr3 = pMatchStr3 24738 (*MatchQuery)(unsafe.Pointer(bp + 24)).FiLang = iLang 24739 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = rc 24740 (*MatchQuery)(unsafe.Pointer(bp + 24)).FpConfig3 = (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 24741 if !((*MatchQuery)(unsafe.Pointer(bp+24)).Frc == SQLITE_OK) { 24742 goto __20 24743 } 24744 spellfix1RunQuery(tls, bp+24, zPattern, nPattern) 24745 __20: 24746 ; 24747 if !((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa != 0) { 24748 goto __21 24749 } 24750 libc.Xqsort(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa, uint64((*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow), uint64(unsafe.Sizeof(spellfix1_row{})), *(*uintptr)(unsafe.Pointer(&struct { 24751 f func(*libc.TLS, uintptr, uintptr) int32 24752 }{spellfix1RowCompare}))) 24753 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiTop = iLimit 24754 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiScope = iScope 24755 goto __22 24756 __21: 24757 (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc = SQLITE_NOMEM 24758 __22: 24759 ; 24760 filter_exit: 24761 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 168))) 24762 editDist3FromStringDelete(tls, pMatchStr3) 24763 return (*MatchQuery)(unsafe.Pointer(bp + 24)).Frc 24764 } 24765 24766 func spellfix1FilterForFullScan(tls *libc.TLS, pCur uintptr, argc int32, argv uintptr) int32 { 24767 bp := tls.Alloc(24) 24768 defer tls.Free(24) 24769 24770 var rc int32 = SQLITE_OK 24771 var idxNum int32 = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum 24772 var zSql uintptr 24773 var pVTab uintptr = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpVTab 24774 spellfix1ResetCursor(tls, pCur) 24775 24776 zSql = sqlite3.Xsqlite3_mprintf(tls, 24777 ts+7750, 24778 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).FzTableName, 24779 func() uintptr { 24780 if idxNum&64 != 0 { 24781 return ts + 7809 24782 } 24783 return ts + 584 24784 }())) 24785 if zSql == uintptr(0) { 24786 return SQLITE_NOMEM 24787 } 24788 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*spellfix1_vtab)(unsafe.Pointer(pVTab)).Fdb, zSql, -1, pCur+56, uintptr(0)) 24789 sqlite3.Xsqlite3_free(tls, zSql) 24790 if rc == SQLITE_OK && idxNum&64 != 0 { 24791 rc = sqlite3.Xsqlite3_bind_value(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, 1, *(*uintptr)(unsafe.Pointer(argv))) 24792 } 24793 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow = libc.AssignPtrInt32(pCur+36, 0) 24794 if rc == SQLITE_OK { 24795 rc = sqlite3.Xsqlite3_step(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 24796 if rc == SQLITE_ROW { 24797 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = -1 24798 rc = SQLITE_OK 24799 } 24800 if rc == SQLITE_DONE { 24801 rc = SQLITE_OK 24802 } 24803 } else { 24804 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = 0 24805 } 24806 return rc 24807 } 24808 24809 func spellfix1Filter(tls *libc.TLS, cur uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 24810 var pCur uintptr = cur 24811 var rc int32 24812 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FidxNum = idxNum 24813 if idxNum&1 != 0 { 24814 rc = spellfix1FilterForMatch(tls, pCur, argc, argv) 24815 } else { 24816 rc = spellfix1FilterForFullScan(tls, pCur, argc, argv) 24817 } 24818 return rc 24819 } 24820 24821 func spellfix1Next(tls *libc.TLS, cur uintptr) int32 { 24822 var pCur uintptr = cur 24823 var rc int32 = SQLITE_OK 24824 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow < (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow { 24825 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 24826 rc = sqlite3.Xsqlite3_step(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan) 24827 if rc != SQLITE_ROW { 24828 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow = (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow 24829 } 24830 if rc == SQLITE_ROW || rc == SQLITE_DONE { 24831 rc = SQLITE_OK 24832 } 24833 } else { 24834 (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow++ 24835 } 24836 } 24837 return rc 24838 } 24839 24840 func spellfix1Eof(tls *libc.TLS, cur uintptr) int32 { 24841 var pCur uintptr = cur 24842 return libc.Bool32((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow >= (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnRow) 24843 } 24844 24845 func spellfix1Column(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 24846 bp := tls.Alloc(4) 24847 defer tls.Free(4) 24848 24849 var pCur uintptr = cur 24850 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 24851 if i <= SPELLFIX_COL_LANGID { 24852 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, i)) 24853 } else { 24854 sqlite3.Xsqlite3_result_null(tls, ctx) 24855 } 24856 return SQLITE_OK 24857 } 24858 switch i { 24859 case SPELLFIX_COL_WORD: 24860 { 24861 sqlite3.Xsqlite3_result_text(tls, ctx, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FzWord, -1, uintptr(0)) 24862 break 24863 24864 } 24865 case SPELLFIX_COL_RANK: 24866 { 24867 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiRank) 24868 break 24869 24870 } 24871 case SPELLFIX_COL_DISTANCE: 24872 { 24873 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiDistance) 24874 break 24875 24876 } 24877 case SPELLFIX_COL_LANGID: 24878 { 24879 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiLang) 24880 break 24881 24882 } 24883 case SPELLFIX_COL_SCORE: 24884 { 24885 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiScore) 24886 break 24887 24888 } 24889 case SPELLFIX_COL_MATCHLEN: 24890 { 24891 *(*int32)(unsafe.Pointer(bp)) = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiMatchlen 24892 if *(*int32)(unsafe.Pointer(bp)) < 0 { 24893 var nPattern int32 = int32(libc.Xstrlen(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern)) 24894 var zWord uintptr = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FzWord 24895 var nWord int32 = int32(libc.Xstrlen(tls, zWord)) 24896 24897 if nPattern > 0 && int32(*(*int8)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern + uintptr(nPattern-1)))) == '*' { 24898 var zTranslit uintptr 24899 var res int32 24900 zTranslit = transliterate(tls, zWord, nWord) 24901 if !(zTranslit != 0) { 24902 return SQLITE_NOMEM 24903 } 24904 res = editdist1(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FzPattern, zTranslit, bp) 24905 sqlite3.Xsqlite3_free(tls, zTranslit) 24906 if res < 0 { 24907 return SQLITE_NOMEM 24908 } 24909 *(*int32)(unsafe.Pointer(bp)) = translen_to_charlen(tls, zWord, nWord, *(*int32)(unsafe.Pointer(bp))) 24910 } else { 24911 *(*int32)(unsafe.Pointer(bp)) = utf8Charlen(tls, zWord, nWord) 24912 } 24913 } 24914 24915 sqlite3.Xsqlite3_result_int(tls, ctx, *(*int32)(unsafe.Pointer(bp))) 24916 break 24917 24918 } 24919 case SPELLFIX_COL_PHONEHASH: 24920 { 24921 sqlite3.Xsqlite3_result_text(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa+uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64+32, -1, uintptr(0)) 24922 break 24923 24924 } 24925 case SPELLFIX_COL_TOP: 24926 { 24927 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiTop) 24928 break 24929 24930 } 24931 case SPELLFIX_COL_SCOPE: 24932 { 24933 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FiScope) 24934 break 24935 24936 } 24937 case SPELLFIX_COL_SRCHCNT: 24938 { 24939 sqlite3.Xsqlite3_result_int(tls, ctx, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FnSearch) 24940 break 24941 24942 } 24943 default: 24944 { 24945 sqlite3.Xsqlite3_result_null(tls, ctx) 24946 break 24947 24948 } 24949 } 24950 return SQLITE_OK 24951 } 24952 24953 func spellfix1Rowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 24954 var pCur uintptr = cur 24955 if (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan != 0 { 24956 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*spellfix1_cursor)(unsafe.Pointer(pCur)).FpFullScan, 4) 24957 } else { 24958 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*spellfix1_row)(unsafe.Pointer((*spellfix1_cursor)(unsafe.Pointer(pCur)).Fa + uintptr((*spellfix1_cursor)(unsafe.Pointer(pCur)).FiRow)*64)).FiRowid 24959 } 24960 return SQLITE_OK 24961 } 24962 24963 func spellfix1GetConflict(tls *libc.TLS, db uintptr) uintptr { 24964 var eConflict int32 = sqlite3.Xsqlite3_vtab_on_conflict(tls, db) 24965 24966 return azConflict[eConflict-1] 24967 } 24968 24969 var azConflict = [5]uintptr{ 24970 ts + 7824, ts + 7833, ts + 7840, ts + 7840, ts + 7846, 24971 } 24972 24973 func spellfix1Update(tls *libc.TLS, pVTab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 24974 bp := tls.Alloc(284) 24975 defer tls.Free(284) 24976 24977 *(*int32)(unsafe.Pointer(bp + 280)) = SQLITE_OK 24978 var rowid sqlite3_int64 24979 var newRowid sqlite3_int64 24980 var p uintptr = pVTab 24981 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 24982 24983 if argc == 1 { 24984 rowid = libc.AssignPtrInt64(pRowid, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 24985 spellfix1DbExec(tls, bp+280, db, 24986 ts+7854, 24987 libc.VaList(bp, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, rowid)) 24988 } else { 24989 var zWord uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 24990 var nWord int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 24991 var iLang int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 24992 var iRank int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 24993 var zSoundslike uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 12*8))) 24994 var nSoundslike int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + 12*8))) 24995 var zK1 uintptr 24996 var zK2 uintptr 24997 var i int32 24998 var c int8 24999 var zConflict uintptr = spellfix1GetConflict(tls, db) 25000 25001 if zWord == uintptr(0) { 25002 var zCmd uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 13*8))) 25003 if zCmd == uintptr(0) { 25004 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+7897, 25005 libc.VaList(bp+24, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName)) 25006 return SQLITE_CONSTRAINT | int32(5)<<8 25007 } 25008 if libc.Xstrcmp(tls, zCmd, ts+7933) == 0 { 25009 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 25010 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = uintptr(0) 25011 return SQLITE_OK 25012 } 25013 if libc.Xstrncmp(tls, zCmd, ts+7599, uint64(16)) == 0 { 25014 editDist3ConfigDelete(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3) 25015 (*spellfix1_vtab)(unsafe.Pointer(p)).FpConfig3 = uintptr(0) 25016 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 25017 (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable = spellfix1Dequote(tls, zCmd+uintptr(16)) 25018 if (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable == uintptr(0) { 25019 return SQLITE_NOMEM 25020 } 25021 if int32(*(*int8)(unsafe.Pointer((*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable))) == 0 || sqlite3.Xsqlite3_stricmp(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable, ts+7939) == 0 { 25022 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable) 25023 (*spellfix1_vtab)(unsafe.Pointer(p)).FzCostTable = uintptr(0) 25024 } 25025 return SQLITE_OK 25026 } 25027 (*sqlite3_vtab)(unsafe.Pointer(pVTab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+7944, 25028 libc.VaList(bp+32, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, zCmd)) 25029 return SQLITE_ERROR 25030 } 25031 if iRank < 1 { 25032 iRank = 1 25033 } 25034 if zSoundslike != 0 { 25035 zK1 = transliterate(tls, zSoundslike, nSoundslike) 25036 } else { 25037 zK1 = transliterate(tls, zWord, nWord) 25038 } 25039 if zK1 == uintptr(0) { 25040 return SQLITE_NOMEM 25041 } 25042 for i = 0; int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer(zK1 + uintptr(i))))) != 0; i++ { 25043 if int32(c) >= 'A' && int32(c) <= 'Z' { 25044 *(*int8)(unsafe.Pointer(zK1 + uintptr(i))) += int8('a' - 'A') 25045 } 25046 } 25047 zK2 = phoneticHash(tls, zK1, i) 25048 if zK2 == uintptr(0) { 25049 sqlite3.Xsqlite3_free(tls, zK1) 25050 return SQLITE_NOMEM 25051 } 25052 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 25053 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) == SQLITE_NULL { 25054 spellfix1DbExec(tls, bp+280, db, 25055 ts+7979, 25056 libc.VaList(bp+48, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, 25057 iRank, iLang, zWord, zK1, zWord, zK2)) 25058 } else { 25059 newRowid = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 25060 spellfix1DbExec(tls, bp+280, db, 25061 ts+8065, 25062 libc.VaList(bp+112, zConflict, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, 25063 newRowid, iRank, iLang, zWord, zK1, zWord, zK2)) 25064 } 25065 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_last_insert_rowid(tls, db) 25066 } else { 25067 rowid = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 25068 newRowid = libc.AssignPtrInt64(pRowid, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 25069 spellfix1DbExec(tls, bp+280, db, 25070 ts+8165, 25071 libc.VaList(bp+192, zConflict, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, newRowid, iRank, iLang, 25072 zWord, zK1, zWord, zK2, rowid)) 25073 } 25074 sqlite3.Xsqlite3_free(tls, zK1) 25075 sqlite3.Xsqlite3_free(tls, zK2) 25076 } 25077 return *(*int32)(unsafe.Pointer(bp + 280)) 25078 } 25079 25080 func spellfix1Rename(tls *libc.TLS, pVTab uintptr, zNew uintptr) int32 { 25081 bp := tls.Alloc(36) 25082 defer tls.Free(36) 25083 25084 var p uintptr = pVTab 25085 var db uintptr = (*spellfix1_vtab)(unsafe.Pointer(p)).Fdb 25086 *(*int32)(unsafe.Pointer(bp + 32)) = SQLITE_OK 25087 var zNewName uintptr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zNew)) 25088 if zNewName == uintptr(0) { 25089 return SQLITE_NOMEM 25090 } 25091 spellfix1DbExec(tls, bp+32, db, 25092 ts+8274, 25093 libc.VaList(bp+8, (*spellfix1_vtab)(unsafe.Pointer(p)).FzDbName, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName, zNewName)) 25094 if *(*int32)(unsafe.Pointer(bp + 32)) == SQLITE_OK { 25095 sqlite3.Xsqlite3_free(tls, (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName) 25096 (*spellfix1_vtab)(unsafe.Pointer(p)).FzTableName = zNewName 25097 } else { 25098 sqlite3.Xsqlite3_free(tls, zNewName) 25099 } 25100 return *(*int32)(unsafe.Pointer(bp + 32)) 25101 } 25102 25103 var spellfix1Module = sqlite3_module{ 25104 FxCreate: 0, 25105 FxConnect: 0, 25106 FxBestIndex: 0, 25107 FxDisconnect: 0, 25108 FxDestroy: 0, 25109 FxOpen: 0, 25110 FxClose: 0, 25111 FxFilter: 0, 25112 FxNext: 0, 25113 FxEof: 0, 25114 FxColumn: 0, 25115 FxRowid: 0, 25116 FxUpdate: 0, 25117 FxRename: 0, 25118 } 25119 25120 func spellfix1Register(tls *libc.TLS, db uintptr) int32 { 25121 var rc int32 = SQLITE_OK 25122 var i int32 25123 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8323, 1, 25124 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 25125 *(*uintptr)(unsafe.Pointer(&struct { 25126 f func(*libc.TLS, uintptr, int32, uintptr) 25127 }{transliterateSqlFunc})), uintptr(0), uintptr(0)) 25128 if rc == SQLITE_OK { 25129 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8342, 2, 25130 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 25131 *(*uintptr)(unsafe.Pointer(&struct { 25132 f func(*libc.TLS, uintptr, int32, uintptr) 25133 }{editdistSqlFunc})), uintptr(0), uintptr(0)) 25134 } 25135 if rc == SQLITE_OK { 25136 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8361, 1, 25137 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 25138 *(*uintptr)(unsafe.Pointer(&struct { 25139 f func(*libc.TLS, uintptr, int32, uintptr) 25140 }{phoneticHashSqlFunc})), uintptr(0), uintptr(0)) 25141 } 25142 if rc == SQLITE_OK { 25143 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8381, 1, 25144 SQLITE_UTF8|SQLITE_DETERMINISTIC, uintptr(0), 25145 *(*uintptr)(unsafe.Pointer(&struct { 25146 f func(*libc.TLS, uintptr, int32, uintptr) 25147 }{scriptCodeSqlFunc})), uintptr(0), uintptr(0)) 25148 } 25149 if rc == SQLITE_OK { 25150 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8402, uintptr(unsafe.Pointer(&spellfix1Module)), uintptr(0)) 25151 } 25152 if rc == SQLITE_OK { 25153 rc = editDist3Install(tls, db) 25154 } 25155 25156 for i = 0; uint64(i) < uint64(unsafe.Sizeof(translit))/uint64(unsafe.Sizeof(Transliteration{}))-uint64(1); i++ { 25157 } 25158 25159 return rc 25160 } 25161 25162 func sqlite3_spellfix_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 25163 _ = pApi 25164 25165 return spellfix1Register(tls, db) 25166 return SQLITE_OK 25167 } 25168 25169 func totypeIsspace(tls *libc.TLS, c uint8) int32 { 25170 return libc.Bool32(int32(c) == ' ' || int32(c) == '\t' || int32(c) == '\n' || int32(c) == '\v' || int32(c) == '\f' || int32(c) == '\r') 25171 } 25172 25173 func totypeIsdigit(tls *libc.TLS, c uint8) int32 { 25174 return libc.Bool32(int32(c) >= '0' && int32(c) <= '9') 25175 } 25176 25177 func totypeCompare2pow63(tls *libc.TLS, zNum uintptr) int32 { 25178 var c int32 = 0 25179 var i int32 25180 25181 var pow63 uintptr = ts + 8412 25182 for i = 0; c == 0 && i < 18; i++ { 25183 c = (int32(*(*int8)(unsafe.Pointer(zNum + uintptr(i)))) - int32(*(*int8)(unsafe.Pointer(pow63 + uintptr(i))))) * 10 25184 } 25185 if c == 0 { 25186 c = int32(*(*int8)(unsafe.Pointer(zNum + 18))) - '8' 25187 } 25188 return c 25189 } 25190 25191 func totypeAtoi64(tls *libc.TLS, zNum uintptr, pNum uintptr, length int32) int32 { 25192 var u sqlite3_uint64 = uint64(0) 25193 var neg int32 = 0 25194 var i int32 25195 var c int32 = 0 25196 var nonNum int32 = 0 25197 var zStart uintptr 25198 var zEnd uintptr = zNum + uintptr(length) 25199 25200 for zNum < zEnd && totypeIsspace(tls, uint8(*(*int8)(unsafe.Pointer(zNum)))) != 0 { 25201 zNum++ 25202 } 25203 if zNum < zEnd { 25204 if int32(*(*int8)(unsafe.Pointer(zNum))) == '-' { 25205 neg = 1 25206 zNum++ 25207 } else if int32(*(*int8)(unsafe.Pointer(zNum))) == '+' { 25208 zNum++ 25209 } 25210 } 25211 zStart = zNum 25212 for zNum < zEnd && int32(*(*int8)(unsafe.Pointer(zNum))) == '0' { 25213 zNum++ 25214 } 25215 for i = 0; zNum+uintptr(i) < zEnd && libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(zNum + uintptr(i))))) >= '0' && c <= '9'; i++ { 25216 u = u*uint64(10) + sqlite3_uint64(c) - uint64('0') 25217 } 25218 if u > uint64(int64(0xffffffff)|int64(0x7fffffff)<<32) { 25219 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = int64(-1) - (int64(0xffffffff) | int64(0x7fffffff)<<32) 25220 } else if neg != 0 { 25221 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = -sqlite3_int64(u) 25222 } else { 25223 *(*sqlite3_int64)(unsafe.Pointer(pNum)) = sqlite3_int64(u) 25224 } 25225 if c != 0 && zNum+uintptr(i) < zEnd || i == 0 && zStart == zNum || i > 19 || nonNum != 0 { 25226 return 1 25227 } else if i < 19 { 25228 return 0 25229 } else { 25230 c = totypeCompare2pow63(tls, zNum) 25231 if c < 0 { 25232 return 0 25233 } else if c > 0 { 25234 return 1 25235 } else { 25236 if neg != 0 { 25237 return 0 25238 } 25239 return 2 25240 } 25241 } 25242 return int32(0) 25243 } 25244 25245 func totypeAtoF(tls *libc.TLS, z uintptr, pResult uintptr, length int32) int32 { 25246 var zEnd uintptr 25247 25248 var sign int32 25249 var s sqlite3_int64 25250 var d int32 25251 var esign int32 25252 var e int32 25253 var eValid int32 25254 var result float64 25255 var nDigits int32 25256 var nonNum int32 25257 var scale float64 25258 zEnd = z + uintptr(length) 25259 sign = 1 25260 s = int64(0) 25261 d = 0 25262 esign = 1 25263 e = 0 25264 eValid = 1 25265 nDigits = 0 25266 nonNum = 0 25267 25268 *(*float64)(unsafe.Pointer(pResult)) = 0.0 25269 25270 __1: 25271 if !(z < zEnd && totypeIsspace(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 25272 goto __2 25273 } 25274 z++ 25275 goto __1 25276 __2: 25277 ; 25278 if !(z >= zEnd) { 25279 goto __3 25280 } 25281 return 0 25282 __3: 25283 ; 25284 if !(int32(*(*int8)(unsafe.Pointer(z))) == '-') { 25285 goto __4 25286 } 25287 sign = -1 25288 z++ 25289 goto __5 25290 __4: 25291 if !(int32(*(*int8)(unsafe.Pointer(z))) == '+') { 25292 goto __6 25293 } 25294 z++ 25295 __6: 25296 ; 25297 __5: 25298 ; 25299 __7: 25300 if !(z < zEnd && int32(*(*int8)(unsafe.Pointer(z))) == '0') { 25301 goto __8 25302 } 25303 z++ 25304 nDigits++ 25305 goto __7 25306 __8: 25307 ; 25308 __9: 25309 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0 && s < (int64(0xffffffff)|int64(0x7fffffff)<<32-int64(9))/int64(10)) { 25310 goto __10 25311 } 25312 s = s*int64(10) + sqlite3_int64(int32(*(*int8)(unsafe.Pointer(z)))-'0') 25313 z++ 25314 nDigits++ 25315 goto __9 25316 __10: 25317 ; 25318 __11: 25319 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 25320 goto __12 25321 } 25322 z++ 25323 nDigits++ 25324 d++ 25325 goto __11 25326 __12: 25327 ; 25328 if !(z >= zEnd) { 25329 goto __13 25330 } 25331 goto totype_atof_calc 25332 __13: 25333 ; 25334 if !(int32(*(*int8)(unsafe.Pointer(z))) == '.') { 25335 goto __14 25336 } 25337 z++ 25338 25339 __15: 25340 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0 && s < (int64(0xffffffff)|int64(0x7fffffff)<<32-int64(9))/int64(10)) { 25341 goto __16 25342 } 25343 s = s*int64(10) + sqlite3_int64(int32(*(*int8)(unsafe.Pointer(z)))-'0') 25344 z++ 25345 nDigits++ 25346 d-- 25347 goto __15 25348 __16: 25349 ; 25350 __17: 25351 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 25352 goto __18 25353 } 25354 z++ 25355 nDigits++ 25356 goto __17 25357 __18: 25358 ; 25359 __14: 25360 ; 25361 if !(z >= zEnd) { 25362 goto __19 25363 } 25364 goto totype_atof_calc 25365 __19: 25366 ; 25367 if !(int32(*(*int8)(unsafe.Pointer(z))) == 'e' || int32(*(*int8)(unsafe.Pointer(z))) == 'E') { 25368 goto __20 25369 } 25370 z++ 25371 eValid = 0 25372 if !(z >= zEnd) { 25373 goto __21 25374 } 25375 goto totype_atof_calc 25376 __21: 25377 ; 25378 if !(int32(*(*int8)(unsafe.Pointer(z))) == '-') { 25379 goto __22 25380 } 25381 esign = -1 25382 z++ 25383 goto __23 25384 __22: 25385 if !(int32(*(*int8)(unsafe.Pointer(z))) == '+') { 25386 goto __24 25387 } 25388 z++ 25389 __24: 25390 ; 25391 __23: 25392 ; 25393 __25: 25394 if !(z < zEnd && totypeIsdigit(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 25395 goto __26 25396 } 25397 if e < 10000 { 25398 e = e*10 + (int32(*(*int8)(unsafe.Pointer(z))) - '0') 25399 } else { 25400 e = 10000 25401 } 25402 z++ 25403 eValid = 1 25404 goto __25 25405 __26: 25406 ; 25407 __20: 25408 ; 25409 if !(nDigits != 0 && eValid != 0) { 25410 goto __27 25411 } 25412 __28: 25413 if !(z < zEnd && totypeIsspace(tls, uint8(*(*int8)(unsafe.Pointer(z)))) != 0) { 25414 goto __29 25415 } 25416 z++ 25417 goto __28 25418 __29: 25419 ; 25420 __27: 25421 ; 25422 totype_atof_calc: 25423 e = e*esign + d 25424 if !(e < 0) { 25425 goto __30 25426 } 25427 esign = -1 25428 e = e * -1 25429 goto __31 25430 __30: 25431 esign = 1 25432 __31: 25433 ; 25434 if !!(s != 0) { 25435 goto __32 25436 } 25437 25438 if sign < 0 && nDigits != 0 { 25439 result = -libc.Float64FromFloat64(float64(0)) 25440 } else { 25441 result = float64(0) 25442 } 25443 goto __33 25444 __32: 25445 if !(esign > 0) { 25446 goto __34 25447 } 25448 __36: 25449 if !(s < (int64(0xffffffff)|int64(0x7fffffff)<<32)/int64(10) && e > 0) { 25450 goto __37 25451 } 25452 e-- 25453 s = s * int64(10) 25454 goto __36 25455 __37: 25456 ; 25457 goto __35 25458 __34: 25459 __38: 25460 if !(!(int32(s%int64(10)) != 0) && e > 0) { 25461 goto __39 25462 } 25463 e-- 25464 s = s / int64(10) 25465 goto __38 25466 __39: 25467 ; 25468 __35: 25469 ; 25470 if sign < 0 { 25471 s = -s 25472 } else { 25473 s = s 25474 } 25475 25476 if !(e != 0) { 25477 goto __40 25478 } 25479 scale = 1.0 25480 25481 if !(e > 307 && e < 342) { 25482 goto __42 25483 } 25484 __44: 25485 if !(e%308 != 0) { 25486 goto __45 25487 } 25488 scale = scale * 1.0e+1 25489 e = e - 1 25490 goto __44 25491 __45: 25492 ; 25493 if !(esign < 0) { 25494 goto __46 25495 } 25496 result = float64(s) / scale 25497 result = result / 1.0e+308 25498 goto __47 25499 __46: 25500 result = float64(s) * scale 25501 result = result * 1.0e+308 25502 __47: 25503 ; 25504 goto __43 25505 __42: 25506 if !(e >= 342) { 25507 goto __48 25508 } 25509 if !(esign < 0) { 25510 goto __50 25511 } 25512 result = 0.0 * float64(s) 25513 goto __51 25514 __50: 25515 result = libc.Float64(1e308) * libc.Float64(1e308) * float64(s) 25516 __51: 25517 ; 25518 goto __49 25519 __48: 25520 __52: 25521 if !(e%22 != 0) { 25522 goto __53 25523 } 25524 scale = scale * 1.0e+1 25525 e = e - 1 25526 goto __52 25527 __53: 25528 ; 25529 __54: 25530 if !(e > 0) { 25531 goto __55 25532 } 25533 scale = scale * 1.0e+22 25534 e = e - 22 25535 goto __54 25536 __55: 25537 ; 25538 if !(esign < 0) { 25539 goto __56 25540 } 25541 result = float64(s) / scale 25542 goto __57 25543 __56: 25544 result = float64(s) * scale 25545 __57: 25546 ; 25547 __49: 25548 ; 25549 __43: 25550 ; 25551 goto __41 25552 __40: 25553 result = float64(s) 25554 __41: 25555 ; 25556 __33: 25557 ; 25558 *(*float64)(unsafe.Pointer(pResult)) = result 25559 25560 return libc.Bool32(z >= zEnd && nDigits > 0 && eValid != 0 && nonNum == 0) 25561 } 25562 25563 func tointegerFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 25564 bp := tls.Alloc(24) 25565 defer tls.Free(24) 25566 25567 _ = argc 25568 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) { 25569 case SQLITE_FLOAT: 25570 { 25571 var rVal float64 = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 25572 var iVal sqlite3_int64 = sqlite3_int64(rVal) 25573 if rVal == float64(iVal) { 25574 sqlite3.Xsqlite3_result_int64(tls, context, iVal) 25575 } 25576 break 25577 25578 } 25579 case SQLITE_INTEGER: 25580 { 25581 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 25582 break 25583 25584 } 25585 case SQLITE_BLOB: 25586 { 25587 var zBlob uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 25588 if zBlob != 0 { 25589 var nBlob int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 25590 if uint64(nBlob) == uint64(unsafe.Sizeof(sqlite3_int64(0))) { 25591 if 0 != 0 { 25592 var i int32 25593 25594 for i = 0; uint64(i) < uint64(unsafe.Sizeof(sqlite3_int64(0))); i++ { 25595 *(*uint8)(unsafe.Pointer(bp + uintptr(i))) = *(*uint8)(unsafe.Pointer(zBlob + uintptr(uint64(unsafe.Sizeof(sqlite3_int64(0)))-uint64(1)-uint64(i)))) 25596 } 25597 libc.X__builtin___memcpy_chk(tls, bp+8, bp, uint64(unsafe.Sizeof(sqlite3_int64(0))), libc.X__builtin_object_size(tls, bp+8, 0)) 25598 } else { 25599 libc.X__builtin___memcpy_chk(tls, bp+8, zBlob, uint64(unsafe.Sizeof(sqlite3_int64(0))), libc.X__builtin_object_size(tls, bp+8, 0)) 25600 } 25601 sqlite3.Xsqlite3_result_int64(tls, context, *(*sqlite3_int64)(unsafe.Pointer(bp + 8))) 25602 } 25603 } 25604 break 25605 25606 } 25607 case SQLITE_TEXT: 25608 { 25609 var zStr uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 25610 if zStr != 0 { 25611 var nStr int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 25612 if nStr != 0 && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr))) != 0) { 25613 if !(totypeAtoi64(tls, zStr, bp+16, nStr) != 0) { 25614 sqlite3.Xsqlite3_result_int64(tls, context, *(*sqlite3_int64)(unsafe.Pointer(bp + 16))) 25615 } 25616 } 25617 } 25618 break 25619 25620 } 25621 default: 25622 { 25623 break 25624 25625 } 25626 } 25627 } 25628 25629 func torealFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 25630 bp := tls.Alloc(24) 25631 defer tls.Free(24) 25632 25633 _ = argc 25634 switch sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) { 25635 case SQLITE_FLOAT: 25636 { 25637 sqlite3.Xsqlite3_result_double(tls, context, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv)))) 25638 break 25639 25640 } 25641 case SQLITE_INTEGER: 25642 { 25643 var iVal sqlite3_int64 = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 25644 var rVal float64 = float64(iVal) 25645 if iVal == sqlite3_int64(rVal) { 25646 sqlite3.Xsqlite3_result_double(tls, context, rVal) 25647 } 25648 break 25649 25650 } 25651 case SQLITE_BLOB: 25652 { 25653 var zBlob uintptr = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 25654 if zBlob != 0 { 25655 var nBlob int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 25656 if uint64(nBlob) == uint64(unsafe.Sizeof(float64(0))) { 25657 if 1 != 0 { 25658 var i int32 25659 25660 for i = 0; uint64(i) < uint64(unsafe.Sizeof(float64(0))); i++ { 25661 *(*uint8)(unsafe.Pointer(bp + uintptr(i))) = *(*uint8)(unsafe.Pointer(zBlob + uintptr(uint64(unsafe.Sizeof(float64(0)))-uint64(1)-uint64(i)))) 25662 } 25663 libc.X__builtin___memcpy_chk(tls, bp+8, bp, uint64(unsafe.Sizeof(float64(0))), libc.X__builtin_object_size(tls, bp+8, 0)) 25664 } else { 25665 libc.X__builtin___memcpy_chk(tls, bp+8, zBlob, uint64(unsafe.Sizeof(float64(0))), libc.X__builtin_object_size(tls, bp+8, 0)) 25666 } 25667 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 8))) 25668 } 25669 } 25670 break 25671 25672 } 25673 case SQLITE_TEXT: 25674 { 25675 var zStr uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 25676 if zStr != 0 { 25677 var nStr int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 25678 if nStr != 0 && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr))) != 0) && !(totypeIsspace(tls, *(*uint8)(unsafe.Pointer(zStr + uintptr(nStr-1)))) != 0) { 25679 if totypeAtoF(tls, zStr, bp+16, nStr) != 0 { 25680 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 16))) 25681 return 25682 } 25683 } 25684 } 25685 break 25686 25687 } 25688 default: 25689 { 25690 break 25691 25692 } 25693 } 25694 } 25695 25696 func sqlite3_totype_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 25697 var rc int32 = SQLITE_OK 25698 _ = pApi 25699 25700 _ = pzErrMsg 25701 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8431, 1, 25702 SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS, uintptr(0), 25703 *(*uintptr)(unsafe.Pointer(&struct { 25704 f func(*libc.TLS, uintptr, int32, uintptr) 25705 }{tointegerFunc})), uintptr(0), uintptr(0)) 25706 if rc == SQLITE_OK { 25707 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+8441, 1, 25708 SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS, uintptr(0), 25709 *(*uintptr)(unsafe.Pointer(&struct { 25710 f func(*libc.TLS, uintptr, int32, uintptr) 25711 }{torealFunc})), uintptr(0), uintptr(0)) 25712 } 25713 return rc 25714 } 25715 25716 type UnionCsr1 = struct { 25717 Fbase sqlite3_vtab_cursor 25718 FpStmt uintptr 25719 FiMaxRowid sqlite3_int64 25720 FiTab int32 25721 F__ccgo_pad1 [4]byte 25722 } 25723 25724 type UnionCsr = UnionCsr1 25725 type UnionTab1 = struct { 25726 Fbase sqlite3_vtab 25727 Fdb uintptr 25728 FbSwarm int32 25729 FiPK int32 25730 FnSrc int32 25731 F__ccgo_pad1 [4]byte 25732 FaSrc uintptr 25733 FbHasContext int32 25734 F__ccgo_pad2 [4]byte 25735 FzSourceStr uintptr 25736 FpNotFound uintptr 25737 FpOpenClose uintptr 25738 FpClosable uintptr 25739 FnOpen int32 25740 FnMaxOpen int32 25741 } 25742 25743 type UnionTab = UnionTab1 25744 type UnionSrc1 = struct { 25745 FzDb uintptr 25746 FzTab uintptr 25747 FiMin sqlite3_int64 25748 FiMax sqlite3_int64 25749 FzFile uintptr 25750 FzContext uintptr 25751 FnUser int32 25752 F__ccgo_pad1 [4]byte 25753 Fdb uintptr 25754 FpNextClosable uintptr 25755 } 25756 25757 type UnionSrc = UnionSrc1 25758 25759 func unionMalloc(tls *libc.TLS, pRc uintptr, nByte sqlite3_int64) uintptr { 25760 var pRet uintptr 25761 25762 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 25763 pRet = sqlite3.Xsqlite3_malloc64(tls, uint64(nByte)) 25764 if pRet != 0 { 25765 libc.X__builtin___memset_chk(tls, pRet, 0, size_t(nByte), libc.X__builtin_object_size(tls, pRet, 0)) 25766 } else { 25767 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 25768 } 25769 } else { 25770 pRet = uintptr(0) 25771 } 25772 return pRet 25773 } 25774 25775 func unionStrdup(tls *libc.TLS, pRc uintptr, zIn uintptr) uintptr { 25776 var zRet uintptr = uintptr(0) 25777 if zIn != 0 { 25778 var nByte sqlite3_int64 = sqlite3_int64(libc.Xstrlen(tls, zIn) + uint64(1)) 25779 zRet = unionMalloc(tls, pRc, nByte) 25780 if zRet != 0 { 25781 libc.X__builtin___memcpy_chk(tls, zRet, zIn, size_t(nByte), libc.X__builtin_object_size(tls, zRet, 0)) 25782 } 25783 } 25784 return zRet 25785 } 25786 25787 func unionDequote(tls *libc.TLS, z uintptr) { 25788 if z != 0 { 25789 var q int8 = *(*int8)(unsafe.Pointer(z)) 25790 25791 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 25792 var iIn int32 = 1 25793 var iOut int32 = 0 25794 if int32(q) == '[' { 25795 q = int8(']') 25796 } 25797 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 25798 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 25799 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 25800 iIn++ 25801 break 25802 } else { 25803 iIn = iIn + 2 25804 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 25805 } 25806 } else { 25807 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 25808 } 25809 } 25810 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 25811 } 25812 } 25813 } 25814 25815 func unionPrepare(tls *libc.TLS, pRc uintptr, db uintptr, zSql uintptr, pzErr uintptr) uintptr { 25816 bp := tls.Alloc(16) 25817 defer tls.Free(16) 25818 25819 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 25820 25821 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 25822 var rc int32 = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+8, uintptr(0)) 25823 if rc != SQLITE_OK { 25824 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8448, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 25825 *(*int32)(unsafe.Pointer(pRc)) = rc 25826 } 25827 } 25828 return *(*uintptr)(unsafe.Pointer(bp + 8)) 25829 } 25830 25831 func unionPreparePrintf(tls *libc.TLS, pRc uintptr, pzErr uintptr, db uintptr, zFmt uintptr, va uintptr) uintptr { 25832 var pRet uintptr = uintptr(0) 25833 var zSql uintptr 25834 var ap va_list 25835 _ = ap 25836 ap = va 25837 25838 zSql = sqlite3.Xsqlite3_vmprintf(tls, zFmt, ap) 25839 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 25840 if zSql == uintptr(0) { 25841 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 25842 } else { 25843 pRet = unionPrepare(tls, pRc, db, zSql, pzErr) 25844 } 25845 } 25846 sqlite3.Xsqlite3_free(tls, zSql) 25847 25848 _ = ap 25849 return pRet 25850 } 25851 25852 func unionFinalize(tls *libc.TLS, pRc uintptr, pStmt uintptr, pzErr uintptr) { 25853 bp := tls.Alloc(8) 25854 defer tls.Free(8) 25855 25856 var db uintptr = sqlite3.Xsqlite3_db_handle(tls, pStmt) 25857 var rc int32 = sqlite3.Xsqlite3_finalize(tls, pStmt) 25858 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 25859 *(*int32)(unsafe.Pointer(pRc)) = rc 25860 if rc != 0 { 25861 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 25862 } 25863 } 25864 } 25865 25866 func unionInvokeOpenClose(tls *libc.TLS, pTab uintptr, pSrc uintptr, bClose int32, pzErr uintptr) int32 { 25867 bp := tls.Alloc(8) 25868 defer tls.Free(8) 25869 25870 var rc int32 = SQLITE_OK 25871 if (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose != 0 { 25872 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, -1, uintptr(0)) 25873 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 25874 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext, -1, uintptr(0)) 25875 } 25876 sqlite3.Xsqlite3_bind_int(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose, 2+(*UnionTab)(unsafe.Pointer(pTab)).FbHasContext, bClose) 25877 sqlite3.Xsqlite3_step(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose) 25878 if SQLITE_OK != libc.AssignInt32(&rc, sqlite3.Xsqlite3_reset(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose)) { 25879 if pzErr != 0 { 25880 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*UnionTab)(unsafe.Pointer(pTab)).Fdb))) 25881 } 25882 } 25883 } 25884 return rc 25885 } 25886 25887 func unionCloseSources(tls *libc.TLS, pTab uintptr, nMax int32) { 25888 for (*UnionTab)(unsafe.Pointer(pTab)).FpClosable != 0 && (*UnionTab)(unsafe.Pointer(pTab)).FnOpen > nMax { 25889 var p uintptr 25890 var pp uintptr 25891 for pp = pTab + 88; (*UnionSrc)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(pp)))).FpNextClosable != 0; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 25892 } 25893 p = *(*uintptr)(unsafe.Pointer(pp)) 25894 25895 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(p)).Fdb) 25896 (*UnionSrc)(unsafe.Pointer(p)).Fdb = uintptr(0) 25897 *(*uintptr)(unsafe.Pointer(pp)) = uintptr(0) 25898 (*UnionTab)(unsafe.Pointer(pTab)).FnOpen-- 25899 unionInvokeOpenClose(tls, pTab, p, 1, uintptr(0)) 25900 } 25901 } 25902 25903 func unionDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 25904 if pVtab != 0 { 25905 var pTab uintptr = pVtab 25906 var i int32 25907 for i = 0; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 25908 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(i)*72 25909 var bHaveSrcDb int32 = libc.Bool32((*UnionSrc)(unsafe.Pointer(pSrc)).Fdb != uintptr(0)) 25910 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 25911 if bHaveSrcDb != 0 { 25912 unionInvokeOpenClose(tls, pTab, pSrc, 1, uintptr(0)) 25913 } 25914 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb) 25915 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab) 25916 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile) 25917 sqlite3.Xsqlite3_free(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext) 25918 } 25919 sqlite3.Xsqlite3_finalize(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound) 25920 sqlite3.Xsqlite3_finalize(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose) 25921 sqlite3.Xsqlite3_free(tls, (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr) 25922 sqlite3.Xsqlite3_free(tls, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc) 25923 sqlite3.Xsqlite3_free(tls, pTab) 25924 } 25925 return SQLITE_OK 25926 } 25927 25928 func unionIsIntkeyTable(tls *libc.TLS, db uintptr, pSrc uintptr, pzErr uintptr) int32 { 25929 bp := tls.Alloc(36) 25930 defer tls.Free(36) 25931 25932 *(*int32)(unsafe.Pointer(bp + 32)) = 0 25933 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 25934 var rc int32 25935 25936 sqlite3.Xsqlite3_table_column_metadata(tls, 25937 db, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, ts+8462, bp+24, uintptr(0), uintptr(0), bp+32, uintptr(0)) 25938 rc = sqlite3.Xsqlite3_errcode(tls, db) 25939 if rc == SQLITE_ERROR || 25940 rc == SQLITE_OK && (!(*(*int32)(unsafe.Pointer(bp + 32)) != 0) || sqlite3.Xsqlite3_stricmp(tls, ts+8470, *(*uintptr)(unsafe.Pointer(bp + 24))) != 0) { 25941 rc = SQLITE_ERROR 25942 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8478, 25943 libc.VaList(bp, func() uintptr { 25944 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 25945 return (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb 25946 } 25947 return ts + 584 25948 }(), 25949 func() uintptr { 25950 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 25951 return ts + 8506 25952 } 25953 return ts + 584 25954 }(), 25955 (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab)) 25956 } 25957 return rc 25958 } 25959 25960 func unionSourceToStr(tls *libc.TLS, pRc uintptr, pTab uintptr, pSrc uintptr, pzErr uintptr) uintptr { 25961 bp := tls.Alloc(4) 25962 defer tls.Free(4) 25963 25964 var zRet uintptr = uintptr(0) 25965 if *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 25966 var db uintptr = func() uintptr { 25967 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 25968 return (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb 25969 } 25970 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 25971 }() 25972 *(*int32)(unsafe.Pointer(bp)) = unionIsIntkeyTable(tls, db, pSrc, pzErr) 25973 var pStmt uintptr = unionPrepare(tls, bp, db, 25974 ts+8508, pzErr) 25975 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 25976 sqlite3.Xsqlite3_bind_text(tls, pStmt, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, -1, uintptr(0)) 25977 sqlite3.Xsqlite3_bind_text(tls, pStmt, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb, -1, uintptr(0)) 25978 if SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 25979 var z uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 25980 zRet = unionStrdup(tls, bp, z) 25981 } 25982 unionFinalize(tls, bp, pStmt, pzErr) 25983 } 25984 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp)) 25985 } 25986 25987 return zRet 25988 } 25989 25990 func unionSourceCheck(tls *libc.TLS, pTab uintptr, pzErr uintptr) int32 { 25991 bp := tls.Alloc(4) 25992 defer tls.Free(4) 25993 25994 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 25995 var z0 uintptr = uintptr(0) 25996 var i int32 25997 25998 z0 = unionSourceToStr(tls, bp, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc, pzErr) 25999 for i = 1; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 26000 var z uintptr = unionSourceToStr(tls, bp, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FaSrc+uintptr(i)*72, pzErr) 26001 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && sqlite3.Xsqlite3_stricmp(tls, z, z0) != 0 { 26002 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8592, 0) 26003 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 26004 } 26005 sqlite3.Xsqlite3_free(tls, z) 26006 } 26007 sqlite3.Xsqlite3_free(tls, z0) 26008 26009 return *(*int32)(unsafe.Pointer(bp)) 26010 } 26011 26012 func unionOpenDatabaseInner(tls *libc.TLS, pTab uintptr, pSrc uintptr, pzErr uintptr) int32 { 26013 bp := tls.Alloc(16) 26014 defer tls.Free(16) 26015 26016 var rc int32 26017 26018 rc = unionInvokeOpenClose(tls, pTab, pSrc, 0, pzErr) 26019 if rc != SQLITE_OK { 26020 return rc 26021 } 26022 26023 rc = sqlite3.Xsqlite3_open_v2(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, pSrc+56, openFlags, uintptr(0)) 26024 if rc == SQLITE_OK { 26025 return rc 26026 } 26027 if (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound != 0 { 26028 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 26029 (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb = uintptr(0) 26030 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound, 1, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, -1, uintptr(0)) 26031 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 26032 sqlite3.Xsqlite3_bind_text(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound, 2, (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext, -1, uintptr(0)) 26033 } 26034 sqlite3.Xsqlite3_step(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound) 26035 if SQLITE_OK != libc.AssignInt32(&rc, sqlite3.Xsqlite3_reset(tls, (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound)) { 26036 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*UnionTab)(unsafe.Pointer(pTab)).Fdb))) 26037 return rc 26038 } 26039 rc = sqlite3.Xsqlite3_open_v2(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile, pSrc+56, openFlags, uintptr(0)) 26040 } 26041 if rc != SQLITE_OK { 26042 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, sqlite3.Xsqlite3_errmsg(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb))) 26043 } 26044 return rc 26045 } 26046 26047 var openFlags int32 = SQLITE_OPEN_READONLY | SQLITE_OPEN_URI 26048 26049 func unionOpenDatabase(tls *libc.TLS, pTab uintptr, iSrc int32, pzErr uintptr) int32 { 26050 bp := tls.Alloc(4) 26051 defer tls.Free(4) 26052 26053 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 26054 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(iSrc)*72 26055 26056 if (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb == uintptr(0) { 26057 unionCloseSources(tls, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen-1) 26058 *(*int32)(unsafe.Pointer(bp)) = unionOpenDatabaseInner(tls, pTab, pSrc, pzErr) 26059 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 26060 var z uintptr = unionSourceToStr(tls, bp, pTab, pSrc, pzErr) 26061 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 26062 if (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr == uintptr(0) { 26063 (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr = z 26064 } else { 26065 if sqlite3.Xsqlite3_stricmp(tls, z, (*UnionTab)(unsafe.Pointer(pTab)).FzSourceStr) != 0 { 26066 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8592, 0) 26067 *(*int32)(unsafe.Pointer(bp)) = SQLITE_ERROR 26068 } 26069 sqlite3.Xsqlite3_free(tls, z) 26070 } 26071 } 26072 } 26073 26074 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 26075 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = (*UnionTab)(unsafe.Pointer(pTab)).FpClosable 26076 (*UnionTab)(unsafe.Pointer(pTab)).FpClosable = pSrc 26077 (*UnionTab)(unsafe.Pointer(pTab)).FnOpen++ 26078 } else { 26079 sqlite3.Xsqlite3_close(tls, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb) 26080 (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb = uintptr(0) 26081 unionInvokeOpenClose(tls, pTab, pSrc, 1, uintptr(0)) 26082 } 26083 } 26084 26085 return *(*int32)(unsafe.Pointer(bp)) 26086 } 26087 26088 func unionIncrRefcount(tls *libc.TLS, pTab uintptr, iTab int32) { 26089 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 26090 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(iTab)*72 26091 26092 if (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser == 0 { 26093 var pp uintptr 26094 for pp = pTab + 88; *(*uintptr)(unsafe.Pointer(pp)) != pSrc; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 26095 } 26096 *(*uintptr)(unsafe.Pointer(pp)) = (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable 26097 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = uintptr(0) 26098 } 26099 (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser++ 26100 } 26101 } 26102 26103 func unionFinalizeCsrStmt(tls *libc.TLS, pCsr uintptr) int32 { 26104 var rc int32 = SQLITE_OK 26105 if (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt != 0 { 26106 var pTab uintptr = (*UnionCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 26107 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72 26108 rc = sqlite3.Xsqlite3_finalize(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt) 26109 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 26110 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 26111 (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser-- 26112 26113 if (*UnionSrc)(unsafe.Pointer(pSrc)).FnUser == 0 { 26114 (*UnionSrc)(unsafe.Pointer(pSrc)).FpNextClosable = (*UnionTab)(unsafe.Pointer(pTab)).FpClosable 26115 (*UnionTab)(unsafe.Pointer(pTab)).FpClosable = pSrc 26116 } 26117 unionCloseSources(tls, pTab, (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen) 26118 } 26119 } 26120 return rc 26121 } 26122 26123 func union_isspace(tls *libc.TLS, c int8) int32 { 26124 return libc.Bool32(int32(c) == ' ' || int32(c) == '\n' || int32(c) == '\r' || int32(c) == '\t') 26125 } 26126 26127 func union_isidchar(tls *libc.TLS, c int8) int32 { 26128 return libc.Bool32(int32(c) >= 'a' && int32(c) <= 'z' || int32(c) >= 'A' && int32(c) < 'Z' || int32(c) >= '0' && int32(c) <= '9') 26129 } 26130 26131 func unionConfigureVtab(tls *libc.TLS, pRc uintptr, pTab uintptr, pStmt uintptr, nArg int32, azArg uintptr, pzErr uintptr) { 26132 bp := tls.Alloc(68) 26133 defer tls.Free(68) 26134 26135 *(*int32)(unsafe.Pointer(bp + 64)) = *(*int32)(unsafe.Pointer(pRc)) 26136 var i int32 26137 if *(*int32)(unsafe.Pointer(bp + 64)) == SQLITE_OK { 26138 (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext = libc.Bool32(sqlite3.Xsqlite3_column_count(tls, pStmt) > 4) 26139 } 26140 for i = 0; *(*int32)(unsafe.Pointer(bp + 64)) == SQLITE_OK && i < nArg; i++ { 26141 var zArg uintptr = unionStrdup(tls, bp+64, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8))) 26142 if zArg != 0 { 26143 var nOpt int32 = 0 26144 var zOpt uintptr 26145 var zVal uintptr 26146 26147 unionDequote(tls, zArg) 26148 zOpt = zArg 26149 for union_isspace(tls, *(*int8)(unsafe.Pointer(zOpt))) != 0 { 26150 zOpt++ 26151 } 26152 zVal = zOpt 26153 if int32(*(*int8)(unsafe.Pointer(zVal))) == ':' { 26154 zVal++ 26155 } 26156 for union_isidchar(tls, *(*int8)(unsafe.Pointer(zVal))) != 0 { 26157 zVal++ 26158 } 26159 nOpt = int32((int64(zVal) - int64(zOpt)) / 1) 26160 26161 for union_isspace(tls, *(*int8)(unsafe.Pointer(zVal))) != 0 { 26162 zVal++ 26163 } 26164 if int32(*(*int8)(unsafe.Pointer(zVal))) == '=' { 26165 *(*int8)(unsafe.Pointer(zOpt + uintptr(nOpt))) = int8(0) 26166 zVal++ 26167 for union_isspace(tls, *(*int8)(unsafe.Pointer(zVal))) != 0 { 26168 zVal++ 26169 } 26170 zVal = unionStrdup(tls, bp+64, zVal) 26171 if zVal != 0 { 26172 unionDequote(tls, zVal) 26173 if int32(*(*int8)(unsafe.Pointer(zOpt))) == ':' { 26174 var iParam int32 = sqlite3.Xsqlite3_bind_parameter_index(tls, pStmt, zOpt) 26175 if iParam == 0 { 26176 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 26177 ts+8621, libc.VaList(bp, zOpt)) 26178 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 26179 } else { 26180 *(*int32)(unsafe.Pointer(bp + 64)) = sqlite3.Xsqlite3_bind_text(tls, pStmt, iParam, zVal, -1, libc.UintptrFromInt32(-1)) 26181 } 26182 } else if nOpt == 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8658, 7) { 26183 (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen = libc.Xatoi(tls, zVal) 26184 if (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen <= 0 { 26185 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8666, 0) 26186 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 26187 } 26188 } else if nOpt == 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8699, 7) { 26189 if (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound != 0 { 26190 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 26191 ts+8707, 0) 26192 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 26193 } else { 26194 (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 26195 ts+8745, libc.VaList(bp+8, zVal, func() uintptr { 26196 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 26197 return ts + 8762 26198 } 26199 return ts + 584 26200 }())) 26201 } 26202 } else if nOpt == 9 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+8765, 9) { 26203 if (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose != 0 { 26204 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, 26205 ts+8775, 0) 26206 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 26207 } else { 26208 (*UnionTab)(unsafe.Pointer(pTab)).FpOpenClose = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 26209 ts+8815, libc.VaList(bp+24, zVal, func() uintptr { 26210 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 26211 return ts + 8762 26212 } 26213 return ts + 584 26214 }())) 26215 } 26216 } else { 26217 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8834, libc.VaList(bp+40, zOpt)) 26218 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 26219 } 26220 sqlite3.Xsqlite3_free(tls, zVal) 26221 } 26222 } else { 26223 if i == 0 && nArg == 1 { 26224 (*UnionTab)(unsafe.Pointer(pTab)).FpNotFound = unionPreparePrintf(tls, bp+64, pzErr, (*UnionTab)(unsafe.Pointer(pTab)).Fdb, 26225 ts+8869, libc.VaList(bp+48, zArg)) 26226 } else { 26227 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8884, libc.VaList(bp+56, *(*uintptr)(unsafe.Pointer(azArg + uintptr(i)*8)))) 26228 *(*int32)(unsafe.Pointer(bp + 64)) = SQLITE_ERROR 26229 } 26230 } 26231 sqlite3.Xsqlite3_free(tls, zArg) 26232 } 26233 } 26234 *(*int32)(unsafe.Pointer(pRc)) = *(*int32)(unsafe.Pointer(bp + 64)) 26235 } 26236 26237 func unionConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 26238 bp := tls.Alloc(44) 26239 defer tls.Free(44) 26240 26241 var pTab uintptr = uintptr(0) 26242 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 26243 var bSwarm int32 = func() int32 { 26244 if pAux == uintptr(0) { 26245 return 0 26246 } 26247 return 1 26248 }() 26249 var zVtab uintptr = func() uintptr { 26250 if bSwarm != 0 { 26251 return ts + 8911 26252 } 26253 return ts + 8921 26254 }() 26255 26256 if sqlite3.Xsqlite3_stricmp(tls, ts+8931, *(*uintptr)(unsafe.Pointer(argv + 1*8))) != 0 { 26257 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8936, libc.VaList(bp, zVtab)) 26258 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 26259 } else if argc < 4 || argc > 4 && bSwarm == 0 { 26260 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+8977, libc.VaList(bp+8, zVtab)) 26261 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 26262 } else { 26263 var nAlloc int32 = 0 26264 var pStmt uintptr = uintptr(0) 26265 var zArg uintptr = unionStrdup(tls, bp+40, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 26266 26267 unionDequote(tls, zArg) 26268 pStmt = unionPreparePrintf(tls, bp+40, pzErr, db, 26269 ts+9010, libc.VaList(bp+16, zArg)) 26270 26271 pTab = unionMalloc(tls, bp+40, int64(unsafe.Sizeof(UnionTab{}))) 26272 if pTab != 0 { 26273 (*UnionTab)(unsafe.Pointer(pTab)).Fdb = db 26274 (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm = bSwarm 26275 (*UnionTab)(unsafe.Pointer(pTab)).FnMaxOpen = SWARMVTAB_MAX_OPEN 26276 } 26277 26278 if bSwarm != 0 { 26279 unionConfigureVtab(tls, bp+40, pTab, pStmt, argc-4, argv+4*8, pzErr) 26280 } 26281 26282 for *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 26283 var zDb uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 26284 var zTab uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 1) 26285 var iMin sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 2) 26286 var iMax sqlite3_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, 3) 26287 var pSrc uintptr 26288 26289 if nAlloc <= (*UnionTab)(unsafe.Pointer(pTab)).FnSrc { 26290 var nNew int32 26291 if nAlloc != 0 { 26292 nNew = nAlloc * 2 26293 } else { 26294 nNew = 8 26295 } 26296 var aNew uintptr = sqlite3.Xsqlite3_realloc64(tls, 26297 (*UnionTab)(unsafe.Pointer(pTab)).FaSrc, uint64(nNew)*uint64(unsafe.Sizeof(UnionSrc{}))) 26298 if aNew == uintptr(0) { 26299 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_NOMEM 26300 break 26301 } else { 26302 libc.X__builtin___memset_chk(tls, aNew+uintptr((*UnionTab)(unsafe.Pointer(pTab)).FnSrc)*72, 0, uint64(nNew-(*UnionTab)(unsafe.Pointer(pTab)).FnSrc)*uint64(unsafe.Sizeof(UnionSrc{})), libc.X__builtin_object_size(tls, aNew+uintptr((*UnionTab)(unsafe.Pointer(pTab)).FnSrc)*72, 0)) 26303 (*UnionTab)(unsafe.Pointer(pTab)).FaSrc = aNew 26304 nAlloc = nNew 26305 } 26306 } 26307 26308 if iMax < iMin || (*UnionTab)(unsafe.Pointer(pTab)).FnSrc > 0 && iMin <= (*UnionSrc)(unsafe.Pointer((*UnionTab)(unsafe.Pointer(pTab)).FaSrc+uintptr((*UnionTab)(unsafe.Pointer(pTab)).FnSrc-1)*72)).FiMax { 26309 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+9040, 0) 26310 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 26311 } 26312 26313 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 26314 pSrc = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(libc.PostIncInt32(&(*UnionTab)(unsafe.Pointer(pTab)).FnSrc, 1))*72 26315 (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab = unionStrdup(tls, bp+40, zTab) 26316 (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin = iMin 26317 (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax = iMax 26318 if bSwarm != 0 { 26319 (*UnionSrc)(unsafe.Pointer(pSrc)).FzFile = unionStrdup(tls, bp+40, zDb) 26320 } else { 26321 (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb = unionStrdup(tls, bp+40, zDb) 26322 } 26323 if (*UnionTab)(unsafe.Pointer(pTab)).FbHasContext != 0 { 26324 var zContext uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 4) 26325 (*UnionSrc)(unsafe.Pointer(pSrc)).FzContext = unionStrdup(tls, bp+40, zContext) 26326 } 26327 } 26328 } 26329 unionFinalize(tls, bp+40, pStmt, pzErr) 26330 pStmt = uintptr(0) 26331 26332 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && (*UnionTab)(unsafe.Pointer(pTab)).FnSrc == 0 { 26333 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+9067, 0) 26334 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 26335 } 26336 26337 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 26338 if bSwarm != 0 { 26339 *(*int32)(unsafe.Pointer(bp + 40)) = unionOpenDatabase(tls, pTab, 0, pzErr) 26340 } else { 26341 *(*int32)(unsafe.Pointer(bp + 40)) = unionSourceCheck(tls, pTab, pzErr) 26342 } 26343 } 26344 26345 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 26346 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc 26347 var tdb uintptr = func() uintptr { 26348 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 26349 return (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb 26350 } 26351 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 26352 }() 26353 pStmt = unionPreparePrintf(tls, bp+40, pzErr, tdb, 26354 ts+9095, 26355 libc.VaList(bp+24, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb)) 26356 } 26357 if *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, pStmt) { 26358 var zDecl uintptr = sqlite3.Xsqlite3_column_text(tls, pStmt, 0) 26359 *(*int32)(unsafe.Pointer(bp + 40)) = sqlite3.Xsqlite3_declare_vtab(tls, db, zDecl) 26360 (*UnionTab)(unsafe.Pointer(pTab)).FiPK = sqlite3.Xsqlite3_column_int(tls, pStmt, 1) 26361 } 26362 26363 unionFinalize(tls, bp+40, pStmt, pzErr) 26364 } 26365 26366 if *(*int32)(unsafe.Pointer(bp + 40)) != SQLITE_OK { 26367 unionDisconnect(tls, pTab) 26368 pTab = uintptr(0) 26369 } 26370 26371 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 26372 return *(*int32)(unsafe.Pointer(bp + 40)) 26373 } 26374 26375 func unionOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 26376 bp := tls.Alloc(4) 26377 defer tls.Free(4) 26378 26379 var pCsr uintptr 26380 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 26381 _ = p 26382 pCsr = unionMalloc(tls, bp, int64(unsafe.Sizeof(UnionCsr{}))) 26383 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 26384 return *(*int32)(unsafe.Pointer(bp)) 26385 } 26386 26387 func unionClose(tls *libc.TLS, cur uintptr) int32 { 26388 var pCsr uintptr = cur 26389 unionFinalizeCsrStmt(tls, pCsr) 26390 sqlite3.Xsqlite3_free(tls, pCsr) 26391 return SQLITE_OK 26392 } 26393 26394 func doUnionNext(tls *libc.TLS, pCsr uintptr) int32 { 26395 bp := tls.Alloc(28) 26396 defer tls.Free(28) 26397 26398 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_OK 26399 26400 if sqlite3.Xsqlite3_step(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt) != SQLITE_ROW { 26401 var pTab uintptr = (*UnionCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 26402 *(*int32)(unsafe.Pointer(bp + 24)) = unionFinalizeCsrStmt(tls, pCsr) 26403 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK && (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 26404 (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab++ 26405 if (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc { 26406 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72 26407 if (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid >= (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 26408 *(*int32)(unsafe.Pointer(bp + 24)) = unionOpenDatabase(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab, pTab+16) 26409 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = unionPreparePrintf(tls, bp+24, pTab+16, (*UnionSrc)(unsafe.Pointer(pSrc)).Fdb, 26410 ts+9273, 26411 libc.VaList(bp, (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab, 26412 func() uintptr { 26413 if (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax > (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid { 26414 return ts + 9305 26415 } 26416 return ts + 9322 26417 }(), 26418 (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid)) 26419 if *(*int32)(unsafe.Pointer(bp + 24)) == SQLITE_OK { 26420 unionIncrRefcount(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab) 26421 *(*int32)(unsafe.Pointer(bp + 24)) = SQLITE_ROW 26422 } 26423 } 26424 } 26425 } 26426 } 26427 26428 return *(*int32)(unsafe.Pointer(bp + 24)) 26429 } 26430 26431 func unionNext(tls *libc.TLS, cur uintptr) int32 { 26432 var rc int32 26433 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_ROW { 26434 rc = doUnionNext(tls, cur) 26435 } 26436 return rc 26437 } 26438 26439 func unionColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 26440 var pCsr uintptr = cur 26441 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt, i+1)) 26442 return SQLITE_OK 26443 } 26444 26445 func unionRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 26446 var pCsr uintptr = cur 26447 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt, 0) 26448 return SQLITE_OK 26449 } 26450 26451 func unionEof(tls *libc.TLS, cur uintptr) int32 { 26452 var pCsr uintptr = cur 26453 return libc.Bool32((*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 26454 } 26455 26456 func unionFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 26457 bp := tls.Alloc(108) 26458 defer tls.Free(108) 26459 26460 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 26461 var pCsr uintptr = pVtabCursor 26462 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_OK 26463 var i int32 26464 var zSql uintptr = uintptr(0) 26465 var bZero int32 = 0 26466 26467 var iMin sqlite3_int64 = int64(-1) - (int64(0xffffffff) | int64(0x7fffffff)<<32) 26468 var iMax sqlite3_int64 = int64(0xffffffff) | int64(0x7fffffff)<<32 26469 26470 _ = idxStr 26471 26472 if idxNum == SQLITE_INDEX_CONSTRAINT_EQ { 26473 iMin = libc.AssignInt64(&iMax, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv)))) 26474 } else { 26475 if idxNum&(SQLITE_INDEX_CONSTRAINT_LE|SQLITE_INDEX_CONSTRAINT_LT) != 0 { 26476 iMax = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 26477 if idxNum&SQLITE_INDEX_CONSTRAINT_LT != 0 { 26478 if iMax == int64(-1)-(int64(0xffffffff)|int64(0x7fffffff)<<32) { 26479 bZero = 1 26480 } else { 26481 iMax-- 26482 } 26483 } 26484 } 26485 26486 if idxNum&(SQLITE_INDEX_CONSTRAINT_GE|SQLITE_INDEX_CONSTRAINT_GT) != 0 { 26487 iMin = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(argc-1)*8))) 26488 if idxNum&SQLITE_INDEX_CONSTRAINT_GT != 0 { 26489 if iMin == int64(0xffffffff)|int64(0x7fffffff)<<32 { 26490 bZero = 1 26491 } else { 26492 iMin++ 26493 } 26494 } 26495 } 26496 } 26497 26498 unionFinalizeCsrStmt(tls, pCsr) 26499 if bZero != 0 { 26500 return SQLITE_OK 26501 } 26502 26503 for i = 0; i < (*UnionTab)(unsafe.Pointer(pTab)).FnSrc; i++ { 26504 var pSrc uintptr = (*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr(i)*72 26505 if iMin > (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax || iMax < (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 26506 continue 26507 } 26508 26509 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9326, libc.VaList(bp, zSql, func() uintptr { 26510 if zSql != 0 { 26511 return ts + 9360 26512 } 26513 return ts + 584 26514 }(), func() uintptr { 26515 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 26516 return ts + 5624 26517 } 26518 return ts + 584 26519 }(), func() uintptr { 26520 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 26521 return (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb 26522 } 26523 return ts + 584 26524 }(), func() uintptr { 26525 if (*UnionSrc)(unsafe.Pointer(pSrc)).FzDb != 0 { 26526 return ts + 5626 26527 } 26528 return ts + 584 26529 }(), (*UnionSrc)(unsafe.Pointer(pSrc)).FzTab)) 26530 if zSql == uintptr(0) { 26531 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 26532 break 26533 } 26534 26535 if iMin == iMax { 26536 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9372, libc.VaList(bp+48, zSql, iMin)) 26537 } else { 26538 var zWhere uintptr = ts + 9392 26539 if iMin != int64(-1)-(int64(0xffffffff)|int64(0x7fffffff)<<32) && iMin > (*UnionSrc)(unsafe.Pointer(pSrc)).FiMin { 26540 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9398, libc.VaList(bp+64, zSql, iMin)) 26541 zWhere = ts + 9419 26542 } 26543 if iMax != int64(0xffffffff)|int64(0x7fffffff)<<32 && iMax < (*UnionSrc)(unsafe.Pointer(pSrc)).FiMax { 26544 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+9423, libc.VaList(bp+80, zSql, zWhere, iMax)) 26545 } 26546 } 26547 26548 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 26549 (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab = i 26550 (*UnionCsr)(unsafe.Pointer(pCsr)).FiMaxRowid = iMax 26551 *(*int32)(unsafe.Pointer(bp + 104)) = unionOpenDatabase(tls, pTab, i, pTab+16) 26552 break 26553 } 26554 } 26555 26556 if zSql == uintptr(0) { 26557 return *(*int32)(unsafe.Pointer(bp + 104)) 26558 } else { 26559 var db uintptr = func() uintptr { 26560 if (*UnionTab)(unsafe.Pointer(pTab)).FbSwarm != 0 { 26561 return (*UnionSrc)(unsafe.Pointer((*UnionTab)(unsafe.Pointer(pTab)).FaSrc + uintptr((*UnionCsr)(unsafe.Pointer(pCsr)).FiTab)*72)).Fdb 26562 } 26563 return (*UnionTab)(unsafe.Pointer(pTab)).Fdb 26564 }() 26565 (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt = unionPrepare(tls, bp+104, db, zSql, pTab+16) 26566 if (*UnionCsr)(unsafe.Pointer(pCsr)).FpStmt != 0 { 26567 unionIncrRefcount(tls, pTab, (*UnionCsr)(unsafe.Pointer(pCsr)).FiTab) 26568 } 26569 sqlite3.Xsqlite3_free(tls, zSql) 26570 } 26571 if *(*int32)(unsafe.Pointer(bp + 104)) != SQLITE_OK { 26572 return *(*int32)(unsafe.Pointer(bp + 104)) 26573 } 26574 return unionNext(tls, pVtabCursor) 26575 } 26576 26577 func unionBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 26578 var pTab uintptr = tab 26579 var iEq int32 = -1 26580 var iLt int32 = -1 26581 var iGt int32 = -1 26582 var i int32 26583 26584 for i = 0; i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; i++ { 26585 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(i)*12 26586 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable != 0 && ((*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn < 0 || (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn == (*UnionTab)(unsafe.Pointer(pTab)).FiPK) { 26587 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) { 26588 case SQLITE_INDEX_CONSTRAINT_EQ: 26589 iEq = i 26590 break 26591 fallthrough 26592 case SQLITE_INDEX_CONSTRAINT_LE: 26593 fallthrough 26594 case SQLITE_INDEX_CONSTRAINT_LT: 26595 iLt = i 26596 break 26597 fallthrough 26598 case SQLITE_INDEX_CONSTRAINT_GE: 26599 fallthrough 26600 case SQLITE_INDEX_CONSTRAINT_GT: 26601 iGt = i 26602 break 26603 } 26604 } 26605 } 26606 26607 if iEq >= 0 { 26608 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = int64(1) 26609 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxFlags = SQLITE_INDEX_SCAN_UNIQUE 26610 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 3.0 26611 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = SQLITE_INDEX_CONSTRAINT_EQ 26612 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iEq)*8)).FargvIndex = 1 26613 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iEq)*8)).Fomit = uint8(1) 26614 } else { 26615 var iCons int32 = 1 26616 var idxNum int32 = 0 26617 var nRow sqlite3_int64 = int64(1000000) 26618 if iLt >= 0 { 26619 nRow = nRow / int64(2) 26620 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLt)*8)).FargvIndex = libc.PostIncInt32(&iCons, 1) 26621 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iLt)*8)).Fomit = uint8(1) 26622 idxNum = idxNum | int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(iLt)*12)).Fop) 26623 } 26624 if iGt >= 0 { 26625 nRow = nRow / int64(2) 26626 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iGt)*8)).FargvIndex = libc.PostIncInt32(&iCons, 1) 26627 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(iGt)*8)).Fomit = uint8(1) 26628 idxNum = idxNum | int32((*sqlite3_index_constraint)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint+uintptr(iGt)*12)).Fop) 26629 } 26630 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = nRow 26631 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 3.0 * float64(nRow) 26632 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 26633 } 26634 26635 return SQLITE_OK 26636 } 26637 26638 func createUnionVtab(tls *libc.TLS, db uintptr) int32 { 26639 var rc int32 26640 26641 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8921, uintptr(unsafe.Pointer(&unionModule)), uintptr(0)) 26642 if rc == SQLITE_OK { 26643 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+8911, uintptr(unsafe.Pointer(&unionModule)), db) 26644 } 26645 return rc 26646 } 26647 26648 var unionModule = sqlite3_module{ 26649 FxCreate: 0, 26650 FxConnect: 0, 26651 FxBestIndex: 0, 26652 FxDisconnect: 0, 26653 FxDestroy: 0, 26654 FxOpen: 0, 26655 FxClose: 0, 26656 FxFilter: 0, 26657 FxNext: 0, 26658 FxEof: 0, 26659 FxColumn: 0, 26660 FxRowid: 0, 26661 } 26662 26663 func sqlite3_unionvtab_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 26664 var rc int32 = SQLITE_OK 26665 _ = pApi 26666 26667 _ = pzErrMsg 26668 rc = createUnionVtab(tls, db) 26669 return rc 26670 } 26671 26672 type wholenumber_cursor1 = struct { 26673 Fbase sqlite3_vtab_cursor 26674 FiValue sqlite3_int64 26675 FmxValue sqlite3_int64 26676 } 26677 26678 type wholenumber_cursor = wholenumber_cursor1 26679 26680 func wholenumberConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 26681 var pNew uintptr 26682 pNew = libc.AssignPtrUintptr(ppVtab, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(sqlite3_vtab{})))) 26683 if pNew == uintptr(0) { 26684 return SQLITE_NOMEM 26685 } 26686 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+9441) 26687 sqlite3.Xsqlite3_vtab_config(tls, db, SQLITE_VTAB_INNOCUOUS, 0) 26688 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(sqlite3_vtab{})), libc.X__builtin_object_size(tls, pNew, 0)) 26689 return SQLITE_OK 26690 } 26691 26692 func wholenumberDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 26693 sqlite3.Xsqlite3_free(tls, pVtab) 26694 return SQLITE_OK 26695 } 26696 26697 func wholenumberOpen(tls *libc.TLS, p uintptr, ppCursor uintptr) int32 { 26698 var pCur uintptr 26699 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(wholenumber_cursor{}))) 26700 if pCur == uintptr(0) { 26701 return SQLITE_NOMEM 26702 } 26703 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(wholenumber_cursor{})), libc.X__builtin_object_size(tls, pCur, 0)) 26704 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 26705 return SQLITE_OK 26706 } 26707 26708 func wholenumberClose(tls *libc.TLS, cur uintptr) int32 { 26709 sqlite3.Xsqlite3_free(tls, cur) 26710 return SQLITE_OK 26711 } 26712 26713 func wholenumberNext(tls *libc.TLS, cur uintptr) int32 { 26714 var pCur uintptr = cur 26715 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue++ 26716 return SQLITE_OK 26717 } 26718 26719 func wholenumberColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 26720 var pCur uintptr = cur 26721 sqlite3.Xsqlite3_result_int64(tls, ctx, (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue) 26722 return SQLITE_OK 26723 } 26724 26725 func wholenumberRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 26726 var pCur uintptr = cur 26727 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue 26728 return SQLITE_OK 26729 } 26730 26731 func wholenumberEof(tls *libc.TLS, cur uintptr) int32 { 26732 var pCur uintptr = cur 26733 return libc.Bool32((*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue > (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue || (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue == int64(0)) 26734 } 26735 26736 func wholenumberFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 26737 var pCur uintptr = pVtabCursor 26738 var v sqlite3_int64 26739 var i int32 = 0 26740 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue = int64(1) 26741 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue = int64(0xffffffff) 26742 if idxNum&3 != 0 { 26743 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) + sqlite3_int64(idxNum&1) 26744 if v > (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue && v <= (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue { 26745 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue = v 26746 } 26747 i++ 26748 } 26749 if idxNum&12 != 0 { 26750 v = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) - sqlite3_int64(idxNum>>2&1) 26751 if v >= (*wholenumber_cursor)(unsafe.Pointer(pCur)).FiValue && v < (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue { 26752 (*wholenumber_cursor)(unsafe.Pointer(pCur)).FmxValue = v 26753 } 26754 } 26755 return SQLITE_OK 26756 } 26757 26758 func wholenumberBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 26759 var i int32 26760 var idxNum int32 = 0 26761 var argvIdx int32 = 1 26762 var ltIdx int32 = -1 26763 var gtIdx int32 = -1 26764 var pConstraint uintptr 26765 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint 26766 i = 0 26767 __1: 26768 if !(i < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint) { 26769 goto __3 26770 } 26771 { 26772 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) == 0 { 26773 goto __2 26774 } 26775 if idxNum&3 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_GT { 26776 idxNum = idxNum | 1 26777 ltIdx = i 26778 } 26779 if idxNum&3 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_GE { 26780 idxNum = idxNum | 2 26781 ltIdx = i 26782 } 26783 if idxNum&12 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LT { 26784 idxNum = idxNum | 4 26785 gtIdx = i 26786 } 26787 if idxNum&12 == 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) == SQLITE_INDEX_CONSTRAINT_LE { 26788 idxNum = idxNum | 8 26789 gtIdx = i 26790 } 26791 26792 } 26793 goto __2 26794 __2: 26795 i++ 26796 pConstraint += 12 26797 goto __1 26798 goto __3 26799 __3: 26800 ; 26801 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = idxNum 26802 if ltIdx >= 0 { 26803 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ltIdx)*8)).FargvIndex = libc.PostIncInt32(&argvIdx, 1) 26804 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ltIdx)*8)).Fomit = uint8(1) 26805 } 26806 if gtIdx >= 0 { 26807 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(gtIdx)*8)).FargvIndex = argvIdx 26808 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(gtIdx)*8)).Fomit = uint8(1) 26809 } 26810 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && 26811 int32((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc) == 0 { 26812 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 26813 } 26814 if idxNum&12 == 0 { 26815 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1e99 26816 } else if idxNum&3 == 0 { 26817 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(5) 26818 } else { 26819 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(1) 26820 } 26821 return SQLITE_OK 26822 } 26823 26824 var wholenumberModule = sqlite3_module{ 26825 FxCreate: 0, 26826 FxConnect: 0, 26827 FxBestIndex: 0, 26828 FxDisconnect: 0, 26829 FxDestroy: 0, 26830 FxOpen: 0, 26831 FxClose: 0, 26832 FxFilter: 0, 26833 FxNext: 0, 26834 FxEof: 0, 26835 FxColumn: 0, 26836 FxRowid: 0, 26837 } 26838 26839 func sqlite3_wholenumber_init(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 26840 var rc int32 = SQLITE_OK 26841 _ = pApi 26842 26843 rc = sqlite3.Xsqlite3_create_module(tls, db, ts+9463, uintptr(unsafe.Pointer(&wholenumberModule)), uintptr(0)) 26844 return rc 26845 } 26846 26847 func test_rbu_delta(tls *libc.TLS, pCtx uintptr, nArg int32, apVal uintptr) { 26848 var interp uintptr = sqlite3.Xsqlite3_user_data(tls, pCtx) 26849 var pScript uintptr 26850 var i int32 26851 26852 pScript = tcl.XTcl_NewObj(tls) 26853 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 26854 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, ts+9475, -1)) 26855 for i = 0; i < nArg; i++ { 26856 var pIn uintptr = *(*uintptr)(unsafe.Pointer(apVal + uintptr(i)*8)) 26857 var z uintptr = sqlite3.Xsqlite3_value_text(tls, pIn) 26858 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, z, -1)) 26859 } 26860 26861 if TCL_OK == tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_GLOBAL_ONLY) { 26862 var z uintptr = tcl.XTcl_GetStringResult(tls, interp) 26863 sqlite3.Xsqlite3_result_text(tls, pCtx, z, -1, libc.UintptrFromInt32(-1)) 26864 } else { 26865 tcl.XTcl_BackgroundError(tls, interp) 26866 } 26867 26868 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 26869 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount, 1) <= 0 { 26870 tcl.XTclFreeObj(tls, pScript) 26871 } 26872 } 26873 } 26874 26875 func test_sqlite3rbu_cmd(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 26876 bp := tls.Alloc(496) 26877 defer tls.Free(496) 26878 26879 var ret int32 = TCL_OK 26880 var pRbu uintptr = clientData 26881 *(*[14]RbuCmd)(unsafe.Pointer(bp + 24)) = [14]RbuCmd{ 26882 {FzName: ts + 9485, FnArg: 2, FzUsage: ts + 584}, 26883 {FzName: ts + 9490, FnArg: 2, FzUsage: ts + 584}, 26884 {FzName: ts + 9496, FnArg: 2, FzUsage: ts + 584}, 26885 {FzName: ts + 9513, FnArg: 2, FzUsage: ts + 584}, 26886 {FzName: ts + 9523, FnArg: 3, FzUsage: ts + 9535}, 26887 {FzName: ts + 9539, FnArg: 2, FzUsage: ts + 584}, 26888 {FzName: ts + 9551, FnArg: 3, FzUsage: ts + 9554}, 26889 {FzName: ts + 9558, FnArg: 2, FzUsage: ts + 584}, 26890 {FzName: ts + 9564, FnArg: 2, FzUsage: ts + 584}, 26891 {FzName: ts + 9573, FnArg: 2, FzUsage: ts + 584}, 26892 {FzName: ts + 9588, FnArg: 3, FzUsage: ts + 9604}, 26893 {FzName: ts + 9610, FnArg: 2, FzUsage: ts + 584}, 26894 {FzName: ts + 9620, FnArg: 3, FzUsage: ts + 9535}, 26895 {}, 26896 } 26897 26898 if objc < 2 { 26899 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9631) 26900 return TCL_ERROR 26901 } 26902 ret = tcl.XTcl_GetIndexFromObjStruct(tls, 26903 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24, int32(unsafe.Sizeof(RbuCmd{})), ts+9638, 0, bp+360) 26904 if ret != 0 { 26905 return TCL_ERROR 26906 } 26907 if objc != (*RbuCmd)(unsafe.Pointer(bp+24+uintptr(*(*int32)(unsafe.Pointer(bp + 360)))*24)).FnArg { 26908 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, (*RbuCmd)(unsafe.Pointer(bp+24+uintptr(*(*int32)(unsafe.Pointer(bp + 360)))*24)).FzUsage) 26909 return TCL_ERROR 26910 } 26911 26912 switch *(*int32)(unsafe.Pointer(bp + 360)) { 26913 case 0: 26914 { 26915 var rc int32 = sqlite3.Xsqlite3rbu_step(tls, pRbu) 26916 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 26917 break 26918 26919 } 26920 26921 case 9: 26922 fallthrough 26923 case 1: 26924 { 26925 *(*uintptr)(unsafe.Pointer(bp + 368)) = uintptr(0) 26926 var rc int32 26927 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 26928 if *(*int32)(unsafe.Pointer(bp + 360)) == 1 { 26929 rc = sqlite3.Xsqlite3rbu_close(tls, pRbu, bp+368) 26930 } else { 26931 rc = sqlite3.Xsqlite3rbu_close(tls, pRbu, uintptr(0)) 26932 } 26933 if rc == SQLITE_OK || rc == SQLITE_DONE { 26934 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 26935 26936 } else { 26937 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 26938 if *(*uintptr)(unsafe.Pointer(bp + 368)) != 0 { 26939 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9645, *(*uintptr)(unsafe.Pointer(bp + 368)), 0)) 26940 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 368))) 26941 } 26942 ret = TCL_ERROR 26943 } 26944 break 26945 26946 } 26947 26948 case 2: 26949 { 26950 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, 0) 26951 var rc int32 = sqlite3.Xsqlite3_create_function(tls, 26952 db, ts+9475, -1, SQLITE_UTF8, interp, *(*uintptr)(unsafe.Pointer(&struct { 26953 f func(*libc.TLS, uintptr, int32, uintptr) 26954 }{test_rbu_delta})), uintptr(0), uintptr(0)) 26955 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 26956 ret = func() int32 { 26957 if rc == SQLITE_OK { 26958 return TCL_OK 26959 } 26960 return TCL_ERROR 26961 }() 26962 break 26963 26964 } 26965 26966 case 3: 26967 { 26968 var rc int32 = sqlite3.Xsqlite3rbu_savestate(tls, pRbu) 26969 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 26970 ret = func() int32 { 26971 if rc == SQLITE_OK { 26972 return TCL_OK 26973 } 26974 return TCL_ERROR 26975 }() 26976 break 26977 26978 } 26979 26980 case 12: 26981 fallthrough 26982 case 4: 26983 { 26984 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, libc.Bool32(*(*int32)(unsafe.Pointer(bp + 360)) == 12)) 26985 var rc int32 = sqlite3.Xsqlite3_exec(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), uintptr(0), uintptr(0), uintptr(0)) 26986 if rc != SQLITE_OK { 26987 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, db), -1)) 26988 ret = TCL_ERROR 26989 } 26990 break 26991 26992 } 26993 26994 case 5: 26995 { 26996 var pObj uintptr 26997 sqlite3.Xsqlite3rbu_bp_progress(tls, pRbu, bp+376, bp+380) 26998 26999 pObj = tcl.XTcl_NewObj(tls) 27000 tcl.XTcl_ListObjAppendElement(tls, interp, pObj, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 376)))) 27001 tcl.XTcl_ListObjAppendElement(tls, interp, pObj, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 380)))) 27002 tcl.XTcl_SetObjResult(tls, interp, pObj) 27003 break 27004 27005 } 27006 27007 case 6: 27008 { 27009 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+384) != 0 { 27010 ret = TCL_ERROR 27011 } else { 27012 var db uintptr = sqlite3.Xsqlite3rbu_db(tls, pRbu, *(*int32)(unsafe.Pointer(bp + 384))) 27013 if sqlite3TestMakePointerStr(tls, interp, bp+388, db) != 0 { 27014 ret = TCL_ERROR 27015 } else { 27016 tcl.XTcl_SetResult(tls, interp, bp+388, uintptr(1)) 27017 } 27018 } 27019 break 27020 27021 } 27022 case 7: 27023 { 27024 *(*[6]uintptr)(unsafe.Pointer(bp + 440)) = [6]uintptr{uintptr(0), ts + 9649, ts + 9653, ts + 9658, ts + 9669, ts + 9674} 27025 var eState int32 = sqlite3.Xsqlite3rbu_state(tls, pRbu) 27026 27027 tcl.XTcl_SetResult(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 440 + uintptr(eState)*8)), uintptr(0)) 27028 break 27029 27030 } 27031 case 8: 27032 { 27033 var nStep sqlite3_int64 = sqlite3.Xsqlite3rbu_progress(tls, pRbu) 27034 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nStep)) 27035 break 27036 27037 } 27038 27039 case 10: 27040 { 27041 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+488) != 0 { 27042 ret = TCL_ERROR 27043 } else { 27044 *(*sqlite3_int64)(unsafe.Pointer(bp + 488)) = sqlite3.Xsqlite3rbu_temp_size_limit(tls, pRbu, *(*sqlite3_int64)(unsafe.Pointer(bp + 488))) 27045 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 488)))) 27046 } 27047 break 27048 27049 } 27050 case 11: 27051 { 27052 var sz sqlite3_int64 = sqlite3.Xsqlite3rbu_temp_size(tls, pRbu) 27053 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, sz)) 27054 break 27055 27056 } 27057 27058 default: 27059 break 27060 } 27061 27062 return ret 27063 } 27064 27065 type RbuCmd = struct { 27066 FzName uintptr 27067 FnArg int32 27068 F__ccgo_pad1 [4]byte 27069 FzUsage uintptr 27070 } 27071 27072 func test_sqlite3rbu(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 27073 var pRbu uintptr = uintptr(0) 27074 var zCmd uintptr 27075 var zTarget uintptr 27076 var zRbu uintptr 27077 var zStateDb uintptr = uintptr(0) 27078 27079 if objc != 4 && objc != 5 { 27080 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9680) 27081 return TCL_ERROR 27082 } 27083 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 27084 zTarget = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 27085 zRbu = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 27086 if objc == 5 { 27087 zStateDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 27088 } 27089 27090 pRbu = sqlite3.Xsqlite3rbu_open(tls, zTarget, zRbu, zStateDb) 27091 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 27092 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 27093 }{test_sqlite3rbu_cmd})), pRbu, uintptr(0)) 27094 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 27095 return TCL_OK 27096 } 27097 27098 func test_sqlite3rbu_vacuum(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 27099 var pRbu uintptr = uintptr(0) 27100 var zCmd uintptr 27101 var zTarget uintptr 27102 var zStateDb uintptr = uintptr(0) 27103 27104 if objc != 3 && objc != 4 { 27105 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9713) 27106 return TCL_ERROR 27107 } 27108 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 27109 zTarget = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 27110 if objc == 4 { 27111 zStateDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 27112 } 27113 if zStateDb != 0 && int32(*(*int8)(unsafe.Pointer(zStateDb))) == 0 { 27114 zStateDb = uintptr(0) 27115 } 27116 27117 pRbu = sqlite3.Xsqlite3rbu_vacuum(tls, zTarget, zStateDb) 27118 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 27119 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 27120 }{test_sqlite3rbu_cmd})), pRbu, uintptr(0)) 27121 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 27122 return TCL_OK 27123 } 27124 27125 func test_sqlite3rbu_create_vfs(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 27126 var zName uintptr 27127 var zParent uintptr 27128 var rc int32 27129 27130 if objc != 3 && objc != 4 { 27131 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9739) 27132 return TCL_ERROR 27133 } 27134 27135 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))) 27136 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8))) 27137 if int32(*(*int8)(unsafe.Pointer(zParent))) == 0 { 27138 zParent = uintptr(0) 27139 } 27140 27141 rc = sqlite3.Xsqlite3rbu_create_vfs(tls, zName, zParent) 27142 if rc != SQLITE_OK { 27143 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 27144 return TCL_ERROR 27145 } else if objc == 4 { 27146 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, zName) 27147 sqlite3.Xsqlite3_vfs_register(tls, pVfs, 1) 27148 } 27149 27150 tcl.XTcl_ResetResult(tls, interp) 27151 return TCL_OK 27152 } 27153 27154 func test_sqlite3rbu_destroy_vfs(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 27155 var zName uintptr 27156 27157 if objc != 2 { 27158 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 27159 return TCL_ERROR 27160 } 27161 27162 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 27163 sqlite3.Xsqlite3rbu_destroy_vfs(tls, zName) 27164 return TCL_OK 27165 } 27166 27167 func test_sqlite3rbu_internal_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 27168 bp := tls.Alloc(16) 27169 defer tls.Free(16) 27170 27171 var db uintptr 27172 27173 if objc != 1 { 27174 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 27175 return TCL_ERROR 27176 } 27177 27178 db = sqlite3.Xsqlite3rbu_db(tls, uintptr(0), 0) 27179 if db != uintptr(0) { 27180 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9767, 0)) 27181 return TCL_ERROR 27182 } 27183 27184 return TCL_OK 27185 } 27186 27187 func SqliteRbu_Init(tls *libc.TLS, interp uintptr) int32 { 27188 var i int32 27189 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd))/uint64(unsafe.Sizeof(struct { 27190 FzName uintptr 27191 FxProc uintptr 27192 }{})); i++ { 27193 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd[i].FzName, aObjCmd[i].FxProc, uintptr(0), uintptr(0)) 27194 } 27195 return TCL_OK 27196 } 27197 27198 var aObjCmd = [5]struct { 27199 FzName uintptr 27200 FxProc uintptr 27201 }{ 27202 {FzName: ts + 9790, FxProc: 0}, 27203 {FzName: ts + 9801, FxProc: 0}, 27204 {FzName: ts + 9819, FxProc: 0}, 27205 {FzName: ts + 9841, FxProc: 0}, 27206 {FzName: ts + 9864, FxProc: 0}, 27207 } 27208 27209 type sqlite31 = sqlite32 27210 27211 type sqlite3_str = sqlite3_str1 27212 27213 type imaxdiv_t = struct { 27214 Fquot intmax_t 27215 Frem intmax_t 27216 } 27217 27218 type Hash1 = struct { 27219 Fhtsize uint32 27220 Fcount uint32 27221 Ffirst uintptr 27222 Fht uintptr 27223 } 27224 27225 type Hash = Hash1 27226 type HashElem1 = struct { 27227 Fnext uintptr 27228 Fprev uintptr 27229 Fdata uintptr 27230 FpKey uintptr 27231 } 27232 27233 type HashElem = HashElem1 27234 27235 type _ht = struct { 27236 Fcount uint32 27237 F__ccgo_pad1 [4]byte 27238 Fchain uintptr 27239 } 27240 27241 type max_align_t = float64 27242 type i16 = int16_t 27243 type i8 = int8_t 27244 27245 type tRowcnt = u32 27246 27247 type LogEst = int16_t 27248 27249 type uptr = uintptr_t 27250 27251 type BusyHandler1 = struct { 27252 FxBusyHandler uintptr 27253 FpBusyArg uintptr 27254 FnBusy int32 27255 F__ccgo_pad1 [4]byte 27256 } 27257 27258 type BusyHandler = BusyHandler1 27259 27260 type AggInfo1 = struct { 27261 FdirectMode u8 27262 FuseSortingIdx u8 27263 F__ccgo_pad1 [2]byte 27264 FsortingIdx int32 27265 FsortingIdxPTab int32 27266 FnSortingColumn int32 27267 FmnReg int32 27268 FmxReg int32 27269 FpGroupBy uintptr 27270 FaCol uintptr 27271 FnColumn int32 27272 FnAccumulator int32 27273 FaFunc uintptr 27274 FnFunc int32 27275 FselId u32 27276 } 27277 27278 type AggInfo = AggInfo1 27279 type AuthContext1 = struct { 27280 FzAuthContext uintptr 27281 FpParse uintptr 27282 } 27283 27284 type AuthContext = AuthContext1 27285 type AutoincInfo1 = struct { 27286 FpNext uintptr 27287 FpTab uintptr 27288 FiDb int32 27289 FregCtr int32 27290 } 27291 27292 type AutoincInfo = AutoincInfo1 27293 type CollSeq1 = struct { 27294 FzName uintptr 27295 Fenc u8 27296 F__ccgo_pad1 [7]byte 27297 FpUser uintptr 27298 FxCmp uintptr 27299 FxDel uintptr 27300 } 27301 27302 type CollSeq = CollSeq1 27303 type Column1 = struct { 27304 FzCnName uintptr 27305 FnotNull uint8 27306 F__ccgo_pad1 [1]byte 27307 Faffinity int8 27308 FszEst u8 27309 FhName u8 27310 F__ccgo_pad2 [1]byte 27311 FiDflt u16 27312 FcolFlags u16 27313 F__ccgo_pad3 [6]byte 27314 } 27315 27316 type Column = Column1 27317 type Cte1 = struct { 27318 FzName uintptr 27319 FpCols uintptr 27320 FpSelect uintptr 27321 FzCteErr uintptr 27322 FpUse uintptr 27323 FeM10d u8 27324 F__ccgo_pad1 [7]byte 27325 } 27326 27327 type Cte = Cte1 27328 type CteUse1 = struct { 27329 FnUse int32 27330 FaddrM9e int32 27331 FregRtn int32 27332 FiCur int32 27333 FnRowEst LogEst 27334 FeM10d u8 27335 F__ccgo_pad1 [1]byte 27336 } 27337 27338 type CteUse = CteUse1 27339 type Db1 = struct { 27340 FzDbSName uintptr 27341 FpBt uintptr 27342 Fsafety_level u8 27343 FbSyncSet u8 27344 F__ccgo_pad1 [6]byte 27345 FpSchema uintptr 27346 } 27347 27348 type Db = Db1 27349 type DbFixer1 = struct { 27350 FpParse uintptr 27351 Fw Walker 27352 FpSchema uintptr 27353 FbTemp u8 27354 F__ccgo_pad1 [7]byte 27355 FzDb uintptr 27356 FzType uintptr 27357 FpName uintptr 27358 } 27359 27360 type DbFixer = DbFixer1 27361 type Schema1 = struct { 27362 Fschema_cookie int32 27363 FiGeneration int32 27364 FtblHash Hash 27365 FidxHash Hash 27366 FtrigHash Hash 27367 FfkeyHash Hash 27368 FpSeqTab uintptr 27369 Ffile_format u8 27370 Fenc u8 27371 FschemaFlags u16 27372 Fcache_size int32 27373 } 27374 27375 type Schema = Schema1 27376 type Expr1 = struct { 27377 Fop u8 27378 FaffExpr int8 27379 Fop2 u8 27380 F__ccgo_pad1 [1]byte 27381 Fflags u32 27382 Fu struct{ FzToken uintptr } 27383 FpLeft uintptr 27384 FpRight uintptr 27385 Fx struct{ FpList uintptr } 27386 FnHeight int32 27387 FiTable int32 27388 FiColumn ynVar 27389 FiAgg i16 27390 Fw struct{ FiJoin int32 } 27391 FpAggInfo uintptr 27392 Fy struct{ FpTab uintptr } 27393 } 27394 27395 type Expr = Expr1 27396 type ExprList1 = struct { 27397 FnExpr int32 27398 FnAlloc int32 27399 Fa [1]struct { 27400 FpExpr uintptr 27401 FzEName uintptr 27402 Ffg struct { 27403 F__ccgo_pad1 [0]uint32 27404 FsortFlags u8 27405 F__ccgo_pad2 [3]byte 27406 FeEName uint16 27407 F__ccgo_pad3 [2]byte 27408 } 27409 Fu struct { 27410 F__ccgo_pad1 [0]uint32 27411 Fx struct { 27412 FiOrderByCol u16 27413 FiAlias u16 27414 } 27415 } 27416 F__ccgo_pad1 [4]byte 27417 } 27418 } 27419 27420 type ExprList = ExprList1 27421 type FKey1 = struct { 27422 FpFrom uintptr 27423 FpNextFrom uintptr 27424 FzTo uintptr 27425 FpNextTo uintptr 27426 FpPrevTo uintptr 27427 FnCol int32 27428 FisDeferred u8 27429 FaAction [2]u8 27430 F__ccgo_pad1 [1]byte 27431 FapTrigger [2]uintptr 27432 FaCol [1]struct { 27433 FiFrom int32 27434 F__ccgo_pad1 [4]byte 27435 FzCol uintptr 27436 } 27437 } 27438 27439 type FKey = FKey1 27440 type FuncDestructor1 = struct { 27441 FnRef int32 27442 F__ccgo_pad1 [4]byte 27443 FxDestroy uintptr 27444 FpUserData uintptr 27445 } 27446 27447 type FuncDestructor = FuncDestructor1 27448 type FuncDef1 = struct { 27449 FnArg i8 27450 F__ccgo_pad1 [3]byte 27451 FfuncFlags u32 27452 FpUserData uintptr 27453 FpNext uintptr 27454 FxSFunc uintptr 27455 FxFinalize uintptr 27456 FxValue uintptr 27457 FxInverse uintptr 27458 FzName uintptr 27459 Fu struct{ FpHash uintptr } 27460 } 27461 27462 type FuncDef = FuncDef1 27463 type FuncDefHash1 = struct{ Fa [23]uintptr } 27464 27465 type FuncDefHash = FuncDefHash1 27466 type IdList1 = struct { 27467 FnId int32 27468 FeU4 u8 27469 F__ccgo_pad1 [3]byte 27470 Fa [1]struct { 27471 FzName uintptr 27472 Fu4 struct { 27473 F__ccgo_pad1 [0]uint64 27474 Fidx int32 27475 F__ccgo_pad2 [4]byte 27476 } 27477 } 27478 } 27479 27480 type IdList = IdList1 27481 type Index1 = struct { 27482 FzName uintptr 27483 FaiColumn uintptr 27484 FaiRowLogEst uintptr 27485 FpTable uintptr 27486 FzColAff uintptr 27487 FpNext uintptr 27488 FpSchema uintptr 27489 FaSortOrder uintptr 27490 FazColl uintptr 27491 FpPartIdxWhere uintptr 27492 FaColExpr uintptr 27493 Ftnum Pgno 27494 FszIdxRow LogEst 27495 FnKeyCol u16 27496 FnColumn u16 27497 FonError u8 27498 F__ccgo_pad1 [1]byte 27499 FidxType uint16 27500 F__ccgo_pad2 [2]byte 27501 FnSample int32 27502 FnSampleCol int32 27503 FaAvgEq uintptr 27504 FaSample uintptr 27505 FaiRowEst uintptr 27506 FnRowEst0 tRowcnt 27507 F__ccgo_pad3 [4]byte 27508 FcolNotIdxed Bitmask 27509 } 27510 27511 type Index = Index1 27512 type IndexSample1 = struct { 27513 Fp uintptr 27514 Fn int32 27515 F__ccgo_pad1 [4]byte 27516 FanEq uintptr 27517 FanLt uintptr 27518 FanDLt uintptr 27519 } 27520 27521 type IndexSample = IndexSample1 27522 type KeyInfo1 = struct { 27523 FnRef u32 27524 Fenc u8 27525 F__ccgo_pad1 [1]byte 27526 FnKeyField u16 27527 FnAllField u16 27528 F__ccgo_pad2 [6]byte 27529 Fdb uintptr 27530 FaSortFlags uintptr 27531 FaColl [1]uintptr 27532 } 27533 27534 type KeyInfo = KeyInfo1 27535 type Lookaside1 = struct { 27536 FbDisable u32 27537 Fsz u16 27538 FszTrue u16 27539 FbMalloced u8 27540 F__ccgo_pad1 [3]byte 27541 FnSlot u32 27542 FanStat [3]u32 27543 F__ccgo_pad2 [4]byte 27544 FpInit uintptr 27545 FpFree uintptr 27546 FpSmallInit uintptr 27547 FpSmallFree uintptr 27548 FpMiddle uintptr 27549 FpStart uintptr 27550 FpEnd uintptr 27551 } 27552 27553 type Lookaside = Lookaside1 27554 type LookasideSlot1 = struct{ FpNext uintptr } 27555 27556 type LookasideSlot = LookasideSlot1 27557 type Module1 = struct { 27558 FpModule uintptr 27559 FzName uintptr 27560 FnRefModule int32 27561 F__ccgo_pad1 [4]byte 27562 FpAux uintptr 27563 FxDestroy uintptr 27564 FpEpoTab uintptr 27565 } 27566 27567 type Module = Module1 27568 type NameContext1 = struct { 27569 FpParse uintptr 27570 FpSrcList uintptr 27571 FuNC struct{ FpEList uintptr } 27572 FpNext uintptr 27573 FnRef int32 27574 FnNcErr int32 27575 FncFlags int32 27576 F__ccgo_pad1 [4]byte 27577 FpWinSelect uintptr 27578 } 27579 27580 type NameContext = NameContext1 27581 type OnOrUsing1 = struct { 27582 FpOn uintptr 27583 FpUsing uintptr 27584 } 27585 27586 type OnOrUsing = OnOrUsing1 27587 type Parse1 = struct { 27588 Fdb uintptr 27589 FzErrMsg uintptr 27590 FpVdbe uintptr 27591 Frc int32 27592 FcolNamesSet u8 27593 FcheckSchema u8 27594 Fnested u8 27595 FnTempReg u8 27596 FisMultiWrite u8 27597 FmayAbort u8 27598 FhasCompound u8 27599 FokConstFactor u8 27600 FdisableLookaside u8 27601 FdisableVtab u8 27602 FwithinRJSubrtn u8 27603 F__ccgo_pad1 [1]byte 27604 FnRangeReg int32 27605 FiRangeReg int32 27606 FnErr int32 27607 FnTab int32 27608 FnMem int32 27609 FszOpAlloc int32 27610 FiSelfTab int32 27611 FnLabel int32 27612 FnLabelAlloc int32 27613 F__ccgo_pad2 [4]byte 27614 FaLabel uintptr 27615 FpConstExpr uintptr 27616 FconstraintName Token 27617 FwriteMask yDbMask 27618 FcookieMask yDbMask 27619 FregRowid int32 27620 FregRoot int32 27621 FnMaxArg int32 27622 FnSelect int32 27623 FnTableLock int32 27624 F__ccgo_pad3 [4]byte 27625 FaTableLock uintptr 27626 FpAinc uintptr 27627 FpToplevel uintptr 27628 FpTriggerTab uintptr 27629 FpTriggerPrg uintptr 27630 FpCleanup uintptr 27631 Fu1 struct { 27632 F__ccgo_pad1 [0]uint64 27633 FaddrCrTab int32 27634 F__ccgo_pad2 [4]byte 27635 } 27636 FnQueryLoop u32 27637 Foldmask u32 27638 Fnewmask u32 27639 FeTriggerOp u8 27640 FbReturning u8 27641 FeOrconf u8 27642 FdisableTriggers u8 27643 FaTempReg [8]int32 27644 FpOuterParse uintptr 27645 FsNameToken Token 27646 FsLastToken Token 27647 FnVar ynVar 27648 FiPkSortOrder u8 27649 Fexplain u8 27650 FeParseMode u8 27651 F__ccgo_pad4 [3]byte 27652 FnVtabLock int32 27653 FnHeight int32 27654 FaddrExplain int32 27655 F__ccgo_pad5 [4]byte 27656 FpVList uintptr 27657 FpReprepare uintptr 27658 FzTail uintptr 27659 FpNewTable uintptr 27660 FpNewIndex uintptr 27661 FpNewTrigger uintptr 27662 FzAuthContext uintptr 27663 FsArg Token 27664 FapVtabLock uintptr 27665 FpWith uintptr 27666 FpRename uintptr 27667 } 27668 27669 type Parse = Parse1 27670 type ParseCleanup1 = struct { 27671 FpNext uintptr 27672 FpPtr uintptr 27673 FxCleanup uintptr 27674 } 27675 27676 type ParseCleanup = ParseCleanup1 27677 type PreUpdate1 = struct { 27678 Fv uintptr 27679 FpCsr uintptr 27680 Fop int32 27681 F__ccgo_pad1 [4]byte 27682 FaRecord uintptr 27683 Fkeyinfo KeyInfo 27684 FpUnpacked uintptr 27685 FpNewUnpacked uintptr 27686 FiNewReg int32 27687 FiBlobWrite int32 27688 FiKey1 i64 27689 FiKey2 i64 27690 FaNew uintptr 27691 FpTab uintptr 27692 FpPk uintptr 27693 } 27694 27695 type PrintfArguments1 = struct { 27696 FnArg int32 27697 FnUsed int32 27698 FapArg uintptr 27699 } 27700 27701 type PrintfArguments = PrintfArguments1 27702 type Returning1 = struct { 27703 FpParse uintptr 27704 FpReturnEL uintptr 27705 FretTrig Trigger 27706 FretTStep TriggerStep 27707 FiRetCur int32 27708 FnRetCol int32 27709 FiRetReg int32 27710 F__ccgo_pad1 [4]byte 27711 } 27712 27713 type Returning = Returning1 27714 type Savepoint1 = struct { 27715 FzName uintptr 27716 FnDeferredCons i64 27717 FnDeferredImmCons i64 27718 FpNext uintptr 27719 } 27720 27721 type Savepoint = Savepoint1 27722 type Select1 = struct { 27723 Fop u8 27724 F__ccgo_pad1 [1]byte 27725 FnSelectRow LogEst 27726 FselFlags u32 27727 FiLimit int32 27728 FiOffset int32 27729 FselId u32 27730 FaddrOpenEphm [2]int32 27731 F__ccgo_pad2 [4]byte 27732 FpEList uintptr 27733 FpSrc uintptr 27734 FpWhere uintptr 27735 FpGroupBy uintptr 27736 FpHaving uintptr 27737 FpOrderBy uintptr 27738 FpPrior uintptr 27739 FpNext uintptr 27740 FpLimit uintptr 27741 FpWith uintptr 27742 FpWin uintptr 27743 FpWinDefn uintptr 27744 } 27745 27746 type Select = Select1 27747 type SelectDest1 = struct { 27748 FeDest u8 27749 F__ccgo_pad1 [3]byte 27750 FiSDParm int32 27751 FiSDParm2 int32 27752 FiSdst int32 27753 FnSdst int32 27754 F__ccgo_pad2 [4]byte 27755 FzAffSdst uintptr 27756 FpOrderBy uintptr 27757 } 27758 27759 type SelectDest = SelectDest1 27760 type SrcItem1 = struct { 27761 FpSchema uintptr 27762 FzDatabase uintptr 27763 FzName uintptr 27764 FzAlias uintptr 27765 FpTab uintptr 27766 FpSelect uintptr 27767 FaddrFillSub int32 27768 FregReturn int32 27769 FregResult int32 27770 Ffg struct { 27771 F__ccgo_pad1 [0]uint32 27772 Fjointype u8 27773 F__ccgo_pad2 [3]byte 27774 FnotIndexed uint16 27775 F__ccgo_pad3 [2]byte 27776 } 27777 FiCursor int32 27778 Fu3 struct{ FpOn uintptr } 27779 FcolUsed Bitmask 27780 Fu1 struct{ FzIndexedBy uintptr } 27781 Fu2 struct{ FpIBIndex uintptr } 27782 } 27783 27784 type SrcItem = SrcItem1 27785 type SrcList1 = struct { 27786 FnSrc int32 27787 FnAlloc u32 27788 Fa [1]SrcItem 27789 } 27790 27791 type SrcList = SrcList1 27792 type StrAccum = sqlite3_str1 27793 type Table1 = struct { 27794 FzName uintptr 27795 FaCol uintptr 27796 FpIndex uintptr 27797 FzColAff uintptr 27798 FpCheck uintptr 27799 Ftnum Pgno 27800 FnTabRef u32 27801 FtabFlags u32 27802 FiPKey i16 27803 FnCol i16 27804 FnNVCol i16 27805 FnRowLogEst LogEst 27806 FszTabRow LogEst 27807 FkeyConf u8 27808 FeTabType u8 27809 Fu struct { 27810 Ftab struct { 27811 FaddColOffset int32 27812 F__ccgo_pad1 [4]byte 27813 FpFKey uintptr 27814 FpDfltList uintptr 27815 } 27816 } 27817 FpTrigger uintptr 27818 FpSchema uintptr 27819 } 27820 27821 type Table = Table1 27822 type Token1 = struct { 27823 Fz uintptr 27824 Fn uint32 27825 F__ccgo_pad1 [4]byte 27826 } 27827 27828 type Token = Token1 27829 type Trigger1 = struct { 27830 FzName uintptr 27831 Ftable uintptr 27832 Fop u8 27833 Ftr_tm u8 27834 FbReturning u8 27835 F__ccgo_pad1 [5]byte 27836 FpWhen uintptr 27837 FpColumns uintptr 27838 FpSchema uintptr 27839 FpTabSchema uintptr 27840 Fstep_list uintptr 27841 FpNext uintptr 27842 } 27843 27844 type Trigger = Trigger1 27845 type TriggerPrg1 = struct { 27846 FpTrigger uintptr 27847 FpNext uintptr 27848 FpProgram uintptr 27849 Forconf int32 27850 FaColmask [2]u32 27851 F__ccgo_pad1 [4]byte 27852 } 27853 27854 type TriggerPrg = TriggerPrg1 27855 type TriggerStep1 = struct { 27856 Fop u8 27857 Forconf u8 27858 F__ccgo_pad1 [6]byte 27859 FpTrig uintptr 27860 FpSelect uintptr 27861 FzTarget uintptr 27862 FpFrom uintptr 27863 FpWhere uintptr 27864 FpExprList uintptr 27865 FpIdList uintptr 27866 FpUpsert uintptr 27867 FzSpan uintptr 27868 FpNext uintptr 27869 FpLast uintptr 27870 } 27871 27872 type TriggerStep = TriggerStep1 27873 type UnpackedRecord1 = struct { 27874 FpKeyInfo uintptr 27875 FaMem uintptr 27876 Fu struct{ Fz uintptr } 27877 Fn int32 27878 FnField u16 27879 Fdefault_rc i8 27880 FerrCode u8 27881 Fr1 i8 27882 Fr2 i8 27883 FeqSeen u8 27884 F__ccgo_pad1 [5]byte 27885 } 27886 27887 type UnpackedRecord = UnpackedRecord1 27888 type Upsert1 = struct { 27889 FpUpsertTarget uintptr 27890 FpUpsertTargetWhere uintptr 27891 FpUpsertSet uintptr 27892 FpUpsertWhere uintptr 27893 FpNextUpsert uintptr 27894 FisDoUpdate u8 27895 F__ccgo_pad1 [7]byte 27896 FpToFree uintptr 27897 FpUpsertIdx uintptr 27898 FpUpsertSrc uintptr 27899 FregData int32 27900 FiDataCur int32 27901 FiIdxCur int32 27902 F__ccgo_pad2 [4]byte 27903 } 27904 27905 type Upsert = Upsert1 27906 type VTable1 = struct { 27907 Fdb uintptr 27908 FpMod uintptr 27909 FpVtab uintptr 27910 FnRef int32 27911 FbConstraint u8 27912 FeVtabRisk u8 27913 F__ccgo_pad1 [2]byte 27914 FiSavepoint int32 27915 F__ccgo_pad2 [4]byte 27916 FpNext uintptr 27917 } 27918 27919 type VTable = VTable1 27920 type Walker1 = struct { 27921 FpParse uintptr 27922 FxExprCallback uintptr 27923 FxSelectCallback uintptr 27924 FxSelectCallback2 uintptr 27925 FwalkerDepth int32 27926 FeCode u16 27927 F__ccgo_pad1 [2]byte 27928 Fu struct{ FpNC uintptr } 27929 } 27930 27931 type Walker = Walker1 27932 type Window1 = struct { 27933 FzName uintptr 27934 FzBase uintptr 27935 FpPartition uintptr 27936 FpOrderBy uintptr 27937 FeFrmType u8 27938 FeStart u8 27939 FeEnd u8 27940 FbImplicitFrame u8 27941 FeExclude u8 27942 F__ccgo_pad1 [3]byte 27943 FpStart uintptr 27944 FpEnd uintptr 27945 FppThis uintptr 27946 FpNextWin uintptr 27947 FpFilter uintptr 27948 FpWFunc uintptr 27949 FiEphCsr int32 27950 FregAccum int32 27951 FregResult int32 27952 FcsrApp int32 27953 FregApp int32 27954 FregPart int32 27955 FpOwner uintptr 27956 FnBufferCol int32 27957 FiArgCol int32 27958 FregOne int32 27959 FregStartRowid int32 27960 FregEndRowid int32 27961 FbExprArgs u8 27962 F__ccgo_pad2 [3]byte 27963 } 27964 27965 type Window = Window1 27966 type With1 = struct { 27967 FnCte int32 27968 FbView int32 27969 FpOuter uintptr 27970 Fa [1]Cte 27971 } 27972 27973 type With = With1 27974 27975 type Bitmask = u64 27976 27977 type VList = int32 27978 27979 type Pgno = u32 27980 27981 type PgHdr1 = struct { 27982 FpPage uintptr 27983 FpData uintptr 27984 FpExtra uintptr 27985 FpCache uintptr 27986 FpDirty uintptr 27987 FpPager uintptr 27988 Fpgno Pgno 27989 Fflags u16 27990 FnRef i16 27991 FpDirtyNext uintptr 27992 FpDirtyPrev uintptr 27993 } 27994 27995 type DbPage = PgHdr1 27996 27997 type Btree1 = struct { 27998 Fdb uintptr 27999 FpBt uintptr 28000 FinTrans u8 28001 Fsharable u8 28002 Flocked u8 28003 FhasIncrblobCur u8 28004 FwantToLock int32 28005 FnBackup int32 28006 FiBDataVersion u32 28007 FpNext uintptr 28008 FpPrev uintptr 28009 Flock BtLock 28010 } 28011 28012 type BtCursor1 = struct { 28013 FeState u8 28014 FcurFlags u8 28015 FcurPagerFlags u8 28016 Fhints u8 28017 FskipNext int32 28018 FpBtree uintptr 28019 FaOverflow uintptr 28020 FpKey uintptr 28021 FpBt uintptr 28022 FpNext uintptr 28023 Finfo CellInfo 28024 FnKey i64 28025 FpgnoRoot Pgno 28026 FiPage i8 28027 FcurIntKey u8 28028 Fix u16 28029 FaiIdx [19]u16 28030 F__ccgo_pad1 [2]byte 28031 FpKeyInfo uintptr 28032 FpPage uintptr 28033 FapPage [19]uintptr 28034 } 28035 28036 type BtShared1 = struct { 28037 FpPager uintptr 28038 Fdb uintptr 28039 FpCursor uintptr 28040 FpPage1 uintptr 28041 FopenFlags u8 28042 FautoVacuum u8 28043 FincrVacuum u8 28044 FbDoTruncate u8 28045 FinTransaction u8 28046 Fmax1bytePayload u8 28047 FnReserveWanted u8 28048 F__ccgo_pad1 [1]byte 28049 FbtsFlags u16 28050 FmaxLocal u16 28051 FminLocal u16 28052 FmaxLeaf u16 28053 FminLeaf u16 28054 F__ccgo_pad2 [2]byte 28055 FpageSize u32 28056 FusableSize u32 28057 FnTransaction int32 28058 FnPage u32 28059 F__ccgo_pad3 [4]byte 28060 FpSchema uintptr 28061 FxFreeSchema uintptr 28062 Fmutex uintptr 28063 FpHasContent uintptr 28064 FnRef int32 28065 F__ccgo_pad4 [4]byte 28066 FpNext uintptr 28067 FpLock uintptr 28068 FpWriter uintptr 28069 FpTmpSpace uintptr 28070 FnPreformatSize int32 28071 F__ccgo_pad5 [4]byte 28072 } 28073 28074 type BtreePayload1 = struct { 28075 FpKey uintptr 28076 FnKey sqlite3_int64 28077 FpData uintptr 28078 FaMem uintptr 28079 FnMem u16 28080 F__ccgo_pad1 [2]byte 28081 FnData int32 28082 FnZero int32 28083 F__ccgo_pad2 [4]byte 28084 } 28085 28086 type BtreePayload = BtreePayload1 28087 28088 type Vdbe1 = struct { 28089 Fdb uintptr 28090 FpPrev uintptr 28091 FpNext uintptr 28092 FpParse uintptr 28093 FnVar ynVar 28094 F__ccgo_pad1 [2]byte 28095 FnMem int32 28096 FnCursor int32 28097 FcacheCtr u32 28098 Fpc int32 28099 Frc int32 28100 FnChange i64 28101 FiStatement int32 28102 F__ccgo_pad2 [4]byte 28103 FiCurrentTime i64 28104 FnFkConstraint i64 28105 FnStmtDefCons i64 28106 FnStmtDefImmCons i64 28107 FaMem uintptr 28108 FapArg uintptr 28109 FapCsr uintptr 28110 FaVar uintptr 28111 FaOp uintptr 28112 FnOp int32 28113 FnOpAlloc int32 28114 FaColName uintptr 28115 FpResultSet uintptr 28116 FzErrMsg uintptr 28117 FpVList uintptr 28118 FstartTime i64 28119 FnResColumn u16 28120 FerrorAction u8 28121 FminWriteFileFormat u8 28122 FprepFlags u8 28123 FeVdbeState u8 28124 F__ccgo_pad3 [2]byte 28125 Fexpired uint8 28126 F__ccgo_pad4 [3]byte 28127 FbtreeMask yDbMask 28128 FlockMask yDbMask 28129 FaCounter [9]u32 28130 FzSql uintptr 28131 FpFree uintptr 28132 FpFrame uintptr 28133 FpDelFrame uintptr 28134 FnFrame int32 28135 Fexpmask u32 28136 FpProgram uintptr 28137 FpAuxData uintptr 28138 } 28139 28140 type SubProgram1 = struct { 28141 FaOp uintptr 28142 FnOp int32 28143 FnMem int32 28144 FnCsr int32 28145 F__ccgo_pad1 [4]byte 28146 FaOnce uintptr 28147 Ftoken uintptr 28148 FpNext uintptr 28149 } 28150 28151 type SubProgram = SubProgram1 28152 28153 type VdbeOp1 = struct { 28154 Fopcode u8 28155 Fp4type int8 28156 Fp5 u16 28157 Fp1 int32 28158 Fp2 int32 28159 Fp3 int32 28160 Fp4 struct { 28161 F__ccgo_pad1 [0]uint64 28162 Fi int32 28163 F__ccgo_pad2 [4]byte 28164 } 28165 FzComment uintptr 28166 } 28167 28168 type p4union = struct { 28169 F__ccgo_pad1 [0]uint64 28170 Fi int32 28171 F__ccgo_pad2 [4]byte 28172 } 28173 28174 type VdbeOp = VdbeOp1 28175 28176 type VdbeOpList1 = struct { 28177 Fopcode u8 28178 Fp1 int8 28179 Fp2 int8 28180 Fp3 int8 28181 } 28182 28183 type VdbeOpList = VdbeOpList1 28184 28185 type RecordCompare = uintptr 28186 28187 type PgHdr = PgHdr1 28188 28189 type sqlite3_xauth = uintptr 28190 28191 type sqlite3InitInfo = struct { 28192 FnewTnum Pgno 28193 FiDb u8 28194 Fbusy u8 28195 F__ccgo_pad1 [2]byte 28196 ForphanTrigger uint8 28197 F__ccgo_pad2 [7]byte 28198 FazInit uintptr 28199 } 28200 28201 type sColMap = struct { 28202 FiFrom int32 28203 F__ccgo_pad1 [4]byte 28204 FzCol uintptr 28205 } 28206 28207 type AggInfo_col = struct { 28208 FpTab uintptr 28209 FpCExpr uintptr 28210 FiTable int32 28211 FiMem int32 28212 FiColumn i16 28213 FiSorterColumn i16 28214 F__ccgo_pad1 [4]byte 28215 } 28216 28217 type AggInfo_func = struct { 28218 FpFExpr uintptr 28219 FpFunc uintptr 28220 FiMem int32 28221 FiDistinct int32 28222 FiDistAddr int32 28223 F__ccgo_pad1 [4]byte 28224 } 28225 28226 type ynVar = i16 28227 28228 type ExprList_item = struct { 28229 FpExpr uintptr 28230 FzEName uintptr 28231 Ffg struct { 28232 F__ccgo_pad1 [0]uint32 28233 FsortFlags u8 28234 F__ccgo_pad2 [3]byte 28235 FeEName uint16 28236 F__ccgo_pad3 [2]byte 28237 } 28238 Fu struct { 28239 F__ccgo_pad1 [0]uint32 28240 Fx struct { 28241 FiOrderByCol u16 28242 FiAlias u16 28243 } 28244 } 28245 F__ccgo_pad1 [4]byte 28246 } 28247 28248 type IdList_item = struct { 28249 FzName uintptr 28250 Fu4 struct { 28251 F__ccgo_pad1 [0]uint64 28252 Fidx int32 28253 F__ccgo_pad2 [4]byte 28254 } 28255 } 28256 28257 type yDbMask = uint32 28258 28259 type InitData = struct { 28260 Fdb uintptr 28261 FpzErrMsg uintptr 28262 FiDb int32 28263 Frc int32 28264 FmInitFlags u32 28265 FnInitRow u32 28266 FmxPage Pgno 28267 F__ccgo_pad1 [4]byte 28268 } 28269 28270 type Sqlite3Config = struct { 28271 FbMemstat int32 28272 FbCoreMutex u8 28273 FbFullMutex u8 28274 FbOpenUri u8 28275 FbUseCis u8 28276 FbSmallMalloc u8 28277 FbExtraSchemaChecks u8 28278 F__ccgo_pad1 [2]byte 28279 FmxStrlen int32 28280 FneverCorrupt int32 28281 FszLookaside int32 28282 FnLookaside int32 28283 FnStmtSpill int32 28284 Fm sqlite3_mem_methods 28285 Fmutex sqlite3_mutex_methods 28286 Fpcache2 sqlite3_pcache_methods2 28287 FpHeap uintptr 28288 FnHeap int32 28289 FmnReq int32 28290 FmxReq int32 28291 F__ccgo_pad2 [4]byte 28292 FszMmap sqlite3_int64 28293 FmxMmap sqlite3_int64 28294 FpPage uintptr 28295 FszPage int32 28296 FnPage int32 28297 FmxParserStack int32 28298 FsharedCacheEnabled int32 28299 FszPma u32 28300 FisInit int32 28301 FinProgress int32 28302 FisMutexInit int32 28303 FisMallocInit int32 28304 FisPCacheInit int32 28305 FnRefInitMutex int32 28306 F__ccgo_pad3 [4]byte 28307 FpInitMutex uintptr 28308 FxLog uintptr 28309 FpLogArg uintptr 28310 FmxMemdbSize sqlite3_int64 28311 FxTestCallback uintptr 28312 FbLocaltimeFault int32 28313 F__ccgo_pad4 [4]byte 28314 FxAltLocaltime uintptr 28315 FiOnceResetThreshold int32 28316 FszSorterRef u32 28317 FiPrngSeed uint32 28318 F__ccgo_pad5 [4]byte 28319 } 28320 28321 type BoxGeomCtx1 = struct { 28322 Finterp uintptr 28323 FpScript uintptr 28324 } 28325 28326 type BoxGeomCtx = BoxGeomCtx1 28327 28328 type BoxQueryCtx1 = struct { 28329 Finterp uintptr 28330 FpScript uintptr 28331 } 28332 28333 type BoxQueryCtx = BoxQueryCtx1 28334 28335 func testDelUser(tls *libc.TLS, pCtx uintptr) { 28336 var p uintptr = pCtx 28337 tcl.XTcl_EvalObjEx(tls, (*BoxGeomCtx)(unsafe.Pointer(p)).Finterp, (*BoxGeomCtx)(unsafe.Pointer(p)).FpScript, 0) 28338 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28339 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*BoxGeomCtx)(unsafe.Pointer(p)).FpScript)).FrefCount, 1) <= 0 { 28340 tcl.XTclFreeObj(tls, (*BoxGeomCtx)(unsafe.Pointer(p)).FpScript) 28341 } 28342 } 28343 sqlite3.Xsqlite3_free(tls, p) 28344 } 28345 28346 func invokeTclGeomCb(tls *libc.TLS, zName uintptr, p uintptr, nCoord int32, aCoord uintptr) int32 { 28347 bp := tls.Alloc(96) 28348 defer tls.Free(96) 28349 28350 var rc int32 = SQLITE_OK 28351 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext != 0 { 28352 var pCtx uintptr = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext 28353 var interp uintptr = (*BoxGeomCtx)(unsafe.Pointer(pCtx)).Finterp 28354 var pScript uintptr = uintptr(0) 28355 var pParam uintptr = uintptr(0) 28356 var pCoord uintptr = uintptr(0) 28357 var ii int32 28358 var pRes uintptr 28359 28360 pScript = tcl.XTcl_DuplicateObj(tls, (*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript) 28361 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 28362 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, zName, -1)) 28363 28364 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([64]int8{}))-uint64(1)), bp+16, ts+9889, libc.VaList(bp, (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpContext)) 28365 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 28366 28367 pParam = tcl.XTcl_NewObj(tls) 28368 for ii = 0; ii < (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam; ii++ { 28369 tcl.XTcl_ListObjAppendElement(tls, 28370 interp, pParam, tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + uintptr(ii)*8)))) 28371 } 28372 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pParam) 28373 28374 pCoord = tcl.XTcl_NewObj(tls) 28375 for ii = 0; ii < nCoord; ii++ { 28376 tcl.XTcl_ListObjAppendElement(tls, interp, pCoord, tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + uintptr(ii)*8)))) 28377 } 28378 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pCoord) 28379 28380 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([64]int8{}))-uint64(1)), bp+16, ts+9889, libc.VaList(bp+8, p)) 28381 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 28382 28383 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 28384 if rc != TCL_OK { 28385 rc = SQLITE_ERROR 28386 } else { 28387 *(*int32)(unsafe.Pointer(bp + 80)) = 0 28388 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 28389 28390 pRes = tcl.XTcl_GetObjResult(tls, interp) 28391 if tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+80, bp+88) != 0 { 28392 return TCL_ERROR 28393 } 28394 if *(*int32)(unsafe.Pointer(bp + 80)) > 0 { 28395 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88))))) 28396 if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9892) { 28397 *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) = 0.0 28398 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam = 1 28399 } else if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9897) { 28400 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser != 0 || (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser != 0 { 28401 rc = SQLITE_ERROR 28402 } else { 28403 var pBGCtx uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(BoxGeomCtx{}))) 28404 if pBGCtx == uintptr(0) { 28405 rc = SQLITE_NOMEM 28406 } else { 28407 (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).Finterp = interp 28408 (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, pRes) 28409 (*Tcl_Obj)(unsafe.Pointer((*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript)).FrefCount++ 28410 tcl.XTcl_ListObjReplace(tls, interp, (*BoxGeomCtx)(unsafe.Pointer(pBGCtx)).FpScript, 0, 1, 0, uintptr(0)) 28411 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser = pBGCtx 28412 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testDelUser})) 28413 } 28414 } 28415 } else if 0 == sqlite3.Xsqlite3_stricmp(tls, zCmd, ts+9902) { 28416 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser != 0 || (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser != 0 { 28417 rc = SQLITE_ERROR 28418 } 28419 } 28420 } 28421 } 28422 } 28423 return rc 28424 } 28425 28426 func box_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, pRes uintptr) int32 { 28427 var ii int32 28428 28429 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam != nCoord { 28430 invokeTclGeomCb(tls, ts+9915, p, nCoord, aCoord) 28431 return SQLITE_ERROR 28432 } 28433 if invokeTclGeomCb(tls, ts+9915, p, nCoord, aCoord) != 0 { 28434 return SQLITE_ERROR 28435 } 28436 28437 for ii = 0; ii < nCoord; ii = ii + 2 { 28438 if *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + uintptr(ii)*8)) > *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + uintptr(ii+1)*8)) || *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + uintptr(ii+1)*8)) < *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + uintptr(ii)*8)) { 28439 *(*int32)(unsafe.Pointer(pRes)) = 0 28440 return SQLITE_OK 28441 } 28442 } 28443 28444 *(*int32)(unsafe.Pointer(pRes)) = 1 28445 28446 return SQLITE_OK 28447 } 28448 28449 func register_box_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 28450 bp := tls.Alloc(80) 28451 defer tls.Free(80) 28452 28453 var pCtx uintptr 28454 28455 if objc != 3 { 28456 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9919) 28457 return TCL_ERROR 28458 } 28459 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 28460 return TCL_ERROR 28461 } 28462 28463 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(uintptr(0)))) 28464 (*BoxGeomCtx)(unsafe.Pointer(pCtx)).Finterp = interp 28465 (*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 28466 (*Tcl_Obj)(unsafe.Pointer((*BoxGeomCtx)(unsafe.Pointer(pCtx)).FpScript)).FrefCount++ 28467 28468 sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), ts+9915, *(*uintptr)(unsafe.Pointer(&struct { 28469 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 28470 }{box_geom})), pCtx) 28471 28472 sqlite3.Xsqlite3_snprintf(tls, 64, bp+16, ts+9889, libc.VaList(bp, pCtx)) 28473 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 28474 return TCL_OK 28475 } 28476 28477 func box_query(tls *libc.TLS, pInfo uintptr) int32 { 28478 bp := tls.Alloc(60) 28479 defer tls.Free(60) 28480 28481 *(*[4]uintptr)(unsafe.Pointer(bp)) = [4]uintptr{ts + 5854, ts + 9929, ts + 9936, uintptr(0)} 28482 var pCtx uintptr = (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FpContext 28483 var interp uintptr = (*BoxQueryCtx)(unsafe.Pointer(pCtx)).Finterp 28484 var pEval uintptr 28485 var pArg uintptr 28486 var pTmp uintptr = uintptr(0) 28487 var rc int32 28488 var ii int32 28489 28490 pEval = tcl.XTcl_DuplicateObj(tls, (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript) 28491 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 28492 pArg = tcl.XTcl_NewObj(tls) 28493 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 28494 28495 pTmp = tcl.XTcl_NewObj(tls) 28496 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 28497 for ii = 0; ii < (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FnParam; ii++ { 28498 var p uintptr = tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FaParam + uintptr(ii)*8))) 28499 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 28500 } 28501 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9942, -1)) 28502 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 28503 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28504 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount, 1) <= 0 { 28505 tcl.XTclFreeObj(tls, pTmp) 28506 } 28507 } 28508 28509 pTmp = tcl.XTcl_NewObj(tls) 28510 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 28511 for ii = 0; ii < (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FnCoord; ii++ { 28512 var p uintptr = tcl.XTcl_NewDoubleObj(tls, *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FaCoord + uintptr(ii)*8))) 28513 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 28514 } 28515 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9949, -1)) 28516 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 28517 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 28518 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount, 1) <= 0 { 28519 tcl.XTclFreeObj(tls, pTmp) 28520 } 28521 } 28522 28523 pTmp = tcl.XTcl_NewObj(tls) 28524 (*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount++ 28525 for ii = 0; ii <= (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FmxLevel; ii++ { 28526 var p uintptr = tcl.XTcl_NewIntObj(tls, int32(*(*uint32)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FanQueue + uintptr(ii)*4)))) 28527 tcl.XTcl_ListObjAppendElement(tls, interp, pTmp, p) 28528 } 28529 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9956, -1)) 28530 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pTmp) 28531 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 28532 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pTmp)).FrefCount, 1) <= 0 { 28533 tcl.XTclFreeObj(tls, pTmp) 28534 } 28535 } 28536 28537 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9964, -1)) 28538 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FiLevel)) 28539 28540 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9971, -1)) 28541 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FmxLevel)) 28542 28543 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9979, -1)) 28544 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewWideIntObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FiRowid)) 28545 28546 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9986, -1)) 28547 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewDoubleObj(tls, (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FrParentScore)) 28548 28549 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, tcl.XTcl_NewStringObj(tls, ts+9999, -1)) 28550 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, 28551 tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + uintptr((*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FeParentWithin)*8)), -1)) 28552 28553 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, pArg) 28554 if tcl.XTcl_EvalObjEx(tls, interp, pEval, 0) != 0 { 28555 rc = SQLITE_ERROR 28556 } else { 28557 rc = SQLITE_OK 28558 } 28559 28560 if rc == SQLITE_OK { 28561 *(*float64)(unsafe.Pointer(bp + 48)) = 0.0 28562 *(*int32)(unsafe.Pointer(bp + 32)) = 0 28563 *(*int32)(unsafe.Pointer(bp + 56)) = 0 28564 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 28565 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 28566 28567 if tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+32, bp+40) != 0 || 28568 *(*int32)(unsafe.Pointer(bp + 32)) != 2 || 28569 tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 40)) + 1*8)), bp+48) != 0 || 28570 tcl.XTcl_GetIndexFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 40)))), bp, ts+10013, 0, bp+56) != 0 { 28571 rc = SQLITE_ERROR 28572 } else { 28573 (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FrScore = *(*float64)(unsafe.Pointer(bp + 48)) 28574 (*sqlite3_rtree_query_info)(unsafe.Pointer(pInfo)).FeParentWithin = *(*int32)(unsafe.Pointer(bp + 56)) 28575 } 28576 } 28577 28578 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 28579 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount, 1) <= 0 { 28580 tcl.XTclFreeObj(tls, pArg) 28581 } 28582 } 28583 for __ccgo4 := true; __ccgo4; __ccgo4 = 0 != 0 { 28584 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount, 1) <= 0 { 28585 tcl.XTclFreeObj(tls, pEval) 28586 } 28587 } 28588 return rc 28589 } 28590 28591 func box_query_destroy(tls *libc.TLS, p uintptr) { 28592 var pCtx uintptr = p 28593 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28594 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript)).FrefCount, 1) <= 0 { 28595 tcl.XTclFreeObj(tls, (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript) 28596 } 28597 } 28598 tcl.XTcl_Free(tls, pCtx) 28599 } 28600 28601 func register_box_query(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 28602 bp := tls.Alloc(8) 28603 defer tls.Free(8) 28604 28605 var pCtx uintptr 28606 28607 if objc != 3 { 28608 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9919) 28609 return TCL_ERROR 28610 } 28611 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 28612 return TCL_ERROR 28613 } 28614 28615 pCtx = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(BoxQueryCtx{}))) 28616 (*BoxQueryCtx)(unsafe.Pointer(pCtx)).Finterp = interp 28617 (*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 28618 (*Tcl_Obj)(unsafe.Pointer((*BoxQueryCtx)(unsafe.Pointer(pCtx)).FpScript)).FrefCount++ 28619 28620 sqlite3.Xsqlite3_rtree_query_callback(tls, 28621 *(*uintptr)(unsafe.Pointer(bp)), ts+10019, *(*uintptr)(unsafe.Pointer(&struct { 28622 f func(*libc.TLS, uintptr) int32 28623 }{box_query})), pCtx, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{box_query_destroy}))) 28624 28625 tcl.XTcl_ResetResult(tls, interp) 28626 return TCL_OK 28627 } 28628 28629 func Sqlitetestrtreedoc_Init(tls *libc.TLS, interp uintptr) int32 { 28630 tcl.XTcl_CreateObjCommand(tls, interp, ts+10024, *(*uintptr)(unsafe.Pointer(&struct { 28631 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 28632 }{register_box_geom})), uintptr(0), uintptr(0)) 28633 tcl.XTcl_CreateObjCommand(tls, interp, ts+10042, *(*uintptr)(unsafe.Pointer(&struct { 28634 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 28635 }{register_box_query})), uintptr(0), uintptr(0)) 28636 return TCL_OK 28637 } 28638 28639 type TestSession1 = struct { 28640 FpSession uintptr 28641 Finterp uintptr 28642 FpFilterScript uintptr 28643 } 28644 28645 type TestSession = TestSession1 28646 28647 type TestStreamInput1 = struct { 28648 FnStream int32 28649 F__ccgo_pad1 [4]byte 28650 FaData uintptr 28651 FnData int32 28652 FiData int32 28653 } 28654 28655 type TestStreamInput = TestStreamInput1 28656 28657 func dbHandleFromObj1(tls *libc.TLS, interp uintptr, pObj uintptr, pDb uintptr) int32 { 28658 bp := tls.Alloc(88) 28659 defer tls.Free(88) 28660 28661 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, pObj), bp+24) { 28662 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, pObj), 0)) 28663 return TCL_ERROR 28664 } 28665 28666 *(*uintptr)(unsafe.Pointer(pDb)) = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 28667 return TCL_OK 28668 } 28669 28670 func sql_exec_changeset(tls *libc.TLS, db uintptr, zSql uintptr, pnChangeset uintptr, ppChangeset uintptr) int32 { 28671 bp := tls.Alloc(8) 28672 defer tls.Free(8) 28673 28674 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 28675 var rc int32 28676 28677 rc = sqlite3.Xsqlite3session_create(tls, db, ts+85, bp) 28678 28679 if rc == SQLITE_OK { 28680 rc = sqlite3.Xsqlite3session_attach(tls, *(*uintptr)(unsafe.Pointer(bp)), uintptr(0)) 28681 } 28682 28683 if rc == SQLITE_OK { 28684 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 28685 } 28686 28687 if rc == SQLITE_OK { 28688 rc = sqlite3.Xsqlite3session_changeset(tls, *(*uintptr)(unsafe.Pointer(bp)), pnChangeset, ppChangeset) 28689 } 28690 28691 sqlite3.Xsqlite3session_delete(tls, *(*uintptr)(unsafe.Pointer(bp))) 28692 28693 return rc 28694 } 28695 28696 func test_sql_exec_changeset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 28697 bp := tls.Alloc(40) 28698 defer tls.Free(40) 28699 28700 var zSql uintptr 28701 28702 var rc int32 28703 28704 if objc != 3 { 28705 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10061) 28706 return TCL_ERROR 28707 } 28708 if dbHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 28709 return TCL_ERROR 28710 } 28711 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 28712 28713 rc = sql_exec_changeset(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zSql, bp+24, bp+32) 28714 if rc != SQLITE_OK { 28715 tcl.XTcl_ResetResult(tls, interp) 28716 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+10068, 0)) 28717 return TCL_ERROR 28718 } 28719 28720 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 24)))) 28721 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 28722 return TCL_OK 28723 } 28724 28725 func test_tcl_integer(tls *libc.TLS, interp uintptr, zVar uintptr) int32 { 28726 bp := tls.Alloc(4) 28727 defer tls.Free(4) 28728 28729 var pObj uintptr 28730 *(*int32)(unsafe.Pointer(bp)) = 0 28731 var pName uintptr = tcl.XTcl_NewStringObj(tls, zVar, -1) 28732 (*Tcl_Obj)(unsafe.Pointer(pName)).FrefCount++ 28733 pObj = tcl.XTcl_ObjGetVar2(tls, interp, pName, uintptr(0), TCL_GLOBAL_ONLY) 28734 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28735 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pName)).FrefCount, 1) <= 0 { 28736 tcl.XTclFreeObj(tls, pName) 28737 } 28738 } 28739 if pObj != 0 { 28740 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pObj, bp) 28741 } 28742 return *(*int32)(unsafe.Pointer(bp)) 28743 } 28744 28745 func test_session_error(tls *libc.TLS, interp uintptr, rc int32, zErr uintptr) int32 { 28746 bp := tls.Alloc(24) 28747 defer tls.Free(24) 28748 28749 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 28750 if zErr != 0 { 28751 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+9645, zErr, 0)) 28752 sqlite3.Xsqlite3_free(tls, zErr) 28753 } 28754 return TCL_ERROR 28755 } 28756 28757 func test_table_filter(tls *libc.TLS, pCtx uintptr, zTbl uintptr) int32 { 28758 bp := tls.Alloc(4) 28759 defer tls.Free(4) 28760 28761 var p uintptr = pCtx 28762 var pEval uintptr 28763 var rc int32 28764 *(*int32)(unsafe.Pointer(bp)) = 0 28765 28766 pEval = tcl.XTcl_DuplicateObj(tls, (*TestSession)(unsafe.Pointer(p)).FpFilterScript) 28767 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 28768 rc = tcl.XTcl_ListObjAppendElement(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 28769 if rc == TCL_OK { 28770 rc = tcl.XTcl_EvalObjEx(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 28771 } 28772 if rc == TCL_OK { 28773 rc = tcl.XTcl_GetBooleanFromObj(tls, (*TestSession)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*TestSession)(unsafe.Pointer(p)).Finterp), bp) 28774 } 28775 if rc != TCL_OK { 28776 tcl.XTcl_BackgroundError(tls, (*TestSession)(unsafe.Pointer(p)).Finterp) 28777 } 28778 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28779 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount, 1) <= 0 { 28780 tcl.XTclFreeObj(tls, pEval) 28781 } 28782 } 28783 28784 return *(*int32)(unsafe.Pointer(bp)) 28785 } 28786 28787 type TestSessionsBlob1 = struct { 28788 Fp uintptr 28789 Fn int32 28790 F__ccgo_pad1 [4]byte 28791 } 28792 28793 type TestSessionsBlob = TestSessionsBlob1 28794 28795 func testStreamOutput(tls *libc.TLS, pCtx uintptr, pData uintptr, nData int32) int32 { 28796 var pBlob uintptr = pCtx 28797 var pNew uintptr 28798 28799 pNew = sqlite3.Xsqlite3_realloc(tls, (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fp, (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fn+nData) 28800 if pNew == uintptr(0) { 28801 return SQLITE_NOMEM 28802 } 28803 (*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fp = pNew 28804 libc.X__builtin___memcpy_chk(tls, pNew+uintptr((*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fn), pData, uint64(nData), libc.X__builtin_object_size(tls, pNew+uintptr((*TestSessionsBlob)(unsafe.Pointer(pBlob)).Fn), 0)) 28805 *(*int32)(unsafe.Pointer(pBlob + 8)) += nData 28806 return SQLITE_OK 28807 } 28808 28809 func test_session_cmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 28810 bp := tls.Alloc(44) 28811 defer tls.Free(44) 28812 28813 var p uintptr = clientData 28814 var pSession uintptr = (*TestSession)(unsafe.Pointer(p)).FpSession 28815 28816 var rc int32 28817 28818 if objc < 2 { 28819 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 28820 return TCL_ERROR 28821 } 28822 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 28823 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub)), int32(unsafe.Sizeof(SessionSubcmd{})), ts+2014, 0, bp) 28824 if rc != TCL_OK { 28825 return rc 28826 } 28827 if objc != 2+aSub[*(*int32)(unsafe.Pointer(bp))].FnArg { 28828 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, aSub[*(*int32)(unsafe.Pointer(bp))].FzMsg) 28829 return TCL_ERROR 28830 } 28831 28832 switch *(*int32)(unsafe.Pointer(bp)) { 28833 case 0: 28834 { 28835 var zArg uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 28836 if int32(*(*int8)(unsafe.Pointer(zArg))) == '*' && int32(*(*int8)(unsafe.Pointer(zArg + 1))) == 0 { 28837 zArg = uintptr(0) 28838 } 28839 rc = sqlite3.Xsqlite3session_attach(tls, pSession, zArg) 28840 if rc != SQLITE_OK { 28841 return test_session_error(tls, interp, rc, uintptr(0)) 28842 } 28843 break 28844 28845 } 28846 28847 case 7: 28848 fallthrough 28849 case 1: 28850 { 28851 *(*TestSessionsBlob)(unsafe.Pointer(bp + 8)) = TestSessionsBlob{} 28852 if test_tcl_integer(tls, interp, ts+10098) != 0 { 28853 var pCtx uintptr = bp + 8 28854 if *(*int32)(unsafe.Pointer(bp)) == 7 { 28855 rc = sqlite3.Xsqlite3session_patchset_strm(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 28856 f func(*libc.TLS, uintptr, uintptr, int32) int32 28857 }{testStreamOutput})), pCtx) 28858 } else { 28859 rc = sqlite3.Xsqlite3session_changeset_strm(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 28860 f func(*libc.TLS, uintptr, uintptr, int32) int32 28861 }{testStreamOutput})), pCtx) 28862 } 28863 } else { 28864 if *(*int32)(unsafe.Pointer(bp)) == 7 { 28865 rc = sqlite3.Xsqlite3session_patchset(tls, pSession, bp+8+8, bp+8) 28866 } else { 28867 rc = sqlite3.Xsqlite3session_changeset(tls, pSession, bp+8+8, bp+8) 28868 } 28869 } 28870 if rc == SQLITE_OK { 28871 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fn)) 28872 } 28873 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+8)).Fp) 28874 if rc != SQLITE_OK { 28875 return test_session_error(tls, interp, rc, uintptr(0)) 28876 } 28877 break 28878 28879 } 28880 28881 case 2: 28882 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 28883 break 28884 28885 case 3: 28886 { 28887 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 28888 return TCL_ERROR 28889 } 28890 *(*int32)(unsafe.Pointer(bp + 24)) = sqlite3.Xsqlite3session_enable(tls, pSession, *(*int32)(unsafe.Pointer(bp + 24))) 28891 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewBooleanObj(tls, *(*int32)(unsafe.Pointer(bp + 24)))) 28892 break 28893 28894 } 28895 28896 case 4: 28897 { 28898 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+28) != 0 { 28899 return TCL_ERROR 28900 } 28901 *(*int32)(unsafe.Pointer(bp + 28)) = sqlite3.Xsqlite3session_indirect(tls, pSession, *(*int32)(unsafe.Pointer(bp + 28))) 28902 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewBooleanObj(tls, *(*int32)(unsafe.Pointer(bp + 28)))) 28903 break 28904 28905 } 28906 28907 case 5: 28908 { 28909 var val int32 28910 val = sqlite3.Xsqlite3session_isempty(tls, pSession) 28911 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewBooleanObj(tls, val)) 28912 break 28913 28914 } 28915 28916 case 6: 28917 { 28918 if (*TestSession)(unsafe.Pointer(p)).FpFilterScript != 0 { 28919 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 28920 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*TestSession)(unsafe.Pointer(p)).FpFilterScript)).FrefCount, 1) <= 0 { 28921 tcl.XTclFreeObj(tls, (*TestSession)(unsafe.Pointer(p)).FpFilterScript) 28922 } 28923 } 28924 } 28925 (*TestSession)(unsafe.Pointer(p)).Finterp = interp 28926 (*TestSession)(unsafe.Pointer(p)).FpFilterScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 28927 (*Tcl_Obj)(unsafe.Pointer((*TestSession)(unsafe.Pointer(p)).FpFilterScript)).FrefCount++ 28928 sqlite3.Xsqlite3session_table_filter(tls, pSession, *(*uintptr)(unsafe.Pointer(&struct { 28929 f func(*libc.TLS, uintptr, uintptr) int32 28930 }{test_table_filter})), clientData) 28931 break 28932 28933 } 28934 28935 case 8: 28936 { 28937 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(0) 28938 rc = sqlite3.Xsqlite3session_diff(tls, pSession, 28939 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 28940 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))), 28941 bp+32) 28942 28943 if rc != 0 { 28944 return test_session_error(tls, interp, rc, *(*uintptr)(unsafe.Pointer(bp + 32))) 28945 } 28946 break 28947 28948 } 28949 28950 case 9: 28951 { 28952 var nMalloc sqlite3_int64 = sqlite3.Xsqlite3session_memory_used(tls, pSession) 28953 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nMalloc)) 28954 break 28955 28956 } 28957 28958 case 10: 28959 { 28960 var nSize sqlite3_int64 = sqlite3.Xsqlite3session_changeset_size(tls, pSession) 28961 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, nSize)) 28962 break 28963 28964 } 28965 case 11: 28966 { 28967 var rc int32 28968 28969 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 28970 return TCL_ERROR 28971 } 28972 rc = sqlite3.Xsqlite3session_object_config(tls, 28973 pSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+40) 28974 if rc != SQLITE_OK { 28975 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 28976 } else { 28977 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 28978 } 28979 break 28980 28981 } 28982 } 28983 28984 return TCL_OK 28985 } 28986 28987 type SessionSubcmd = struct { 28988 FzSub uintptr 28989 FnArg int32 28990 F__ccgo_pad1 [4]byte 28991 FzMsg uintptr 28992 FiSub int32 28993 F__ccgo_pad2 [4]byte 28994 } 28995 28996 var aSub = [13]SessionSubcmd{ 28997 {FzSub: ts + 10121, FnArg: 1, FzMsg: ts + 1951}, 28998 {FzSub: ts + 10128, FzMsg: ts + 584}, 28999 {FzSub: ts + 10138, FzMsg: ts + 584}, 29000 {FzSub: ts + 10145, FnArg: 1, FzMsg: ts + 10152}, 29001 {FzSub: ts + 10157, FnArg: 1, FzMsg: ts + 10152}, 29002 {FzSub: ts + 10166, FzMsg: ts + 584}, 29003 {FzSub: ts + 10174, FnArg: 1, FzMsg: ts + 10187}, 29004 {FzSub: ts + 10194, FzMsg: ts + 584}, 29005 {FzSub: ts + 10203, FnArg: 2, FzMsg: ts + 10208}, 29006 {FzSub: ts + 10219, FzMsg: ts + 584}, 29007 {FzSub: ts + 10231, FzMsg: ts + 584}, 29008 {FzSub: ts + 10246, FnArg: 1, FzMsg: ts + 2413}, 29009 {}, 29010 } 29011 29012 func test_session_del(tls *libc.TLS, clientData uintptr) { 29013 var p uintptr = clientData 29014 if (*TestSession)(unsafe.Pointer(p)).FpFilterScript != 0 { 29015 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29016 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*TestSession)(unsafe.Pointer(p)).FpFilterScript)).FrefCount, 1) <= 0 { 29017 tcl.XTclFreeObj(tls, (*TestSession)(unsafe.Pointer(p)).FpFilterScript) 29018 } 29019 } 29020 } 29021 sqlite3.Xsqlite3session_delete(tls, (*TestSession)(unsafe.Pointer(p)).FpSession) 29022 tcl.XTcl_Free(tls, p) 29023 } 29024 29025 func test_sqlite3session(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29026 bp := tls.Alloc(92) 29027 defer tls.Free(92) 29028 29029 var db uintptr 29030 29031 var rc int32 29032 var p uintptr 29033 *(*int32)(unsafe.Pointer(bp + 88)) = -1 29034 29035 if objc != 4 { 29036 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10265) 29037 return TCL_ERROR 29038 } 29039 29040 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+24) { 29041 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 29042 return TCL_ERROR 29043 } 29044 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 29045 29046 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(TestSession{}))) 29047 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(TestSession{})), libc.X__builtin_object_size(tls, p, 0)) 29048 rc = sqlite3.Xsqlite3session_create(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))), p) 29049 if rc != SQLITE_OK { 29050 tcl.XTcl_Free(tls, p) 29051 return test_session_error(tls, interp, rc, uintptr(0)) 29052 } 29053 29054 sqlite3.Xsqlite3session_object_config(tls, (*TestSession)(unsafe.Pointer(p)).FpSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+88) 29055 29056 *(*int32)(unsafe.Pointer(bp + 88)) = 1 29057 sqlite3.Xsqlite3session_object_config(tls, (*TestSession)(unsafe.Pointer(p)).FpSession, SQLITE_SESSION_OBJCONFIG_SIZE, bp+88) 29058 29059 tcl.XTcl_CreateObjCommand(tls, 29060 interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 29061 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 29062 }{test_session_cmd})), p, 29063 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_session_del}))) 29064 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 29065 return TCL_OK 29066 } 29067 29068 func test_append_value(tls *libc.TLS, pList uintptr, pVal uintptr) { 29069 if pVal == uintptr(0) { 29070 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewObj(tls)) 29071 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewObj(tls)) 29072 } else { 29073 var pObj uintptr 29074 switch sqlite3.Xsqlite3_value_type(tls, pVal) { 29075 case SQLITE_NULL: 29076 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10287, 1)) 29077 pObj = tcl.XTcl_NewObj(tls) 29078 break 29079 fallthrough 29080 case SQLITE_INTEGER: 29081 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10289, 1)) 29082 pObj = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, pVal)) 29083 break 29084 fallthrough 29085 case SQLITE_FLOAT: 29086 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10291, 1)) 29087 pObj = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, pVal)) 29088 break 29089 fallthrough 29090 case SQLITE_TEXT: 29091 { 29092 var z uintptr = sqlite3.Xsqlite3_value_blob(tls, pVal) 29093 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, pVal) 29094 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+10293, 1)) 29095 pObj = tcl.XTcl_NewStringObj(tls, z, n) 29096 break 29097 29098 } 29099 fallthrough 29100 default: 29101 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, tcl.XTcl_NewStringObj(tls, ts+6206, 1)) 29102 pObj = tcl.XTcl_NewByteArrayObj(tls, 29103 sqlite3.Xsqlite3_value_blob(tls, pVal), 29104 sqlite3.Xsqlite3_value_bytes(tls, pVal)) 29105 break 29106 } 29107 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pList, pObj) 29108 } 29109 } 29110 29111 type TestConflictHandler1 = struct { 29112 Finterp uintptr 29113 FpConflictScript uintptr 29114 FpFilterScript uintptr 29115 } 29116 29117 type TestConflictHandler = TestConflictHandler1 29118 29119 func test_obj_eq_string(tls *libc.TLS, p uintptr, z uintptr) int32 { 29120 bp := tls.Alloc(4) 29121 defer tls.Free(4) 29122 29123 var n int32 29124 29125 var zObj uintptr 29126 29127 n = int32(libc.Xstrlen(tls, z)) 29128 zObj = tcl.XTcl_GetStringFromObj(tls, p, bp) 29129 29130 return libc.Bool32(*(*int32)(unsafe.Pointer(bp)) == n && (n == 0 || 0 == libc.Xmemcmp(tls, zObj, z, uint64(n)))) 29131 } 29132 29133 func test_filter_handler(tls *libc.TLS, pCtx uintptr, zTab uintptr) int32 { 29134 bp := tls.Alloc(4) 29135 defer tls.Free(4) 29136 29137 var p uintptr = pCtx 29138 *(*int32)(unsafe.Pointer(bp)) = 1 29139 var pEval uintptr 29140 var interp uintptr = (*TestConflictHandler)(unsafe.Pointer(p)).Finterp 29141 29142 pEval = tcl.XTcl_DuplicateObj(tls, (*TestConflictHandler)(unsafe.Pointer(p)).FpFilterScript) 29143 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 29144 29145 if TCL_OK != tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, zTab, -1)) || 29146 TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, pEval, TCL_EVAL_GLOBAL) || 29147 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, tcl.XTcl_GetObjResult(tls, interp), bp) { 29148 tcl.XTcl_BackgroundError(tls, interp) 29149 } 29150 29151 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29152 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount, 1) <= 0 { 29153 tcl.XTclFreeObj(tls, pEval) 29154 } 29155 } 29156 return *(*int32)(unsafe.Pointer(bp)) 29157 } 29158 29159 func test_conflict_handler(tls *libc.TLS, pCtx uintptr, eConf int32, pIter uintptr) int32 { 29160 bp := tls.Alloc(104) 29161 defer tls.Free(104) 29162 29163 var p uintptr = pCtx 29164 var pEval uintptr 29165 var interp uintptr = (*TestConflictHandler)(unsafe.Pointer(p)).Finterp 29166 *(*int32)(unsafe.Pointer(bp + 100)) = 0 29167 29168 pEval = tcl.XTcl_DuplicateObj(tls, (*TestConflictHandler)(unsafe.Pointer(p)).FpConflictScript) 29169 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 29170 29171 sqlite3.Xsqlite3changeset_op(tls, pIter, bp, bp+8, bp+12, uintptr(0)) 29172 29173 if eConf == SQLITE_CHANGESET_FOREIGN_KEY { 29174 sqlite3.Xsqlite3changeset_fk_conflicts(tls, pIter, bp+16) 29175 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, ts+10295, -1)) 29176 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 29177 } else { 29178 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, 29179 func() uintptr { 29180 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_INSERT { 29181 return ts + 10307 29182 } 29183 return func() uintptr { 29184 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_UPDATE { 29185 return ts + 10314 29186 } 29187 return ts + 10321 29188 }() 29189 }(), -1)) 29190 29191 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp)), -1)) 29192 29193 switch eConf { 29194 case SQLITE_CHANGESET_DATA: 29195 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10328, -1)) 29196 break 29197 fallthrough 29198 case SQLITE_CHANGESET_NOTFOUND: 29199 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10333, -1)) 29200 break 29201 fallthrough 29202 case SQLITE_CHANGESET_CONFLICT: 29203 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10342, -1)) 29204 break 29205 fallthrough 29206 case SQLITE_CHANGESET_CONSTRAINT: 29207 tcl.XTcl_ListObjAppendElement(tls, interp, pEval, tcl.XTcl_NewStringObj(tls, ts+10351, -1)) 29208 break 29209 } 29210 29211 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_INSERT { 29212 var i int32 29213 var pOld uintptr = tcl.XTcl_NewObj(tls) 29214 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 29215 sqlite3.Xsqlite3changeset_old(tls, pIter, i, bp+24) 29216 test_append_value(tls, pOld, *(*uintptr)(unsafe.Pointer(bp + 24))) 29217 } 29218 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pOld) 29219 } 29220 29221 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_DELETE { 29222 var i int32 29223 var pNew uintptr = tcl.XTcl_NewObj(tls) 29224 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 29225 sqlite3.Xsqlite3changeset_new(tls, pIter, i, bp+32) 29226 test_append_value(tls, pNew, *(*uintptr)(unsafe.Pointer(bp + 32))) 29227 } 29228 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pNew) 29229 } 29230 29231 if eConf == SQLITE_CHANGESET_DATA || eConf == SQLITE_CHANGESET_CONFLICT { 29232 var i int32 29233 var pConflict uintptr = tcl.XTcl_NewObj(tls) 29234 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 29235 var rc int32 29236 _ = rc 29237 29238 rc = sqlite3.Xsqlite3changeset_conflict(tls, pIter, i, bp+40) 29239 29240 test_append_value(tls, pConflict, *(*uintptr)(unsafe.Pointer(bp + 40))) 29241 } 29242 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pConflict) 29243 } 29244 29245 if eConf == SQLITE_CHANGESET_CONSTRAINT || 29246 eConf == SQLITE_CHANGESET_NOTFOUND { 29247 var rc int32 = sqlite3.Xsqlite3changeset_conflict(tls, pIter, 0, bp+48) 29248 _ = rc 29249 29250 } else { 29251 var rc int32 = sqlite3.Xsqlite3changeset_conflict(tls, pIter, -1, bp+56) 29252 _ = rc 29253 29254 rc = sqlite3.Xsqlite3changeset_conflict(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+56) 29255 29256 } 29257 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_DELETE { 29258 var rc int32 = sqlite3.Xsqlite3changeset_new(tls, pIter, 0, bp+64) 29259 _ = rc 29260 29261 } else { 29262 var rc int32 = sqlite3.Xsqlite3changeset_new(tls, pIter, -1, bp+72) 29263 _ = rc 29264 29265 rc = sqlite3.Xsqlite3changeset_new(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+72) 29266 29267 } 29268 if *(*int32)(unsafe.Pointer(bp + 12)) == SQLITE_INSERT { 29269 var rc int32 = sqlite3.Xsqlite3changeset_old(tls, pIter, 0, bp+80) 29270 _ = rc 29271 29272 } else { 29273 var rc int32 = sqlite3.Xsqlite3changeset_old(tls, pIter, -1, bp+88) 29274 _ = rc 29275 29276 rc = sqlite3.Xsqlite3changeset_old(tls, pIter, *(*int32)(unsafe.Pointer(bp + 8)), bp+88) 29277 29278 } 29279 if eConf != SQLITE_CHANGESET_FOREIGN_KEY { 29280 var rc int32 = sqlite3.Xsqlite3changeset_fk_conflicts(tls, pIter, bp+96) 29281 _ = rc 29282 29283 } 29284 29285 } 29286 29287 if TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, pEval, TCL_EVAL_GLOBAL) { 29288 tcl.XTcl_BackgroundError(tls, interp) 29289 } else { 29290 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 29291 if test_obj_eq_string(tls, pRes, ts+10362) != 0 || test_obj_eq_string(tls, pRes, ts+584) != 0 { 29292 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_OMIT 29293 } else if test_obj_eq_string(tls, pRes, ts+7846) != 0 { 29294 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_REPLACE 29295 } else if test_obj_eq_string(tls, pRes, ts+7840) != 0 { 29296 *(*int32)(unsafe.Pointer(bp + 100)) = SQLITE_CHANGESET_ABORT 29297 } else { 29298 tcl.XTcl_GetIntFromObj(tls, uintptr(0), pRes, bp+100) 29299 } 29300 } 29301 29302 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 29303 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount, 1) <= 0 { 29304 tcl.XTclFreeObj(tls, pEval) 29305 } 29306 } 29307 return *(*int32)(unsafe.Pointer(bp + 100)) 29308 } 29309 29310 func replace_handler(tls *libc.TLS, pCtx uintptr, eConf int32, pIter uintptr) int32 { 29311 bp := tls.Alloc(32) 29312 defer tls.Free(32) 29313 29314 var i int32 29315 var x int32 = 0 29316 29317 sqlite3.Xsqlite3changeset_op(tls, pIter, bp, bp+8, bp+12, uintptr(0)) 29318 29319 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_INSERT { 29320 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 29321 sqlite3.Xsqlite3changeset_old(tls, pIter, i, bp+16) 29322 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 29323 x++ 29324 } 29325 } 29326 29327 if *(*int32)(unsafe.Pointer(bp + 12)) != SQLITE_DELETE { 29328 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 8)); i++ { 29329 sqlite3.Xsqlite3changeset_new(tls, pIter, i, bp+24) 29330 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 29331 x++ 29332 } 29333 } 29334 29335 if eConf == SQLITE_CHANGESET_DATA { 29336 return SQLITE_CHANGESET_REPLACE 29337 } 29338 return SQLITE_CHANGESET_OMIT 29339 } 29340 29341 func testStreamInput(tls *libc.TLS, pCtx uintptr, pData uintptr, pnData uintptr) int32 { 29342 var p uintptr = pCtx 29343 var nReq int32 = *(*int32)(unsafe.Pointer(pnData)) 29344 var nRem int32 = (*TestStreamInput)(unsafe.Pointer(p)).FnData - (*TestStreamInput)(unsafe.Pointer(p)).FiData 29345 var nRet int32 = (*TestStreamInput)(unsafe.Pointer(p)).FnStream 29346 29347 var pAlloc uintptr = sqlite3.Xsqlite3_malloc(tls, 10) 29348 if pAlloc == uintptr(0) { 29349 return SQLITE_NOMEM 29350 } 29351 sqlite3.Xsqlite3_free(tls, pAlloc) 29352 29353 if nRet > nReq { 29354 nRet = nReq 29355 } 29356 if nRet > nRem { 29357 nRet = nRem 29358 } 29359 29360 if nRet > 0 { 29361 libc.X__builtin___memcpy_chk(tls, pData, (*TestStreamInput)(unsafe.Pointer(p)).FaData+uintptr((*TestStreamInput)(unsafe.Pointer(p)).FiData), uint64(nRet), libc.X__builtin_object_size(tls, pData, 0)) 29362 *(*int32)(unsafe.Pointer(p + 20)) += nRet 29363 } 29364 29365 *(*int32)(unsafe.Pointer(pnData)) = nRet 29366 return SQLITE_OK 29367 } 29368 29369 func testSqlite3changesetApply(tls *libc.TLS, bV2 int32, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29370 bp := tls.Alloc(156) 29371 defer tls.Free(156) 29372 29373 var db uintptr 29374 29375 var rc int32 29376 var pChangeset uintptr 29377 29378 *(*uintptr)(unsafe.Pointer(bp + 144)) = uintptr(0) 29379 *(*int32)(unsafe.Pointer(bp + 152)) = 0 29380 var flags int32 = 0 29381 29382 libc.X__builtin___memset_chk(tls, bp+24, 0, uint64(unsafe.Sizeof(TestStreamInput{})), libc.X__builtin_object_size(tls, bp+24, 0)) 29383 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnStream = test_tcl_integer(tls, interp, ts+10098) 29384 29385 if bV2 != 0 { 29386 if objc > 1 { 29387 var z1 uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 29388 var n int32 = int32(libc.Xstrlen(tls, z1)) 29389 if n > 1 && n <= 12 && 0 == sqlite3.Xsqlite3_strnicmp(tls, ts+10367, z1, n) { 29390 flags = flags | SQLITE_CHANGESETAPPLY_NOSAVEPOINT 29391 objc-- 29392 objv += 8 29393 } 29394 } 29395 if objc > 1 { 29396 var z1 uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 29397 var n int32 = int32(libc.Xstrlen(tls, z1)) 29398 if n > 1 && n <= 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, ts+10380, z1, n) { 29399 flags = flags | SQLITE_CHANGESETAPPLY_INVERT 29400 objc-- 29401 objv += 8 29402 } 29403 } 29404 } 29405 29406 if objc != 4 && objc != 5 { 29407 var zMsg uintptr 29408 if bV2 != 0 { 29409 zMsg = ts + 10388 29410 } else { 29411 zMsg = ts + 10459 29412 } 29413 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, zMsg) 29414 return TCL_ERROR 29415 } 29416 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) { 29417 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), 0)) 29418 return TCL_ERROR 29419 } 29420 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 48)).FobjClientData)) 29421 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+112) 29422 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).FpConflictScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 29423 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).FpFilterScript = func() uintptr { 29424 if objc == 5 { 29425 return *(*uintptr)(unsafe.Pointer(objv + 4*8)) 29426 } 29427 return uintptr(0) 29428 }() 29429 (*TestConflictHandler)(unsafe.Pointer(bp + 120)).Finterp = interp 29430 29431 if (*TestStreamInput)(unsafe.Pointer(bp+24)).FnStream == 0 { 29432 if bV2 == 0 { 29433 rc = sqlite3.Xsqlite3changeset_apply(tls, db, *(*int32)(unsafe.Pointer(bp + 112)), pChangeset, 29434 func() uintptr { 29435 if objc == 5 { 29436 return *(*uintptr)(unsafe.Pointer(&struct { 29437 f func(*libc.TLS, uintptr, uintptr) int32 29438 }{test_filter_handler})) 29439 } 29440 return uintptr(0) 29441 }(), *(*uintptr)(unsafe.Pointer(&struct { 29442 f func(*libc.TLS, uintptr, int32, uintptr) int32 29443 }{test_conflict_handler})), bp+120) 29444 } else { 29445 rc = sqlite3.Xsqlite3changeset_apply_v2(tls, db, *(*int32)(unsafe.Pointer(bp + 112)), pChangeset, 29446 func() uintptr { 29447 if objc == 5 { 29448 return *(*uintptr)(unsafe.Pointer(&struct { 29449 f func(*libc.TLS, uintptr, uintptr) int32 29450 }{test_filter_handler})) 29451 } 29452 return uintptr(0) 29453 }(), *(*uintptr)(unsafe.Pointer(&struct { 29454 f func(*libc.TLS, uintptr, int32, uintptr) int32 29455 }{test_conflict_handler})), bp+120, 29456 bp+144, bp+152, flags) 29457 } 29458 } else { 29459 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FaData = pChangeset 29460 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnData = *(*int32)(unsafe.Pointer(bp + 112)) 29461 if bV2 == 0 { 29462 rc = sqlite3.Xsqlite3changeset_apply_strm(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 29463 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 29464 }{testStreamInput})), bp+24, 29465 func() uintptr { 29466 if objc == 5 { 29467 return *(*uintptr)(unsafe.Pointer(&struct { 29468 f func(*libc.TLS, uintptr, uintptr) int32 29469 }{test_filter_handler})) 29470 } 29471 return uintptr(0) 29472 }(), 29473 *(*uintptr)(unsafe.Pointer(&struct { 29474 f func(*libc.TLS, uintptr, int32, uintptr) int32 29475 }{test_conflict_handler})), bp+120) 29476 } else { 29477 rc = sqlite3.Xsqlite3changeset_apply_v2_strm(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 29478 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 29479 }{testStreamInput})), bp+24, 29480 func() uintptr { 29481 if objc == 5 { 29482 return *(*uintptr)(unsafe.Pointer(&struct { 29483 f func(*libc.TLS, uintptr, uintptr) int32 29484 }{test_filter_handler})) 29485 } 29486 return uintptr(0) 29487 }(), 29488 *(*uintptr)(unsafe.Pointer(&struct { 29489 f func(*libc.TLS, uintptr, int32, uintptr) int32 29490 }{test_conflict_handler})), bp+120, 29491 bp+144, bp+152, flags) 29492 } 29493 } 29494 29495 if rc != SQLITE_OK { 29496 return test_session_error(tls, interp, rc, uintptr(0)) 29497 } else { 29498 tcl.XTcl_ResetResult(tls, interp) 29499 if bV2 != 0 && *(*uintptr)(unsafe.Pointer(bp + 144)) != 0 { 29500 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 144)), *(*int32)(unsafe.Pointer(bp + 152)))) 29501 } 29502 } 29503 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 144))) 29504 return TCL_OK 29505 } 29506 29507 func test_sqlite3changeset_apply(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29508 return testSqlite3changesetApply(tls, 0, clientData, interp, objc, objv) 29509 } 29510 29511 func test_sqlite3changeset_apply_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29512 return testSqlite3changesetApply(tls, 1, clientData, interp, objc, objv) 29513 } 29514 29515 func test_sqlite3changeset_apply_replace_all(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29516 bp := tls.Alloc(92) 29517 defer tls.Free(92) 29518 29519 var db uintptr 29520 29521 var rc int32 29522 var pChangeset uintptr 29523 29524 if objc != 3 { 29525 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10504) 29526 return TCL_ERROR 29527 } 29528 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) { 29529 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+1930, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 29530 return TCL_ERROR 29531 } 29532 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)) 29533 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+88) 29534 29535 rc = sqlite3.Xsqlite3changeset_apply(tls, db, *(*int32)(unsafe.Pointer(bp + 88)), pChangeset, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 29536 f func(*libc.TLS, uintptr, int32, uintptr) int32 29537 }{replace_handler})), uintptr(0)) 29538 if rc != SQLITE_OK { 29539 return test_session_error(tls, interp, rc, uintptr(0)) 29540 } 29541 tcl.XTcl_ResetResult(tls, interp) 29542 return TCL_OK 29543 } 29544 29545 func test_sqlite3changeset_invert(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29546 bp := tls.Alloc(40) 29547 defer tls.Free(40) 29548 29549 var rc int32 29550 29551 if objc != 2 { 29552 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10517) 29553 return TCL_ERROR 29554 } 29555 29556 libc.X__builtin___memset_chk(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{})), libc.X__builtin_object_size(tls, bp, 0)) 29557 libc.X__builtin___memset_chk(tls, bp+24, 0, uint64(unsafe.Sizeof(TestSessionsBlob{})), libc.X__builtin_object_size(tls, bp+24, 0)) 29558 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 29559 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 29560 29561 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream != 0 { 29562 rc = sqlite3.Xsqlite3changeset_invert_strm(tls, 29563 *(*uintptr)(unsafe.Pointer(&struct { 29564 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 29565 }{testStreamInput})), bp, *(*uintptr)(unsafe.Pointer(&struct { 29566 f func(*libc.TLS, uintptr, uintptr, int32) int32 29567 }{testStreamOutput})), bp+24) 29568 } else { 29569 rc = sqlite3.Xsqlite3changeset_invert(tls, (*TestStreamInput)(unsafe.Pointer(bp)).FnData, (*TestStreamInput)(unsafe.Pointer(bp)).FaData, bp+24+8, bp+24) 29570 } 29571 if rc != SQLITE_OK { 29572 rc = test_session_error(tls, interp, rc, uintptr(0)) 29573 } else { 29574 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fn)) 29575 } 29576 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+24)).Fp) 29577 return rc 29578 } 29579 29580 func test_sqlite3changeset_concat(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29581 bp := tls.Alloc(64) 29582 defer tls.Free(64) 29583 29584 var rc int32 29585 29586 *(*TestSessionsBlob)(unsafe.Pointer(bp + 48)) = TestSessionsBlob{} 29587 29588 if objc != 3 { 29589 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10527) 29590 return TCL_ERROR 29591 } 29592 29593 libc.X__builtin___memset_chk(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{})), libc.X__builtin_object_size(tls, bp, 0)) 29594 libc.X__builtin___memset_chk(tls, bp+24, 0, uint64(unsafe.Sizeof(TestStreamInput{})), libc.X__builtin_object_size(tls, bp+24, 0)) 29595 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 29596 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24+16) 29597 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 29598 (*TestStreamInput)(unsafe.Pointer(bp + 24)).FnStream = (*TestStreamInput)(unsafe.Pointer(bp)).FnStream 29599 29600 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream > 0 { 29601 rc = sqlite3.Xsqlite3changeset_concat_strm(tls, 29602 *(*uintptr)(unsafe.Pointer(&struct { 29603 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 29604 }{testStreamInput})), bp, 29605 *(*uintptr)(unsafe.Pointer(&struct { 29606 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 29607 }{testStreamInput})), bp+24, 29608 *(*uintptr)(unsafe.Pointer(&struct { 29609 f func(*libc.TLS, uintptr, uintptr, int32) int32 29610 }{testStreamOutput})), bp+48) 29611 } else { 29612 rc = sqlite3.Xsqlite3changeset_concat(tls, 29613 (*TestStreamInput)(unsafe.Pointer(bp)).FnData, (*TestStreamInput)(unsafe.Pointer(bp)).FaData, (*TestStreamInput)(unsafe.Pointer(bp+24)).FnData, (*TestStreamInput)(unsafe.Pointer(bp+24)).FaData, bp+48+8, bp+48) 29614 } 29615 29616 if rc != SQLITE_OK { 29617 rc = test_session_error(tls, interp, rc, uintptr(0)) 29618 } else { 29619 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fn)) 29620 } 29621 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+48)).Fp) 29622 return rc 29623 } 29624 29625 func test_sqlite3session_foreach(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29626 bp := tls.Alloc(104) 29627 defer tls.Free(104) 29628 29629 var pChangeset uintptr 29630 29631 var rc int32 29632 var pVarname uintptr 29633 var pCS uintptr 29634 var pScript uintptr 29635 var isCheckNext int32 = 0 29636 var isInvert int32 = 0 29637 29638 libc.X__builtin___memset_chk(tls, bp, 0, uint64(unsafe.Sizeof(TestStreamInput{})), libc.X__builtin_object_size(tls, bp, 0)) 29639 29640 for objc > 1 { 29641 var zOpt uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 29642 var nOpt int32 = int32(libc.Xstrlen(tls, zOpt)) 29643 if int32(*(*int8)(unsafe.Pointer(zOpt))) != '-' { 29644 break 29645 } 29646 if nOpt <= 7 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+10380, nOpt) { 29647 isInvert = 1 29648 } else if nOpt <= 5 && 0 == sqlite3.Xsqlite3_strnicmp(tls, zOpt, ts+10538, nOpt) { 29649 isCheckNext = 1 29650 } else { 29651 break 29652 } 29653 objv += 8 29654 objc-- 29655 } 29656 if objc != 4 { 29657 tcl.XTcl_WrongNumArgs(tls, 29658 interp, 1, objv, ts+10544) 29659 return TCL_ERROR 29660 } 29661 29662 pVarname = *(*uintptr)(unsafe.Pointer(objv + 1*8)) 29663 pCS = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 29664 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 29665 29666 pChangeset = tcl.XTcl_GetByteArrayFromObj(tls, pCS, bp+24) 29667 (*TestStreamInput)(unsafe.Pointer(bp)).FnStream = test_tcl_integer(tls, interp, ts+10098) 29668 if isInvert != 0 { 29669 var f int32 = SQLITE_CHANGESETSTART_INVERT 29670 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream == 0 { 29671 rc = sqlite3.Xsqlite3changeset_start_v2(tls, bp+32, *(*int32)(unsafe.Pointer(bp + 24)), pChangeset, f) 29672 } else { 29673 var pCtx uintptr = bp 29674 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = pChangeset 29675 (*TestStreamInput)(unsafe.Pointer(bp)).FnData = *(*int32)(unsafe.Pointer(bp + 24)) 29676 rc = sqlite3.Xsqlite3changeset_start_v2_strm(tls, bp+32, *(*uintptr)(unsafe.Pointer(&struct { 29677 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 29678 }{testStreamInput})), pCtx, f) 29679 } 29680 } else { 29681 if (*TestStreamInput)(unsafe.Pointer(bp)).FnStream == 0 { 29682 rc = sqlite3.Xsqlite3changeset_start(tls, bp+32, *(*int32)(unsafe.Pointer(bp + 24)), pChangeset) 29683 } else { 29684 (*TestStreamInput)(unsafe.Pointer(bp)).FaData = pChangeset 29685 (*TestStreamInput)(unsafe.Pointer(bp)).FnData = *(*int32)(unsafe.Pointer(bp + 24)) 29686 rc = sqlite3.Xsqlite3changeset_start_strm(tls, bp+32, *(*uintptr)(unsafe.Pointer(&struct { 29687 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 29688 }{testStreamInput})), bp) 29689 } 29690 } 29691 if rc != SQLITE_OK { 29692 return test_session_error(tls, interp, rc, uintptr(0)) 29693 } 29694 29695 for SQLITE_ROW == sqlite3.Xsqlite3changeset_next(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) { 29696 var pVar uintptr 29697 var pOld uintptr 29698 var pNew uintptr 29699 29700 var zPK uintptr 29701 29702 var i int32 29703 29704 if SQLITE_MISUSE != sqlite3.Xsqlite3changeset_fk_conflicts(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+40) { 29705 sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 29706 return TCL_ERROR 29707 } 29708 29709 sqlite3.Xsqlite3changeset_op(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+48, bp+56, bp+60, bp+64) 29710 pVar = tcl.XTcl_NewObj(tls) 29711 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, 29712 func() uintptr { 29713 if *(*int32)(unsafe.Pointer(bp + 60)) == SQLITE_INSERT { 29714 return ts + 10307 29715 } 29716 return func() uintptr { 29717 if *(*int32)(unsafe.Pointer(bp + 60)) == SQLITE_UPDATE { 29718 return ts + 10314 29719 } 29720 return ts + 10321 29721 }() 29722 }(), -1)) 29723 29724 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), -1)) 29725 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewBooleanObj(tls, *(*int32)(unsafe.Pointer(bp + 64)))) 29726 29727 zPK = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 56))+1)) 29728 libc.X__builtin___memset_chk(tls, zPK, 0, uint64(*(*int32)(unsafe.Pointer(bp + 56))+1), libc.X__builtin_object_size(tls, zPK, 0)) 29729 sqlite3.Xsqlite3changeset_pk(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), bp+72, bp+80) 29730 29731 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 29732 *(*int8)(unsafe.Pointer(zPK + uintptr(i))) = func() int8 { 29733 if *(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 72)) + uintptr(i))) != 0 { 29734 return int8('X') 29735 } 29736 return int8('.') 29737 }() 29738 } 29739 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, tcl.XTcl_NewStringObj(tls, zPK, -1)) 29740 tcl.XTcl_Free(tls, zPK) 29741 29742 pOld = tcl.XTcl_NewObj(tls) 29743 if *(*int32)(unsafe.Pointer(bp + 60)) != SQLITE_INSERT { 29744 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 29745 sqlite3.Xsqlite3changeset_old(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), i, bp+88) 29746 test_append_value(tls, pOld, *(*uintptr)(unsafe.Pointer(bp + 88))) 29747 } 29748 } 29749 pNew = tcl.XTcl_NewObj(tls) 29750 if *(*int32)(unsafe.Pointer(bp + 60)) != SQLITE_DELETE { 29751 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 56)); i++ { 29752 sqlite3.Xsqlite3changeset_new(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), i, bp+96) 29753 test_append_value(tls, pNew, *(*uintptr)(unsafe.Pointer(bp + 96))) 29754 } 29755 } 29756 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, pOld) 29757 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pVar, pNew) 29758 29759 tcl.XTcl_ObjSetVar2(tls, interp, pVarname, uintptr(0), pVar, 0) 29760 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 29761 if rc != TCL_OK && rc != TCL_CONTINUE { 29762 sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 29763 if rc == TCL_BREAK { 29764 return TCL_OK 29765 } 29766 return rc 29767 } 29768 } 29769 29770 if isCheckNext != 0 { 29771 var rc2 int32 = sqlite3.Xsqlite3changeset_next(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 29772 _ = rc2 29773 rc = sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 29774 29775 } else { 29776 rc = sqlite3.Xsqlite3changeset_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 29777 } 29778 if rc != SQLITE_OK { 29779 return test_session_error(tls, interp, rc, uintptr(0)) 29780 } 29781 29782 return TCL_OK 29783 } 29784 29785 func test_rebaser_cmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29786 bp := tls.Alloc(48) 29787 defer tls.Free(48) 29788 29789 var p uintptr = clientData 29790 29791 var rc int32 29792 29793 if objc < 2 { 29794 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 29795 return TCL_ERROR 29796 } 29797 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 29798 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub1)), int32(unsafe.Sizeof(RebaseSubcmd{})), ts+2014, 0, bp) 29799 if rc != TCL_OK { 29800 return rc 29801 } 29802 if objc != 2+aSub1[*(*int32)(unsafe.Pointer(bp))].FnArg { 29803 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, aSub1[*(*int32)(unsafe.Pointer(bp))].FzMsg) 29804 return TCL_ERROR 29805 } 29806 29807 switch *(*int32)(unsafe.Pointer(bp)) { 29808 case 0: 29809 { 29810 *(*int32)(unsafe.Pointer(bp + 4)) = 0 29811 var pRebase uintptr = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) 29812 rc = sqlite3.Xsqlite3rebaser_configure(tls, p, *(*int32)(unsafe.Pointer(bp + 4)), pRebase) 29813 break 29814 29815 } 29816 29817 case 1: 29818 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 29819 break 29820 29821 default: 29822 { 29823 libc.X__builtin___memset_chk(tls, bp+8, 0, uint64(unsafe.Sizeof(TestStreamInput{})), libc.X__builtin_object_size(tls, bp+8, 0)) 29824 libc.X__builtin___memset_chk(tls, bp+32, 0, uint64(unsafe.Sizeof(TestSessionsBlob{})), libc.X__builtin_object_size(tls, bp+32, 0)) 29825 (*TestStreamInput)(unsafe.Pointer(bp + 8)).FaData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8+16) 29826 (*TestStreamInput)(unsafe.Pointer(bp + 8)).FnStream = test_tcl_integer(tls, interp, ts+10098) 29827 29828 if (*TestStreamInput)(unsafe.Pointer(bp+8)).FnStream != 0 { 29829 rc = sqlite3.Xsqlite3rebaser_rebase_strm(tls, p, 29830 *(*uintptr)(unsafe.Pointer(&struct { 29831 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 29832 }{testStreamInput})), bp+8, 29833 *(*uintptr)(unsafe.Pointer(&struct { 29834 f func(*libc.TLS, uintptr, uintptr, int32) int32 29835 }{testStreamOutput})), bp+32) 29836 } else { 29837 rc = sqlite3.Xsqlite3rebaser_rebase(tls, p, (*TestStreamInput)(unsafe.Pointer(bp+8)).FnData, (*TestStreamInput)(unsafe.Pointer(bp+8)).FaData, bp+32+8, bp+32) 29838 } 29839 29840 if rc == SQLITE_OK { 29841 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fp, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fn)) 29842 } 29843 sqlite3.Xsqlite3_free(tls, (*TestSessionsBlob)(unsafe.Pointer(bp+32)).Fp) 29844 break 29845 29846 } 29847 } 29848 29849 if rc != SQLITE_OK { 29850 return test_session_error(tls, interp, rc, uintptr(0)) 29851 } 29852 return TCL_OK 29853 } 29854 29855 type RebaseSubcmd = struct { 29856 FzSub uintptr 29857 FnArg int32 29858 F__ccgo_pad1 [4]byte 29859 FzMsg uintptr 29860 FiSub int32 29861 F__ccgo_pad2 [4]byte 29862 } 29863 29864 var aSub1 = [4]RebaseSubcmd{ 29865 {FzSub: ts + 10587, FnArg: 1, FzMsg: ts + 10597}, 29866 {FzSub: ts + 10138, FzMsg: ts + 584}, 29867 {FzSub: ts + 10609, FnArg: 1, FzMsg: ts + 10517}, 29868 {}, 29869 } 29870 29871 func test_rebaser_del(tls *libc.TLS, clientData uintptr) { 29872 var p uintptr = clientData 29873 sqlite3.Xsqlite3rebaser_delete(tls, p) 29874 } 29875 29876 func test_sqlite3rebaser_create(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29877 bp := tls.Alloc(8) 29878 defer tls.Free(8) 29879 29880 var rc int32 29881 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 29882 if objc != 2 { 29883 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 29884 return SQLITE_ERROR 29885 } 29886 29887 rc = sqlite3.Xsqlite3rebaser_create(tls, bp) 29888 if rc != SQLITE_OK { 29889 return test_session_error(tls, interp, rc, uintptr(0)) 29890 } 29891 29892 tcl.XTcl_CreateObjCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 29893 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 29894 }{test_rebaser_cmd})), 29895 *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_rebaser_del}))) 29896 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 29897 return TCL_OK 29898 } 29899 29900 func test_sqlite3session_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 29901 bp := tls.Alloc(8) 29902 defer tls.Free(8) 29903 29904 var rc int32 29905 29906 if objc != 3 { 29907 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10616) 29908 return SQLITE_ERROR 29909 } 29910 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 29911 *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&aSub2)), int32(unsafe.Sizeof(ConfigOpt{})), ts+2014, 0, bp) 29912 if rc != TCL_OK { 29913 return rc 29914 } 29915 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 29916 return TCL_ERROR 29917 } 29918 29919 rc = sqlite3.Xsqlite3session_config(tls, aSub2[*(*int32)(unsafe.Pointer(bp))].Fop, bp+4) 29920 if rc != SQLITE_OK { 29921 return test_session_error(tls, interp, rc, uintptr(0)) 29922 } 29923 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4)))) 29924 return TCL_OK 29925 } 29926 29927 type ConfigOpt = struct { 29928 FzSub uintptr 29929 Fop int32 29930 F__ccgo_pad1 [4]byte 29931 } 29932 29933 var aSub2 = [3]ConfigOpt{ 29934 {FzSub: ts + 10625, Fop: SQLITE_SESSION_CONFIG_STRMSIZE}, 29935 {FzSub: ts + 2758}, 29936 {}, 29937 } 29938 29939 func TestSession_Init(tls *libc.TLS, interp uintptr) int32 { 29940 bp := tls.Alloc(160) 29941 defer tls.Free(160) 29942 29943 *(*[10]struct { 29944 FzCmd uintptr 29945 FxProc uintptr 29946 })(unsafe.Pointer(bp)) = [10]struct { 29947 FzCmd uintptr 29948 FxProc uintptr 29949 }{ 29950 {FzCmd: ts + 10635, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 29951 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 29952 }{test_sqlite3session}))}, 29953 {FzCmd: ts + 10650, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 29954 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 29955 }{test_sqlite3session_foreach}))}, 29956 {FzCmd: ts + 10673, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 29957 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 29958 }{test_sqlite3changeset_invert}))}, 29959 {FzCmd: ts + 10697, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 29960 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 29961 }{test_sqlite3changeset_concat}))}, 29962 {FzCmd: ts + 10721, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 29963 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 29964 }{test_sqlite3changeset_apply}))}, 29965 {FzCmd: ts + 10744, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 29966 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 29967 }{test_sqlite3changeset_apply_v2}))}, 29968 {FzCmd: ts + 10770, 29969 FxProc: *(*uintptr)(unsafe.Pointer(&struct { 29970 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 29971 }{test_sqlite3changeset_apply_replace_all}))}, 29972 {FzCmd: ts + 10805, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 29973 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 29974 }{test_sql_exec_changeset}))}, 29975 {FzCmd: ts + 10824, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 29976 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 29977 }{test_sqlite3rebaser_create}))}, 29978 {FzCmd: ts + 10846, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 29979 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 29980 }{test_sqlite3session_config}))}, 29981 } 29982 var i int32 29983 29984 for i = 0; uint64(i) < uint64(unsafe.Sizeof([10]struct { 29985 FzCmd uintptr 29986 FxProc uintptr 29987 }{}))/uint64(unsafe.Sizeof(struct { 29988 FzCmd uintptr 29989 FxProc uintptr 29990 }{})); i++ { 29991 var p uintptr = bp + uintptr(i)*16 29992 tcl.XTcl_CreateObjCommand(tls, interp, (*struct { 29993 FzCmd uintptr 29994 FxProc uintptr 29995 })(unsafe.Pointer(p)).FzCmd, (*struct { 29996 FzCmd uintptr 29997 FxProc uintptr 29998 })(unsafe.Pointer(p)).FxProc, uintptr(0), uintptr(0)) 29999 } 30000 30001 return TCL_OK 30002 } 30003 30004 func __sigbits(tls *libc.TLS, __signo int32) int32 { 30005 if __signo > 32 { 30006 return 0 30007 } 30008 return int32(1) << (__signo - 1) 30009 } 30010 30011 type SqliteDb = struct { 30012 Fdb uintptr 30013 Finterp uintptr 30014 FzBusy uintptr 30015 FzCommit uintptr 30016 FzTrace uintptr 30017 FzTraceV2 uintptr 30018 FzProfile uintptr 30019 FzProgress uintptr 30020 FzBindFallback uintptr 30021 FzAuth uintptr 30022 FdisableAuth int32 30023 F__ccgo_pad1 [4]byte 30024 FzNull uintptr 30025 FpFunc uintptr 30026 FpUpdateHook uintptr 30027 FpPreUpdateHook uintptr 30028 FpRollbackHook uintptr 30029 FpWalHook uintptr 30030 FpUnlockNotify uintptr 30031 FpCollate uintptr 30032 Frc int32 30033 F__ccgo_pad2 [4]byte 30034 FpCollateNeeded uintptr 30035 FstmtList uintptr 30036 FstmtLast uintptr 30037 FmaxStmt int32 30038 FnStmt int32 30039 FpIncrblob uintptr 30040 FnStep int32 30041 FnSort int32 30042 FnIndex int32 30043 FnVMStep int32 30044 FnTransaction int32 30045 FopenFlags int32 30046 FnRef int32 30047 FbLegacyPrepare int32 30048 } 30049 30050 type SqlFunc1 = struct { 30051 Finterp uintptr 30052 FpScript uintptr 30053 FpDb uintptr 30054 FuseEvalObjv int32 30055 FeType int32 30056 FzName uintptr 30057 FpNext uintptr 30058 } 30059 30060 type SqlFunc = SqlFunc1 30061 30062 type SqlCollate1 = struct { 30063 Finterp uintptr 30064 FzScript uintptr 30065 FpNext uintptr 30066 } 30067 30068 type SqlCollate = SqlCollate1 30069 30070 type SqlPreparedStmt1 = struct { 30071 FpNext uintptr 30072 FpPrev uintptr 30073 FpStmt uintptr 30074 FnSql int32 30075 F__ccgo_pad1 [4]byte 30076 FzSql uintptr 30077 FnParm int32 30078 F__ccgo_pad2 [4]byte 30079 FapParm uintptr 30080 } 30081 30082 type SqlPreparedStmt = SqlPreparedStmt1 30083 30084 type IncrblobChannel1 = struct { 30085 FpBlob uintptr 30086 FpDb uintptr 30087 FiSeek int32 30088 F__ccgo_pad1 [4]byte 30089 Fchannel Tcl_Channel 30090 FpNext uintptr 30091 FpPrev uintptr 30092 } 30093 30094 type IncrblobChannel = IncrblobChannel1 30095 30096 func strlen30(tls *libc.TLS, z uintptr) int32 { 30097 var z2 uintptr = z 30098 for *(*int8)(unsafe.Pointer(z2)) != 0 { 30099 z2++ 30100 } 30101 return 0x3fffffff & int32((int64(z2)-int64(z))/1) 30102 } 30103 30104 func closeIncrblobChannels(tls *libc.TLS, pDb uintptr) { 30105 var p uintptr 30106 var pNext uintptr 30107 30108 for p = (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob; p != 0; p = pNext { 30109 pNext = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 30110 30111 tcl.XTcl_UnregisterChannel(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel) 30112 } 30113 } 30114 30115 func incrblobClose(tls *libc.TLS, instanceData ClientData, interp uintptr) int32 { 30116 var p uintptr = instanceData 30117 var rc int32 = sqlite3.Xsqlite3_blob_close(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 30118 var db uintptr = (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).Fdb 30119 30120 if (*IncrblobChannel)(unsafe.Pointer(p)).FpNext != 0 { 30121 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpNext)).FpPrev = (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev 30122 } 30123 if (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev != 0 { 30124 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpPrev)).FpNext = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 30125 } 30126 if (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).FpIncrblob == p { 30127 (*SqliteDb)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpDb)).FpIncrblob = (*IncrblobChannel)(unsafe.Pointer(p)).FpNext 30128 } 30129 30130 tcl.XTcl_Free(tls, p) 30131 30132 if rc != SQLITE_OK { 30133 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(1)) 30134 return TCL_ERROR 30135 } 30136 return TCL_OK 30137 } 30138 30139 func incrblobInput(tls *libc.TLS, instanceData ClientData, buf uintptr, bufSize int32, errorCodePtr uintptr) int32 { 30140 var p uintptr = instanceData 30141 var nRead int32 = bufSize 30142 var nBlob int32 30143 var rc int32 30144 30145 nBlob = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 30146 if (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek+nRead > nBlob { 30147 nRead = nBlob - (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek 30148 } 30149 if nRead <= 0 { 30150 return 0 30151 } 30152 30153 rc = sqlite3.Xsqlite3_blob_read(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob, buf, nRead, (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek) 30154 if rc != SQLITE_OK { 30155 *(*int32)(unsafe.Pointer(errorCodePtr)) = rc 30156 return -1 30157 } 30158 30159 *(*int32)(unsafe.Pointer(p + 16)) += nRead 30160 return nRead 30161 } 30162 30163 func incrblobOutput(tls *libc.TLS, instanceData ClientData, buf uintptr, toWrite int32, errorCodePtr uintptr) int32 { 30164 var p uintptr = instanceData 30165 var nWrite int32 = toWrite 30166 var nBlob int32 30167 var rc int32 30168 30169 nBlob = sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob) 30170 if (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek+nWrite > nBlob { 30171 *(*int32)(unsafe.Pointer(errorCodePtr)) = EINVAL 30172 return -1 30173 } 30174 if nWrite <= 0 { 30175 return 0 30176 } 30177 30178 rc = sqlite3.Xsqlite3_blob_write(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob, buf, nWrite, (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek) 30179 if rc != SQLITE_OK { 30180 *(*int32)(unsafe.Pointer(errorCodePtr)) = EIO 30181 return -1 30182 } 30183 30184 *(*int32)(unsafe.Pointer(p + 16)) += nWrite 30185 return nWrite 30186 } 30187 30188 func incrblobSeek(tls *libc.TLS, instanceData ClientData, offset int64, seekMode int32, errorCodePtr uintptr) int32 { 30189 var p uintptr = instanceData 30190 30191 switch seekMode { 30192 case SEEK_SET: 30193 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = int32(offset) 30194 break 30195 case SEEK_CUR: 30196 *(*int32)(unsafe.Pointer(p + 16)) += int32(offset) 30197 break 30198 case SEEK_END: 30199 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = int32(int64(sqlite3.Xsqlite3_blob_bytes(tls, (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob)) + offset) 30200 break 30201 30202 default: 30203 } 30204 30205 return (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek 30206 } 30207 30208 func incrblobWatch(tls *libc.TLS, instanceData ClientData, mode int32) { 30209 } 30210 30211 func incrblobHandle(tls *libc.TLS, instanceData ClientData, dir int32, hPtr uintptr) int32 { 30212 return TCL_ERROR 30213 } 30214 30215 var IncrblobChannelType = Tcl_ChannelType{ 30216 FtypeName: ts + 10868, 30217 Fversion: uintptr(0x2), 30218 FcloseProc: 0, 30219 FinputProc: 0, 30220 FoutputProc: 0, 30221 FseekProc: 0, 30222 FwatchProc: 0, 30223 FgetHandleProc: 0, 30224 } 30225 30226 func createIncrblobChannel(tls *libc.TLS, interp uintptr, pDb uintptr, zDb uintptr, zTable uintptr, zColumn uintptr, iRow sqlite_int64, isReadonly int32) int32 { 30227 bp := tls.Alloc(80) 30228 defer tls.Free(80) 30229 30230 var p uintptr 30231 var db uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Fdb 30232 30233 var rc int32 30234 var flags int32 = int32(1)<<1 | func() int32 { 30235 if isReadonly != 0 { 30236 return 0 30237 } 30238 return int32(1) << 2 30239 }() 30240 30241 rc = sqlite3.Xsqlite3_blob_open(tls, db, zDb, zTable, zColumn, iRow, libc.BoolInt32(!(isReadonly != 0)), bp+8) 30242 if rc != SQLITE_OK { 30243 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 30244 return TCL_ERROR 30245 } 30246 30247 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(IncrblobChannel{}))) 30248 (*IncrblobChannel)(unsafe.Pointer(p)).FiSeek = 0 30249 (*IncrblobChannel)(unsafe.Pointer(p)).FpBlob = *(*uintptr)(unsafe.Pointer(bp + 8)) 30250 30251 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+16, ts+10877, libc.VaList(bp, libc.PreIncInt32(&count, 1))) 30252 (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel = tcl.XTcl_CreateChannel(tls, uintptr(unsafe.Pointer(&IncrblobChannelType)), bp+16, p, flags) 30253 tcl.XTcl_RegisterChannel(tls, interp, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel) 30254 30255 (*IncrblobChannel)(unsafe.Pointer(p)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob 30256 (*IncrblobChannel)(unsafe.Pointer(p)).FpPrev = uintptr(0) 30257 if (*IncrblobChannel)(unsafe.Pointer(p)).FpNext != 0 { 30258 (*IncrblobChannel)(unsafe.Pointer((*IncrblobChannel)(unsafe.Pointer(p)).FpNext)).FpPrev = p 30259 } 30260 (*SqliteDb)(unsafe.Pointer(pDb)).FpIncrblob = p 30261 (*IncrblobChannel)(unsafe.Pointer(p)).FpDb = pDb 30262 30263 tcl.XTcl_SetResult(tls, interp, tcl.XTcl_GetChannelName(tls, (*IncrblobChannel)(unsafe.Pointer(p)).Fchannel), uintptr(1)) 30264 return TCL_OK 30265 } 30266 30267 var count int32 = 0 30268 30269 func safeToUseEvalObjv(tls *libc.TLS, interp uintptr, pCmd uintptr) int32 { 30270 bp := tls.Alloc(4) 30271 defer tls.Free(4) 30272 30273 var z uintptr 30274 30275 z = tcl.XTcl_GetStringFromObj(tls, pCmd, bp) 30276 for libc.PostDecInt32(&*(*int32)(unsafe.Pointer(bp)), 1) > 0 { 30277 var c int32 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 30278 if c == '$' || c == '[' || c == ';' { 30279 return 0 30280 } 30281 } 30282 return 1 30283 } 30284 30285 func findSqlFunc(tls *libc.TLS, pDb uintptr, zName uintptr) uintptr { 30286 var p uintptr 30287 var pNew uintptr 30288 var nName int32 = strlen30(tls, zName) 30289 pNew = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlFunc{}))+uint64(nName)+uint64(1))) 30290 (*SqlFunc)(unsafe.Pointer(pNew)).FzName = pNew + 1*48 30291 libc.X__builtin___memcpy_chk(tls, (*SqlFunc)(unsafe.Pointer(pNew)).FzName, zName, uint64(nName+1), libc.X__builtin_object_size(tls, (*SqlFunc)(unsafe.Pointer(pNew)).FzName, 0)) 30292 for p = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc; p != 0; p = (*SqlFunc)(unsafe.Pointer(p)).FpNext { 30293 if sqlite3.Xsqlite3_stricmp(tls, (*SqlFunc)(unsafe.Pointer(p)).FzName, (*SqlFunc)(unsafe.Pointer(pNew)).FzName) == 0 { 30294 tcl.XTcl_Free(tls, pNew) 30295 return p 30296 } 30297 } 30298 (*SqlFunc)(unsafe.Pointer(pNew)).Finterp = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 30299 (*SqlFunc)(unsafe.Pointer(pNew)).FpDb = pDb 30300 (*SqlFunc)(unsafe.Pointer(pNew)).FpScript = uintptr(0) 30301 (*SqlFunc)(unsafe.Pointer(pNew)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc 30302 (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc = pNew 30303 return pNew 30304 } 30305 30306 func dbFreeStmt(tls *libc.TLS, pStmt uintptr) { 30307 if sqlite3.Xsqlite3_sql(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FpStmt) == uintptr(0) { 30308 tcl.XTcl_Free(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FzSql) 30309 } 30310 sqlite3.Xsqlite3_finalize(tls, (*SqlPreparedStmt)(unsafe.Pointer(pStmt)).FpStmt) 30311 tcl.XTcl_Free(tls, pStmt) 30312 } 30313 30314 func flushStmtCache(tls *libc.TLS, pDb uintptr) { 30315 var pPreStmt uintptr 30316 var pNext uintptr 30317 30318 for pPreStmt = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList; pPreStmt != 0; pPreStmt = pNext { 30319 pNext = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 30320 dbFreeStmt(tls, pPreStmt) 30321 } 30322 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt = 0 30323 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = uintptr(0) 30324 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = uintptr(0) 30325 } 30326 30327 func addDatabaseRef(tls *libc.TLS, pDb uintptr) { 30328 (*SqliteDb)(unsafe.Pointer(pDb)).FnRef++ 30329 } 30330 30331 func delDatabaseRef(tls *libc.TLS, pDb uintptr) { 30332 (*SqliteDb)(unsafe.Pointer(pDb)).FnRef-- 30333 if (*SqliteDb)(unsafe.Pointer(pDb)).FnRef == 0 { 30334 flushStmtCache(tls, pDb) 30335 closeIncrblobChannels(tls, pDb) 30336 sqlite3.Xsqlite3_close(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 30337 for (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc != 0 { 30338 var pFunc uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc 30339 (*SqliteDb)(unsafe.Pointer(pDb)).FpFunc = (*SqlFunc)(unsafe.Pointer(pFunc)).FpNext 30340 30341 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 30342 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*SqlFunc)(unsafe.Pointer(pFunc)).FpScript)).FrefCount, 1) <= 0 { 30343 tcl.XTclFreeObj(tls, (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript) 30344 } 30345 } 30346 tcl.XTcl_Free(tls, pFunc) 30347 } 30348 for (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate != 0 { 30349 var pCollate uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate 30350 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate = (*SqlCollate)(unsafe.Pointer(pCollate)).FpNext 30351 tcl.XTcl_Free(tls, pCollate) 30352 } 30353 if (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0 { 30354 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy) 30355 } 30356 if (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0 { 30357 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace) 30358 } 30359 if (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0 { 30360 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2) 30361 } 30362 if (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0 { 30363 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile) 30364 } 30365 if (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0 { 30366 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback) 30367 } 30368 if (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0 { 30369 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth) 30370 } 30371 if (*SqliteDb)(unsafe.Pointer(pDb)).FzNull != 0 { 30372 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull) 30373 } 30374 if (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook != 0 { 30375 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 30376 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook)).FrefCount, 1) <= 0 { 30377 tcl.XTclFreeObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook) 30378 } 30379 } 30380 } 30381 if (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook != 0 { 30382 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 30383 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook)).FrefCount, 1) <= 0 { 30384 tcl.XTclFreeObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook) 30385 } 30386 } 30387 } 30388 if (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook != 0 { 30389 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 30390 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook)).FrefCount, 1) <= 0 { 30391 tcl.XTclFreeObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook) 30392 } 30393 } 30394 } 30395 if (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook != 0 { 30396 for __ccgo4 := true; __ccgo4; __ccgo4 = 0 != 0 { 30397 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook)).FrefCount, 1) <= 0 { 30398 tcl.XTclFreeObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook) 30399 } 30400 } 30401 } 30402 if (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded != 0 { 30403 for __ccgo5 := true; __ccgo5; __ccgo5 = 0 != 0 { 30404 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded)).FrefCount, 1) <= 0 { 30405 tcl.XTclFreeObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded) 30406 } 30407 } 30408 } 30409 tcl.XTcl_Free(tls, pDb) 30410 } 30411 } 30412 30413 func DbDeleteCmd(tls *libc.TLS, db uintptr) { 30414 var pDb uintptr = db 30415 delDatabaseRef(tls, pDb) 30416 } 30417 30418 func DbBusyHandler(tls *libc.TLS, cd uintptr, nTries int32) int32 { 30419 bp := tls.Alloc(70) 30420 defer tls.Free(70) 30421 30422 var pDb uintptr = cd 30423 var rc int32 30424 30425 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+40, ts+1333, libc.VaList(bp, nTries)) 30426 rc = tcl.XTcl_VarEval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, libc.VaList(bp+8, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, ts+4894, bp+40, uintptr(0))) 30427 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 30428 return 0 30429 } 30430 return 1 30431 } 30432 30433 func DbProgressHandler(tls *libc.TLS, cd uintptr) int32 { 30434 var pDb uintptr = cd 30435 var rc int32 30436 30437 rc = tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress) 30438 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 30439 return 1 30440 } 30441 return 0 30442 } 30443 30444 func DbTraceHandler(tls *libc.TLS, cd uintptr, zSql uintptr) { 30445 bp := tls.Alloc(216) 30446 defer tls.Free(216) 30447 30448 var pDb uintptr = cd 30449 30450 tcl.XTcl_DStringInit(tls, bp) 30451 tcl.XTcl_DStringAppend(tls, bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, -1) 30452 tcl.XTcl_DStringAppendElement(tls, bp, zSql) 30453 tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 30454 tcl.XTcl_DStringFree(tls, bp) 30455 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 30456 } 30457 30458 func DbTraceV2Handler(tls *libc.TLS, type1 uint32, cd uintptr, pd uintptr, xd uintptr) int32 { 30459 var pDb uintptr = cd 30460 var pCmd uintptr 30461 30462 switch type1 { 30463 case uint32(SQLITE_TRACE_STMT): 30464 { 30465 var pStmt uintptr = pd 30466 var zSql uintptr = xd 30467 30468 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 30469 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 30470 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 30471 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 30472 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 30473 tcl.XTcl_NewStringObj(tls, zSql, -1)) 30474 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 30475 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 30476 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount, 1) <= 0 { 30477 tcl.XTclFreeObj(tls, pCmd) 30478 } 30479 } 30480 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 30481 break 30482 30483 } 30484 case uint32(SQLITE_TRACE_PROFILE): 30485 { 30486 var pStmt uintptr = pd 30487 var ns sqlite3_int64 = *(*sqlite3_int64)(unsafe.Pointer(xd)) 30488 30489 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 30490 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 30491 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 30492 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 30493 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 30494 tcl.XTcl_NewWideIntObj(tls, ns)) 30495 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 30496 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 30497 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount, 1) <= 0 { 30498 tcl.XTclFreeObj(tls, pCmd) 30499 } 30500 } 30501 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 30502 break 30503 30504 } 30505 case uint32(SQLITE_TRACE_ROW): 30506 { 30507 var pStmt uintptr = pd 30508 30509 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 30510 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 30511 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 30512 tcl.XTcl_NewWideIntObj(tls, int64(pStmt))) 30513 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 30514 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 30515 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount, 1) <= 0 { 30516 tcl.XTclFreeObj(tls, pCmd) 30517 } 30518 } 30519 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 30520 break 30521 30522 } 30523 case uint32(SQLITE_TRACE_CLOSE): 30524 { 30525 var db uintptr = pd 30526 30527 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, -1) 30528 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 30529 tcl.XTcl_ListObjAppendElement(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, 30530 tcl.XTcl_NewWideIntObj(tls, int64(db))) 30531 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 30532 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 30533 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount, 1) <= 0 { 30534 tcl.XTclFreeObj(tls, pCmd) 30535 } 30536 } 30537 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 30538 break 30539 30540 } 30541 } 30542 return SQLITE_OK 30543 } 30544 30545 func DbProfileHandler(tls *libc.TLS, cd uintptr, zSql uintptr, tm1 sqlite_uint64) { 30546 bp := tls.Alloc(328) 30547 defer tls.Free(328) 30548 30549 var pDb uintptr = cd 30550 30551 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([100]int8{}))-uint64(1)), bp+8, ts+6325, libc.VaList(bp, tm1)) 30552 tcl.XTcl_DStringInit(tls, bp+112) 30553 tcl.XTcl_DStringAppend(tls, bp+112, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, -1) 30554 tcl.XTcl_DStringAppendElement(tls, bp+112, zSql) 30555 tcl.XTcl_DStringAppendElement(tls, bp+112, bp+8) 30556 tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp+112)).Fstring) 30557 tcl.XTcl_DStringFree(tls, bp+112) 30558 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 30559 } 30560 30561 func DbCommitHandler(tls *libc.TLS, cd uintptr) int32 { 30562 var pDb uintptr = cd 30563 var rc int32 30564 30565 rc = tcl.XTcl_Eval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit) 30566 if rc != TCL_OK || libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp)) != 0 { 30567 return 1 30568 } 30569 return 0 30570 } 30571 30572 func DbRollbackHandler(tls *libc.TLS, clientData uintptr) { 30573 var pDb uintptr = clientData 30574 30575 if TCL_OK != tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook, 0) { 30576 tcl.XTcl_BackgroundError(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 30577 } 30578 } 30579 30580 func DbWalHandler(tls *libc.TLS, clientData uintptr, db uintptr, zDb uintptr, nEntry int32) int32 { 30581 bp := tls.Alloc(4) 30582 defer tls.Free(4) 30583 30584 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 30585 var p uintptr 30586 var pDb uintptr = clientData 30587 var interp uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 30588 30589 p = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook) 30590 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 30591 tcl.XTcl_ListObjAppendElement(tls, interp, p, tcl.XTcl_NewStringObj(tls, zDb, -1)) 30592 tcl.XTcl_ListObjAppendElement(tls, interp, p, tcl.XTcl_NewIntObj(tls, nEntry)) 30593 if TCL_OK != tcl.XTcl_EvalObjEx(tls, interp, p, 0) || 30594 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, tcl.XTcl_GetObjResult(tls, interp), bp) { 30595 tcl.XTcl_BackgroundError(tls, interp) 30596 } 30597 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 30598 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(p)).FrefCount, 1) <= 0 { 30599 tcl.XTclFreeObj(tls, p) 30600 } 30601 } 30602 30603 return *(*int32)(unsafe.Pointer(bp)) 30604 } 30605 30606 func setTestUnlockNotifyVars(tls *libc.TLS, interp uintptr, iArg int32, nArg int32) { 30607 bp := tls.Alloc(80) 30608 defer tls.Free(80) 30609 30610 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+16, ts+1333, libc.VaList(bp, iArg)) 30611 tcl.XTcl_SetVar(tls, interp, ts+10889, bp+16, TCL_GLOBAL_ONLY) 30612 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([64]int8{})), bp+16, ts+1333, libc.VaList(bp+8, nArg)) 30613 tcl.XTcl_SetVar(tls, interp, ts+10914, bp+16, TCL_GLOBAL_ONLY) 30614 } 30615 30616 func DbUnlockNotify(tls *libc.TLS, apArg uintptr, nArg int32) { 30617 var i int32 30618 for i = 0; i < nArg; i++ { 30619 var flags int32 = TCL_EVAL_GLOBAL | TCL_EVAL_DIRECT 30620 var pDb uintptr = *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)) 30621 setTestUnlockNotifyVars(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, i, nArg) 30622 30623 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify, flags) 30624 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 30625 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify)).FrefCount, 1) <= 0 { 30626 tcl.XTclFreeObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify) 30627 } 30628 } 30629 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = uintptr(0) 30630 } 30631 } 30632 30633 func DbPreUpdateHandler(tls *libc.TLS, p uintptr, db uintptr, op int32, zDb uintptr, zTbl uintptr, iKey1 sqlite_int64, iKey2 sqlite_int64) { 30634 var pDb uintptr = p 30635 var pCmd uintptr 30636 30637 pCmd = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook) 30638 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 30639 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, azStr[(op-1)/9], -1)) 30640 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zDb, -1)) 30641 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 30642 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, iKey1)) 30643 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, iKey2)) 30644 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 30645 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 30646 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount, 1) <= 0 { 30647 tcl.XTclFreeObj(tls, pCmd) 30648 } 30649 } 30650 } 30651 30652 var azStr = [3]uintptr{ts + 10321, ts + 10307, ts + 10314} 30653 30654 func DbUpdateHandler(tls *libc.TLS, p uintptr, op int32, zDb uintptr, zTbl uintptr, rowid sqlite_int64) { 30655 var pDb uintptr = p 30656 var pCmd uintptr 30657 30658 pCmd = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook) 30659 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 30660 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, azStr1[(op-1)/9], -1)) 30661 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zDb, -1)) 30662 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewStringObj(tls, zTbl, -1)) 30663 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pCmd, tcl.XTcl_NewWideIntObj(tls, rowid)) 30664 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pCmd, TCL_EVAL_DIRECT) 30665 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 30666 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount, 1) <= 0 { 30667 tcl.XTclFreeObj(tls, pCmd) 30668 } 30669 } 30670 } 30671 30672 var azStr1 = [3]uintptr{ts + 10321, ts + 10307, ts + 10314} 30673 30674 func tclCollateNeeded(tls *libc.TLS, pCtx uintptr, db uintptr, enc int32, zName uintptr) { 30675 var pDb uintptr = pCtx 30676 var pScript uintptr = tcl.XTcl_DuplicateObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded) 30677 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 30678 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zName, -1)) 30679 tcl.XTcl_EvalObjEx(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, pScript, 0) 30680 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 30681 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount, 1) <= 0 { 30682 tcl.XTclFreeObj(tls, pScript) 30683 } 30684 } 30685 } 30686 30687 func tclSqlCollate(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 30688 var p uintptr = pCtx 30689 var pCmd uintptr 30690 30691 pCmd = tcl.XTcl_NewStringObj(tls, (*SqlCollate)(unsafe.Pointer(p)).FzScript, -1) 30692 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 30693 tcl.XTcl_ListObjAppendElement(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, tcl.XTcl_NewStringObj(tls, zA, nA)) 30694 tcl.XTcl_ListObjAppendElement(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, tcl.XTcl_NewStringObj(tls, zB, nB)) 30695 tcl.XTcl_EvalObjEx(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp, pCmd, TCL_EVAL_DIRECT) 30696 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 30697 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount, 1) <= 0 { 30698 tcl.XTclFreeObj(tls, pCmd) 30699 } 30700 } 30701 return libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, (*SqlCollate)(unsafe.Pointer(p)).Finterp)) 30702 } 30703 30704 func tclSqlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 30705 bp := tls.Alloc(40) 30706 defer tls.Free(40) 30707 30708 var p uintptr = sqlite3.Xsqlite3_user_data(tls, context) 30709 var pCmd uintptr 30710 var i int32 30711 var rc int32 30712 30713 if argc == 0 { 30714 pCmd = (*SqlFunc)(unsafe.Pointer(p)).FpScript 30715 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 30716 rc = tcl.XTcl_EvalObjEx(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, 0) 30717 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 30718 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount, 1) <= 0 { 30719 tcl.XTclFreeObj(tls, pCmd) 30720 } 30721 } 30722 } else { 30723 if tcl.XTcl_ListObjGetElements(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, (*SqlFunc)(unsafe.Pointer(p)).FpScript, bp, bp+8) != 0 { 30724 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 30725 return 30726 } 30727 pCmd = tcl.XTcl_NewListObj(tls, *(*int32)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(bp + 8))) 30728 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 30729 for i = 0; i < argc; i++ { 30730 var pIn uintptr = *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 30731 var pVal uintptr 30732 30733 switch sqlite3.Xsqlite3_value_type(tls, pIn) { 30734 case SQLITE_BLOB: 30735 { 30736 var bytes int32 = sqlite3.Xsqlite3_value_bytes(tls, pIn) 30737 pVal = tcl.XTcl_NewByteArrayObj(tls, sqlite3.Xsqlite3_value_blob(tls, pIn), bytes) 30738 break 30739 30740 } 30741 fallthrough 30742 case SQLITE_INTEGER: 30743 { 30744 var v sqlite_int64 = sqlite3.Xsqlite3_value_int64(tls, pIn) 30745 if v >= int64(-2147483647) && v <= int64(2147483647) { 30746 pVal = tcl.XTcl_NewIntObj(tls, int32(v)) 30747 } else { 30748 pVal = tcl.XTcl_NewWideIntObj(tls, v) 30749 } 30750 break 30751 30752 } 30753 fallthrough 30754 case SQLITE_FLOAT: 30755 { 30756 var r float64 = sqlite3.Xsqlite3_value_double(tls, pIn) 30757 pVal = tcl.XTcl_NewDoubleObj(tls, r) 30758 break 30759 30760 } 30761 fallthrough 30762 case SQLITE_NULL: 30763 { 30764 pVal = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer((*SqlFunc)(unsafe.Pointer(p)).FpDb)).FzNull, -1) 30765 break 30766 30767 } 30768 fallthrough 30769 default: 30770 { 30771 var bytes int32 = sqlite3.Xsqlite3_value_bytes(tls, pIn) 30772 pVal = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pIn), bytes) 30773 break 30774 30775 } 30776 } 30777 rc = tcl.XTcl_ListObjAppendElement(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, pVal) 30778 if rc != 0 { 30779 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 30780 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount, 1) <= 0 { 30781 tcl.XTclFreeObj(tls, pCmd) 30782 } 30783 } 30784 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 30785 return 30786 } 30787 } 30788 if !((*SqlFunc)(unsafe.Pointer(p)).FuseEvalObjv != 0) { 30789 tcl.XTcl_GetString(tls, pCmd) 30790 } 30791 rc = tcl.XTcl_EvalObjEx(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp, pCmd, TCL_EVAL_DIRECT) 30792 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 30793 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount, 1) <= 0 { 30794 tcl.XTclFreeObj(tls, pCmd) 30795 } 30796 } 30797 } 30798 30799 if rc != 0 && rc != TCL_RETURN { 30800 sqlite3.Xsqlite3_result_error(tls, context, tcl.XTcl_GetStringResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp), -1) 30801 } else { 30802 var pVar uintptr = tcl.XTcl_GetObjResult(tls, (*SqlFunc)(unsafe.Pointer(p)).Finterp) 30803 30804 var data uintptr 30805 var zType uintptr = func() uintptr { 30806 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 30807 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 30808 } 30809 return ts + 584 30810 }() 30811 var c int8 = *(*int8)(unsafe.Pointer(zType)) 30812 var eType int32 = (*SqlFunc)(unsafe.Pointer(p)).FeType 30813 30814 if eType == SQLITE_NULL { 30815 if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 30816 eType = SQLITE_BLOB 30817 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 || 30818 int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || 30819 int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 30820 eType = SQLITE_INTEGER 30821 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 30822 eType = SQLITE_FLOAT 30823 } else { 30824 eType = SQLITE_TEXT 30825 } 30826 } 30827 30828 switch eType { 30829 case SQLITE_BLOB: 30830 { 30831 data = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+16) 30832 sqlite3.Xsqlite3_result_blob(tls, context, data, *(*int32)(unsafe.Pointer(bp + 16)), libc.UintptrFromInt32(-1)) 30833 break 30834 30835 } 30836 fallthrough 30837 case SQLITE_INTEGER: 30838 { 30839 if TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), pVar, bp+24) { 30840 sqlite3.Xsqlite3_result_int64(tls, context, *(*Tcl_WideInt)(unsafe.Pointer(bp + 24))) 30841 break 30842 } 30843 30844 } 30845 fallthrough 30846 case SQLITE_FLOAT: 30847 { 30848 if TCL_OK == tcl.XTcl_GetDoubleFromObj(tls, uintptr(0), pVar, bp+32) { 30849 sqlite3.Xsqlite3_result_double(tls, context, *(*float64)(unsafe.Pointer(bp + 32))) 30850 break 30851 } 30852 30853 } 30854 fallthrough 30855 default: 30856 { 30857 data = tcl.XTcl_GetStringFromObj(tls, pVar, bp+16) 30858 sqlite3.Xsqlite3_result_text(tls, context, data, *(*int32)(unsafe.Pointer(bp + 16)), libc.UintptrFromInt32(-1)) 30859 break 30860 30861 } 30862 } 30863 30864 } 30865 } 30866 30867 func auth_callback(tls *libc.TLS, pArg uintptr, code int32, zArg1 uintptr, zArg2 uintptr, zArg3 uintptr, zArg4 uintptr) int32 { 30868 bp := tls.Alloc(216) 30869 defer tls.Free(216) 30870 30871 var zCode uintptr 30872 30873 var rc int32 30874 var zReply uintptr 30875 30876 var pDb uintptr = pArg 30877 if (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth != 0 { 30878 return SQLITE_OK 30879 } 30880 30881 switch code { 30882 case SQLITE_COPY: 30883 zCode = ts + 10944 30884 break 30885 case SQLITE_CREATE_INDEX: 30886 zCode = ts + 10956 30887 break 30888 case SQLITE_CREATE_TABLE: 30889 zCode = ts + 10976 30890 break 30891 case SQLITE_CREATE_TEMP_INDEX: 30892 zCode = ts + 10996 30893 break 30894 case SQLITE_CREATE_TEMP_TABLE: 30895 zCode = ts + 11021 30896 break 30897 case SQLITE_CREATE_TEMP_TRIGGER: 30898 zCode = ts + 11046 30899 break 30900 case SQLITE_CREATE_TEMP_VIEW: 30901 zCode = ts + 11073 30902 break 30903 case SQLITE_CREATE_TRIGGER: 30904 zCode = ts + 11097 30905 break 30906 case SQLITE_CREATE_VIEW: 30907 zCode = ts + 11119 30908 break 30909 case SQLITE_DELETE: 30910 zCode = ts + 11138 30911 break 30912 case SQLITE_DROP_INDEX: 30913 zCode = ts + 11152 30914 break 30915 case SQLITE_DROP_TABLE: 30916 zCode = ts + 11170 30917 break 30918 case SQLITE_DROP_TEMP_INDEX: 30919 zCode = ts + 11188 30920 break 30921 case SQLITE_DROP_TEMP_TABLE: 30922 zCode = ts + 11211 30923 break 30924 case SQLITE_DROP_TEMP_TRIGGER: 30925 zCode = ts + 11234 30926 break 30927 case SQLITE_DROP_TEMP_VIEW: 30928 zCode = ts + 11259 30929 break 30930 case SQLITE_DROP_TRIGGER: 30931 zCode = ts + 11281 30932 break 30933 case SQLITE_DROP_VIEW: 30934 zCode = ts + 11301 30935 break 30936 case SQLITE_INSERT: 30937 zCode = ts + 11318 30938 break 30939 case SQLITE_PRAGMA: 30940 zCode = ts + 11332 30941 break 30942 case SQLITE_READ: 30943 zCode = ts + 11346 30944 break 30945 case SQLITE_SELECT: 30946 zCode = ts + 11358 30947 break 30948 case SQLITE_TRANSACTION: 30949 zCode = ts + 11372 30950 break 30951 case SQLITE_UPDATE: 30952 zCode = ts + 11391 30953 break 30954 case SQLITE_ATTACH: 30955 zCode = ts + 11405 30956 break 30957 case SQLITE_DETACH: 30958 zCode = ts + 11419 30959 break 30960 case SQLITE_ALTER_TABLE: 30961 zCode = ts + 11433 30962 break 30963 case SQLITE_REINDEX: 30964 zCode = ts + 11452 30965 break 30966 case SQLITE_ANALYZE: 30967 zCode = ts + 11467 30968 break 30969 case SQLITE_CREATE_VTABLE: 30970 zCode = ts + 11482 30971 break 30972 case SQLITE_DROP_VTABLE: 30973 zCode = ts + 11503 30974 break 30975 case SQLITE_FUNCTION: 30976 zCode = ts + 11522 30977 break 30978 case SQLITE_SAVEPOINT: 30979 zCode = ts + 11538 30980 break 30981 case SQLITE_RECURSIVE: 30982 zCode = ts + 11555 30983 break 30984 default: 30985 zCode = ts + 11572 30986 break 30987 } 30988 tcl.XTcl_DStringInit(tls, bp) 30989 tcl.XTcl_DStringAppend(tls, bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, -1) 30990 tcl.XTcl_DStringAppendElement(tls, bp, zCode) 30991 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 30992 if zArg1 != 0 { 30993 return zArg1 30994 } 30995 return ts + 584 30996 }()) 30997 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 30998 if zArg2 != 0 { 30999 return zArg2 31000 } 31001 return ts + 584 31002 }()) 31003 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 31004 if zArg3 != 0 { 31005 return zArg3 31006 } 31007 return ts + 584 31008 }()) 31009 tcl.XTcl_DStringAppendElement(tls, bp, func() uintptr { 31010 if zArg4 != 0 { 31011 return zArg4 31012 } 31013 return ts + 584 31014 }()) 31015 rc = tcl.XTcl_GlobalEval(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 31016 tcl.XTcl_DStringFree(tls, bp) 31017 if rc == TCL_OK { 31018 zReply = tcl.XTcl_GetStringResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 31019 } else { 31020 zReply = ts + 11577 31021 } 31022 if libc.Xstrcmp(tls, zReply, ts+2127) == 0 { 31023 rc = SQLITE_OK 31024 } else if libc.Xstrcmp(tls, zReply, ts+11577) == 0 { 31025 rc = SQLITE_DENY 31026 } else if libc.Xstrcmp(tls, zReply, ts+11589) == 0 { 31027 rc = SQLITE_IGNORE 31028 } else { 31029 rc = 999 31030 } 31031 return rc 31032 } 31033 31034 func local_getline(tls *libc.TLS, zPrompt uintptr, in uintptr) uintptr { 31035 var zLine uintptr 31036 var nLine int32 31037 var n int32 31038 31039 nLine = 100 31040 zLine = libc.Xmalloc(tls, uint64(nLine)) 31041 if zLine == uintptr(0) { 31042 return uintptr(0) 31043 } 31044 n = 0 31045 for 1 != 0 { 31046 if n+100 > nLine { 31047 nLine = nLine*2 + 100 31048 zLine = libc.Xrealloc(tls, zLine, uint64(nLine)) 31049 if zLine == uintptr(0) { 31050 return uintptr(0) 31051 } 31052 } 31053 if libc.Xfgets(tls, zLine+uintptr(n), nLine-n, in) == uintptr(0) { 31054 if n == 0 { 31055 libc.Xfree(tls, zLine) 31056 return uintptr(0) 31057 } 31058 *(*int8)(unsafe.Pointer(zLine + uintptr(n))) = int8(0) 31059 break 31060 } 31061 for *(*int8)(unsafe.Pointer(zLine + uintptr(n))) != 0 { 31062 n++ 31063 } 31064 if n > 0 && int32(*(*int8)(unsafe.Pointer(zLine + uintptr(n-1)))) == '\n' { 31065 n-- 31066 *(*int8)(unsafe.Pointer(zLine + uintptr(n))) = int8(0) 31067 break 31068 } 31069 } 31070 zLine = libc.Xrealloc(tls, zLine, uint64(n+1)) 31071 return zLine 31072 } 31073 31074 func DbTransPostCmd(tls *libc.TLS, data uintptr, interp uintptr, result int32) int32 { 31075 bp := tls.Alloc(16) 31076 defer tls.Free(16) 31077 31078 var pDb uintptr = *(*ClientData)(unsafe.Pointer(data)) 31079 var rc int32 = result 31080 var zEnd uintptr 31081 31082 (*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction-- 31083 zEnd = azEnd[libc.Bool32(rc == TCL_ERROR)*2+libc.Bool32((*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction == 0)] 31084 31085 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth++ 31086 if sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zEnd, uintptr(0), uintptr(0), uintptr(0)) != 0 { 31087 if rc != TCL_ERROR { 31088 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 31089 rc = TCL_ERROR 31090 } 31091 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, ts+7824, uintptr(0), uintptr(0), uintptr(0)) 31092 } 31093 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth-- 31094 31095 delDatabaseRef(tls, pDb) 31096 return rc 31097 } 31098 31099 var azEnd = [4]uintptr{ 31100 ts + 11603, 31101 ts + 11628, 31102 ts + 11635, 31103 ts + 7824, 31104 } 31105 31106 func dbPrepare(tls *libc.TLS, pDb uintptr, zSql uintptr, ppStmt uintptr, pzOut uintptr) int32 { 31107 var prepFlags uint32 = uint32(0) 31108 if (*SqliteDb)(unsafe.Pointer(pDb)).FbLegacyPrepare != 0 { 31109 return sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, ppStmt, pzOut) 31110 } 31111 31112 if (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt > 5 { 31113 prepFlags = uint32(SQLITE_PREPARE_PERSISTENT) 31114 } 31115 31116 return sqlite3.Xsqlite3_prepare_v3(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, prepFlags, ppStmt, pzOut) 31117 } 31118 31119 func dbPrepareAndBind(tls *libc.TLS, pDb uintptr, zIn uintptr, pzOut uintptr, ppPreStmt uintptr) int32 { 31120 bp := tls.Alloc(32) 31121 defer tls.Free(32) 31122 31123 var zSql uintptr = zIn 31124 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 31125 var pPreStmt uintptr 31126 var nSql int32 31127 var nVar int32 = 0 31128 var iParm int32 = 0 31129 var c int8 31130 var i int32 31131 var needResultReset int32 = 0 31132 var rc int32 = SQLITE_OK 31133 var interp uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Finterp 31134 31135 *(*uintptr)(unsafe.Pointer(ppPreStmt)) = uintptr(0) 31136 31137 for int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer(zSql)))) == ' ' || int32(c) == '\t' || int32(c) == '\r' || int32(c) == '\n' { 31138 zSql++ 31139 } 31140 nSql = strlen30(tls, zSql) 31141 31142 for pPreStmt = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList; pPreStmt != 0; pPreStmt = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext { 31143 var n int32 = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql 31144 if nSql >= n && 31145 libc.Xmemcmp(tls, (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql, zSql, uint64(n)) == 0 && 31146 (int32(*(*int8)(unsafe.Pointer(zSql + uintptr(n)))) == 0 || int32(*(*int8)(unsafe.Pointer(zSql + uintptr(n-1)))) == ';') { 31147 *(*uintptr)(unsafe.Pointer(bp)) = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt 31148 *(*uintptr)(unsafe.Pointer(pzOut)) = zSql + uintptr((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql) 31149 31150 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev != 0 { 31151 (*SqlPreparedStmt)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev)).FpNext = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 31152 } else { 31153 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext 31154 } 31155 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext != 0 { 31156 (*SqlPreparedStmt)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext)).FpPrev = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev 31157 } else { 31158 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev 31159 } 31160 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt-- 31161 nVar = sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))) 31162 break 31163 } 31164 } 31165 31166 if pPreStmt == uintptr(0) { 31167 var nByte int32 31168 31169 if SQLITE_OK != dbPrepare(tls, pDb, zSql, bp, pzOut) { 31170 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 31171 return TCL_ERROR 31172 } 31173 if *(*uintptr)(unsafe.Pointer(bp)) == uintptr(0) { 31174 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) { 31175 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 31176 return TCL_ERROR 31177 } else { 31178 return TCL_OK 31179 } 31180 } 31181 31182 nVar = sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))) 31183 nByte = int32(uint64(unsafe.Sizeof(SqlPreparedStmt{})) + uint64(nVar)*uint64(unsafe.Sizeof(uintptr(0)))) 31184 pPreStmt = tcl.XTcl_Alloc(tls, uint32(nByte)) 31185 libc.X__builtin___memset_chk(tls, pPreStmt, 0, uint64(nByte), libc.X__builtin_object_size(tls, pPreStmt, 0)) 31186 31187 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt = *(*uintptr)(unsafe.Pointer(bp)) 31188 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql = int32((int64(*(*uintptr)(unsafe.Pointer(pzOut))) - int64(zSql)) / 1) 31189 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql = sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 31190 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm = pPreStmt + 1*56 31191 if (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql == uintptr(0) { 31192 var zCopy uintptr = tcl.XTcl_Alloc(tls, uint32((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql+1)) 31193 libc.X__builtin___memcpy_chk(tls, zCopy, zSql, uint64((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql), libc.X__builtin_object_size(tls, zCopy, 0)) 31194 *(*int8)(unsafe.Pointer(zCopy + uintptr((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnSql))) = int8(0) 31195 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FzSql = zCopy 31196 } 31197 } 31198 31199 for i = 1; i <= nVar; i++ { 31200 var zVar uintptr = sqlite3.Xsqlite3_bind_parameter_name(tls, *(*uintptr)(unsafe.Pointer(bp)), i) 31201 if zVar != uintptr(0) && (int32(*(*int8)(unsafe.Pointer(zVar))) == '$' || int32(*(*int8)(unsafe.Pointer(zVar))) == ':' || int32(*(*int8)(unsafe.Pointer(zVar))) == '@') { 31202 var pVar uintptr = tcl.XTcl_GetVar2Ex(tls, interp, zVar+1, uintptr(0), 0) 31203 if pVar == uintptr(0) && (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != uintptr(0) { 31204 var pCmd uintptr 31205 var rx int32 31206 pCmd = tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, -1) 31207 (*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount++ 31208 tcl.XTcl_ListObjAppendElement(tls, interp, pCmd, tcl.XTcl_NewStringObj(tls, zVar, -1)) 31209 if needResultReset != 0 { 31210 tcl.XTcl_ResetResult(tls, interp) 31211 } 31212 needResultReset = 1 31213 rx = tcl.XTcl_EvalObjEx(tls, interp, pCmd, TCL_EVAL_DIRECT) 31214 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 31215 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pCmd)).FrefCount, 1) <= 0 { 31216 tcl.XTclFreeObj(tls, pCmd) 31217 } 31218 } 31219 if rx == TCL_OK { 31220 pVar = tcl.XTcl_GetObjResult(tls, interp) 31221 } else if rx == TCL_ERROR { 31222 rc = TCL_ERROR 31223 break 31224 } else { 31225 pVar = uintptr(0) 31226 } 31227 } 31228 if pVar != 0 { 31229 var data uintptr 31230 var zType uintptr = func() uintptr { 31231 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 31232 return (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname 31233 } 31234 return ts + 584 31235 }() 31236 c = *(*int8)(unsafe.Pointer(zType)) 31237 if int32(*(*int8)(unsafe.Pointer(zVar))) == '@' || int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2544) == 0 && (*Tcl_Obj)(unsafe.Pointer(pVar)).Fbytes == uintptr(0) { 31238 data = tcl.XTcl_GetByteArrayFromObj(tls, pVar, bp+8) 31239 sqlite3.Xsqlite3_bind_blob(tls, *(*uintptr)(unsafe.Pointer(bp)), i, data, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) 31240 (*Tcl_Obj)(unsafe.Pointer(pVar)).FrefCount++ 31241 *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(libc.PostIncInt32(&iParm, 1))*8)) = pVar 31242 } else if int32(c) == 'b' && libc.Xstrcmp(tls, zType, ts+2554) == 0 { 31243 tcl.XTcl_GetIntFromObj(tls, interp, pVar, bp+8) 31244 sqlite3.Xsqlite3_bind_int(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*int32)(unsafe.Pointer(bp + 8))) 31245 } else if int32(c) == 'd' && libc.Xstrcmp(tls, zType, ts+2562) == 0 { 31246 tcl.XTcl_GetDoubleFromObj(tls, interp, pVar, bp+16) 31247 sqlite3.Xsqlite3_bind_double(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*float64)(unsafe.Pointer(bp + 16))) 31248 } else if int32(c) == 'w' && libc.Xstrcmp(tls, zType, ts+2569) == 0 || int32(c) == 'i' && libc.Xstrcmp(tls, zType, ts+2577) == 0 { 31249 tcl.XTcl_GetWideIntFromObj(tls, interp, pVar, bp+24) 31250 sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp)), i, *(*Tcl_WideInt)(unsafe.Pointer(bp + 24))) 31251 } else { 31252 data = tcl.XTcl_GetStringFromObj(tls, pVar, bp+8) 31253 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp)), i, data, *(*int32)(unsafe.Pointer(bp + 8)), uintptr(0)) 31254 (*Tcl_Obj)(unsafe.Pointer(pVar)).FrefCount++ 31255 *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(libc.PostIncInt32(&iParm, 1))*8)) = pVar 31256 } 31257 } else { 31258 sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp)), i) 31259 } 31260 if needResultReset != 0 { 31261 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 31262 } 31263 } 31264 } 31265 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm = iParm 31266 *(*uintptr)(unsafe.Pointer(ppPreStmt)) = pPreStmt 31267 if needResultReset != 0 && rc == TCL_OK { 31268 tcl.XTcl_ResetResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp) 31269 } 31270 31271 return rc 31272 } 31273 31274 func dbReleaseStmt(tls *libc.TLS, pDb uintptr, pPreStmt uintptr, discard int32) { 31275 var i int32 31276 31277 for i = 0; i < (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm; i++ { 31278 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 31279 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(i)*8)))).FrefCount, 1) <= 0 { 31280 tcl.XTclFreeObj(tls, *(*uintptr)(unsafe.Pointer((*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FapParm + uintptr(i)*8))) 31281 } 31282 } 31283 } 31284 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FnParm = 0 31285 31286 if (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt <= 0 || discard != 0 { 31287 dbFreeStmt(tls, pPreStmt) 31288 } else { 31289 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList 31290 (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpPrev = uintptr(0) 31291 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList != 0 { 31292 (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtList)).FpPrev = pPreStmt 31293 } 31294 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList = pPreStmt 31295 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast == uintptr(0) { 31296 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = pPreStmt 31297 } else { 31298 } 31299 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt++ 31300 31301 for (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt > (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt { 31302 var pLast uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast 31303 (*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast = (*SqlPreparedStmt)(unsafe.Pointer(pLast)).FpPrev 31304 (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtLast)).FpNext = uintptr(0) 31305 (*SqliteDb)(unsafe.Pointer(pDb)).FnStmt-- 31306 dbFreeStmt(tls, pLast) 31307 } 31308 } 31309 } 31310 31311 type DbEvalContext1 = struct { 31312 FpDb uintptr 31313 FpSql uintptr 31314 FzSql uintptr 31315 FpPreStmt uintptr 31316 FnCol int32 31317 FevalFlags int32 31318 FpArray uintptr 31319 FapColName uintptr 31320 } 31321 31322 type DbEvalContext = DbEvalContext1 31323 31324 func dbReleaseColumnNames(tls *libc.TLS, p uintptr) { 31325 if (*DbEvalContext)(unsafe.Pointer(p)).FapColName != 0 { 31326 var i int32 31327 for i = 0; i < (*DbEvalContext)(unsafe.Pointer(p)).FnCol; i++ { 31328 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 31329 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FapColName + uintptr(i)*8)))).FrefCount, 1) <= 0 { 31330 tcl.XTclFreeObj(tls, *(*uintptr)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FapColName + uintptr(i)*8))) 31331 } 31332 } 31333 } 31334 tcl.XTcl_Free(tls, (*DbEvalContext)(unsafe.Pointer(p)).FapColName) 31335 (*DbEvalContext)(unsafe.Pointer(p)).FapColName = uintptr(0) 31336 } 31337 (*DbEvalContext)(unsafe.Pointer(p)).FnCol = 0 31338 } 31339 31340 func dbEvalInit(tls *libc.TLS, p uintptr, pDb uintptr, pSql uintptr, pArray uintptr, evalFlags int32) { 31341 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(DbEvalContext{})), libc.X__builtin_object_size(tls, p, 0)) 31342 (*DbEvalContext)(unsafe.Pointer(p)).FpDb = pDb 31343 (*DbEvalContext)(unsafe.Pointer(p)).FzSql = tcl.XTcl_GetString(tls, pSql) 31344 (*DbEvalContext)(unsafe.Pointer(p)).FpSql = pSql 31345 (*Tcl_Obj)(unsafe.Pointer(pSql)).FrefCount++ 31346 if pArray != 0 { 31347 (*DbEvalContext)(unsafe.Pointer(p)).FpArray = pArray 31348 (*Tcl_Obj)(unsafe.Pointer(pArray)).FrefCount++ 31349 } 31350 (*DbEvalContext)(unsafe.Pointer(p)).FevalFlags = evalFlags 31351 addDatabaseRef(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb) 31352 } 31353 31354 func dbEvalRowInfo(tls *libc.TLS, p uintptr, pnCol uintptr, papColName uintptr) { 31355 if uintptr(0) == (*DbEvalContext)(unsafe.Pointer(p)).FapColName { 31356 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt 31357 var i int32 31358 var nCol int32 31359 var apColName uintptr = uintptr(0) 31360 31361 (*DbEvalContext)(unsafe.Pointer(p)).FnCol = libc.AssignInt32(&nCol, sqlite3.Xsqlite3_column_count(tls, pStmt)) 31362 if nCol > 0 && (papColName != 0 || (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0) { 31363 apColName = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(nCol))) 31364 for i = 0; i < nCol; i++ { 31365 *(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8)) = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_column_name(tls, pStmt, i), -1) 31366 (*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8)))).FrefCount++ 31367 } 31368 (*DbEvalContext)(unsafe.Pointer(p)).FapColName = apColName 31369 } 31370 31371 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 31372 var interp uintptr = (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).Finterp 31373 var pColList uintptr = tcl.XTcl_NewObj(tls) 31374 var pStar uintptr = tcl.XTcl_NewStringObj(tls, ts+3840, -1) 31375 31376 for i = 0; i < nCol; i++ { 31377 tcl.XTcl_ListObjAppendElement(tls, interp, pColList, *(*uintptr)(unsafe.Pointer(apColName + uintptr(i)*8))) 31378 } 31379 (*Tcl_Obj)(unsafe.Pointer(pStar)).FrefCount++ 31380 tcl.XTcl_ObjSetVar2(tls, interp, (*DbEvalContext)(unsafe.Pointer(p)).FpArray, pStar, pColList, 0) 31381 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 31382 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pStar)).FrefCount, 1) <= 0 { 31383 tcl.XTclFreeObj(tls, pStar) 31384 } 31385 } 31386 } 31387 } 31388 31389 if papColName != 0 { 31390 *(*uintptr)(unsafe.Pointer(papColName)) = (*DbEvalContext)(unsafe.Pointer(p)).FapColName 31391 } 31392 if pnCol != 0 { 31393 *(*int32)(unsafe.Pointer(pnCol)) = (*DbEvalContext)(unsafe.Pointer(p)).FnCol 31394 } 31395 } 31396 31397 func dbEvalStep(tls *libc.TLS, p uintptr) int32 { 31398 var zPrevSql uintptr = uintptr(0) 31399 31400 for *(*int8)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FzSql)) != 0 || (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt != 0 { 31401 var rc int32 31402 if (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt == uintptr(0) { 31403 zPrevSql = func() uintptr { 31404 if (*DbEvalContext)(unsafe.Pointer(p)).FzSql == zPrevSql { 31405 return uintptr(0) 31406 } 31407 return (*DbEvalContext)(unsafe.Pointer(p)).FzSql 31408 }() 31409 rc = dbPrepareAndBind(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb, (*DbEvalContext)(unsafe.Pointer(p)).FzSql, p+16, p+24) 31410 if rc != TCL_OK { 31411 return rc 31412 } 31413 } else { 31414 var rcs int32 31415 var pDb uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpDb 31416 var pPreStmt uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt 31417 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer(pPreStmt)).FpStmt 31418 31419 rcs = sqlite3.Xsqlite3_step(tls, pStmt) 31420 if rcs == SQLITE_ROW { 31421 return TCL_OK 31422 } 31423 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 31424 dbEvalRowInfo(tls, p, uintptr(0), uintptr(0)) 31425 } 31426 rcs = sqlite3.Xsqlite3_reset(tls, pStmt) 31427 31428 (*SqliteDb)(unsafe.Pointer(pDb)).FnStep = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP, 1) 31429 (*SqliteDb)(unsafe.Pointer(pDb)).FnSort = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_SORT, 1) 31430 (*SqliteDb)(unsafe.Pointer(pDb)).FnIndex = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_AUTOINDEX, 1) 31431 (*SqliteDb)(unsafe.Pointer(pDb)).FnVMStep = sqlite3.Xsqlite3_stmt_status(tls, pStmt, SQLITE_STMTSTATUS_VM_STEP, 1) 31432 dbReleaseColumnNames(tls, p) 31433 (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt = uintptr(0) 31434 31435 if rcs != SQLITE_OK { 31436 dbReleaseStmt(tls, pDb, pPreStmt, 1) 31437 if (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).FbLegacyPrepare != 0 && rcs == SQLITE_SCHEMA && zPrevSql != 0 { 31438 (*DbEvalContext)(unsafe.Pointer(p)).FzSql = zPrevSql 31439 continue 31440 } 31441 tcl.XTcl_SetObjResult(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Finterp, 31442 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), -1)) 31443 return TCL_ERROR 31444 } else { 31445 dbReleaseStmt(tls, pDb, pPreStmt, 0) 31446 } 31447 } 31448 } 31449 31450 return TCL_BREAK 31451 } 31452 31453 func dbEvalFinalize(tls *libc.TLS, p uintptr) { 31454 if (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt != 0 { 31455 sqlite3.Xsqlite3_reset(tls, (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt) 31456 dbReleaseStmt(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb, (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt, 0) 31457 (*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt = uintptr(0) 31458 } 31459 if (*DbEvalContext)(unsafe.Pointer(p)).FpArray != 0 { 31460 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 31461 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpArray)).FrefCount, 1) <= 0 { 31462 tcl.XTclFreeObj(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpArray) 31463 } 31464 } 31465 (*DbEvalContext)(unsafe.Pointer(p)).FpArray = uintptr(0) 31466 } 31467 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 31468 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpSql)).FrefCount, 1) <= 0 { 31469 tcl.XTclFreeObj(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpSql) 31470 } 31471 } 31472 dbReleaseColumnNames(tls, p) 31473 delDatabaseRef(tls, (*DbEvalContext)(unsafe.Pointer(p)).FpDb) 31474 } 31475 31476 func dbEvalColumnValue(tls *libc.TLS, p uintptr, iCol int32) uintptr { 31477 var pStmt uintptr = (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt 31478 switch sqlite3.Xsqlite3_column_type(tls, pStmt, iCol) { 31479 case SQLITE_BLOB: 31480 { 31481 var bytes int32 = sqlite3.Xsqlite3_column_bytes(tls, pStmt, iCol) 31482 var zBlob uintptr = sqlite3.Xsqlite3_column_blob(tls, pStmt, iCol) 31483 if !(zBlob != 0) { 31484 bytes = 0 31485 } 31486 return tcl.XTcl_NewByteArrayObj(tls, zBlob, bytes) 31487 31488 } 31489 case SQLITE_INTEGER: 31490 { 31491 var v sqlite_int64 = sqlite3.Xsqlite3_column_int64(tls, pStmt, iCol) 31492 if v >= int64(-2147483647) && v <= int64(2147483647) { 31493 return tcl.XTcl_NewIntObj(tls, int32(v)) 31494 } else { 31495 return tcl.XTcl_NewWideIntObj(tls, v) 31496 } 31497 31498 } 31499 fallthrough 31500 case SQLITE_FLOAT: 31501 { 31502 return tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_column_double(tls, pStmt, iCol)) 31503 31504 } 31505 case SQLITE_NULL: 31506 { 31507 return tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpDb)).FzNull, -1) 31508 31509 } 31510 } 31511 31512 return tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_column_text(tls, pStmt, iCol), -1) 31513 } 31514 31515 func DbEvalNextCmd(tls *libc.TLS, data uintptr, interp uintptr, result int32) int32 { 31516 bp := tls.Alloc(16) 31517 defer tls.Free(16) 31518 31519 var rc int32 = result 31520 31521 var p uintptr = *(*ClientData)(unsafe.Pointer(data)) 31522 var pScript uintptr = *(*ClientData)(unsafe.Pointer(data + 1*8)) 31523 var pArray uintptr = (*DbEvalContext)(unsafe.Pointer(p)).FpArray 31524 31525 for (rc == TCL_OK || rc == TCL_CONTINUE) && TCL_OK == libc.AssignInt32(&rc, dbEvalStep(tls, p)) { 31526 var i int32 31527 31528 dbEvalRowInfo(tls, p, bp, bp+8) 31529 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 31530 if pArray == uintptr(0) { 31531 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), uintptr(0), dbEvalColumnValue(tls, p, i), 0) 31532 } else if (*DbEvalContext)(unsafe.Pointer(p)).FevalFlags&SQLITE_EVAL_WITHOUTNULLS != 0 && 31533 sqlite3.Xsqlite3_column_type(tls, (*SqlPreparedStmt)(unsafe.Pointer((*DbEvalContext)(unsafe.Pointer(p)).FpPreStmt)).FpStmt, i) == SQLITE_NULL { 31534 tcl.XTcl_UnsetVar2(tls, interp, tcl.XTcl_GetString(tls, pArray), 31535 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8))), 0) 31536 } else { 31537 tcl.XTcl_ObjSetVar2(tls, interp, pArray, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), dbEvalColumnValue(tls, p, i), 0) 31538 } 31539 } 31540 31541 if 0 != 0 { 31542 return 0 31543 } else { 31544 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, 0) 31545 } 31546 } 31547 31548 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 31549 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount, 1) <= 0 { 31550 tcl.XTclFreeObj(tls, pScript) 31551 } 31552 } 31553 dbEvalFinalize(tls, p) 31554 tcl.XTcl_Free(tls, p) 31555 31556 if rc == TCL_OK || rc == TCL_BREAK { 31557 tcl.XTcl_ResetResult(tls, interp) 31558 rc = TCL_OK 31559 } 31560 return rc 31561 } 31562 31563 func DbHookCmd(tls *libc.TLS, interp uintptr, pDb uintptr, pArg uintptr, ppHook uintptr) { 31564 var db uintptr = (*SqliteDb)(unsafe.Pointer(pDb)).Fdb 31565 31566 if *(*uintptr)(unsafe.Pointer(ppHook)) != 0 { 31567 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(ppHook))) 31568 if pArg != 0 { 31569 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 31570 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppHook)))).FrefCount, 1) <= 0 { 31571 tcl.XTclFreeObj(tls, *(*uintptr)(unsafe.Pointer(ppHook))) 31572 } 31573 } 31574 *(*uintptr)(unsafe.Pointer(ppHook)) = uintptr(0) 31575 } 31576 } 31577 if pArg != 0 { 31578 if tcl.XTcl_GetCharLength(tls, pArg) > 0 { 31579 *(*uintptr)(unsafe.Pointer(ppHook)) = pArg 31580 (*Tcl_Obj)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppHook)))).FrefCount++ 31581 } 31582 } 31583 31584 sqlite3.Xsqlite3_preupdate_hook(tls, db, func() uintptr { 31585 if (*SqliteDb)(unsafe.Pointer(pDb)).FpPreUpdateHook != 0 { 31586 return *(*uintptr)(unsafe.Pointer(&struct { 31587 f func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, sqlite_int64, sqlite_int64) 31588 }{DbPreUpdateHandler})) 31589 } 31590 return uintptr(0) 31591 }(), pDb) 31592 sqlite3.Xsqlite3_update_hook(tls, db, func() uintptr { 31593 if (*SqliteDb)(unsafe.Pointer(pDb)).FpUpdateHook != 0 { 31594 return *(*uintptr)(unsafe.Pointer(&struct { 31595 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, sqlite_int64) 31596 }{DbUpdateHandler})) 31597 } 31598 return uintptr(0) 31599 }(), pDb) 31600 sqlite3.Xsqlite3_rollback_hook(tls, db, func() uintptr { 31601 if (*SqliteDb)(unsafe.Pointer(pDb)).FpRollbackHook != 0 { 31602 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbRollbackHandler})) 31603 } 31604 return uintptr(0) 31605 }(), pDb) 31606 sqlite3.Xsqlite3_wal_hook(tls, db, func() uintptr { 31607 if (*SqliteDb)(unsafe.Pointer(pDb)).FpWalHook != 0 { 31608 return *(*uintptr)(unsafe.Pointer(&struct { 31609 f func(*libc.TLS, uintptr, uintptr, uintptr, int32) int32 31610 }{DbWalHandler})) 31611 } 31612 return uintptr(0) 31613 }(), pDb) 31614 } 31615 31616 func DbObjCmd(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 31617 bp := tls.Alloc(1588) 31618 defer tls.Free(1588) 31619 *(*uintptr)(unsafe.Pointer(bp + 1464)) = cd 31620 31621 var pDb uintptr 31622 31623 var rc int32 31624 var zAuth uintptr 31625 31626 var zDestFile uintptr 31627 var zSrcDb uintptr 31628 31629 var pBackup uintptr 31630 var zCallback uintptr 31631 31632 var zBusy uintptr 31633 31634 var subCmd uintptr 31635 31636 var pResult uintptr 31637 var pCollate uintptr 31638 var zName uintptr 31639 var zScript uintptr 31640 31641 var zCommit uintptr 31642 31643 var pResult1 uintptr 31644 var isComplete int32 31645 31646 var zOpt uintptr 31647 31648 var pResult2 uintptr 31649 var ii int32 31650 var zErr uintptr 31651 var nErr int32 31652 var z uintptr 31653 var zTable uintptr 31654 var zFile uintptr 31655 var zConflict uintptr 31656 31657 var nCol int32 31658 var nByte int32 31659 var i int32 31660 var j int32 31661 var nSep int32 31662 var nNull int32 31663 var zSql uintptr 31664 var zLine uintptr 31665 var azCol uintptr 31666 var zCommit1 uintptr 31667 var in uintptr 31668 var lineno int32 31669 31670 var pResult3 uintptr 31671 31672 var zSep uintptr 31673 var zNull uintptr 31674 31675 var z1 uintptr 31676 var flags int32 31677 var zSchema uintptr 31678 var pValue uintptr 31679 var pBA uintptr 31680 var pData uintptr 31681 31682 var xrc int32 31683 31684 var i1 int32 31685 31686 var pResult4 uintptr 31687 31688 var i2 int32 31689 31690 var pRet uintptr 31691 31692 var p uintptr 31693 var pArray uintptr 31694 var pScript uintptr 31695 var evalFlags int32 31696 var zOpt1 uintptr 31697 31698 var z2 uintptr 31699 var n1 int32 31700 var flags1 int32 31701 var pFunc uintptr 31702 var pScript1 uintptr 31703 var zName1 uintptr 31704 31705 var i3 int32 31706 31707 var isReadonly1 int32 31708 var zDb uintptr 31709 var zTable1 uintptr 31710 var zColumn uintptr 31711 31712 var zNull1 uintptr 31713 var pResult5 uintptr 31714 var rowid Tcl_WideInt 31715 var zProgress uintptr 31716 31717 var zProfile uintptr 31718 31719 var zSrcFile uintptr 31720 var zDestDb uintptr 31721 31722 var pBackup1 uintptr 31723 var nTimeout int32 31724 var needFree int32 31725 var zSchema1 uintptr 31726 31727 var pData1 uintptr 31728 var v2 int32 31729 var zOp uintptr 31730 31731 var pResult6 uintptr 31732 var zTrace uintptr 31733 31734 var pError uintptr 31735 31736 var i4 int32 31737 var zTraceV2 uintptr 31738 31739 var wMask Tcl_WideInt 31740 31741 var pScript2 uintptr 31742 var zBegin uintptr 31743 var xNotify uintptr 31744 var pNotifyArg uintptr 31745 var nCol2 int32 31746 var pRet1 uintptr 31747 var pObj1 uintptr 31748 31749 var ppHook uintptr 31750 31751 var zArg uintptr 31752 var i5 int32 31753 pDb = *(*uintptr)(unsafe.Pointer(bp + 1464)) 31754 rc = TCL_OK 31755 31756 if !(objc < 2) { 31757 goto __1 31758 } 31759 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 31760 return TCL_ERROR 31761 __1: 31762 ; 31763 if !(tcl.XTcl_GetIndexFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&DB_strs)), ts+11691, 0, bp+1016) != 0) { 31764 goto __2 31765 } 31766 return TCL_ERROR 31767 __2: 31768 ; 31769 switch uint32(*(*int32)(unsafe.Pointer(bp + 1016))) { 31770 case uint32(0): 31771 goto __4 31772 31773 case uint32(1): 31774 goto __5 31775 31776 case uint32(2): 31777 goto __6 31778 31779 case uint32(3): 31780 goto __7 31781 31782 case uint32(4): 31783 goto __8 31784 31785 case uint32(5): 31786 goto __9 31787 31788 case uint32(6): 31789 goto __10 31790 31791 case uint32(7): 31792 goto __11 31793 31794 case uint32(8): 31795 goto __12 31796 31797 case uint32(9): 31798 goto __13 31799 31800 case uint32(10): 31801 goto __14 31802 31803 case uint32(11): 31804 goto __15 31805 31806 case uint32(12): 31807 goto __16 31808 31809 case uint32(13): 31810 goto __17 31811 31812 case uint32(14): 31813 goto __18 31814 31815 case uint32(15): 31816 goto __19 31817 31818 case uint32(16): 31819 goto __20 31820 31821 case uint32(18): 31822 goto __21 31823 case uint32(24): 31824 goto __22 31825 31826 case uint32(17): 31827 goto __23 31828 31829 case uint32(19): 31830 goto __24 31831 31832 case uint32(20): 31833 goto __25 31834 31835 case uint32(21): 31836 goto __26 31837 31838 case uint32(23): 31839 goto __27 31840 31841 case uint32(22): 31842 goto __28 31843 31844 case uint32(27): 31845 goto __29 31846 31847 case uint32(26): 31848 goto __30 31849 31850 case uint32(28): 31851 goto __31 31852 31853 case uint32(29): 31854 goto __32 31855 31856 case uint32(31): 31857 goto __33 31858 31859 case uint32(32): 31860 goto __34 31861 31862 case uint32(33): 31863 goto __35 31864 31865 case uint32(34): 31866 goto __36 31867 31868 case uint32(35): 31869 goto __37 31870 31871 case uint32(36): 31872 goto __38 31873 31874 case uint32(37): 31875 goto __39 31876 31877 case uint32(38): 31878 goto __40 31879 31880 case uint32(25): 31881 goto __41 31882 31883 case uint32(41): 31884 goto __42 31885 case uint32(39): 31886 goto __43 31887 case uint32(30): 31888 goto __44 31889 31890 case uint32(40): 31891 goto __45 31892 } 31893 goto __3 31894 31895 __4: 31896 if !(objc > 3) { 31897 goto __46 31898 } 31899 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 31900 return TCL_ERROR 31901 goto __47 31902 __46: 31903 if !(objc == 2) { 31904 goto __48 31905 } 31906 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 31907 goto __50 31908 } 31909 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, uintptr(0))) 31910 __50: 31911 ; 31912 goto __49 31913 __48: 31914 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 31915 goto __51 31916 } 31917 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth) 31918 __51: 31919 ; 31920 zAuth = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1020) 31921 if !(zAuth != 0 && *(*int32)(unsafe.Pointer(bp + 1020)) > 0) { 31922 goto __52 31923 } 31924 (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1020))+1)) 31925 libc.X__builtin___memcpy_chk(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, zAuth, uint64(*(*int32)(unsafe.Pointer(bp + 1020))+1), libc.X__builtin_object_size(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth, 0)) 31926 goto __53 31927 __52: 31928 (*SqliteDb)(unsafe.Pointer(pDb)).FzAuth = uintptr(0) 31929 __53: 31930 ; 31931 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzAuth != 0) { 31932 goto __54 31933 } 31934 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 31935 sqlite3.Xsqlite3_set_authorizer(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 31936 f func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr, uintptr) int32 31937 }{auth_callback})), pDb) 31938 goto __55 31939 __54: 31940 sqlite3.Xsqlite3_set_authorizer(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 31941 __55: 31942 ; 31943 __49: 31944 ; 31945 __47: 31946 ; 31947 goto __3 31948 31949 __5: 31950 if !(objc == 3) { 31951 goto __56 31952 } 31953 zSrcDb = ts + 85 31954 zDestFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 31955 goto __57 31956 __56: 31957 if !(objc == 4) { 31958 goto __58 31959 } 31960 zSrcDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 31961 zDestFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 31962 goto __59 31963 __58: 31964 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11709) 31965 return TCL_ERROR 31966 __59: 31967 ; 31968 __57: 31969 ; 31970 rc = sqlite3.Xsqlite3_open_v2(tls, zDestFile, bp+1024, 31971 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|(*SqliteDb)(unsafe.Pointer(pDb)).FopenFlags, uintptr(0)) 31972 if !(rc != SQLITE_OK) { 31973 goto __60 31974 } 31975 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+11729, 31976 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 31977 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 31978 return TCL_ERROR 31979 __60: 31980 ; 31981 pBackup = sqlite3.Xsqlite3_backup_init(tls, *(*uintptr)(unsafe.Pointer(bp + 1024)), ts+85, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSrcDb) 31982 if !(pBackup == uintptr(0)) { 31983 goto __61 31984 } 31985 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+11759, 31986 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 31987 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 31988 return TCL_ERROR 31989 __61: 31990 ; 31991 __62: 31992 if !(libc.AssignInt32(&rc, sqlite3.Xsqlite3_backup_step(tls, pBackup, 100)) == SQLITE_OK) { 31993 goto __63 31994 } 31995 goto __62 31996 __63: 31997 ; 31998 sqlite3.Xsqlite3_backup_finish(tls, pBackup) 31999 if !(rc == SQLITE_DONE) { 32000 goto __64 32001 } 32002 rc = TCL_OK 32003 goto __65 32004 __64: 32005 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, ts+11759, 32006 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))), uintptr(0))) 32007 rc = TCL_ERROR 32008 __65: 32009 ; 32010 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1024))) 32011 goto __3 32012 32013 __6: 32014 if !(objc > 3) { 32015 goto __66 32016 } 32017 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 32018 return TCL_ERROR 32019 goto __67 32020 __66: 32021 if !(objc == 2) { 32022 goto __68 32023 } 32024 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0) { 32025 goto __70 32026 } 32027 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+88, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, uintptr(0))) 32028 __70: 32029 ; 32030 goto __69 32031 __68: 32032 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback != 0) { 32033 goto __71 32034 } 32035 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback) 32036 __71: 32037 ; 32038 zCallback = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1032) 32039 if !(zCallback != 0 && *(*int32)(unsafe.Pointer(bp + 1032)) > 0) { 32040 goto __72 32041 } 32042 (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1032))+1)) 32043 libc.X__builtin___memcpy_chk(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, zCallback, uint64(*(*int32)(unsafe.Pointer(bp + 1032))+1), libc.X__builtin_object_size(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback, 0)) 32044 goto __73 32045 __72: 32046 (*SqliteDb)(unsafe.Pointer(pDb)).FzBindFallback = uintptr(0) 32047 __73: 32048 ; 32049 __69: 32050 ; 32051 __67: 32052 ; 32053 goto __3 32054 32055 __7: 32056 if !(objc > 3) { 32057 goto __74 32058 } 32059 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11775) 32060 return TCL_ERROR 32061 goto __75 32062 __74: 32063 if !(objc == 2) { 32064 goto __76 32065 } 32066 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 32067 goto __78 32068 } 32069 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+104, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, uintptr(0))) 32070 __78: 32071 ; 32072 goto __77 32073 __76: 32074 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 32075 goto __79 32076 } 32077 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy) 32078 __79: 32079 ; 32080 zBusy = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1036) 32081 if !(zBusy != 0 && *(*int32)(unsafe.Pointer(bp + 1036)) > 0) { 32082 goto __80 32083 } 32084 (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1036))+1)) 32085 libc.X__builtin___memcpy_chk(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, zBusy, uint64(*(*int32)(unsafe.Pointer(bp + 1036))+1), libc.X__builtin_object_size(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy, 0)) 32086 goto __81 32087 __80: 32088 (*SqliteDb)(unsafe.Pointer(pDb)).FzBusy = uintptr(0) 32089 __81: 32090 ; 32091 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzBusy != 0) { 32092 goto __82 32093 } 32094 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 32095 sqlite3.Xsqlite3_busy_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 32096 f func(*libc.TLS, uintptr, int32) int32 32097 }{DbBusyHandler})), pDb) 32098 goto __83 32099 __82: 32100 sqlite3.Xsqlite3_busy_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 32101 __83: 32102 ; 32103 __77: 32104 ; 32105 __75: 32106 ; 32107 goto __3 32108 32109 __8: 32110 if !(objc <= 2) { 32111 goto __84 32112 } 32113 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+11784) 32114 return TCL_ERROR 32115 __84: 32116 ; 32117 subCmd = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 32118 if !(int32(*(*int8)(unsafe.Pointer(subCmd))) == 'f' && libc.Xstrcmp(tls, subCmd, ts+11803) == 0) { 32119 goto __85 32120 } 32121 if !(objc != 3) { 32122 goto __87 32123 } 32124 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11803) 32125 return TCL_ERROR 32126 goto __88 32127 __87: 32128 flushStmtCache(tls, pDb) 32129 __88: 32130 ; 32131 goto __86 32132 __85: 32133 if !(int32(*(*int8)(unsafe.Pointer(subCmd))) == 's' && libc.Xstrcmp(tls, subCmd, ts+11809) == 0) { 32134 goto __89 32135 } 32136 if !(objc != 4) { 32137 goto __91 32138 } 32139 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11814) 32140 return TCL_ERROR 32141 goto __92 32142 __91: 32143 if !(TCL_ERROR == tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1040)) { 32144 goto __93 32145 } 32146 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+120, ts+11821, 32147 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), uintptr(0)), ts+11838, uintptr(0))) 32148 return TCL_ERROR 32149 goto __94 32150 __93: 32151 if !(*(*int32)(unsafe.Pointer(bp + 1040)) < 0) { 32152 goto __95 32153 } 32154 flushStmtCache(tls, pDb) 32155 *(*int32)(unsafe.Pointer(bp + 1040)) = 0 32156 goto __96 32157 __95: 32158 if !(*(*int32)(unsafe.Pointer(bp + 1040)) > MAX_PREPARED_STMTS) { 32159 goto __97 32160 } 32161 *(*int32)(unsafe.Pointer(bp + 1040)) = MAX_PREPARED_STMTS 32162 __97: 32163 ; 32164 __96: 32165 ; 32166 (*SqliteDb)(unsafe.Pointer(pDb)).FmaxStmt = *(*int32)(unsafe.Pointer(bp + 1040)) 32167 __94: 32168 ; 32169 __92: 32170 ; 32171 goto __90 32172 __89: 32173 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+152, ts+11851, 32174 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)), ts+11864, 32175 uintptr(0))) 32176 return TCL_ERROR 32177 __90: 32178 ; 32179 __86: 32180 ; 32181 goto __3 32182 32183 __9: 32184 if !(objc != 2) { 32185 goto __98 32186 } 32187 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 32188 return TCL_ERROR 32189 __98: 32190 ; 32191 pResult = tcl.XTcl_GetObjResult(tls, interp) 32192 tcl.XTcl_SetWideIntObj(tls, pResult, sqlite3.Xsqlite3_changes64(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 32193 goto __3 32194 32195 __10: 32196 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0))) 32197 goto __3 32198 32199 __11: 32200 if !(objc != 4) { 32201 goto __99 32202 } 32203 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11889) 32204 return TCL_ERROR 32205 __99: 32206 ; 32207 zName = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 32208 zScript = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1044) 32209 pCollate = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlCollate{}))+uint64(*(*int32)(unsafe.Pointer(bp + 1044)))+uint64(1))) 32210 if !(pCollate == uintptr(0)) { 32211 goto __100 32212 } 32213 return TCL_ERROR 32214 __100: 32215 ; 32216 (*SqlCollate)(unsafe.Pointer(pCollate)).Finterp = interp 32217 (*SqlCollate)(unsafe.Pointer(pCollate)).FpNext = (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate 32218 (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript = pCollate + 1*24 32219 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollate = pCollate 32220 libc.X__builtin___memcpy_chk(tls, (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript, zScript, uint64(*(*int32)(unsafe.Pointer(bp + 1044))+1), libc.X__builtin_object_size(tls, (*SqlCollate)(unsafe.Pointer(pCollate)).FzScript, 0)) 32221 if !(sqlite3.Xsqlite3_create_collation(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zName, SQLITE_UTF8, 32222 pCollate, *(*uintptr)(unsafe.Pointer(&struct { 32223 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 32224 }{tclSqlCollate}))) != 0) { 32225 goto __101 32226 } 32227 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 32228 return TCL_ERROR 32229 __101: 32230 ; 32231 goto __3 32232 32233 __12: 32234 if !(objc != 3) { 32235 goto __102 32236 } 32237 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+10187) 32238 return TCL_ERROR 32239 __102: 32240 ; 32241 if !((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded != 0) { 32242 goto __103 32243 } 32244 __104: 32245 if !(libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded)).FrefCount, 1) <= 0) { 32246 goto __107 32247 } 32248 tcl.XTclFreeObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded) 32249 __107: 32250 ; 32251 goto __105 32252 __105: 32253 if 0 != 0 { 32254 goto __104 32255 } 32256 goto __106 32257 __106: 32258 ; 32259 __103: 32260 ; 32261 (*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 32262 (*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpCollateNeeded)).FrefCount++ 32263 sqlite3.Xsqlite3_collation_needed(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, pDb, *(*uintptr)(unsafe.Pointer(&struct { 32264 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) 32265 }{tclCollateNeeded}))) 32266 goto __3 32267 32268 __13: 32269 if !(objc > 3) { 32270 goto __108 32271 } 32272 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 32273 return TCL_ERROR 32274 goto __109 32275 __108: 32276 if !(objc == 2) { 32277 goto __110 32278 } 32279 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 32280 goto __112 32281 } 32282 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+184, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, uintptr(0))) 32283 __112: 32284 ; 32285 goto __111 32286 __110: 32287 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 32288 goto __113 32289 } 32290 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit) 32291 __113: 32292 ; 32293 zCommit = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1048) 32294 if !(zCommit != 0 && *(*int32)(unsafe.Pointer(bp + 1048)) > 0) { 32295 goto __114 32296 } 32297 (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1048))+1)) 32298 libc.X__builtin___memcpy_chk(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, zCommit, uint64(*(*int32)(unsafe.Pointer(bp + 1048))+1), libc.X__builtin_object_size(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit, 0)) 32299 goto __115 32300 __114: 32301 (*SqliteDb)(unsafe.Pointer(pDb)).FzCommit = uintptr(0) 32302 __115: 32303 ; 32304 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzCommit != 0) { 32305 goto __116 32306 } 32307 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 32308 sqlite3.Xsqlite3_commit_hook(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 32309 f func(*libc.TLS, uintptr) int32 32310 }{DbCommitHandler})), pDb) 32311 goto __117 32312 __116: 32313 sqlite3.Xsqlite3_commit_hook(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 32314 __117: 32315 ; 32316 __111: 32317 ; 32318 __109: 32319 ; 32320 goto __3 32321 32322 __14: 32323 if !(objc != 3) { 32324 goto __118 32325 } 32326 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+9535) 32327 return TCL_ERROR 32328 __118: 32329 ; 32330 isComplete = sqlite3.Xsqlite3_complete(tls, tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0))) 32331 pResult1 = tcl.XTcl_GetObjResult(tls, interp) 32332 tcl.XTcl_SetBooleanObj(tls, pResult1, isComplete) 32333 goto __3 32334 32335 __15: 32336 if !(objc > 4) { 32337 goto __119 32338 } 32339 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11901) 32340 return TCL_ERROR 32341 __119: 32342 ; 32343 if !(objc == 2) { 32344 goto __120 32345 } 32346 32347 pResult2 = tcl.XTcl_NewListObj(tls, 0, uintptr(0)) 32348 ii = 0 32349 __122: 32350 if !(uint64(ii) < uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 32351 goto __124 32352 } 32353 *(*int32)(unsafe.Pointer(bp + 1052)) = 0 32354 sqlite3.Xsqlite3_db_config(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, aDbConfig[ii].Fop, libc.VaList(bp+200, -1, bp+1052)) 32355 tcl.XTcl_ListObjAppendElement(tls, interp, pResult2, 32356 tcl.XTcl_NewStringObj(tls, aDbConfig[ii].FzName, -1)) 32357 tcl.XTcl_ListObjAppendElement(tls, interp, pResult2, 32358 tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 1052)))) 32359 goto __123 32360 __123: 32361 ii++ 32362 goto __122 32363 goto __124 32364 __124: 32365 ; 32366 goto __121 32367 __120: 32368 zOpt = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 32369 *(*int32)(unsafe.Pointer(bp + 1056)) = -1 32370 *(*int32)(unsafe.Pointer(bp + 1060)) = 0 32371 if !(int32(*(*int8)(unsafe.Pointer(zOpt))) == '-') { 32372 goto __125 32373 } 32374 zOpt++ 32375 __125: 32376 ; 32377 ii = 0 32378 __126: 32379 if !(uint64(ii) < uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 32380 goto __128 32381 } 32382 if !(libc.Xstrcmp(tls, aDbConfig[ii].FzName, zOpt) == 0) { 32383 goto __129 32384 } 32385 goto __128 32386 __129: 32387 ; 32388 goto __127 32389 __127: 32390 ii++ 32391 goto __126 32392 goto __128 32393 __128: 32394 ; 32395 if !(uint64(ii) >= uint64(unsafe.Sizeof(aDbConfig))/uint64(unsafe.Sizeof(DbConfigChoices{}))) { 32396 goto __130 32397 } 32398 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+216, ts+11920, zOpt, 32399 ts+11945, uintptr(0))) 32400 return TCL_ERROR 32401 __130: 32402 ; 32403 if !(objc == 4) { 32404 goto __131 32405 } 32406 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1056) != 0) { 32407 goto __132 32408 } 32409 return TCL_ERROR 32410 __132: 32411 ; 32412 __131: 32413 ; 32414 sqlite3.Xsqlite3_db_config(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, aDbConfig[ii].Fop, libc.VaList(bp+248, *(*int32)(unsafe.Pointer(bp + 1056)), bp+1060)) 32415 pResult2 = tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 1060))) 32416 __121: 32417 ; 32418 tcl.XTcl_SetObjResult(tls, interp, pResult2) 32419 goto __3 32420 32421 __16: 32422 lineno = 0 32423 if !(objc < 5 || objc > 7) { 32424 goto __133 32425 } 32426 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, 32427 ts+11947) 32428 return TCL_ERROR 32429 __133: 32430 ; 32431 if !(objc >= 6) { 32432 goto __134 32433 } 32434 zSep = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8)), uintptr(0)) 32435 goto __135 32436 __134: 32437 zSep = ts + 12009 32438 __135: 32439 ; 32440 if !(objc >= 7) { 32441 goto __136 32442 } 32443 zNull = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 6*8)), uintptr(0)) 32444 goto __137 32445 __136: 32446 zNull = ts + 584 32447 __137: 32448 ; 32449 zConflict = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 32450 zTable = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), uintptr(0)) 32451 zFile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0)) 32452 nSep = strlen30(tls, zSep) 32453 nNull = strlen30(tls, zNull) 32454 if !(nSep == 0) { 32455 goto __138 32456 } 32457 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+264, ts+12011, 32458 uintptr(0))) 32459 return TCL_ERROR 32460 __138: 32461 ; 32462 if !(libc.Xstrcmp(tls, zConflict, ts+12055) != 0 && libc.Xstrcmp(tls, zConflict, ts+12064) != 0 && libc.Xstrcmp(tls, zConflict, ts+12070) != 0 && libc.Xstrcmp(tls, zConflict, ts+12075) != 0 && libc.Xstrcmp(tls, zConflict, ts+12082) != 0) { 32463 goto __139 32464 } 32465 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+280, ts+12090, zConflict, 32466 ts+12099, uintptr(0))) 32467 return TCL_ERROR 32468 __139: 32469 ; 32470 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+12179, libc.VaList(bp+312, zTable)) 32471 if !(zSql == uintptr(0)) { 32472 goto __140 32473 } 32474 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+320, ts+12198, zTable, uintptr(0))) 32475 return TCL_ERROR 32476 __140: 32477 ; 32478 nByte = strlen30(tls, zSql) 32479 rc = sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, bp+1064, uintptr(0)) 32480 sqlite3.Xsqlite3_free(tls, zSql) 32481 if !(rc != 0) { 32482 goto __141 32483 } 32484 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+344, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 32485 nCol = 0 32486 goto __142 32487 __141: 32488 nCol = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 32489 __142: 32490 ; 32491 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 32492 if !(nCol == 0) { 32493 goto __143 32494 } 32495 return TCL_ERROR 32496 __143: 32497 ; 32498 zSql = libc.Xmalloc(tls, uint64(nByte+50+nCol*2)) 32499 if !(zSql == uintptr(0)) { 32500 goto __144 32501 } 32502 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+368, ts+12229, uintptr(0))) 32503 return TCL_ERROR 32504 __144: 32505 ; 32506 sqlite3.Xsqlite3_snprintf(tls, nByte+50, zSql, ts+12251, 32507 libc.VaList(bp+384, zConflict, zTable)) 32508 j = strlen30(tls, zSql) 32509 i = 1 32510 __145: 32511 if !(i < nCol) { 32512 goto __147 32513 } 32514 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8(',') 32515 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8('?') 32516 goto __146 32517 __146: 32518 i++ 32519 goto __145 32520 goto __147 32521 __147: 32522 ; 32523 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8(')') 32524 *(*int8)(unsafe.Pointer(zSql + uintptr(j))) = int8(0) 32525 rc = sqlite3.Xsqlite3_prepare(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSql, -1, bp+1064, uintptr(0)) 32526 libc.Xfree(tls, zSql) 32527 if !(rc != 0) { 32528 goto __148 32529 } 32530 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+400, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 32531 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 32532 return TCL_ERROR 32533 __148: 32534 ; 32535 in = libc.Xfopen(tls, zFile, ts+4402) 32536 if !(in == uintptr(0)) { 32537 goto __149 32538 } 32539 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+424, ts+12283, zFile, uintptr(0))) 32540 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 32541 return TCL_ERROR 32542 __149: 32543 ; 32544 azCol = libc.Xmalloc(tls, uint64(unsafe.Sizeof(uintptr(0)))*uint64(nCol+1)) 32545 if !(azCol == uintptr(0)) { 32546 goto __150 32547 } 32548 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+448, ts+12229, uintptr(0))) 32549 libc.Xfclose(tls, in) 32550 return TCL_ERROR 32551 __150: 32552 ; 32553 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, ts+12309, uintptr(0), uintptr(0), uintptr(0)) 32554 zCommit1 = ts + 11628 32555 __151: 32556 if !(libc.AssignUintptr(&zLine, local_getline(tls, uintptr(0), in)) != uintptr(0)) { 32557 goto __152 32558 } 32559 lineno++ 32560 *(*uintptr)(unsafe.Pointer(azCol)) = zLine 32561 i = 0 32562 z = zLine 32563 __153: 32564 if !(*(*int8)(unsafe.Pointer(z)) != 0) { 32565 goto __155 32566 } 32567 if !(int32(*(*int8)(unsafe.Pointer(z))) == int32(*(*int8)(unsafe.Pointer(zSep))) && libc.Xstrncmp(tls, z, zSep, uint64(nSep)) == 0) { 32568 goto __156 32569 } 32570 *(*int8)(unsafe.Pointer(z)) = int8(0) 32571 i++ 32572 if !(i < nCol) { 32573 goto __157 32574 } 32575 *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)) = z + uintptr(nSep) 32576 z += uintptr(nSep - 1) 32577 __157: 32578 ; 32579 __156: 32580 ; 32581 goto __154 32582 __154: 32583 z++ 32584 goto __153 32585 goto __155 32586 __155: 32587 ; 32588 if !(i+1 != nCol) { 32589 goto __158 32590 } 32591 nErr = strlen30(tls, zFile) + 200 32592 zErr = libc.Xmalloc(tls, uint64(nErr)) 32593 if !(zErr != 0) { 32594 goto __159 32595 } 32596 sqlite3.Xsqlite3_snprintf(tls, nErr, zErr, 32597 ts+12315, 32598 libc.VaList(bp+464, zFile, lineno, nCol, i+1)) 32599 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+496, zErr, uintptr(0))) 32600 libc.Xfree(tls, zErr) 32601 __159: 32602 ; 32603 zCommit1 = ts + 7824 32604 goto __152 32605 __158: 32606 ; 32607 i = 0 32608 __160: 32609 if !(i < nCol) { 32610 goto __162 32611 } 32612 32613 if !(nNull > 0 && libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)), zNull) == 0 || 32614 strlen30(tls, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8))) == 0) { 32615 goto __163 32616 } 32617 sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 1064)), i+1) 32618 goto __164 32619 __163: 32620 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 1064)), i+1, *(*uintptr)(unsafe.Pointer(azCol + uintptr(i)*8)), -1, uintptr(0)) 32621 __164: 32622 ; 32623 goto __161 32624 __161: 32625 i++ 32626 goto __160 32627 goto __162 32628 __162: 32629 ; 32630 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 32631 rc = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 32632 libc.Xfree(tls, zLine) 32633 if !(rc != SQLITE_OK) { 32634 goto __165 32635 } 32636 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+512, ts+12221, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 32637 zCommit1 = ts + 7824 32638 goto __152 32639 __165: 32640 ; 32641 goto __151 32642 __152: 32643 ; 32644 libc.Xfree(tls, azCol) 32645 libc.Xfclose(tls, in) 32646 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 1064))) 32647 sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zCommit1, uintptr(0), uintptr(0), uintptr(0)) 32648 32649 if !(int32(*(*int8)(unsafe.Pointer(zCommit1))) == 'C') { 32650 goto __166 32651 } 32652 32653 pResult3 = tcl.XTcl_GetObjResult(tls, interp) 32654 tcl.XTcl_SetIntObj(tls, pResult3, lineno) 32655 rc = TCL_OK 32656 goto __167 32657 __166: 32658 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([80]int8{})), bp+1072, ts+1333, libc.VaList(bp+536, lineno)) 32659 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+544, ts+12375, bp+1072, 32660 uintptr(0))) 32661 rc = TCL_ERROR 32662 __167: 32663 ; 32664 goto __3 32665 32666 __17: 32667 zSchema = uintptr(0) 32668 pValue = uintptr(0) 32669 *(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) = int64(0) 32670 *(*int32)(unsafe.Pointer(bp + 1160)) = 0 32671 32672 if !(objc < 3) { 32673 goto __168 32674 } 32675 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12408) 32676 rc = TCL_ERROR 32677 goto __3 32678 __168: 32679 ; 32680 i1 = 2 32681 __169: 32682 if !(i1 < objc-1) { 32683 goto __171 32684 } 32685 z1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i1)*8))) 32686 if !(libc.Xstrcmp(tls, z1, ts+12425) == 0 && i1 < objc-2) { 32687 goto __172 32688 } 32689 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(libc.PreIncInt32(&i1, 1))*8)), bp+1152) 32690 if !(rc != 0) { 32691 goto __173 32692 } 32693 goto deserialize_error 32694 __173: 32695 ; 32696 *(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 1152)) 32697 goto __170 32698 __172: 32699 ; 32700 if !(libc.Xstrcmp(tls, z1, ts+12434) == 0 && i1 < objc-2) { 32701 goto __174 32702 } 32703 rc = tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(libc.PreIncInt32(&i1, 1))*8)), bp+1160) 32704 if !(rc != 0) { 32705 goto __175 32706 } 32707 goto deserialize_error 32708 __175: 32709 ; 32710 goto __170 32711 __174: 32712 ; 32713 if !(zSchema == uintptr(0) && i1 == objc-2 && int32(*(*int8)(unsafe.Pointer(z1))) != '-') { 32714 goto __176 32715 } 32716 zSchema = z1 32717 goto __170 32718 __176: 32719 ; 32720 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+568, ts+12444, z1, uintptr(0))) 32721 rc = TCL_ERROR 32722 goto deserialize_error 32723 goto __170 32724 __170: 32725 i1++ 32726 goto __169 32727 goto __171 32728 __171: 32729 ; 32730 pValue = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 32731 pBA = tcl.XTcl_GetByteArrayFromObj(tls, pValue, bp+1164) 32732 pData = sqlite3.Xsqlite3_malloc64(tls, uint64(*(*int32)(unsafe.Pointer(bp + 1164)))) 32733 if !(pData == uintptr(0) && *(*int32)(unsafe.Pointer(bp + 1164)) > 0) { 32734 goto __177 32735 } 32736 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+592, ts+2069, uintptr(0))) 32737 rc = TCL_ERROR 32738 goto __178 32739 __177: 32740 if !(*(*int32)(unsafe.Pointer(bp + 1164)) > 0) { 32741 goto __179 32742 } 32743 libc.X__builtin___memcpy_chk(tls, pData, pBA, uint64(*(*int32)(unsafe.Pointer(bp + 1164))), libc.X__builtin_object_size(tls, pData, 0)) 32744 __179: 32745 ; 32746 if !(*(*int32)(unsafe.Pointer(bp + 1160)) != 0) { 32747 goto __180 32748 } 32749 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_READONLY 32750 goto __181 32751 __180: 32752 flags = SQLITE_DESERIALIZE_FREEONCLOSE | SQLITE_DESERIALIZE_RESIZEABLE 32753 __181: 32754 ; 32755 xrc = sqlite3.Xsqlite3_deserialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema, pData, int64(*(*int32)(unsafe.Pointer(bp + 1164))), int64(*(*int32)(unsafe.Pointer(bp + 1164))), uint32(flags)) 32756 if !(xrc != 0) { 32757 goto __182 32758 } 32759 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+608, ts+12461, uintptr(0))) 32760 rc = TCL_ERROR 32761 __182: 32762 ; 32763 if !(*(*sqlite3_int64)(unsafe.Pointer(bp + 1168)) > int64(0)) { 32764 goto __183 32765 } 32766 sqlite3.Xsqlite3_file_control(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema, SQLITE_FCNTL_SIZE_LIMIT, bp+1168) 32767 __183: 32768 ; 32769 __178: 32770 ; 32771 deserialize_error: 32772 goto __3 32773 32774 __18: 32775 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+624, ts+12489, 32776 uintptr(0))) 32777 return TCL_ERROR 32778 32779 __19: 32780 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb))) 32781 goto __3 32782 32783 __20: 32784 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_error_offset(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb))) 32785 goto __3 32786 32787 __21: 32788 __22: 32789 pResult4 = uintptr(0) 32790 if !(objc != 3) { 32791 goto __184 32792 } 32793 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+9535) 32794 return TCL_ERROR 32795 __184: 32796 ; 32797 dbEvalInit(tls, bp+1176, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), 0) 32798 rc = dbEvalStep(tls, bp+1176) 32799 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 24) { 32800 goto __185 32801 } 32802 if !(rc == TCL_OK) { 32803 goto __187 32804 } 32805 pResult4 = dbEvalColumnValue(tls, bp+1176, 0) 32806 goto __188 32807 __187: 32808 if !(rc == TCL_BREAK) { 32809 goto __189 32810 } 32811 tcl.XTcl_ResetResult(tls, interp) 32812 __189: 32813 ; 32814 __188: 32815 ; 32816 goto __186 32817 __185: 32818 if !(rc == TCL_BREAK || rc == TCL_OK) { 32819 goto __190 32820 } 32821 pResult4 = tcl.XTcl_NewBooleanObj(tls, libc.Bool32(rc == TCL_OK)) 32822 __190: 32823 ; 32824 __186: 32825 ; 32826 dbEvalFinalize(tls, bp+1176) 32827 if !(pResult4 != 0) { 32828 goto __191 32829 } 32830 tcl.XTcl_SetObjResult(tls, interp, pResult4) 32831 __191: 32832 ; 32833 if !(rc == TCL_BREAK) { 32834 goto __192 32835 } 32836 rc = TCL_OK 32837 __192: 32838 ; 32839 goto __3 32840 32841 __23: 32842 evalFlags = 0 32843 __193: 32844 if !(objc > 3 && libc.AssignUintptr(&zOpt1, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) != uintptr(0) && int32(*(*int8)(unsafe.Pointer(zOpt1))) == '-') { 32845 goto __194 32846 } 32847 if !(libc.Xstrcmp(tls, zOpt1, ts+12537) == 0) { 32848 goto __195 32849 } 32850 evalFlags = evalFlags | SQLITE_EVAL_WITHOUTNULLS 32851 goto __196 32852 __195: 32853 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+640, ts+12551, zOpt1, ts+11945, uintptr(0))) 32854 return TCL_ERROR 32855 __196: 32856 ; 32857 objc-- 32858 objv += 8 32859 goto __193 32860 __194: 32861 ; 32862 if !(objc < 3 || objc > 5) { 32863 goto __197 32864 } 32865 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, 32866 ts+12569) 32867 return TCL_ERROR 32868 __197: 32869 ; 32870 if !(objc == 3) { 32871 goto __198 32872 } 32873 pRet = tcl.XTcl_NewObj(tls) 32874 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 32875 dbEvalInit(tls, bp+1232, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), 0) 32876 __200: 32877 if !(TCL_OK == libc.AssignInt32(&rc, dbEvalStep(tls, bp+1232))) { 32878 goto __201 32879 } 32880 dbEvalRowInfo(tls, bp+1232, bp+1288, uintptr(0)) 32881 i2 = 0 32882 __202: 32883 if !(i2 < *(*int32)(unsafe.Pointer(bp + 1288))) { 32884 goto __204 32885 } 32886 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, dbEvalColumnValue(tls, bp+1232, i2)) 32887 goto __203 32888 __203: 32889 i2++ 32890 goto __202 32891 goto __204 32892 __204: 32893 ; 32894 goto __200 32895 __201: 32896 ; 32897 dbEvalFinalize(tls, bp+1232) 32898 if !(rc == TCL_BREAK) { 32899 goto __205 32900 } 32901 tcl.XTcl_SetObjResult(tls, interp, pRet) 32902 rc = TCL_OK 32903 __205: 32904 ; 32905 __206: 32906 if !(libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount, 1) <= 0) { 32907 goto __209 32908 } 32909 tcl.XTclFreeObj(tls, pRet) 32910 __209: 32911 ; 32912 goto __207 32913 __207: 32914 if 0 != 0 { 32915 goto __206 32916 } 32917 goto __208 32918 __208: 32919 ; 32920 goto __199 32921 __198: 32922 pArray = uintptr(0) 32923 32924 if !(objc >= 5 && *(*int8)(unsafe.Pointer(tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))))) != 0) { 32925 goto __210 32926 } 32927 pArray = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 32928 __210: 32929 ; 32930 pScript = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 32931 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 32932 32933 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(DbEvalContext{}))) 32934 dbEvalInit(tls, p, pDb, *(*uintptr)(unsafe.Pointer(objv + 2*8)), pArray, evalFlags) 32935 32936 *(*ClientData)(unsafe.Pointer(bp + 1296)) = p 32937 *(*ClientData)(unsafe.Pointer(bp + 1296 + 1*8)) = pScript 32938 rc = DbEvalNextCmd(tls, bp+1296, interp, TCL_OK) 32939 __199: 32940 ; 32941 goto __3 32942 32943 __24: 32944 flags1 = SQLITE_UTF8 32945 *(*int32)(unsafe.Pointer(bp + 1312)) = -1 32946 *(*int32)(unsafe.Pointer(bp + 1368)) = SQLITE_NULL 32947 if !(objc < 4) { 32948 goto __211 32949 } 32950 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12605) 32951 return TCL_ERROR 32952 __211: 32953 ; 32954 i3 = 3 32955 __212: 32956 if !(i3 < objc-1) { 32957 goto __214 32958 } 32959 z2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3)*8))) 32960 n1 = strlen30(tls, z2) 32961 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12628, uint64(n1)) == 0) { 32962 goto __215 32963 } 32964 if !(i3 == objc-2) { 32965 goto __217 32966 } 32967 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+672, ts+12638, z2, uintptr(0))) 32968 return TCL_ERROR 32969 __217: 32970 ; 32971 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3+1)*8)), bp+1312) != 0) { 32972 goto __218 32973 } 32974 return TCL_ERROR 32975 __218: 32976 ; 32977 if !(*(*int32)(unsafe.Pointer(bp + 1312)) < 0) { 32978 goto __219 32979 } 32980 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+696, ts+12668, 32981 uintptr(0))) 32982 return TCL_ERROR 32983 __219: 32984 ; 32985 i3++ 32986 goto __216 32987 __215: 32988 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12709, uint64(n1)) == 0) { 32989 goto __220 32990 } 32991 flags1 = flags1 | SQLITE_DETERMINISTIC 32992 goto __221 32993 __220: 32994 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12724, uint64(n1)) == 0) { 32995 goto __222 32996 } 32997 flags1 = flags1 | SQLITE_DIRECTONLY 32998 goto __223 32999 __222: 33000 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12736, uint64(n1)) == 0) { 33001 goto __224 33002 } 33003 flags1 = flags1 | SQLITE_INNOCUOUS 33004 goto __225 33005 __224: 33006 if !(n1 > 1 && libc.Xstrncmp(tls, z2, ts+12747, uint64(n1)) == 0) { 33007 goto __226 33008 } 33009 *(*[6]uintptr)(unsafe.Pointer(bp + 1320)) = [6]uintptr{ts + 8470, ts + 12759, ts + 12764, ts + 12769, ts + 12774, uintptr(0)} 33010 33011 if !(i3 == objc-2) { 33012 goto __228 33013 } 33014 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+712, ts+12638, z2, uintptr(0))) 33015 return TCL_ERROR 33016 __228: 33017 ; 33018 i3++ 33019 if !(tcl.XTcl_GetIndexFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i3)*8)), bp+1320, ts+12778, 0, bp+1368) != 0) { 33020 goto __229 33021 } 33022 return TCL_ERROR 33023 __229: 33024 ; 33025 *(*int32)(unsafe.Pointer(bp + 1368))++ 33026 goto __227 33027 __226: 33028 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+736, ts+11851, z2, 33029 ts+12783, uintptr(0))) 33030 return TCL_ERROR 33031 __227: 33032 ; 33033 __225: 33034 ; 33035 __223: 33036 ; 33037 __221: 33038 ; 33039 __216: 33040 ; 33041 goto __213 33042 __213: 33043 i3++ 33044 goto __212 33045 goto __214 33046 __214: 33047 ; 33048 pScript1 = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 33049 zName1 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0)) 33050 pFunc = findSqlFunc(tls, pDb, zName1) 33051 if !(pFunc == uintptr(0)) { 33052 goto __230 33053 } 33054 return TCL_ERROR 33055 __230: 33056 ; 33057 if !((*SqlFunc)(unsafe.Pointer(pFunc)).FpScript != 0) { 33058 goto __231 33059 } 33060 __232: 33061 if !(libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*SqlFunc)(unsafe.Pointer(pFunc)).FpScript)).FrefCount, 1) <= 0) { 33062 goto __235 33063 } 33064 tcl.XTclFreeObj(tls, (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript) 33065 __235: 33066 ; 33067 goto __233 33068 __233: 33069 if 0 != 0 { 33070 goto __232 33071 } 33072 goto __234 33073 __234: 33074 ; 33075 __231: 33076 ; 33077 (*SqlFunc)(unsafe.Pointer(pFunc)).FpScript = pScript1 33078 (*Tcl_Obj)(unsafe.Pointer(pScript1)).FrefCount++ 33079 (*SqlFunc)(unsafe.Pointer(pFunc)).FuseEvalObjv = safeToUseEvalObjv(tls, interp, pScript1) 33080 (*SqlFunc)(unsafe.Pointer(pFunc)).FeType = *(*int32)(unsafe.Pointer(bp + 1368)) 33081 rc = sqlite3.Xsqlite3_create_function(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zName1, *(*int32)(unsafe.Pointer(bp + 1312)), flags1, 33082 pFunc, *(*uintptr)(unsafe.Pointer(&struct { 33083 f func(*libc.TLS, uintptr, int32, uintptr) 33084 }{tclSqlFunc})), uintptr(0), uintptr(0)) 33085 if !(rc != SQLITE_OK) { 33086 goto __236 33087 } 33088 rc = TCL_ERROR 33089 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(1)) 33090 __236: 33091 ; 33092 goto __3 33093 33094 __25: 33095 isReadonly1 = 0 33096 zDb = ts + 85 33097 33098 if !(objc > 3 && libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), ts+12434) == 0) { 33099 goto __237 33100 } 33101 isReadonly1 = 1 33102 __237: 33103 ; 33104 if !(objc != 5+isReadonly1 && objc != 6+isReadonly1) { 33105 goto __238 33106 } 33107 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12861) 33108 return TCL_ERROR 33109 __238: 33110 ; 33111 if !(objc == 6+isReadonly1) { 33112 goto __239 33113 } 33114 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(2+isReadonly1)*8))) 33115 __239: 33116 ; 33117 zTable1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8))) 33118 zColumn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8))) 33119 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+1376) 33120 33121 if !(rc == TCL_OK) { 33122 goto __240 33123 } 33124 rc = createIncrblobChannel(tls, 33125 interp, pDb, zDb, zTable1, zColumn, *(*Tcl_WideInt)(unsafe.Pointer(bp + 1376)), isReadonly1) 33126 __240: 33127 ; 33128 goto __3 33129 33130 __26: 33131 sqlite3.Xsqlite3_interrupt(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 33132 goto __3 33133 33134 __27: 33135 if !(objc != 2 && objc != 3) { 33136 goto __241 33137 } 33138 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12897) 33139 return TCL_ERROR 33140 __241: 33141 ; 33142 if !(objc == 3) { 33143 goto __242 33144 } 33145 zNull1 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1384) 33146 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzNull != 0) { 33147 goto __243 33148 } 33149 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull) 33150 __243: 33151 ; 33152 if !(zNull1 != 0 && *(*int32)(unsafe.Pointer(bp + 1384)) > 0) { 33153 goto __244 33154 } 33155 (*SqliteDb)(unsafe.Pointer(pDb)).FzNull = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1384))+1)) 33156 libc.X__builtin___memcpy_chk(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, zNull1, uint64(*(*int32)(unsafe.Pointer(bp + 1384))), libc.X__builtin_object_size(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, 0)) 33157 *(*int8)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FzNull + uintptr(*(*int32)(unsafe.Pointer(bp + 1384))))) = int8(0) 33158 goto __245 33159 __244: 33160 (*SqliteDb)(unsafe.Pointer(pDb)).FzNull = uintptr(0) 33161 __245: 33162 ; 33163 __242: 33164 ; 33165 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzNull, -1)) 33166 goto __3 33167 33168 __28: 33169 if !(objc != 2) { 33170 goto __246 33171 } 33172 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 33173 return TCL_ERROR 33174 __246: 33175 ; 33176 rowid = sqlite3.Xsqlite3_last_insert_rowid(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 33177 pResult5 = tcl.XTcl_GetObjResult(tls, interp) 33178 tcl.XTcl_SetWideIntObj(tls, pResult5, rowid) 33179 goto __3 33180 33181 __29: 33182 if !(objc == 2) { 33183 goto __247 33184 } 33185 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 33186 goto __249 33187 } 33188 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+768, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, uintptr(0))) 33189 __249: 33190 ; 33191 goto __248 33192 __247: 33193 if !(objc == 4) { 33194 goto __250 33195 } 33196 if !(TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1388)) { 33197 goto __252 33198 } 33199 return TCL_ERROR 33200 __252: 33201 ; 33202 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 33203 goto __253 33204 } 33205 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress) 33206 __253: 33207 ; 33208 zProgress = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1392) 33209 if !(zProgress != 0 && *(*int32)(unsafe.Pointer(bp + 1392)) > 0) { 33210 goto __254 33211 } 33212 (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1392))+1)) 33213 libc.X__builtin___memcpy_chk(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, zProgress, uint64(*(*int32)(unsafe.Pointer(bp + 1392))+1), libc.X__builtin_object_size(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress, 0)) 33214 goto __255 33215 __254: 33216 (*SqliteDb)(unsafe.Pointer(pDb)).FzProgress = uintptr(0) 33217 __255: 33218 ; 33219 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProgress != 0) { 33220 goto __256 33221 } 33222 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 33223 sqlite3.Xsqlite3_progress_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1388)), *(*uintptr)(unsafe.Pointer(&struct { 33224 f func(*libc.TLS, uintptr) int32 33225 }{DbProgressHandler})), pDb) 33226 goto __257 33227 __256: 33228 sqlite3.Xsqlite3_progress_handler(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, 0, uintptr(0), uintptr(0)) 33229 __257: 33230 ; 33231 goto __251 33232 __250: 33233 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12907) 33234 return TCL_ERROR 33235 __251: 33236 ; 33237 __248: 33238 ; 33239 goto __3 33240 33241 __30: 33242 if !(objc > 3) { 33243 goto __258 33244 } 33245 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 33246 return TCL_ERROR 33247 goto __259 33248 __258: 33249 if !(objc == 2) { 33250 goto __260 33251 } 33252 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 33253 goto __262 33254 } 33255 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+784, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, uintptr(0))) 33256 __262: 33257 ; 33258 goto __261 33259 __260: 33260 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 33261 goto __263 33262 } 33263 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile) 33264 __263: 33265 ; 33266 zProfile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1396) 33267 if !(zProfile != 0 && *(*int32)(unsafe.Pointer(bp + 1396)) > 0) { 33268 goto __264 33269 } 33270 (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1396))+1)) 33271 libc.X__builtin___memcpy_chk(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, zProfile, uint64(*(*int32)(unsafe.Pointer(bp + 1396))+1), libc.X__builtin_object_size(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile, 0)) 33272 goto __265 33273 __264: 33274 (*SqliteDb)(unsafe.Pointer(pDb)).FzProfile = uintptr(0) 33275 __265: 33276 ; 33277 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzProfile != 0) { 33278 goto __266 33279 } 33280 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 33281 sqlite3.Xsqlite3_profile(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 33282 f func(*libc.TLS, uintptr, uintptr, sqlite_uint64) 33283 }{DbProfileHandler})), pDb) 33284 goto __267 33285 __266: 33286 sqlite3.Xsqlite3_profile(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 33287 __267: 33288 ; 33289 __261: 33290 ; 33291 __259: 33292 ; 33293 goto __3 33294 33295 __31: 33296 if !(objc != 3) { 33297 goto __268 33298 } 33299 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+12918) 33300 return TCL_ERROR 33301 __268: 33302 ; 33303 goto __3 33304 33305 __32: 33306 nTimeout = 0 33307 33308 if !(objc == 3) { 33309 goto __269 33310 } 33311 zDestDb = ts + 85 33312 zSrcFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33313 goto __270 33314 __269: 33315 if !(objc == 4) { 33316 goto __271 33317 } 33318 zDestDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33319 zSrcFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 33320 goto __272 33321 __271: 33322 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11709) 33323 return TCL_ERROR 33324 __272: 33325 ; 33326 __270: 33327 ; 33328 rc = sqlite3.Xsqlite3_open_v2(tls, zSrcFile, bp+1400, 33329 SQLITE_OPEN_READONLY|(*SqliteDb)(unsafe.Pointer(pDb)).FopenFlags, uintptr(0)) 33330 if !(rc != SQLITE_OK) { 33331 goto __273 33332 } 33333 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+800, ts+12922, 33334 sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))), uintptr(0))) 33335 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 33336 return TCL_ERROR 33337 __273: 33338 ; 33339 pBackup1 = sqlite3.Xsqlite3_backup_init(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zDestDb, *(*uintptr)(unsafe.Pointer(bp + 1400)), ts+85) 33340 if !(pBackup1 == uintptr(0)) { 33341 goto __274 33342 } 33343 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+824, ts+12952, 33344 sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 33345 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 33346 return TCL_ERROR 33347 __274: 33348 ; 33349 __275: 33350 if !(libc.AssignInt32(&rc, sqlite3.Xsqlite3_backup_step(tls, pBackup1, 100)) == SQLITE_OK || 33351 rc == SQLITE_BUSY) { 33352 goto __276 33353 } 33354 if !(rc == SQLITE_BUSY) { 33355 goto __277 33356 } 33357 if !(libc.PostIncInt32(&nTimeout, 1) >= 3) { 33358 goto __278 33359 } 33360 goto __276 33361 __278: 33362 ; 33363 sqlite3.Xsqlite3_sleep(tls, 100) 33364 __277: 33365 ; 33366 goto __275 33367 __276: 33368 ; 33369 sqlite3.Xsqlite3_backup_finish(tls, pBackup1) 33370 if !(rc == SQLITE_DONE) { 33371 goto __279 33372 } 33373 rc = TCL_OK 33374 goto __280 33375 __279: 33376 if !(rc == SQLITE_BUSY || rc == SQLITE_LOCKED) { 33377 goto __281 33378 } 33379 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+848, ts+12969, 33380 uintptr(0))) 33381 rc = TCL_ERROR 33382 goto __282 33383 __281: 33384 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+864, ts+12952, 33385 sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 33386 rc = TCL_ERROR 33387 __282: 33388 ; 33389 __280: 33390 ; 33391 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 1400))) 33392 goto __3 33393 33394 __33: 33395 if objc >= 3 { 33396 zSchema1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33397 } else { 33398 zSchema1 = ts + 85 33399 } 33400 *(*sqlite3_int64)(unsafe.Pointer(bp + 1408)) = int64(0) 33401 if !(objc != 2 && objc != 3) { 33402 goto __283 33403 } 33404 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13006) 33405 rc = TCL_ERROR 33406 goto __284 33407 __283: 33408 pData1 = sqlite3.Xsqlite3_serialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema1, bp+1408, uint32(SQLITE_SERIALIZE_NOCOPY)) 33409 if !(pData1 != 0) { 33410 goto __285 33411 } 33412 needFree = 0 33413 goto __286 33414 __285: 33415 pData1 = sqlite3.Xsqlite3_serialize(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zSchema1, bp+1408, uint32(0)) 33416 needFree = 1 33417 __286: 33418 ; 33419 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, pData1, int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 1408))))) 33420 if !(needFree != 0) { 33421 goto __287 33422 } 33423 sqlite3.Xsqlite3_free(tls, pData1) 33424 __287: 33425 ; 33426 __284: 33427 ; 33428 goto __3 33429 33430 __34: 33431 if !(objc != 3) { 33432 goto __288 33433 } 33434 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13017) 33435 return TCL_ERROR 33436 __288: 33437 ; 33438 zOp = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 33439 if !(libc.Xstrcmp(tls, zOp, ts+9485) == 0) { 33440 goto __289 33441 } 33442 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnStep 33443 goto __290 33444 __289: 33445 if !(libc.Xstrcmp(tls, zOp, ts+13039) == 0) { 33446 goto __291 33447 } 33448 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnSort 33449 goto __292 33450 __291: 33451 if !(libc.Xstrcmp(tls, zOp, ts+13044) == 0) { 33452 goto __293 33453 } 33454 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnIndex 33455 goto __294 33456 __293: 33457 if !(libc.Xstrcmp(tls, zOp, ts+13054) == 0) { 33458 goto __295 33459 } 33460 v2 = (*SqliteDb)(unsafe.Pointer(pDb)).FnVMStep 33461 goto __296 33462 __295: 33463 tcl.XTcl_AppendResult(tls, interp, 33464 libc.VaList(bp+888, ts+13061, 33465 uintptr(0))) 33466 return TCL_ERROR 33467 __296: 33468 ; 33469 __294: 33470 ; 33471 __292: 33472 ; 33473 __290: 33474 ; 33475 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, v2)) 33476 goto __3 33477 33478 __35: 33479 if !(objc != 3) { 33480 goto __297 33481 } 33482 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13117) 33483 return TCL_ERROR 33484 __297: 33485 ; 33486 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1416) != 0) { 33487 goto __298 33488 } 33489 return TCL_ERROR 33490 __298: 33491 ; 33492 sqlite3.Xsqlite3_busy_timeout(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1416))) 33493 goto __3 33494 33495 __36: 33496 if !(objc != 2) { 33497 goto __299 33498 } 33499 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 33500 return TCL_ERROR 33501 __299: 33502 ; 33503 pResult6 = tcl.XTcl_GetObjResult(tls, interp) 33504 tcl.XTcl_SetWideIntObj(tls, pResult6, sqlite3.Xsqlite3_total_changes64(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 33505 goto __3 33506 33507 __37: 33508 if !(objc > 3) { 33509 goto __300 33510 } 33511 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+11698) 33512 return TCL_ERROR 33513 goto __301 33514 __300: 33515 if !(objc == 2) { 33516 goto __302 33517 } 33518 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 33519 goto __304 33520 } 33521 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+904, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, uintptr(0))) 33522 __304: 33523 ; 33524 goto __303 33525 __302: 33526 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 33527 goto __305 33528 } 33529 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace) 33530 __305: 33531 ; 33532 zTrace = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1420) 33533 if !(zTrace != 0 && *(*int32)(unsafe.Pointer(bp + 1420)) > 0) { 33534 goto __306 33535 } 33536 (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1420))+1)) 33537 libc.X__builtin___memcpy_chk(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, zTrace, uint64(*(*int32)(unsafe.Pointer(bp + 1420))+1), libc.X__builtin_object_size(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace, 0)) 33538 goto __307 33539 __306: 33540 (*SqliteDb)(unsafe.Pointer(pDb)).FzTrace = uintptr(0) 33541 __307: 33542 ; 33543 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTrace != 0) { 33544 goto __308 33545 } 33546 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 33547 sqlite3.Xsqlite3_trace(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 33548 f func(*libc.TLS, uintptr, uintptr) 33549 }{DbTraceHandler})), pDb) 33550 goto __309 33551 __308: 33552 sqlite3.Xsqlite3_trace(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uintptr(0), uintptr(0)) 33553 __309: 33554 ; 33555 __303: 33556 ; 33557 __301: 33558 ; 33559 goto __3 33560 33561 __38: 33562 if !(objc > 4) { 33563 goto __310 33564 } 33565 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13130) 33566 return TCL_ERROR 33567 goto __311 33568 __310: 33569 if !(objc == 2) { 33570 goto __312 33571 } 33572 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 33573 goto __314 33574 } 33575 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+920, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, uintptr(0))) 33576 __314: 33577 ; 33578 goto __313 33579 __312: 33580 wMask = int64(0) 33581 if !(objc == 4) { 33582 goto __315 33583 } 33584 if !(TCL_OK != tcl.XTcl_ListObjLength(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1424)) { 33585 goto __317 33586 } 33587 return TCL_ERROR 33588 __317: 33589 ; 33590 i4 = 0 33591 __318: 33592 if !(i4 < *(*int32)(unsafe.Pointer(bp + 1424))) { 33593 goto __320 33594 } 33595 if !(TCL_OK != tcl.XTcl_ListObjIndex(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), i4, bp+1432)) { 33596 goto __321 33597 } 33598 return TCL_ERROR 33599 __321: 33600 ; 33601 if !(tcl.XTcl_GetIndexFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 1432)), uintptr(unsafe.Pointer(&TTYPE_strs)), ts+13148, 33602 0, bp+1440) != TCL_OK) { 33603 goto __322 33604 } 33605 pError = tcl.XTcl_DuplicateObj(tls, tcl.XTcl_GetObjResult(tls, interp)) 33606 (*Tcl_Obj)(unsafe.Pointer(pError)).FrefCount++ 33607 if !(TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 1432)), bp+1448)) { 33608 goto __324 33609 } 33610 __326: 33611 if !(libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pError)).FrefCount, 1) <= 0) { 33612 goto __329 33613 } 33614 tcl.XTclFreeObj(tls, pError) 33615 __329: 33616 ; 33617 goto __327 33618 __327: 33619 if 0 != 0 { 33620 goto __326 33621 } 33622 goto __328 33623 __328: 33624 ; 33625 wMask = wMask | *(*Tcl_WideInt)(unsafe.Pointer(bp + 1448)) 33626 goto __325 33627 __324: 33628 tcl.XTcl_SetObjResult(tls, interp, pError) 33629 __330: 33630 if !(libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pError)).FrefCount, 1) <= 0) { 33631 goto __333 33632 } 33633 tcl.XTclFreeObj(tls, pError) 33634 __333: 33635 ; 33636 goto __331 33637 __331: 33638 if 0 != 0 { 33639 goto __330 33640 } 33641 goto __332 33642 __332: 33643 ; 33644 return TCL_ERROR 33645 __325: 33646 ; 33647 goto __323 33648 __322: 33649 switch uint32(*(*int32)(unsafe.Pointer(bp + 1440))) { 33650 case uint32(0): 33651 goto __335 33652 case uint32(1): 33653 goto __336 33654 case uint32(2): 33655 goto __337 33656 case uint32(3): 33657 goto __338 33658 } 33659 goto __334 33660 __335: 33661 wMask = wMask | int64(SQLITE_TRACE_STMT) 33662 goto __334 33663 __336: 33664 wMask = wMask | int64(SQLITE_TRACE_PROFILE) 33665 goto __334 33666 __337: 33667 wMask = wMask | int64(SQLITE_TRACE_ROW) 33668 goto __334 33669 __338: 33670 wMask = wMask | int64(SQLITE_TRACE_CLOSE) 33671 goto __334 33672 __334: 33673 ; 33674 __323: 33675 ; 33676 goto __319 33677 __319: 33678 i4++ 33679 goto __318 33680 goto __320 33681 __320: 33682 ; 33683 goto __316 33684 __315: 33685 wMask = int64(SQLITE_TRACE_STMT) 33686 __316: 33687 ; 33688 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 33689 goto __339 33690 } 33691 tcl.XTcl_Free(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2) 33692 __339: 33693 ; 33694 zTraceV2 = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+1424) 33695 if !(zTraceV2 != 0 && *(*int32)(unsafe.Pointer(bp + 1424)) > 0) { 33696 goto __340 33697 } 33698 (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 = tcl.XTcl_Alloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 1424))+1)) 33699 libc.X__builtin___memcpy_chk(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, zTraceV2, uint64(*(*int32)(unsafe.Pointer(bp + 1424))+1), libc.X__builtin_object_size(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2, 0)) 33700 goto __341 33701 __340: 33702 (*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 = uintptr(0) 33703 __341: 33704 ; 33705 if !((*SqliteDb)(unsafe.Pointer(pDb)).FzTraceV2 != 0) { 33706 goto __342 33707 } 33708 (*SqliteDb)(unsafe.Pointer(pDb)).Finterp = interp 33709 sqlite3.Xsqlite3_trace_v2(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uint32(wMask), *(*uintptr)(unsafe.Pointer(&struct { 33710 f func(*libc.TLS, uint32, uintptr, uintptr, uintptr) int32 33711 }{DbTraceV2Handler})), pDb) 33712 goto __343 33713 __342: 33714 sqlite3.Xsqlite3_trace_v2(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, uint32(0), uintptr(0), uintptr(0)) 33715 __343: 33716 ; 33717 __313: 33718 ; 33719 __311: 33720 ; 33721 goto __3 33722 33723 __39: 33724 zBegin = ts + 13159 33725 if !(objc != 3 && objc != 4) { 33726 goto __344 33727 } 33728 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13186) 33729 return TCL_ERROR 33730 __344: 33731 ; 33732 if !((*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction == 0 && objc == 4) { 33733 goto __345 33734 } 33735 if !(tcl.XTcl_GetIndexFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(unsafe.Pointer(&TTYPE_strs1)), ts+13200, 33736 0, bp+1456) != 0) { 33737 goto __346 33738 } 33739 return TCL_ERROR 33740 __346: 33741 ; 33742 switch uint32(*(*int32)(unsafe.Pointer(bp + 1456))) { 33743 case uint32(0): 33744 goto __348 33745 case uint32(1): 33746 goto __349 33747 case uint32(2): 33748 goto __350 33749 } 33750 goto __347 33751 __348: 33752 ; 33753 goto __347 33754 __349: 33755 zBegin = ts + 13217 33756 goto __347 33757 __350: 33758 zBegin = ts + 13233 33759 goto __347 33760 __347: 33761 ; 33762 __345: 33763 ; 33764 pScript2 = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 33765 33766 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth++ 33767 rc = sqlite3.Xsqlite3_exec(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, zBegin, uintptr(0), uintptr(0), uintptr(0)) 33768 (*SqliteDb)(unsafe.Pointer(pDb)).FdisableAuth-- 33769 if !(rc != SQLITE_OK) { 33770 goto __351 33771 } 33772 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+936, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 33773 return TCL_ERROR 33774 __351: 33775 ; 33776 (*SqliteDb)(unsafe.Pointer(pDb)).FnTransaction++ 33777 33778 addDatabaseRef(tls, pDb) 33779 if !(0 != 0) { 33780 goto __352 33781 } 33782 33783 goto __353 33784 __352: 33785 rc = DbTransPostCmd(tls, bp+1464, interp, tcl.XTcl_EvalObjEx(tls, interp, pScript2, 0)) 33786 __353: 33787 ; 33788 goto __3 33789 33790 __40: 33791 if !(objc != 2 && objc != 3) { 33792 goto __354 33793 } 33794 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 33795 rc = TCL_ERROR 33796 goto __355 33797 __354: 33798 xNotify = uintptr(0) 33799 pNotifyArg = uintptr(0) 33800 33801 if !((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify != 0) { 33802 goto __356 33803 } 33804 __357: 33805 if !(libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify)).FrefCount, 1) <= 0) { 33806 goto __360 33807 } 33808 tcl.XTclFreeObj(tls, (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify) 33809 __360: 33810 ; 33811 goto __358 33812 __358: 33813 if 0 != 0 { 33814 goto __357 33815 } 33816 goto __359 33817 __359: 33818 ; 33819 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = uintptr(0) 33820 __356: 33821 ; 33822 if !(objc == 3) { 33823 goto __361 33824 } 33825 xNotify = *(*uintptr)(unsafe.Pointer(&struct { 33826 f func(*libc.TLS, uintptr, int32) 33827 }{DbUnlockNotify})) 33828 pNotifyArg = pDb 33829 (*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify = *(*uintptr)(unsafe.Pointer(objv + 2*8)) 33830 (*Tcl_Obj)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FpUnlockNotify)).FrefCount++ 33831 __361: 33832 ; 33833 if !(sqlite3.Xsqlite3_unlock_notify(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, xNotify, pNotifyArg) != 0) { 33834 goto __362 33835 } 33836 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+952, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 33837 rc = TCL_ERROR 33838 __362: 33839 ; 33840 __355: 33841 ; 33842 goto __3 33843 33844 __41: 33845 if !(objc < 3) { 33846 goto __363 33847 } 33848 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13258) 33849 __363: 33850 ; 33851 if !(tcl.XTcl_GetIndexFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(unsafe.Pointer(&azSub)), ts+2014, 0, bp+1472) != 0) { 33852 goto __364 33853 } 33854 return TCL_ERROR 33855 __364: 33856 ; 33857 switch uint32(*(*int32)(unsafe.Pointer(bp + 1472))) { 33858 case uint32(0): 33859 goto __366 33860 33861 case uint32(2): 33862 goto __367 33863 33864 case uint32(1): 33865 goto __368 33866 33867 case uint32(3): 33868 goto __369 33869 case uint32(4): 33870 goto __370 33871 } 33872 goto __365 33873 __366: 33874 nCol2 = sqlite3.Xsqlite3_preupdate_count(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb) 33875 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nCol2)) 33876 goto __365 33877 33878 __367: 33879 if !(objc > 4) { 33880 goto __371 33881 } 33882 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13277) 33883 return TCL_ERROR 33884 __371: 33885 ; 33886 DbHookCmd(tls, interp, pDb, func() uintptr { 33887 if objc == 4 { 33888 return *(*uintptr)(unsafe.Pointer(objv + 3*8)) 33889 } 33890 return uintptr(0) 33891 }(), pDb+112) 33892 goto __365 33893 33894 __368: 33895 if !(objc != 3) { 33896 goto __372 33897 } 33898 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+584) 33899 return TCL_ERROR 33900 __372: 33901 ; 33902 pRet1 = tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_preupdate_depth(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb)) 33903 tcl.XTcl_SetObjResult(tls, interp, pRet1) 33904 goto __365 33905 33906 __369: 33907 __370: 33908 if !(objc != 4) { 33909 goto __373 33910 } 33911 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+13291) 33912 return TCL_ERROR 33913 __373: 33914 ; 33915 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+1476) != 0) { 33916 goto __374 33917 } 33918 return TCL_ERROR 33919 __374: 33920 ; 33921 if !(*(*int32)(unsafe.Pointer(bp + 1472)) == 4) { 33922 goto __375 33923 } 33924 rc = sqlite3.Xsqlite3_preupdate_old(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1476)), bp+1480) 33925 goto __376 33926 __375: 33927 ; 33928 rc = sqlite3.Xsqlite3_preupdate_new(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb, *(*int32)(unsafe.Pointer(bp + 1476)), bp+1480) 33929 __376: 33930 ; 33931 if !(rc == SQLITE_OK) { 33932 goto __377 33933 } 33934 pObj1 = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 1480))), -1) 33935 tcl.XTcl_SetObjResult(tls, interp, pObj1) 33936 goto __378 33937 __377: 33938 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+968, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(pDb)).Fdb), uintptr(0))) 33939 return TCL_ERROR 33940 __378: 33941 ; 33942 __365: 33943 ; 33944 goto __3 33945 33946 __42: 33947 __43: 33948 __44: 33949 ppHook = uintptr(0) 33950 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 41) { 33951 goto __379 33952 } 33953 ppHook = pDb + 128 33954 __379: 33955 ; 33956 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 39) { 33957 goto __380 33958 } 33959 ppHook = pDb + 104 33960 __380: 33961 ; 33962 if !(*(*int32)(unsafe.Pointer(bp + 1016)) == 30) { 33963 goto __381 33964 } 33965 ppHook = pDb + 120 33966 __381: 33967 ; 33968 if !(objc > 3) { 33969 goto __382 33970 } 33971 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 33972 return TCL_ERROR 33973 __382: 33974 ; 33975 DbHookCmd(tls, interp, pDb, func() uintptr { 33976 if objc == 3 { 33977 return *(*uintptr)(unsafe.Pointer(objv + 2*8)) 33978 } 33979 return uintptr(0) 33980 }(), ppHook) 33981 goto __3 33982 33983 __45: 33984 i5 = 2 33985 __383: 33986 if !(i5 < objc) { 33987 goto __385 33988 } 33989 zArg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i5)*8))) 33990 33991 if !(libc.Xstrcmp(tls, zArg, ts+13297) == 0 && i5+1 < objc) { 33992 goto __386 33993 } 33994 i5++ 33995 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i5)*8)), pDb+228) != 0) { 33996 goto __388 33997 } 33998 return TCL_ERROR 33999 __388: 34000 ; 34001 goto __387 34002 __386: 34003 if !(libc.Xstrcmp(tls, zArg, ts+13317) == 0) { 34004 goto __389 34005 } 34006 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+1488, ts+9889, 34007 libc.VaList(bp+984, func() uintptr { 34008 if (*SqliteDb)(unsafe.Pointer(pDb)).FstmtList != 0 { 34009 return (*SqlPreparedStmt)(unsafe.Pointer((*SqliteDb)(unsafe.Pointer(pDb)).FstmtList)).FpStmt 34010 } 34011 return uintptr(0) 34012 }())) 34013 tcl.XTcl_SetResult(tls, interp, bp+1488, uintptr(1)) 34014 goto __390 34015 __389: 34016 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+992, ts+13332, zArg, uintptr(0))) 34017 return TCL_ERROR 34018 __390: 34019 ; 34020 __387: 34021 ; 34022 goto __384 34023 __384: 34024 i5++ 34025 goto __383 34026 goto __385 34027 __385: 34028 ; 34029 if !(i5 == 2) { 34030 goto __391 34031 } 34032 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_libversion(tls), uintptr(0)) 34033 __391: 34034 ; 34035 goto __3 34036 34037 __3: 34038 ; 34039 return rc 34040 } 34041 34042 type DbConfigChoices = struct { 34043 FzName uintptr 34044 Fop int32 34045 F__ccgo_pad1 [4]byte 34046 } 34047 34048 var DB_strs = [43]uintptr{ 34049 ts + 13351, ts + 13362, ts + 13369, 34050 ts + 13383, ts + 13388, ts + 13394, 34051 ts + 9490, ts + 13402, ts + 13410, 34052 ts + 13427, ts + 13439, ts + 13448, 34053 ts + 13455, ts + 13460, ts + 13472, 34054 ts + 13494, ts + 13504, ts + 4896, 34055 ts + 13516, ts + 13523, ts + 10868, 34056 ts + 13532, ts + 13542, ts + 13560, 34057 ts + 13570, ts + 13580, ts + 13590, 34058 ts + 9564, ts + 13598, ts + 13604, 34059 ts + 13612, ts + 13626, ts + 13636, 34060 ts + 13643, ts + 13651, ts + 13665, 34061 ts + 13671, ts + 13680, ts + 13692, 34062 ts + 13706, ts + 13718, ts + 13726, 34063 uintptr(0), 34064 } 34065 var aDbConfig = [16]DbConfigChoices{ 34066 {FzName: ts + 13735, Fop: SQLITE_DBCONFIG_DEFENSIVE}, 34067 {FzName: ts + 13745, Fop: SQLITE_DBCONFIG_DQS_DDL}, 34068 {FzName: ts + 13753, Fop: SQLITE_DBCONFIG_DQS_DML}, 34069 {FzName: ts + 13761, Fop: SQLITE_DBCONFIG_ENABLE_FKEY}, 34070 {FzName: ts + 13773, Fop: SQLITE_DBCONFIG_ENABLE_QPSG}, 34071 {FzName: ts + 13785, Fop: SQLITE_DBCONFIG_ENABLE_TRIGGER}, 34072 {FzName: ts + 13800, Fop: SQLITE_DBCONFIG_ENABLE_VIEW}, 34073 {FzName: ts + 13812, Fop: SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER}, 34074 {FzName: ts + 13827, Fop: SQLITE_DBCONFIG_LEGACY_ALTER_TABLE}, 34075 {FzName: ts + 13846, Fop: SQLITE_DBCONFIG_LEGACY_FILE_FORMAT}, 34076 {FzName: ts + 13865, Fop: SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION}, 34077 {FzName: ts + 13880, Fop: SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE}, 34078 {FzName: ts + 13897, Fop: SQLITE_DBCONFIG_RESET_DATABASE}, 34079 {FzName: ts + 13912, Fop: SQLITE_DBCONFIG_TRIGGER_EQP}, 34080 {FzName: ts + 13924, Fop: SQLITE_DBCONFIG_TRUSTED_SCHEMA}, 34081 {FzName: ts + 13939, Fop: SQLITE_DBCONFIG_WRITABLE_SCHEMA}, 34082 } 34083 var TTYPE_strs = [5]uintptr{ 34084 ts + 13955, ts + 13590, ts + 13965, ts + 9490, uintptr(0), 34085 } 34086 var TTYPE_strs1 = [4]uintptr{ 34087 ts + 13969, ts + 13978, ts + 13988, uintptr(0), 34088 } 34089 var azSub = [6]uintptr{ts + 1965, ts + 13998, ts + 14004, ts + 14009, ts + 14013, uintptr(0)} 34090 34091 func sqliteCmdUsage(tls *libc.TLS, interp uintptr, objv uintptr) int32 { 34092 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 34093 ts+14017) 34094 return TCL_ERROR 34095 } 34096 34097 func DbMain(tls *libc.TLS, cd uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34098 bp := tls.Alloc(336) 34099 defer tls.Free(336) 34100 34101 var p uintptr 34102 var zArg uintptr 34103 var zErrMsg uintptr 34104 var i int32 34105 var zFile uintptr = uintptr(0) 34106 var zVfs uintptr = uintptr(0) 34107 var flags int32 34108 *(*int32)(unsafe.Pointer(bp + 112)) = 1 34109 34110 var rc int32 34111 34112 flags = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_NOMUTEX 34113 34114 if objc == 1 { 34115 return sqliteCmdUsage(tls, interp, objv) 34116 } 34117 if objc == 2 { 34118 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 34119 if libc.Xstrcmp(tls, zArg, ts+14163) == 0 { 34120 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_libversion(tls), uintptr(0))) 34121 return TCL_OK 34122 } 34123 if libc.Xstrcmp(tls, zArg, ts+14172) == 0 { 34124 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3_sourceid(tls), uintptr(0))) 34125 return TCL_OK 34126 } 34127 if libc.Xstrcmp(tls, zArg, ts+14182) == 0 { 34128 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+14193, uintptr(0))) 34129 return TCL_OK 34130 } 34131 if int32(*(*int8)(unsafe.Pointer(zArg))) == '-' { 34132 return sqliteCmdUsage(tls, interp, objv) 34133 } 34134 } 34135 for i = 2; i < objc; i++ { 34136 zArg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 34137 if int32(*(*int8)(unsafe.Pointer(zArg))) != '-' { 34138 if zFile != uintptr(0) { 34139 return sqliteCmdUsage(tls, interp, objv) 34140 } 34141 zFile = zArg 34142 continue 34143 } 34144 if i == objc-1 { 34145 return sqliteCmdUsage(tls, interp, objv) 34146 } 34147 i++ 34148 if libc.Xstrcmp(tls, zArg, ts+14195) == 0 { 34149 } else if libc.Xstrcmp(tls, zArg, ts+14200) == 0 { 34150 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 34151 } else if libc.Xstrcmp(tls, zArg, ts+12434) == 0 { 34152 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+88) != 0 { 34153 return TCL_ERROR 34154 } 34155 if *(*int32)(unsafe.Pointer(bp + 88)) != 0 { 34156 flags = flags & libc.CplInt32(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE) 34157 flags = flags | SQLITE_OPEN_READONLY 34158 } else { 34159 flags = flags & libc.CplInt32(SQLITE_OPEN_READONLY) 34160 flags = flags | SQLITE_OPEN_READWRITE 34161 } 34162 } else if libc.Xstrcmp(tls, zArg, ts+14205) == 0 { 34163 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+92) != 0 { 34164 return TCL_ERROR 34165 } 34166 if *(*int32)(unsafe.Pointer(bp + 92)) != 0 && flags&SQLITE_OPEN_READONLY == 0 { 34167 flags = flags | SQLITE_OPEN_CREATE 34168 } else { 34169 flags = flags & libc.CplInt32(SQLITE_OPEN_CREATE) 34170 } 34171 } else if libc.Xstrcmp(tls, zArg, ts+14213) == 0 { 34172 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+96) != 0 { 34173 return TCL_ERROR 34174 } 34175 if *(*int32)(unsafe.Pointer(bp + 96)) != 0 { 34176 flags = flags | SQLITE_OPEN_NOFOLLOW 34177 } else { 34178 flags = flags & libc.CplInt32(SQLITE_OPEN_NOFOLLOW) 34179 } 34180 } else if libc.Xstrcmp(tls, zArg, ts+14223) == 0 { 34181 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+100) != 0 { 34182 return TCL_ERROR 34183 } 34184 if *(*int32)(unsafe.Pointer(bp + 100)) != 0 { 34185 flags = flags | SQLITE_OPEN_NOMUTEX 34186 flags = flags & libc.CplInt32(SQLITE_OPEN_FULLMUTEX) 34187 } else { 34188 flags = flags & libc.CplInt32(SQLITE_OPEN_NOMUTEX) 34189 } 34190 } else if libc.Xstrcmp(tls, zArg, ts+14232) == 0 { 34191 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+104) != 0 { 34192 return TCL_ERROR 34193 } 34194 if *(*int32)(unsafe.Pointer(bp + 104)) != 0 { 34195 flags = flags | SQLITE_OPEN_FULLMUTEX 34196 flags = flags & libc.CplInt32(SQLITE_OPEN_NOMUTEX) 34197 } else { 34198 flags = flags & libc.CplInt32(SQLITE_OPEN_FULLMUTEX) 34199 } 34200 } else if libc.Xstrcmp(tls, zArg, ts+14243) == 0 { 34201 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+108) != 0 { 34202 return TCL_ERROR 34203 } 34204 if *(*int32)(unsafe.Pointer(bp + 108)) != 0 { 34205 flags = flags | SQLITE_OPEN_URI 34206 } else { 34207 flags = flags & libc.CplInt32(SQLITE_OPEN_URI) 34208 } 34209 } else if libc.Xstrcmp(tls, zArg, ts+14248) == 0 { 34210 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+112) != 0 { 34211 return TCL_ERROR 34212 } 34213 } else { 34214 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+12444, zArg, uintptr(0))) 34215 return TCL_ERROR 34216 } 34217 } 34218 zErrMsg = uintptr(0) 34219 p = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(SqliteDb{}))) 34220 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(SqliteDb{})), libc.X__builtin_object_size(tls, p, 0)) 34221 if zFile == uintptr(0) { 34222 zFile = ts + 584 34223 } 34224 if *(*int32)(unsafe.Pointer(bp + 112)) != 0 { 34225 zFile = tcl.XTcl_TranslateFileName(tls, interp, zFile, bp+120) 34226 } 34227 rc = sqlite3.Xsqlite3_open_v2(tls, zFile, p, flags, zVfs) 34228 if *(*int32)(unsafe.Pointer(bp + 112)) != 0 { 34229 tcl.XTcl_DStringFree(tls, bp+120) 34230 } 34231 if (*SqliteDb)(unsafe.Pointer(p)).Fdb != 0 { 34232 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb) { 34233 zErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+72, sqlite3.Xsqlite3_errmsg(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb))) 34234 sqlite3.Xsqlite3_close(tls, (*SqliteDb)(unsafe.Pointer(p)).Fdb) 34235 (*SqliteDb)(unsafe.Pointer(p)).Fdb = uintptr(0) 34236 } 34237 } else { 34238 zErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+80, sqlite3.Xsqlite3_errstr(tls, rc))) 34239 } 34240 if (*SqliteDb)(unsafe.Pointer(p)).Fdb == uintptr(0) { 34241 tcl.XTcl_SetResult(tls, interp, zErrMsg, uintptr(1)) 34242 tcl.XTcl_Free(tls, p) 34243 sqlite3.Xsqlite3_free(tls, zErrMsg) 34244 return TCL_ERROR 34245 } 34246 (*SqliteDb)(unsafe.Pointer(p)).FmaxStmt = NUM_PREPARED_STMTS 34247 (*SqliteDb)(unsafe.Pointer(p)).FopenFlags = flags & SQLITE_OPEN_URI 34248 (*SqliteDb)(unsafe.Pointer(p)).Finterp = interp 34249 zArg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 34250 if 0 != 0 { 34251 } else { 34252 tcl.XTcl_CreateObjCommand(tls, interp, zArg, *(*uintptr)(unsafe.Pointer(&struct { 34253 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 34254 }{DbObjCmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{DbDeleteCmd}))) 34255 } 34256 (*SqliteDb)(unsafe.Pointer(p)).FnRef = 1 34257 return TCL_OK 34258 } 34259 34260 func Sqlite3_Init(tls *libc.TLS, interp uintptr) int32 { 34261 var rc int32 34262 if 1 != 0 { 34263 rc = TCL_OK 34264 } else { 34265 rc = TCL_ERROR 34266 } 34267 if rc == TCL_OK { 34268 tcl.XTcl_CreateObjCommand(tls, interp, ts+14267, *(*uintptr)(unsafe.Pointer(&struct { 34269 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 34270 }{DbMain})), uintptr(0), uintptr(0)) 34271 34272 tcl.XTcl_CreateObjCommand(tls, interp, ts+14275, *(*uintptr)(unsafe.Pointer(&struct { 34273 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 34274 }{DbMain})), uintptr(0), uintptr(0)) 34275 rc = tcl.XTcl_PkgProvide(tls, interp, ts+14267, ts+14282) 34276 } 34277 return rc 34278 } 34279 34280 func Tclsqlite3_Init(tls *libc.TLS, interp uintptr) int32 { 34281 return Sqlite3_Init(tls, interp) 34282 } 34283 34284 func Sqlite3_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 34285 return TCL_OK 34286 } 34287 34288 func Tclsqlite3_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 34289 return TCL_OK 34290 } 34291 34292 func Sqlite3_SafeInit(tls *libc.TLS, interp uintptr) int32 { 34293 return TCL_ERROR 34294 } 34295 34296 func Sqlite3_SafeUnload(tls *libc.TLS, interp uintptr, flags int32) int32 { 34297 return TCL_ERROR 34298 } 34299 34300 func Sqlite_Init(tls *libc.TLS, interp uintptr) int32 { 34301 return Sqlite3_Init(tls, interp) 34302 } 34303 34304 func Tclsqlite_Init(tls *libc.TLS, interp uintptr) int32 { 34305 return Sqlite3_Init(tls, interp) 34306 } 34307 34308 func Sqlite_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 34309 return TCL_OK 34310 } 34311 34312 func Tclsqlite_Unload(tls *libc.TLS, interp uintptr, flags int32) int32 { 34313 return TCL_OK 34314 } 34315 34316 func tclsh_main_loop(tls *libc.TLS) uintptr { 34317 return uintptr(unsafe.Pointer(&zMainloop)) 34318 } 34319 34320 var zMainloop = *(*[431]int8)(unsafe.Pointer(ts + 14289)) 34321 34322 func main1(tls *libc.TLS, argc int32, argv uintptr) int32 { 34323 bp := tls.Alloc(64) 34324 defer tls.Free(64) 34325 34326 var interp uintptr 34327 var i int32 34328 var zScript uintptr = uintptr(0) 34329 34330 if libc.Xgetenv(tls, ts+14720) != 0 { 34331 if libc.Xisatty(tls, 0) != 0 && libc.Xisatty(tls, 2) != 0 { 34332 libc.Xfprintf(tls, libc.X__stderrp, 34333 ts+14739, 34334 libc.VaList(bp, libc.Xgetpid(tls))) 34335 libc.Xfgetc(tls, libc.X__stdinp) 34336 } else { 34337 libc.Xraise(tls, SIGTRAP) 34338 } 34339 } 34340 34341 sqlite3.Xsqlite3_shutdown(tls) 34342 34343 tcl.XTcl_FindExecutable(tls, *(*uintptr)(unsafe.Pointer(argv))) 34344 tcl.XTcl_SetSystemEncoding(tls, uintptr(0), ts+14801) 34345 interp = tcl.XTcl_CreateInterp(tls) 34346 Sqlite3_Init(tls, interp) 34347 34348 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([32]int8{})), bp+32, ts+1333, libc.VaList(bp+8, argc-1)) 34349 tcl.XTcl_SetVar(tls, interp, ts+14807, bp+32, TCL_GLOBAL_ONLY) 34350 tcl.XTcl_SetVar(tls, interp, ts+14812, *(*uintptr)(unsafe.Pointer(argv)), TCL_GLOBAL_ONLY) 34351 tcl.XTcl_SetVar(tls, interp, ts+14818, ts+584, TCL_GLOBAL_ONLY) 34352 for i = 1; i < argc; i++ { 34353 tcl.XTcl_SetVar(tls, interp, ts+14818, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), 34354 TCL_GLOBAL_ONLY|TCL_LIST_ELEMENT|TCL_APPEND_VALUE) 34355 } 34356 zScript = sqlite3TestInit(tls, interp) 34357 if zScript == uintptr(0) { 34358 zScript = tclsh_main_loop(tls) 34359 } 34360 if tcl.XTcl_GlobalEval(tls, interp, zScript) != TCL_OK { 34361 var zInfo uintptr = tcl.XTcl_GetVar(tls, interp, ts+14823, TCL_GLOBAL_ONLY) 34362 if zInfo == uintptr(0) { 34363 zInfo = tcl.XTcl_GetStringResult(tls, interp) 34364 } 34365 libc.Xfprintf(tls, libc.X__stderrp, ts+14833, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv)), zInfo)) 34366 return 1 34367 } 34368 return 0 34369 } 34370 34371 type sqlite3_value = sqlite3_value1 34372 34373 type sqlite3_context = sqlite3_context1 34374 type PreUpdate = PreUpdate1 34375 34376 type Vdbe = Vdbe1 34377 34378 type Mem = sqlite3_value1 34379 34380 type Op = VdbeOp1 34381 34382 type Bool = uint32 34383 34384 type AuxData1 = struct { 34385 FiAuxOp int32 34386 FiAuxArg int32 34387 FpAux uintptr 34388 FxDeleteAux uintptr 34389 FpNextAux uintptr 34390 } 34391 34392 type AuxData = AuxData1 34393 34394 type VdbeCursor1 = struct { 34395 FeCurType u8 34396 FiDb i8 34397 FnullRow u8 34398 FdeferredMoveto u8 34399 FisTable u8 34400 F__ccgo_pad1 [3]byte 34401 FisEphemeral uint8 34402 F__ccgo_pad2 [1]byte 34403 FseekHit u16 34404 F__ccgo_pad3 [4]byte 34405 Fub struct{ FpBtx uintptr } 34406 FseqCount i64 34407 FcacheStatus u32 34408 FseekResult int32 34409 FpAltCursor uintptr 34410 Fuc struct{ FpCursor uintptr } 34411 FpKeyInfo uintptr 34412 FiHdrOffset u32 34413 FpgnoRoot Pgno 34414 FnField i16 34415 FnHdrParsed u16 34416 F__ccgo_pad4 [4]byte 34417 FmovetoTarget i64 34418 FaOffset uintptr 34419 FaRow uintptr 34420 FpayloadSize u32 34421 FszRow u32 34422 FaType [1]u32 34423 F__ccgo_pad5 [4]byte 34424 } 34425 34426 type VdbeCursor = VdbeCursor1 34427 34428 type VdbeFrame1 = struct { 34429 Fv uintptr 34430 FpParent uintptr 34431 FaOp uintptr 34432 FanExec uintptr 34433 FaMem uintptr 34434 FapCsr uintptr 34435 FaOnce uintptr 34436 Ftoken uintptr 34437 FlastRowid i64 34438 FpAuxData uintptr 34439 FnCursor int32 34440 Fpc int32 34441 FnOp int32 34442 FnMem int32 34443 FnChildMem int32 34444 FnChildCsr int32 34445 FnChange i64 34446 FnDbChange i64 34447 } 34448 34449 type VdbeFrame = VdbeFrame1 34450 34451 type MemValue = struct{ Fr float64 } 34452 34453 type bft = uint32 34454 34455 type ScanStatus1 = struct { 34456 FaddrExplain int32 34457 FaddrLoop int32 34458 FaddrVisit int32 34459 FiSelectID int32 34460 FnEst LogEst 34461 F__ccgo_pad1 [6]byte 34462 FzName uintptr 34463 } 34464 34465 type ScanStatus = ScanStatus1 34466 34467 type DblquoteStr1 = struct { 34468 FpNextStr uintptr 34469 Fz [8]int8 34470 } 34471 34472 type DblquoteStr = DblquoteStr1 34473 34474 type ValueList1 = struct { 34475 FpCsr uintptr 34476 FpOut uintptr 34477 } 34478 34479 type ValueList = ValueList1 34480 34481 func testHexToInt(tls *libc.TLS, h int32) int32 { 34482 if h >= '0' && h <= '9' { 34483 return h - '0' 34484 } else if h >= 'a' && h <= 'f' { 34485 return h - 'a' + 10 34486 } else { 34487 return h - 'A' + 10 34488 } 34489 return int32(0) 34490 } 34491 34492 func sqlite3TestTextToPtr(tls *libc.TLS, z uintptr) uintptr { 34493 bp := tls.Alloc(20) 34494 defer tls.Free(20) 34495 34496 if int32(*(*int8)(unsafe.Pointer(z))) == '0' && int32(*(*int8)(unsafe.Pointer(z + 1))) == 'x' { 34497 z += uintptr(2) 34498 } 34499 *(*u64)(unsafe.Pointer(bp + 8)) = uint64(0) 34500 for *(*int8)(unsafe.Pointer(z)) != 0 { 34501 *(*u64)(unsafe.Pointer(bp + 8)) = *(*u64)(unsafe.Pointer(bp + 8))<<4 + u64(testHexToInt(tls, int32(*(*int8)(unsafe.Pointer(z))))) 34502 z++ 34503 } 34504 if uint64(unsafe.Sizeof(uintptr(0))) == uint64(unsafe.Sizeof(u64(0))) { 34505 libc.X__builtin___memcpy_chk(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0))), libc.X__builtin_object_size(tls, bp, 0)) 34506 } else { 34507 *(*u32)(unsafe.Pointer(bp + 16)) = u32(*(*u64)(unsafe.Pointer(bp + 8))) 34508 libc.X__builtin___memcpy_chk(tls, bp, bp+16, uint64(unsafe.Sizeof(uintptr(0))), libc.X__builtin_object_size(tls, bp, 0)) 34509 } 34510 return *(*uintptr)(unsafe.Pointer(bp)) 34511 } 34512 34513 func get_sqlite_pointer(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 34514 bp := tls.Alloc(212) 34515 defer tls.Free(212) 34516 34517 var p uintptr 34518 34519 if objc != 2 { 34520 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+14841) 34521 return TCL_ERROR 34522 } 34523 if !(tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 34524 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, 34525 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 34526 return TCL_ERROR 34527 } 34528 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp + 48)).FobjClientData 34529 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+112, ts+9889, libc.VaList(bp+24, (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb)) 34530 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+112, 0)) 34531 return TCL_OK 34532 } 34533 34534 func getDbPointer(tls *libc.TLS, interp uintptr, zA uintptr, ppDb uintptr) int32 { 34535 bp := tls.Alloc(64) 34536 defer tls.Free(64) 34537 34538 var p uintptr 34539 34540 if tcl.XTcl_GetCommandInfo(tls, interp, zA, bp) != 0 { 34541 p = (*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData 34542 *(*uintptr)(unsafe.Pointer(ppDb)) = (*struct{ Fdb uintptr })(unsafe.Pointer(p)).Fdb 34543 } else { 34544 *(*uintptr)(unsafe.Pointer(ppDb)) = sqlite3TestTextToPtr(tls, zA) 34545 } 34546 return TCL_OK 34547 } 34548 34549 func sqlite3TestErrCode(tls *libc.TLS, interp uintptr, db uintptr, rc int32) int32 { 34550 bp := tls.Alloc(248) 34551 defer tls.Free(248) 34552 34553 if sqlite3.Xsqlite3_threadsafe(tls) == 0 && rc != SQLITE_MISUSE && rc != SQLITE_OK && 34554 sqlite3.Xsqlite3_errcode(tls, db) != rc { 34555 var r2 int32 = sqlite3.Xsqlite3_errcode(tls, db) 34556 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+48, 34557 ts+14879, 34558 libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), rc, sqlite3.Xsqlite3ErrName(tls, r2), r2)) 34559 tcl.XTcl_ResetResult(tls, interp) 34560 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+48, 0)) 34561 return 1 34562 } 34563 return 0 34564 } 34565 34566 func getStmtPointer(tls *libc.TLS, interp uintptr, zArg uintptr, ppStmt uintptr) int32 { 34567 *(*uintptr)(unsafe.Pointer(ppStmt)) = sqlite3TestTextToPtr(tls, zArg) 34568 return TCL_OK 34569 } 34570 34571 func sqlite3TestMakePointerStr(tls *libc.TLS, interp uintptr, zPtr uintptr, p uintptr) int32 { 34572 bp := tls.Alloc(8) 34573 defer tls.Free(8) 34574 34575 sqlite3.Xsqlite3_snprintf(tls, 100, zPtr, ts+9889, libc.VaList(bp, p)) 34576 return TCL_OK 34577 } 34578 34579 func exec_printf_cb(tls *libc.TLS, pArg uintptr, argc int32, argv uintptr, name uintptr) int32 { 34580 var str uintptr = pArg 34581 var i int32 34582 34583 if (*Tcl_DString)(unsafe.Pointer(str)).Flength == 0 { 34584 for i = 0; i < argc; i++ { 34585 tcl.XTcl_DStringAppendElement(tls, str, func() uintptr { 34586 if *(*uintptr)(unsafe.Pointer(name + uintptr(i)*8)) != 0 { 34587 return *(*uintptr)(unsafe.Pointer(name + uintptr(i)*8)) 34588 } 34589 return ts + 5846 34590 }()) 34591 } 34592 } 34593 for i = 0; i < argc; i++ { 34594 tcl.XTcl_DStringAppendElement(tls, str, func() uintptr { 34595 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) != 0 { 34596 return *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) 34597 } 34598 return ts + 5846 34599 }()) 34600 } 34601 return 0 34602 } 34603 34604 func test_io_trace(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34605 return TCL_OK 34606 } 34607 34608 func clang_sanitize_address(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34609 var res int32 = 0 34610 if res == 0 && libc.Xgetenv(tls, ts+14937) != uintptr(0) { 34611 res = 1 34612 } 34613 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 34614 return TCL_OK 34615 } 34616 34617 func test_exec_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34618 bp := tls.Alloc(310) 34619 defer tls.Free(310) 34620 34621 var rc int32 34622 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 34623 var zSql uintptr 34624 34625 if argc != 4 { 34626 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 34627 ts+14975, 0)) 34628 return TCL_ERROR 34629 } 34630 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 34631 return TCL_ERROR 34632 } 34633 tcl.XTcl_DStringInit(tls, bp+56) 34634 zSql = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 34635 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*uintptr)(unsafe.Pointer(&struct { 34636 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 34637 }{exec_printf_cb})), bp+56, bp+272) 34638 sqlite3.Xsqlite3_free(tls, zSql) 34639 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+280, ts+1333, libc.VaList(bp+40, rc)) 34640 tcl.XTcl_AppendElement(tls, interp, bp+280) 34641 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 34642 if rc == SQLITE_OK { 34643 return (*Tcl_DString)(unsafe.Pointer(bp + 56)).Fstring 34644 } 34645 return *(*uintptr)(unsafe.Pointer(bp + 272)) 34646 }()) 34647 tcl.XTcl_DStringFree(tls, bp+56) 34648 if *(*uintptr)(unsafe.Pointer(bp + 272)) != 0 { 34649 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 272))) 34650 } 34651 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 34652 return TCL_ERROR 34653 } 34654 return TCL_OK 34655 } 34656 34657 func test_exec_hex(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34658 bp := tls.Alloc(806) 34659 defer tls.Free(806) 34660 34661 var rc int32 34662 var i int32 34663 var j int32 34664 *(*uintptr)(unsafe.Pointer(bp + 768)) = uintptr(0) 34665 var zHex uintptr 34666 34667 if argc != 3 { 34668 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 34669 ts+14993, 0)) 34670 return TCL_ERROR 34671 } 34672 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+40) != 0 { 34673 return TCL_ERROR 34674 } 34675 zHex = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 34676 i = libc.AssignInt32(&j, 0) 34677 __1: 34678 if !(uint64(i) < uint64(unsafe.Sizeof([501]int8{}))-uint64(1) && *(*int8)(unsafe.Pointer(zHex + uintptr(j))) != 0) { 34679 goto __3 34680 } 34681 { 34682 if int32(*(*int8)(unsafe.Pointer(zHex + uintptr(j)))) == '%' && *(*int8)(unsafe.Pointer(zHex + uintptr(j+2))) != 0 && *(*int8)(unsafe.Pointer(zHex + uintptr(j+2))) != 0 { 34683 *(*int8)(unsafe.Pointer(bp + 48 + uintptr(i))) = int8(testHexToInt(tls, int32(*(*int8)(unsafe.Pointer(zHex + uintptr(j+1)))))<<4 + testHexToInt(tls, int32(*(*int8)(unsafe.Pointer(zHex + uintptr(j+2)))))) 34684 j = j + 2 34685 } else { 34686 *(*int8)(unsafe.Pointer(bp + 48 + uintptr(i))) = *(*int8)(unsafe.Pointer(zHex + uintptr(j))) 34687 } 34688 34689 } 34690 goto __2 34691 __2: 34692 i++ 34693 j++ 34694 goto __1 34695 goto __3 34696 __3: 34697 ; 34698 *(*int8)(unsafe.Pointer(bp + 48 + uintptr(i))) = int8(0) 34699 tcl.XTcl_DStringInit(tls, bp+552) 34700 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), bp+48, *(*uintptr)(unsafe.Pointer(&struct { 34701 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 34702 }{exec_printf_cb})), bp+552, bp+768) 34703 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+776, ts+1333, libc.VaList(bp+32, rc)) 34704 tcl.XTcl_AppendElement(tls, interp, bp+776) 34705 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 34706 if rc == SQLITE_OK { 34707 return (*Tcl_DString)(unsafe.Pointer(bp + 552)).Fstring 34708 } 34709 return *(*uintptr)(unsafe.Pointer(bp + 768)) 34710 }()) 34711 tcl.XTcl_DStringFree(tls, bp+552) 34712 if *(*uintptr)(unsafe.Pointer(bp + 768)) != 0 { 34713 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 768))) 34714 } 34715 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 40)), rc) != 0 { 34716 return TCL_ERROR 34717 } 34718 return TCL_OK 34719 } 34720 34721 func db_enter(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34722 bp := tls.Alloc(40) 34723 defer tls.Free(40) 34724 34725 if argc != 2 { 34726 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 34727 ts+15001, 0)) 34728 return TCL_ERROR 34729 } 34730 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 34731 return TCL_ERROR 34732 } 34733 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 34734 return TCL_OK 34735 } 34736 34737 func db_leave(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34738 bp := tls.Alloc(40) 34739 defer tls.Free(40) 34740 34741 if argc != 2 { 34742 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 34743 ts+15001, 0)) 34744 return TCL_ERROR 34745 } 34746 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 34747 return TCL_ERROR 34748 } 34749 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 34750 return TCL_OK 34751 } 34752 34753 func test_exec(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34754 bp := tls.Alloc(310) 34755 defer tls.Free(310) 34756 34757 var rc int32 34758 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 34759 var zSql uintptr 34760 var i int32 34761 var j int32 34762 34763 if argc != 3 { 34764 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 34765 ts+15005, 0)) 34766 return TCL_ERROR 34767 } 34768 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 34769 return TCL_ERROR 34770 } 34771 tcl.XTcl_DStringInit(tls, bp+56) 34772 zSql = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 34773 for i = libc.AssignInt32(&j, 0); *(*int8)(unsafe.Pointer(zSql + uintptr(i))) != 0; { 34774 if int32(*(*int8)(unsafe.Pointer(zSql + uintptr(i)))) == '%' { 34775 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = int8(testHexToInt(tls, int32(*(*int8)(unsafe.Pointer(zSql + uintptr(i+1)))))<<4 + testHexToInt(tls, int32(*(*int8)(unsafe.Pointer(zSql + uintptr(i+2)))))) 34776 i = i + 3 34777 } else { 34778 *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(zSql + uintptr(libc.PostIncInt32(&i, 1)))) 34779 } 34780 } 34781 *(*int8)(unsafe.Pointer(zSql + uintptr(j))) = int8(0) 34782 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*uintptr)(unsafe.Pointer(&struct { 34783 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 34784 }{exec_printf_cb})), bp+56, bp+272) 34785 sqlite3.Xsqlite3_free(tls, zSql) 34786 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+280, ts+1333, libc.VaList(bp+40, rc)) 34787 tcl.XTcl_AppendElement(tls, interp, bp+280) 34788 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 34789 if rc == SQLITE_OK { 34790 return (*Tcl_DString)(unsafe.Pointer(bp + 56)).Fstring 34791 } 34792 return *(*uintptr)(unsafe.Pointer(bp + 272)) 34793 }()) 34794 tcl.XTcl_DStringFree(tls, bp+56) 34795 if *(*uintptr)(unsafe.Pointer(bp + 272)) != 0 { 34796 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 272))) 34797 } 34798 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 34799 return TCL_ERROR 34800 } 34801 return TCL_OK 34802 } 34803 34804 func test_exec_nr(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34805 bp := tls.Alloc(48) 34806 defer tls.Free(48) 34807 34808 var rc int32 34809 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 34810 if argc != 3 { 34811 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 34812 ts+15005, 0)) 34813 return TCL_ERROR 34814 } 34815 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 34816 return TCL_ERROR 34817 } 34818 rc = sqlite3.Xsqlite3_exec(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), uintptr(0), uintptr(0), bp+40) 34819 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 34820 return TCL_ERROR 34821 } 34822 return TCL_OK 34823 } 34824 34825 func test_mprintf_z(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34826 bp := tls.Alloc(40) 34827 defer tls.Free(40) 34828 34829 var zResult uintptr = uintptr(0) 34830 var i int32 34831 34832 for i = 2; i < argc && (i == 2 || zResult != 0); i++ { 34833 zResult = sqlite3.Xsqlite3_mprintf(tls, ts+15013, libc.VaList(bp, zResult, *(*uintptr)(unsafe.Pointer(argv + 1*8)), *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 34834 } 34835 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, zResult, 0)) 34836 sqlite3.Xsqlite3_free(tls, zResult) 34837 return TCL_OK 34838 } 34839 34840 func test_mprintf_n(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34841 bp := tls.Alloc(20) 34842 defer tls.Free(20) 34843 34844 var zStr uintptr 34845 *(*int32)(unsafe.Pointer(bp + 16)) = 0 34846 zStr = sqlite3.Xsqlite3_mprintf(tls, ts+15020, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+16)) 34847 sqlite3.Xsqlite3_free(tls, zStr) 34848 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 34849 return TCL_OK 34850 } 34851 34852 func test_snprintf_int(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34853 bp := tls.Alloc(124) 34854 defer tls.Free(124) 34855 34856 var n int32 = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 34857 var zFormat uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 34858 var a1 int32 = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 34859 if uint64(n) > uint64(unsafe.Sizeof([100]int8{})) { 34860 n = int32(unsafe.Sizeof([100]int8{})) 34861 } 34862 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+24, ts+15025, 0) 34863 sqlite3.Xsqlite3_snprintf(tls, n, bp+24, zFormat, libc.VaList(bp, a1)) 34864 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, bp+24, 0)) 34865 return TCL_OK 34866 } 34867 34868 func test_get_table_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34869 bp := tls.Alloc(350) 34870 defer tls.Free(350) 34871 34872 var rc int32 34873 *(*uintptr)(unsafe.Pointer(bp + 304)) = uintptr(0) 34874 *(*int32)(unsafe.Pointer(bp + 312)) = 0 34875 *(*int32)(unsafe.Pointer(bp + 316)) = 0 34876 34877 var i int32 34878 34879 var zSql uintptr 34880 *(*int32)(unsafe.Pointer(bp + 64)) = -1 34881 if argc == 5 { 34882 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+64) != 0 { 34883 return TCL_ERROR 34884 } 34885 } 34886 if argc != 4 && argc != 5 { 34887 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 34888 ts+15052, 0)) 34889 return TCL_ERROR 34890 } 34891 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+72) != 0 { 34892 return TCL_ERROR 34893 } 34894 tcl.XTcl_DStringInit(tls, bp+80) 34895 zSql = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 34896 if argc == 5 { 34897 rc = sqlite3.Xsqlite3_get_table(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), zSql, bp+296, uintptr(0), uintptr(0), bp+304) 34898 } else { 34899 rc = sqlite3.Xsqlite3_get_table(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), zSql, bp+296, bp+312, bp+316, bp+304) 34900 *(*int32)(unsafe.Pointer(bp + 64)) = (*(*int32)(unsafe.Pointer(bp + 312)) + 1) * *(*int32)(unsafe.Pointer(bp + 316)) 34901 } 34902 sqlite3.Xsqlite3_free(tls, zSql) 34903 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+320, ts+1333, libc.VaList(bp+40, rc)) 34904 tcl.XTcl_AppendElement(tls, interp, bp+320) 34905 if rc == SQLITE_OK { 34906 if argc == 4 { 34907 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+320, ts+1333, libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 312)))) 34908 tcl.XTcl_AppendElement(tls, interp, bp+320) 34909 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+320, ts+1333, libc.VaList(bp+56, *(*int32)(unsafe.Pointer(bp + 316)))) 34910 tcl.XTcl_AppendElement(tls, interp, bp+320) 34911 } 34912 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 64)); i++ { 34913 tcl.XTcl_AppendElement(tls, interp, func() uintptr { 34914 if *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(i)*8)) != 0 { 34915 return *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(i)*8)) 34916 } 34917 return ts + 5846 34918 }()) 34919 } 34920 } else { 34921 tcl.XTcl_AppendElement(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 304))) 34922 } 34923 sqlite3.Xsqlite3_free_table(tls, *(*uintptr)(unsafe.Pointer(bp + 296))) 34924 if *(*uintptr)(unsafe.Pointer(bp + 304)) != 0 { 34925 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 304))) 34926 } 34927 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 72)), rc) != 0 { 34928 return TCL_ERROR 34929 } 34930 return TCL_OK 34931 } 34932 34933 func test_last_rowid(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34934 bp := tls.Alloc(94) 34935 defer tls.Free(94) 34936 34937 if argc != 2 { 34938 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+15078, 0)) 34939 return TCL_ERROR 34940 } 34941 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+56) != 0 { 34942 return TCL_ERROR 34943 } 34944 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+64, ts+6325, libc.VaList(bp+32, sqlite3.Xsqlite3_last_insert_rowid(tls, *(*uintptr)(unsafe.Pointer(bp + 56))))) 34945 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+64, 0)) 34946 return SQLITE_OK 34947 } 34948 34949 func test_key(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34950 return TCL_OK 34951 } 34952 34953 func test_rekey(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34954 return TCL_OK 34955 } 34956 34957 func sqlite_test_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34958 bp := tls.Alloc(40) 34959 defer tls.Free(40) 34960 34961 var rc int32 34962 if argc != 2 { 34963 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 34964 ts+15083, 0)) 34965 return TCL_ERROR 34966 } 34967 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 34968 return TCL_ERROR 34969 } 34970 rc = sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34971 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 34972 return TCL_OK 34973 } 34974 34975 func sqlite_test_close_v2(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 34976 bp := tls.Alloc(40) 34977 defer tls.Free(40) 34978 34979 var rc int32 34980 if argc != 2 { 34981 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 34982 ts+15083, 0)) 34983 return TCL_ERROR 34984 } 34985 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 34986 return TCL_ERROR 34987 } 34988 rc = sqlite3.Xsqlite3_close_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 34989 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 34990 return TCL_OK 34991 } 34992 34993 func t1_ifnullFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 34994 var i int32 34995 for i = 0; i < argc; i++ { 34996 if SQLITE_NULL != sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) { 34997 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 34998 sqlite3.Xsqlite3_result_text(tls, context, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))), 34999 n, libc.UintptrFromInt32(-1)) 35000 break 35001 } 35002 } 35003 } 35004 35005 func hex8Func(tls *libc.TLS, p uintptr, argc int32, argv uintptr) { 35006 bp := tls.Alloc(208) 35007 defer tls.Free(208) 35008 35009 var z uintptr 35010 var i int32 35011 35012 z = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 35013 for i = 0; uint64(i) < uint64(unsafe.Sizeof([200]int8{}))/uint64(2)-uint64(2) && *(*uint8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ { 35014 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([200]int8{}))-uint64(i*2)), bp+8+uintptr(i*2), ts+6337, libc.VaList(bp, int32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))))) 35015 } 35016 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2))) = int8(0) 35017 sqlite3.Xsqlite3_result_text(tls, p, bp+8, -1, libc.UintptrFromInt32(-1)) 35018 } 35019 35020 func hex16Func(tls *libc.TLS, p uintptr, argc int32, argv uintptr) { 35021 bp := tls.Alloc(408) 35022 defer tls.Free(408) 35023 35024 var z uintptr 35025 var i int32 35026 35027 z = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 35028 for i = 0; uint64(i) < uint64(unsafe.Sizeof([400]int8{}))/uint64(4)-uint64(4) && *(*uint16)(unsafe.Pointer(z + uintptr(i)*2)) != 0; i++ { 35029 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof([400]int8{}))-uint64(i*4)), bp+8+uintptr(i*4), ts+15094, libc.VaList(bp, int32(*(*uint16)(unsafe.Pointer(z + uintptr(i)*2)))&0xff)) 35030 } 35031 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*4))) = int8(0) 35032 sqlite3.Xsqlite3_result_text(tls, p, bp+8, -1, libc.UintptrFromInt32(-1)) 35033 } 35034 35035 type dstr = struct { 35036 FnAlloc int32 35037 FnUsed int32 35038 Fz uintptr 35039 } 35040 35041 func dstrAppend(tls *libc.TLS, p uintptr, z uintptr, divider int32) { 35042 var n int32 = int32(libc.Xstrlen(tls, z)) 35043 if (*dstr)(unsafe.Pointer(p)).FnUsed+n+2 > (*dstr)(unsafe.Pointer(p)).FnAlloc { 35044 var zNew uintptr 35045 (*dstr)(unsafe.Pointer(p)).FnAlloc = (*dstr)(unsafe.Pointer(p)).FnAlloc*2 + n + 200 35046 zNew = sqlite3.Xsqlite3_realloc(tls, (*dstr)(unsafe.Pointer(p)).Fz, (*dstr)(unsafe.Pointer(p)).FnAlloc) 35047 if zNew == uintptr(0) { 35048 sqlite3.Xsqlite3_free(tls, (*dstr)(unsafe.Pointer(p)).Fz) 35049 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(dstr{})), libc.X__builtin_object_size(tls, p, 0)) 35050 return 35051 } 35052 (*dstr)(unsafe.Pointer(p)).Fz = zNew 35053 } 35054 if divider != 0 && (*dstr)(unsafe.Pointer(p)).FnUsed > 0 { 35055 *(*int8)(unsafe.Pointer((*dstr)(unsafe.Pointer(p)).Fz + uintptr(libc.PostIncInt32(&(*dstr)(unsafe.Pointer(p)).FnUsed, 1)))) = int8(divider) 35056 } 35057 libc.X__builtin___memcpy_chk(tls, (*dstr)(unsafe.Pointer(p)).Fz+uintptr((*dstr)(unsafe.Pointer(p)).FnUsed), z, uint64(n+1), libc.X__builtin_object_size(tls, (*dstr)(unsafe.Pointer(p)).Fz+uintptr((*dstr)(unsafe.Pointer(p)).FnUsed), 0)) 35058 *(*int32)(unsafe.Pointer(p + 4)) += n 35059 } 35060 35061 func execFuncCallback(tls *libc.TLS, pData uintptr, argc int32, argv uintptr, NotUsed uintptr) int32 { 35062 var p uintptr = pData 35063 var i int32 35064 for i = 0; i < argc; i++ { 35065 if *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)) == uintptr(0) { 35066 dstrAppend(tls, p, ts+5846, ' ') 35067 } else { 35068 dstrAppend(tls, p, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), ' ') 35069 } 35070 } 35071 return 0 35072 } 35073 35074 func sqlite3ExecFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 35075 bp := tls.Alloc(16) 35076 defer tls.Free(16) 35077 35078 libc.X__builtin___memset_chk(tls, bp, 0, uint64(unsafe.Sizeof(dstr{})), libc.X__builtin_object_size(tls, bp, 0)) 35079 sqlite3.Xsqlite3_exec(tls, sqlite3.Xsqlite3_user_data(tls, context), 35080 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), 35081 *(*uintptr)(unsafe.Pointer(&struct { 35082 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 35083 }{execFuncCallback})), bp, uintptr(0)) 35084 sqlite3.Xsqlite3_result_text(tls, context, (*dstr)(unsafe.Pointer(bp)).Fz, (*dstr)(unsafe.Pointer(bp)).FnUsed, libc.UintptrFromInt32(-1)) 35085 sqlite3.Xsqlite3_free(tls, (*dstr)(unsafe.Pointer(bp)).Fz) 35086 } 35087 35088 func tkt2213Function(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 35089 var nText int32 35090 var zText1 uintptr 35091 var zText2 uintptr 35092 var zText3 uintptr 35093 35094 nText = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 35095 zText1 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 35096 zText2 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 35097 zText3 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 35098 35099 if zText1 != zText2 || zText2 != zText3 { 35100 sqlite3.Xsqlite3_result_error(tls, context, ts+15099, -1) 35101 } else { 35102 var zCopy uintptr = sqlite3.Xsqlite3_malloc(tls, nText) 35103 libc.X__builtin___memcpy_chk(tls, zCopy, zText1, uint64(nText), libc.X__builtin_object_size(tls, zCopy, 0)) 35104 sqlite3.Xsqlite3_result_text(tls, context, zCopy, nText, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 35105 } 35106 } 35107 35108 func ptrChngFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 35109 var p1 uintptr 35110 var p2 uintptr 35111 var zCmd uintptr 35112 if argc != 4 { 35113 return 35114 } 35115 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 35116 if zCmd == uintptr(0) { 35117 return 35118 } 35119 if libc.Xstrcmp(tls, zCmd, ts+12764) == 0 { 35120 p1 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 35121 } else if libc.Xstrcmp(tls, zCmd, ts+15120) == 0 { 35122 p1 = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 35123 } else if libc.Xstrcmp(tls, zCmd, ts+12769) == 0 { 35124 p1 = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 35125 } else { 35126 return 35127 } 35128 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 35129 if zCmd == uintptr(0) { 35130 return 35131 } 35132 if libc.Xstrcmp(tls, zCmd, ts+15127) == 0 { 35133 sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 35134 } else if libc.Xstrcmp(tls, zCmd, ts+15133) == 0 { 35135 sqlite3.Xsqlite3_value_bytes16(tls, *(*uintptr)(unsafe.Pointer(argv))) 35136 } else if libc.Xstrcmp(tls, zCmd, ts+15141) == 0 { 35137 } else { 35138 return 35139 } 35140 zCmd = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 35141 if zCmd == uintptr(0) { 35142 return 35143 } 35144 if libc.Xstrcmp(tls, zCmd, ts+12764) == 0 { 35145 p2 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 35146 } else if libc.Xstrcmp(tls, zCmd, ts+15120) == 0 { 35147 p2 = sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 35148 } else if libc.Xstrcmp(tls, zCmd, ts+12769) == 0 { 35149 p2 = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 35150 } else { 35151 return 35152 } 35153 sqlite3.Xsqlite3_result_int(tls, context, libc.Bool32(p1 != p2)) 35154 } 35155 35156 func nondeterministicFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 35157 sqlite3.Xsqlite3_result_int(tls, context, libc.PostIncInt32(&cnt, 1)) 35158 } 35159 35160 var cnt int32 = 0 35161 35162 func intrealFunction(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 35163 bp := tls.Alloc(8) 35164 defer tls.Free(8) 35165 35166 var v sqlite3_int64 = sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv))) 35167 sqlite3.Xsqlite3_result_int64(tls, context, v) 35168 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_RESULT_INTREAL, libc.VaList(bp, context)) 35169 } 35170 35171 func test_create_function(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35172 bp := tls.Alloc(40) 35173 defer tls.Free(40) 35174 35175 var rc int32 35176 35177 if argc != 2 { 35178 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 35179 ts+15078, 0)) 35180 return TCL_ERROR 35181 } 35182 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 35183 return TCL_ERROR 35184 } 35185 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15146, -1, SQLITE_UTF8, uintptr(0), 35186 *(*uintptr)(unsafe.Pointer(&struct { 35187 f func(*libc.TLS, uintptr, int32, uintptr) 35188 }{t1_ifnullFunc})), uintptr(0), uintptr(0)) 35189 if rc == SQLITE_OK { 35190 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15157, 1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 35191 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 35192 f func(*libc.TLS, uintptr, int32, uintptr) 35193 }{hex8Func})), uintptr(0), uintptr(0)) 35194 } 35195 if rc == SQLITE_OK { 35196 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15162, 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 35197 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 35198 f func(*libc.TLS, uintptr, int32, uintptr) 35199 }{hex16Func})), uintptr(0), uintptr(0)) 35200 } 35201 if rc == SQLITE_OK { 35202 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15168, 1, SQLITE_ANY, uintptr(0), 35203 *(*uintptr)(unsafe.Pointer(&struct { 35204 f func(*libc.TLS, uintptr, int32, uintptr) 35205 }{tkt2213Function})), uintptr(0), uintptr(0)) 35206 } 35207 if rc == SQLITE_OK { 35208 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15180, 4, SQLITE_ANY, uintptr(0), 35209 *(*uintptr)(unsafe.Pointer(&struct { 35210 f func(*libc.TLS, uintptr, int32, uintptr) 35211 }{ptrChngFunction})), uintptr(0), uintptr(0)) 35212 } 35213 35214 if rc == SQLITE_OK { 35215 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15195, -1, SQLITE_UTF8, 35216 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 35217 f func(*libc.TLS, uintptr, int32, uintptr) 35218 }{nondeterministicFunction})), uintptr(0), uintptr(0)) 35219 } 35220 if rc == SQLITE_OK { 35221 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15204, -1, SQLITE_UTF8|SQLITE_DETERMINISTIC, 35222 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 35223 f func(*libc.TLS, uintptr, int32, uintptr) 35224 }{nondeterministicFunction})), uintptr(0), uintptr(0)) 35225 } 35226 35227 if rc == SQLITE_OK { 35228 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15213, 1, SQLITE_UTF8, 35229 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 35230 f func(*libc.TLS, uintptr, int32, uintptr) 35231 }{intrealFunction})), uintptr(0), uintptr(0)) 35232 } 35233 35234 if rc == SQLITE_OK { 35235 var zUtf16 uintptr 35236 var pVal uintptr 35237 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 35238 pVal = sqlite3.Xsqlite3ValueNew(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 35239 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, ts+15221, uint8(SQLITE_UTF8), uintptr(0)) 35240 zUtf16 = sqlite3.Xsqlite3ValueText(tls, pVal, uint8(SQLITE_UTF16LE)) 35241 if (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FmallocFailed != 0 { 35242 rc = SQLITE_NOMEM 35243 } else { 35244 rc = sqlite3.Xsqlite3_create_function16(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zUtf16, 35245 1, SQLITE_UTF16, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(&struct { 35246 f func(*libc.TLS, uintptr, int32, uintptr) 35247 }{sqlite3ExecFunc})), uintptr(0), uintptr(0)) 35248 } 35249 sqlite3.Xsqlite3ValueFree(tls, pVal) 35250 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 35251 } 35252 35253 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 35254 return TCL_ERROR 35255 } 35256 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 35257 return TCL_OK 35258 } 35259 35260 func test_drop_modules(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35261 bp := tls.Alloc(40) 35262 defer tls.Free(40) 35263 35264 if argc < 2 { 35265 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 35266 ts+15078, 0)) 35267 return TCL_ERROR 35268 } 35269 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 35270 return TCL_ERROR 35271 } 35272 sqlite3.Xsqlite3_drop_modules(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), func() uintptr { 35273 if argc > 2 { 35274 return argv + uintptr(2)*8 35275 } 35276 return uintptr(0) 35277 }()) 35278 return TCL_OK 35279 } 35280 35281 type t1CountCtx1 = struct{ Fn int32 } 35282 35283 type t1CountCtx = t1CountCtx1 35284 35285 func t1CountStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 35286 bp := tls.Alloc(9) 35287 defer tls.Free(9) 35288 35289 var p uintptr 35290 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(t1CountCtx{}))) 35291 if (argc == 0 || SQLITE_NULL != sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv)))) && p != 0 { 35292 (*t1CountCtx)(unsafe.Pointer(p)).Fn++ 35293 } 35294 if argc > 0 { 35295 var v int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 35296 if v == 40 { 35297 sqlite3.Xsqlite3_result_error(tls, context, ts+15235, -1) 35298 } else if v == 41 { 35299 *(*[9]int8)(unsafe.Pointer(bp)) = [9]int8{int8(0), int8(0x61), int8(0), int8(0x62), int8(0), int8(0x63), int8(0), int8(0), int8(0)} 35300 sqlite3.Xsqlite3_result_error16(tls, context, bp+1, -1) 35301 } 35302 } 35303 } 35304 35305 func t1CountFinalize(tls *libc.TLS, context uintptr) { 35306 var p uintptr 35307 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(t1CountCtx{}))) 35308 if p != 0 { 35309 if (*t1CountCtx)(unsafe.Pointer(p)).Fn == 42 { 35310 sqlite3.Xsqlite3_result_error(tls, context, ts+15265, -1) 35311 } else { 35312 sqlite3.Xsqlite3_result_int(tls, context, func() int32 { 35313 if p != 0 { 35314 return (*t1CountCtx)(unsafe.Pointer(p)).Fn 35315 } 35316 return 0 35317 }()) 35318 } 35319 } 35320 } 35321 35322 func legacyCountStep(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 35323 } 35324 35325 func legacyCountFinalize(tls *libc.TLS, context uintptr) { 35326 sqlite3.Xsqlite3_result_int(tls, context, sqlite3.Xsqlite3_aggregate_count(tls, context)) 35327 } 35328 35329 func test_create_aggregate(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35330 bp := tls.Alloc(40) 35331 defer tls.Free(40) 35332 35333 var rc int32 35334 if argc != 2 { 35335 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 35336 ts+15083, 0)) 35337 return TCL_ERROR 35338 } 35339 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 35340 return TCL_ERROR 35341 } 35342 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15286, 0, SQLITE_UTF8, uintptr(0), uintptr(0), 35343 *(*uintptr)(unsafe.Pointer(&struct { 35344 f func(*libc.TLS, uintptr, int32, uintptr) 35345 }{t1CountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{t1CountFinalize}))) 35346 if rc == SQLITE_OK { 35347 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15286, 1, SQLITE_UTF8, uintptr(0), uintptr(0), 35348 *(*uintptr)(unsafe.Pointer(&struct { 35349 f func(*libc.TLS, uintptr, int32, uintptr) 35350 }{t1CountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{t1CountFinalize}))) 35351 } 35352 if rc == SQLITE_OK { 35353 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+15294, 0, SQLITE_ANY, uintptr(0), uintptr(0), 35354 *(*uintptr)(unsafe.Pointer(&struct { 35355 f func(*libc.TLS, uintptr, int32, uintptr) 35356 }{legacyCountStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{legacyCountFinalize}))) 35357 } 35358 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 32)), rc) != 0 { 35359 return TCL_ERROR 35360 } 35361 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 35362 return TCL_OK 35363 } 35364 35365 func test_printf(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35366 bp := tls.Alloc(40) 35367 defer tls.Free(40) 35368 35369 if argc != 2 { 35370 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 35371 ts+15307, 0)) 35372 return TCL_ERROR 35373 } 35374 libc.Xprintf(tls, ts+389, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 35375 return TCL_OK 35376 } 35377 35378 func sqlite3_mprintf_int(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35379 bp := tls.Alloc(84) 35380 defer tls.Free(84) 35381 35382 var i int32 35383 var z uintptr 35384 if argc != 5 { 35385 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 35386 ts+15314, 0)) 35387 return TCL_ERROR 35388 } 35389 for i = 2; i < 5; i++ { 35390 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 35391 return TCL_ERROR 35392 } 35393 } 35394 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 72 + 1*4)), *(*int32)(unsafe.Pointer(bp + 72 + 2*4)))) 35395 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 35396 sqlite3.Xsqlite3_free(tls, z) 35397 return TCL_OK 35398 } 35399 35400 func sqlite3_mprintf_int64(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35401 bp := tls.Alloc(112) 35402 defer tls.Free(112) 35403 35404 var i int32 35405 35406 var z uintptr 35407 if argc != 5 { 35408 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 35409 ts+15314, 0)) 35410 return TCL_ERROR 35411 } 35412 for i = 2; i < 5; i++ { 35413 if sqlite3.Xsqlite3Atoi64(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+88+uintptr(i-2)*8, sqlite3.Xsqlite3Strlen30(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))), uint8(SQLITE_UTF8)) != 0 { 35414 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+15335, 0)) 35415 return TCL_ERROR 35416 } 35417 } 35418 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+48, *(*sqlite_int64)(unsafe.Pointer(bp + 88)), *(*sqlite_int64)(unsafe.Pointer(bp + 88 + 1*8)), *(*sqlite_int64)(unsafe.Pointer(bp + 88 + 2*8)))) 35419 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 35420 sqlite3.Xsqlite3_free(tls, z) 35421 return TCL_OK 35422 } 35423 35424 func sqlite3_mprintf_long(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35425 bp := tls.Alloc(112) 35426 defer tls.Free(112) 35427 35428 var i int32 35429 35430 var z uintptr 35431 if argc != 5 { 35432 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 35433 ts+15314, 0)) 35434 return TCL_ERROR 35435 } 35436 for i = 2; i < 5; i++ { 35437 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 35438 return TCL_ERROR 35439 } 35440 *(*int64)(unsafe.Pointer(bp + 88 + uintptr(i-2)*8)) = int64(*(*int32)(unsafe.Pointer(bp + 72 + uintptr(i-2)*4))) 35441 *(*int64)(unsafe.Pointer(bp + 88 + uintptr(i-2)*8)) &= int64(uint64(1)<<(uint64(unsafe.Sizeof(int32(0)))*uint64(8)) - uint64(1)) 35442 } 35443 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*int64)(unsafe.Pointer(bp + 88)), *(*int64)(unsafe.Pointer(bp + 88 + 1*8)), *(*int64)(unsafe.Pointer(bp + 88 + 2*8)))) 35444 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 35445 sqlite3.Xsqlite3_free(tls, z) 35446 return TCL_OK 35447 } 35448 35449 func sqlite3_mprintf_str(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35450 bp := tls.Alloc(84) 35451 defer tls.Free(84) 35452 35453 var i int32 35454 var z uintptr 35455 if argc < 4 || argc > 5 { 35456 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 35457 ts+15374, 0)) 35458 return TCL_ERROR 35459 } 35460 for i = 2; i < 4; i++ { 35461 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 35462 return TCL_ERROR 35463 } 35464 } 35465 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 72 + 1*4)), func() uintptr { 35466 if argc > 4 { 35467 return *(*uintptr)(unsafe.Pointer(argv + 4*8)) 35468 } 35469 return uintptr(0) 35470 }())) 35471 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 35472 sqlite3.Xsqlite3_free(tls, z) 35473 return TCL_OK 35474 } 35475 35476 func sqlite3_snprintf_str(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35477 bp := tls.Alloc(104) 35478 defer tls.Free(104) 35479 35480 var i int32 35481 35482 var z uintptr 35483 if argc < 5 || argc > 6 { 35484 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 35485 ts+15400, 0)) 35486 return TCL_ERROR 35487 } 35488 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+88) != 0 { 35489 return TCL_ERROR 35490 } 35491 if *(*int32)(unsafe.Pointer(bp + 88)) < 0 { 35492 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+15430, 0)) 35493 return TCL_ERROR 35494 } 35495 for i = 3; i < 5; i++ { 35496 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+92+uintptr(i-3)*4) != 0 { 35497 return TCL_ERROR 35498 } 35499 } 35500 z = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 88))+1) 35501 sqlite3.Xsqlite3_snprintf(tls, *(*int32)(unsafe.Pointer(bp + 88)), z, *(*uintptr)(unsafe.Pointer(argv + 2*8)), libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 92)), *(*int32)(unsafe.Pointer(bp + 92 + 1*4)), func() uintptr { 35502 if argc > 4 { 35503 return *(*uintptr)(unsafe.Pointer(argv + 5*8)) 35504 } 35505 return uintptr(0) 35506 }())) 35507 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 35508 sqlite3.Xsqlite3_free(tls, z) 35509 return TCL_OK 35510 } 35511 35512 func sqlite3_mprintf_double(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35513 bp := tls.Alloc(96) 35514 defer tls.Free(96) 35515 35516 var i int32 35517 35518 var z uintptr 35519 if argc != 5 { 35520 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 35521 ts+15453, 0)) 35522 return TCL_ERROR 35523 } 35524 for i = 2; i < 4; i++ { 35525 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+72+uintptr(i-2)*4) != 0 { 35526 return TCL_ERROR 35527 } 35528 } 35529 if tcl.XTcl_GetDouble(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+88) != 0 { 35530 return TCL_ERROR 35531 } 35532 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 72 + 1*4)), *(*float64)(unsafe.Pointer(bp + 88)))) 35533 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, z, 0)) 35534 sqlite3.Xsqlite3_free(tls, z) 35535 return TCL_OK 35536 } 35537 35538 func sqlite3_mprintf_scaled(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35539 bp := tls.Alloc(72) 35540 defer tls.Free(72) 35541 35542 var i int32 35543 35544 var z uintptr 35545 if argc != 4 { 35546 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 35547 ts+15477, 0)) 35548 return TCL_ERROR 35549 } 35550 for i = 2; i < 4; i++ { 35551 if tcl.XTcl_GetDouble(tls, interp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)), bp+56+uintptr(i-2)*8) != 0 { 35552 return TCL_ERROR 35553 } 35554 } 35555 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*float64)(unsafe.Pointer(bp + 56))**(*float64)(unsafe.Pointer(bp + 56 + 1*8)))) 35556 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, z, 0)) 35557 sqlite3.Xsqlite3_free(tls, z) 35558 return TCL_OK 35559 } 35560 35561 func sqlite3_mprintf_stronly(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35562 bp := tls.Alloc(56) 35563 defer tls.Free(56) 35564 35565 var z uintptr 35566 if argc != 3 { 35567 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 35568 ts+15500, 0)) 35569 return TCL_ERROR 35570 } 35571 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 35572 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, z, 0)) 35573 sqlite3.Xsqlite3_free(tls, z) 35574 return TCL_OK 35575 } 35576 35577 func sqlite3_mprintf_hexdouble(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 35578 bp := tls.Alloc(112) 35579 defer tls.Free(112) 35580 35581 var z uintptr 35582 35583 if argc != 3 { 35584 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 35585 ts+15500, 0)) 35586 return TCL_ERROR 35587 } 35588 if libc.Xsscanf(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)), ts+15516, libc.VaList(bp+32, bp+88, bp+92)) != 2 { 35589 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+15525, 0)) 35590 return TCL_ERROR 35591 } 35592 *(*sqlite_uint64)(unsafe.Pointer(bp + 104)) = sqlite_uint64(*(*uint32)(unsafe.Pointer(bp + 88))) 35593 *(*sqlite_uint64)(unsafe.Pointer(bp + 104)) = *(*sqlite_uint64)(unsafe.Pointer(bp + 104))<<32 + sqlite_uint64(*(*uint32)(unsafe.Pointer(bp + 92))) 35594 libc.X__builtin___memcpy_chk(tls, bp+96, bp+104, uint64(unsafe.Sizeof(float64(0))), libc.X__builtin_object_size(tls, bp+96, 0)) 35595 z = sqlite3.Xsqlite3_mprintf(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), libc.VaList(bp+64, *(*float64)(unsafe.Pointer(bp + 96)))) 35596 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, z, 0)) 35597 sqlite3.Xsqlite3_free(tls, z) 35598 return TCL_OK 35599 } 35600 35601 func test_enable_shared(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 35602 bp := tls.Alloc(4) 35603 defer tls.Free(4) 35604 35605 var rc int32 35606 35607 var ret int32 = 0 35608 35609 if objc != 2 && objc != 1 { 35610 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15569) 35611 return TCL_ERROR 35612 } 35613 ret = sqlite3.Xsqlite3Config.FsharedCacheEnabled 35614 35615 if objc == 2 { 35616 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 35617 return TCL_ERROR 35618 } 35619 rc = sqlite3.Xsqlite3_enable_shared_cache(tls, *(*int32)(unsafe.Pointer(bp))) 35620 if rc != SQLITE_OK { 35621 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, rc), uintptr(0)) 35622 return TCL_ERROR 35623 } 35624 } 35625 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewBooleanObj(tls, ret)) 35626 return TCL_OK 35627 } 35628 35629 func test_extended_result_codes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 35630 bp := tls.Alloc(12) 35631 defer tls.Free(12) 35632 35633 if objc != 3 { 35634 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15579) 35635 return TCL_ERROR 35636 } 35637 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 35638 return TCL_ERROR 35639 } 35640 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 35641 return TCL_ERROR 35642 } 35643 sqlite3.Xsqlite3_extended_result_codes(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))) 35644 return TCL_OK 35645 } 35646 35647 func test_libversion_number(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 35648 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_libversion_number(tls))) 35649 return TCL_OK 35650 } 35651 35652 func test_table_column_metadata(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 35653 bp := tls.Alloc(52) 35654 defer tls.Free(52) 35655 35656 var zDb uintptr 35657 var zTbl uintptr 35658 var zCol uintptr 35659 var rc int32 35660 var pRet uintptr 35661 35662 if objc != 5 && objc != 4 { 35663 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15590) 35664 return TCL_ERROR 35665 } 35666 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 35667 return TCL_ERROR 35668 } 35669 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 35670 zTbl = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 35671 if objc == 5 { 35672 zCol = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 35673 } else { 35674 zCol = uintptr(0) 35675 } 35676 35677 if libc.Xstrlen(tls, zDb) == uint64(0) { 35678 zDb = uintptr(0) 35679 } 35680 35681 rc = sqlite3.Xsqlite3_table_column_metadata(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDb, zTbl, zCol, 35682 bp+24, bp+32, bp+40, bp+44, bp+48) 35683 35684 if rc != SQLITE_OK { 35685 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), 0)) 35686 return TCL_ERROR 35687 } 35688 35689 pRet = tcl.XTcl_NewObj(tls) 35690 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), -1)) 35691 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), -1)) 35692 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 35693 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 44)))) 35694 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 48)))) 35695 tcl.XTcl_SetObjResult(tls, interp, pRet) 35696 35697 return TCL_OK 35698 } 35699 35700 func blobHandleFromObj(tls *libc.TLS, interp uintptr, pObj uintptr, ppBlob uintptr) int32 { 35701 bp := tls.Alloc(8) 35702 defer tls.Free(8) 35703 35704 var z uintptr 35705 35706 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 35707 if *(*int32)(unsafe.Pointer(bp)) == 0 { 35708 *(*uintptr)(unsafe.Pointer(ppBlob)) = uintptr(0) 35709 } else { 35710 var channel Tcl_Channel 35711 var instanceData ClientData 35712 35713 channel = tcl.XTcl_GetChannel(tls, interp, z, bp+4) 35714 if !(channel != 0) { 35715 return TCL_ERROR 35716 } 35717 35718 tcl.XTcl_Flush(tls, channel) 35719 tcl.XTcl_Seek(tls, channel, int64(0), SEEK_SET) 35720 35721 instanceData = tcl.XTcl_GetChannelInstanceData(tls, channel) 35722 *(*uintptr)(unsafe.Pointer(ppBlob)) = *(*uintptr)(unsafe.Pointer(instanceData)) 35723 } 35724 35725 return TCL_OK 35726 } 35727 35728 func test_blob_reopen(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 35729 bp := tls.Alloc(16) 35730 defer tls.Free(16) 35731 35732 var rc int32 35733 35734 if objc != 3 { 35735 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15616) 35736 return TCL_ERROR 35737 } 35738 35739 if blobHandleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 35740 return TCL_ERROR 35741 } 35742 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 35743 return TCL_ERROR 35744 } 35745 35746 rc = sqlite3.Xsqlite3_blob_reopen(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 8))) 35747 if rc != SQLITE_OK { 35748 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 35749 } 35750 35751 return func() int32 { 35752 if rc == SQLITE_OK { 35753 return TCL_OK 35754 } 35755 return TCL_ERROR 35756 }() 35757 } 35758 35759 type TestCollationX1 = struct { 35760 Finterp uintptr 35761 FpCmp uintptr 35762 FpDel uintptr 35763 } 35764 35765 type TestCollationX = TestCollationX1 35766 35767 func testCreateCollationDel(tls *libc.TLS, pCtx uintptr) { 35768 var p uintptr = pCtx 35769 35770 var rc int32 = tcl.XTcl_EvalObjEx(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, (*TestCollationX)(unsafe.Pointer(p)).FpDel, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL) 35771 if rc != TCL_OK { 35772 tcl.XTcl_BackgroundError(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp) 35773 } 35774 35775 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 35776 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpCmp)).FrefCount, 1) <= 0 { 35777 tcl.XTclFreeObj(tls, (*TestCollationX)(unsafe.Pointer(p)).FpCmp) 35778 } 35779 } 35780 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 35781 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpDel)).FrefCount, 1) <= 0 { 35782 tcl.XTclFreeObj(tls, (*TestCollationX)(unsafe.Pointer(p)).FpDel) 35783 } 35784 } 35785 sqlite3.Xsqlite3_free(tls, p) 35786 } 35787 35788 func testCreateCollationCmp(tls *libc.TLS, pCtx uintptr, nLeft int32, zLeft uintptr, nRight int32, zRight uintptr) int32 { 35789 bp := tls.Alloc(4) 35790 defer tls.Free(4) 35791 35792 var p uintptr = pCtx 35793 var pScript uintptr = tcl.XTcl_DuplicateObj(tls, (*TestCollationX)(unsafe.Pointer(p)).FpCmp) 35794 *(*int32)(unsafe.Pointer(bp)) = 0 35795 35796 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 35797 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zLeft, nLeft)) 35798 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pScript, tcl.XTcl_NewStringObj(tls, zRight, nRight)) 35799 35800 if TCL_OK != tcl.XTcl_EvalObjEx(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, pScript, TCL_EVAL_DIRECT|TCL_EVAL_GLOBAL) || 35801 TCL_OK != tcl.XTcl_GetIntFromObj(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp), bp) { 35802 tcl.XTcl_BackgroundError(tls, (*TestCollationX)(unsafe.Pointer(p)).Finterp) 35803 } 35804 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 35805 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount, 1) <= 0 { 35806 tcl.XTclFreeObj(tls, pScript) 35807 } 35808 } 35809 35810 return *(*int32)(unsafe.Pointer(bp)) 35811 } 35812 35813 func test_create_collation_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 35814 bp := tls.Alloc(24) 35815 defer tls.Free(24) 35816 35817 var p uintptr 35818 35819 var rc int32 35820 35821 if objc != 5 { 35822 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15630) 35823 return TCL_ERROR 35824 } 35825 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 35826 return TCL_ERROR 35827 } 35828 35829 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(TestCollationX{}))) 35830 (*TestCollationX)(unsafe.Pointer(p)).FpCmp = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 35831 (*TestCollationX)(unsafe.Pointer(p)).FpDel = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 35832 (*TestCollationX)(unsafe.Pointer(p)).Finterp = interp 35833 (*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpCmp)).FrefCount++ 35834 (*Tcl_Obj)(unsafe.Pointer((*TestCollationX)(unsafe.Pointer(p)).FpDel)).FrefCount++ 35835 35836 rc = sqlite3.Xsqlite3_create_collation_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 16, 35837 p, *(*uintptr)(unsafe.Pointer(&struct { 35838 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 35839 }{testCreateCollationCmp})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testCreateCollationDel}))) 35840 if rc != SQLITE_MISUSE { 35841 tcl.XTcl_AppendResult(tls, interp, 35842 libc.VaList(bp, ts+15663, uintptr(0))) 35843 return TCL_ERROR 35844 } 35845 rc = sqlite3.Xsqlite3_create_collation_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), SQLITE_UTF8, 35846 p, *(*uintptr)(unsafe.Pointer(&struct { 35847 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 35848 }{testCreateCollationCmp})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testCreateCollationDel}))) 35849 return TCL_OK 35850 } 35851 35852 type CreateFunctionV21 = struct { 35853 Finterp uintptr 35854 FpFunc uintptr 35855 FpStep uintptr 35856 FpFinal uintptr 35857 FpDestroy uintptr 35858 } 35859 35860 type CreateFunctionV2 = CreateFunctionV21 35861 35862 func cf2Func(tls *libc.TLS, ctx uintptr, nArg int32, aArg uintptr) { 35863 } 35864 35865 func cf2Step(tls *libc.TLS, ctx uintptr, nArg int32, aArg uintptr) { 35866 } 35867 35868 func cf2Final(tls *libc.TLS, ctx uintptr) { 35869 } 35870 35871 func cf2Destroy(tls *libc.TLS, pUser uintptr) { 35872 var p uintptr = pUser 35873 35874 if (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp != 0 && (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 35875 var rc int32 = tcl.XTcl_EvalObjEx(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy, 0) 35876 if rc != TCL_OK { 35877 tcl.XTcl_BackgroundError(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp) 35878 } 35879 } 35880 35881 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 35882 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 35883 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc)).FrefCount, 1) <= 0 { 35884 tcl.XTclFreeObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc) 35885 } 35886 } 35887 } 35888 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 35889 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 35890 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpStep)).FrefCount, 1) <= 0 { 35891 tcl.XTclFreeObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep) 35892 } 35893 } 35894 } 35895 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 35896 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 35897 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal)).FrefCount, 1) <= 0 { 35898 tcl.XTclFreeObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal) 35899 } 35900 } 35901 } 35902 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 35903 for __ccgo3 := true; __ccgo3; __ccgo3 = 0 != 0 { 35904 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy)).FrefCount, 1) <= 0 { 35905 tcl.XTclFreeObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy) 35906 } 35907 } 35908 } 35909 sqlite3.Xsqlite3_free(tls, p) 35910 } 35911 35912 func test_create_function_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 35913 bp := tls.Alloc(180) 35914 defer tls.Free(180) 35915 35916 var zFunc uintptr 35917 35918 var p uintptr 35919 var i int32 35920 var rc int32 35921 35922 *(*[6]EncTable)(unsafe.Pointer(bp + 32)) = [6]EncTable{ 35923 {FzEnc: ts + 15728, Fenc: SQLITE_UTF8}, 35924 {FzEnc: ts + 15733, Fenc: SQLITE_UTF16}, 35925 {FzEnc: ts + 15739, Fenc: SQLITE_UTF16LE}, 35926 {FzEnc: ts + 15747, Fenc: SQLITE_UTF16BE}, 35927 {FzEnc: ts + 12774, Fenc: SQLITE_ANY}, 35928 {FzEnc: ts + 14193}, 35929 } 35930 35931 if objc < 5 || objc%2 == 0 { 35932 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15755) 35933 return TCL_ERROR 35934 } 35935 35936 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 35937 return TCL_ERROR 35938 } 35939 zFunc = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 35940 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 35941 return TCL_ERROR 35942 } 35943 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+32, int32(unsafe.Sizeof(EncTable{})), 35944 ts+15784, 0, bp+128) != 0 { 35945 return TCL_ERROR 35946 } 35947 *(*int32)(unsafe.Pointer(bp + 128)) = (*EncTable)(unsafe.Pointer(bp + 32 + uintptr(*(*int32)(unsafe.Pointer(bp + 128)))*16)).Fenc 35948 35949 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(CreateFunctionV2{}))) 35950 35951 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(CreateFunctionV2{})), libc.X__builtin_object_size(tls, p, 0)) 35952 (*CreateFunctionV2)(unsafe.Pointer(p)).Finterp = interp 35953 35954 for i = 5; i < objc; i = i + 2 { 35955 *(*[5]uintptr)(unsafe.Pointer(bp + 136)) = [5]uintptr{ts + 15793, ts + 15799, ts + 15805, ts + 15812, uintptr(0)} 35956 if tcl.XTcl_GetIndexFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+136, ts+15821, 0, bp+176) != 0 { 35957 sqlite3.Xsqlite3_free(tls, p) 35958 return TCL_ERROR 35959 } 35960 35961 switch *(*int32)(unsafe.Pointer(bp + 176)) { 35962 case 0: 35963 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 35964 break 35965 case 1: 35966 (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 35967 break 35968 case 2: 35969 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 35970 break 35971 case 3: 35972 (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy = *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)) 35973 break 35974 } 35975 } 35976 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 35977 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc) 35978 } 35979 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 35980 (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep) 35981 } 35982 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 35983 (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal) 35984 } 35985 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 35986 (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy = tcl.XTcl_DuplicateObj(tls, (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy) 35987 } 35988 35989 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 35990 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc)).FrefCount++ 35991 } 35992 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 35993 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpStep)).FrefCount++ 35994 } 35995 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 35996 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal)).FrefCount++ 35997 } 35998 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy != 0 { 35999 (*Tcl_Obj)(unsafe.Pointer((*CreateFunctionV2)(unsafe.Pointer(p)).FpDestroy)).FrefCount++ 36000 } 36001 36002 rc = sqlite3.Xsqlite3_create_function_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zFunc, *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 128)), p, 36003 func() uintptr { 36004 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFunc != 0 { 36005 return *(*uintptr)(unsafe.Pointer(&struct { 36006 f func(*libc.TLS, uintptr, int32, uintptr) 36007 }{cf2Func})) 36008 } 36009 return uintptr(0) 36010 }(), 36011 func() uintptr { 36012 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpStep != 0 { 36013 return *(*uintptr)(unsafe.Pointer(&struct { 36014 f func(*libc.TLS, uintptr, int32, uintptr) 36015 }{cf2Step})) 36016 } 36017 return uintptr(0) 36018 }(), 36019 func() uintptr { 36020 if (*CreateFunctionV2)(unsafe.Pointer(p)).FpFinal != 0 { 36021 return *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cf2Final})) 36022 } 36023 return uintptr(0) 36024 }(), 36025 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cf2Destroy}))) 36026 if rc != SQLITE_OK { 36027 tcl.XTcl_ResetResult(tls, interp) 36028 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 36029 return TCL_ERROR 36030 } 36031 return TCL_OK 36032 } 36033 36034 type EncTable = struct { 36035 FzEnc uintptr 36036 Fenc int32 36037 F__ccgo_pad1 [4]byte 36038 } 36039 36040 func test_load_extension(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36041 bp := tls.Alloc(88) 36042 defer tls.Free(88) 36043 36044 var db uintptr 36045 _ = db 36046 var rc int32 36047 var zDb uintptr 36048 var zFile uintptr 36049 _ = zFile 36050 var zProc uintptr = uintptr(0) 36051 _ = zProc 36052 var zErr uintptr = uintptr(0) 36053 36054 if objc != 4 && objc != 3 { 36055 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15828) 36056 return TCL_ERROR 36057 } 36058 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 36059 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36060 if objc == 4 { 36061 zProc = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 36062 } 36063 36064 if !(tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+24) != 0) { 36065 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, zDb, uintptr(0))) 36066 return TCL_ERROR 36067 } 36068 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 24)).FobjClientData)).Fdb 36069 36070 rc = SQLITE_ERROR 36071 zErr = sqlite3.Xsqlite3_mprintf(tls, ts+15850, 0) 36072 _ = zProc 36073 _ = zFile 36074 if rc != SQLITE_OK { 36075 tcl.XTcl_SetResult(tls, interp, func() uintptr { 36076 if zErr != 0 { 36077 return zErr 36078 } 36079 return ts + 584 36080 }(), uintptr(1)) 36081 rc = TCL_ERROR 36082 } else { 36083 rc = TCL_OK 36084 } 36085 sqlite3.Xsqlite3_free(tls, zErr) 36086 36087 return rc 36088 } 36089 36090 func test_enable_load(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 36091 bp := tls.Alloc(100) 36092 defer tls.Free(100) 36093 36094 var db uintptr 36095 _ = db 36096 var zDb uintptr 36097 36098 if objc != 3 { 36099 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+15892) 36100 return TCL_ERROR 36101 } 36102 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 36103 36104 if !(tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+32) != 0) { 36105 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, zDb, uintptr(0))) 36106 return TCL_ERROR 36107 } 36108 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 32)).FobjClientData)).Fdb 36109 36110 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+96) != 0 { 36111 return TCL_ERROR 36112 } 36113 36114 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+15850)) 36115 return TCL_ERROR 36116 } 36117 36118 func sqlite_abort(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36119 libc.Xexit(tls, 255) 36120 36121 return TCL_OK 36122 } 36123 36124 func testFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 36125 var zArg0 uintptr 36126 __1: 36127 if !(argc >= 2) { 36128 goto __2 36129 } 36130 zArg0 = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 36131 if !(zArg0 != 0) { 36132 goto __3 36133 } 36134 if !(0 == sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+2577)) { 36135 goto __5 36136 } 36137 sqlite3.Xsqlite3_result_int(tls, context, sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 36138 goto __6 36139 __5: 36140 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+3973) == 0) { 36141 goto __7 36142 } 36143 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 36144 goto __8 36145 __7: 36146 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+15908) == 0) { 36147 goto __9 36148 } 36149 sqlite3.Xsqlite3_result_text(tls, context, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))), -1, 36150 libc.UintptrFromInt32(-1)) 36151 goto __10 36152 __9: 36153 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+2562) == 0) { 36154 goto __11 36155 } 36156 sqlite3.Xsqlite3_result_double(tls, context, sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 36157 goto __12 36158 __11: 36159 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+7939) == 0) { 36160 goto __13 36161 } 36162 sqlite3.Xsqlite3_result_null(tls, context) 36163 goto __14 36164 __13: 36165 if !(sqlite3.Xsqlite3StrICmp(tls, zArg0, ts+10013) == 0) { 36166 goto __15 36167 } 36168 sqlite3.Xsqlite3_result_value(tls, context, *(*uintptr)(unsafe.Pointer(argv + uintptr(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))*8))) 36169 goto __16 36170 __15: 36171 goto error_out 36172 __16: 36173 ; 36174 __14: 36175 ; 36176 __12: 36177 ; 36178 __10: 36179 ; 36180 __8: 36181 ; 36182 __6: 36183 ; 36184 goto __4 36185 __3: 36186 goto error_out 36187 __4: 36188 ; 36189 argc = argc - 2 36190 argv += 8 * uintptr(2) 36191 goto __1 36192 __2: 36193 ; 36194 return 36195 36196 error_out: 36197 sqlite3.Xsqlite3_result_error(tls, context, 36198 ts+15915, -1) 36199 } 36200 36201 func test_register_func(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36202 bp := tls.Alloc(56) 36203 defer tls.Free(56) 36204 36205 var rc int32 36206 if argc != 3 { 36207 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36208 ts+15983, 0)) 36209 return TCL_ERROR 36210 } 36211 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 36212 return TCL_ERROR 36213 } 36214 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), -1, SQLITE_UTF8, uintptr(0), 36215 *(*uintptr)(unsafe.Pointer(&struct { 36216 f func(*libc.TLS, uintptr, int32, uintptr) 36217 }{testFunc})), uintptr(0), uintptr(0)) 36218 if rc != 0 { 36219 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 36220 return TCL_ERROR 36221 } 36222 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 36223 return TCL_ERROR 36224 } 36225 return TCL_OK 36226 } 36227 36228 func test_finalize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36229 bp := tls.Alloc(40) 36230 defer tls.Free(40) 36231 36232 var rc int32 36233 var db uintptr = uintptr(0) 36234 36235 if objc != 2 { 36236 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36237 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 36238 return TCL_ERROR 36239 } 36240 36241 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36242 return TCL_ERROR 36243 } 36244 36245 if *(*uintptr)(unsafe.Pointer(bp + 32)) != 0 { 36246 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36247 } 36248 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36249 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36250 if db != 0 && sqlite3TestErrCode(tls, interp, db, rc) != 0 { 36251 return TCL_ERROR 36252 } 36253 return TCL_OK 36254 } 36255 36256 func test_stmt_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36257 bp := tls.Alloc(16) 36258 defer tls.Free(16) 36259 36260 var iValue int32 36261 var i int32 36262 *(*int32)(unsafe.Pointer(bp + 8)) = 0 36263 36264 var zOpName uintptr 36265 36266 if objc != 4 { 36267 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16009) 36268 return TCL_ERROR 36269 } 36270 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36271 return TCL_ERROR 36272 } 36273 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36274 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp))/uint64(unsafe.Sizeof(struct { 36275 FzName uintptr 36276 Fop int32 36277 F__ccgo_pad1 [4]byte 36278 }{}))); i++ { 36279 if libc.Xstrcmp(tls, aOp[i].FzName, zOpName) == 0 { 36280 *(*int32)(unsafe.Pointer(bp + 8)) = aOp[i].Fop 36281 break 36282 } 36283 } 36284 if i >= int32(uint64(unsafe.Sizeof(aOp))/uint64(unsafe.Sizeof(struct { 36285 FzName uintptr 36286 Fop int32 36287 F__ccgo_pad1 [4]byte 36288 }{}))) { 36289 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 36290 return TCL_ERROR 36291 } 36292 } 36293 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 36294 return TCL_ERROR 36295 } 36296 iValue = sqlite3.Xsqlite3_stmt_status(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp + 12))) 36297 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iValue)) 36298 return TCL_OK 36299 } 36300 36301 var aOp = [7]struct { 36302 FzName uintptr 36303 Fop int32 36304 F__ccgo_pad1 [4]byte 36305 }{ 36306 {FzName: ts + 16034, Fop: SQLITE_STMTSTATUS_FULLSCAN_STEP}, 36307 {FzName: ts + 16066, Fop: SQLITE_STMTSTATUS_SORT}, 36308 {FzName: ts + 16089, Fop: SQLITE_STMTSTATUS_AUTOINDEX}, 36309 {FzName: ts + 16117, Fop: SQLITE_STMTSTATUS_VM_STEP}, 36310 {FzName: ts + 16143, Fop: SQLITE_STMTSTATUS_REPREPARE}, 36311 {FzName: ts + 16171, Fop: SQLITE_STMTSTATUS_RUN}, 36312 {FzName: ts + 16193, Fop: SQLITE_STMTSTATUS_MEMUSED}, 36313 } 36314 36315 func test_config_sorterref(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36316 bp := tls.Alloc(12) 36317 defer tls.Free(12) 36318 36319 if objc != 2 { 36320 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16219) 36321 return TCL_ERROR 36322 } 36323 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 36324 return TCL_ERROR 36325 } 36326 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_SORTERREF_SIZE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 36327 return TCL_OK 36328 } 36329 36330 func vfsCurrentTimeInt64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36331 bp := tls.Alloc(8) 36332 defer tls.Free(8) 36333 36334 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 36335 if objc != 1 { 36336 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 36337 return TCL_ERROR 36338 } 36339 (*struct { 36340 f func(*libc.TLS, uintptr, uintptr) int32 36341 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxCurrentTimeInt64})).f(tls, pVfs, bp) 36342 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*i64)(unsafe.Pointer(bp)))) 36343 return TCL_OK 36344 } 36345 36346 func test_snapshot_get(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36347 bp := tls.Alloc(116) 36348 defer tls.Free(116) 36349 36350 var rc int32 36351 36352 var zName uintptr 36353 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 36354 36355 if objc != 3 { 36356 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 36357 return TCL_ERROR 36358 } 36359 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36360 return TCL_ERROR 36361 } 36362 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36363 36364 rc = sqlite3.Xsqlite3_snapshot_get(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, bp+8) 36365 if rc != SQLITE_OK { 36366 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 36367 return TCL_ERROR 36368 } else { 36369 if sqlite3TestMakePointerStr(tls, interp, bp+16, *(*uintptr)(unsafe.Pointer(bp + 8))) != 0 { 36370 return TCL_ERROR 36371 } 36372 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+16, -1)) 36373 } 36374 return TCL_OK 36375 } 36376 36377 func test_snapshot_recover(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36378 bp := tls.Alloc(8) 36379 defer tls.Free(8) 36380 36381 var rc int32 36382 36383 var zName uintptr 36384 36385 if objc != 3 { 36386 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 36387 return TCL_ERROR 36388 } 36389 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36390 return TCL_ERROR 36391 } 36392 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36393 36394 rc = sqlite3.Xsqlite3_snapshot_recover(tls, *(*uintptr)(unsafe.Pointer(bp)), zName) 36395 if rc != SQLITE_OK { 36396 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 36397 return TCL_ERROR 36398 } else { 36399 tcl.XTcl_ResetResult(tls, interp) 36400 } 36401 return TCL_OK 36402 } 36403 36404 func test_snapshot_open(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36405 bp := tls.Alloc(8) 36406 defer tls.Free(8) 36407 36408 var rc int32 36409 36410 var zName uintptr 36411 var pSnapshot uintptr 36412 36413 if objc != 4 { 36414 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16235) 36415 return TCL_ERROR 36416 } 36417 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36418 return TCL_ERROR 36419 } 36420 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36421 pSnapshot = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)))) 36422 36423 rc = sqlite3.Xsqlite3_snapshot_open(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, pSnapshot) 36424 if rc != SQLITE_OK { 36425 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 36426 return TCL_ERROR 36427 } else { 36428 tcl.XTcl_ResetResult(tls, interp) 36429 } 36430 return TCL_OK 36431 } 36432 36433 func test_snapshot_free(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36434 var pSnapshot uintptr 36435 if objc != 2 { 36436 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16254) 36437 return TCL_ERROR 36438 } 36439 pSnapshot = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 36440 sqlite3.Xsqlite3_snapshot_free(tls, pSnapshot) 36441 return TCL_OK 36442 } 36443 36444 func test_snapshot_cmp(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36445 var res int32 36446 var p1 uintptr 36447 var p2 uintptr 36448 if objc != 3 { 36449 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16263) 36450 return TCL_ERROR 36451 } 36452 p1 = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 36453 p2 = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 36454 res = sqlite3.Xsqlite3_snapshot_cmp(tls, p1, p2) 36455 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 36456 return TCL_OK 36457 } 36458 36459 func test_snapshot_get_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36460 bp := tls.Alloc(16) 36461 defer tls.Free(16) 36462 36463 var rc int32 36464 36465 var zName uintptr 36466 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 36467 36468 if objc != 3 { 36469 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 36470 return TCL_ERROR 36471 } 36472 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 36473 return TCL_ERROR 36474 } 36475 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36476 36477 rc = sqlite3.Xsqlite3_snapshot_get(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, bp+8) 36478 if rc != SQLITE_OK { 36479 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 36480 return TCL_ERROR 36481 } else { 36482 tcl.XTcl_SetObjResult(tls, interp, 36483 tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), int32(unsafe.Sizeof(sqlite3_snapshot{})))) 36484 sqlite3.Xsqlite3_snapshot_free(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 36485 } 36486 return TCL_OK 36487 } 36488 36489 func test_snapshot_open_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36490 bp := tls.Alloc(28) 36491 defer tls.Free(28) 36492 36493 var rc int32 36494 36495 var zName uintptr 36496 var pBlob uintptr 36497 36498 if objc != 4 { 36499 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16235) 36500 return TCL_ERROR 36501 } 36502 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 36503 return TCL_ERROR 36504 } 36505 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 36506 pBlob = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) 36507 if uint64(*(*int32)(unsafe.Pointer(bp + 24))) != uint64(unsafe.Sizeof(sqlite3_snapshot{})) { 36508 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16283, 0)) 36509 return TCL_ERROR 36510 } 36511 rc = sqlite3.Xsqlite3_snapshot_open(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zName, pBlob) 36512 if rc != SQLITE_OK { 36513 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 36514 return TCL_ERROR 36515 } 36516 return TCL_OK 36517 } 36518 36519 func test_snapshot_cmp_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36520 bp := tls.Alloc(24) 36521 defer tls.Free(24) 36522 36523 var res int32 36524 var p1 uintptr 36525 var p2 uintptr 36526 36527 if objc != 3 { 36528 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16263) 36529 return TCL_ERROR 36530 } 36531 36532 p1 = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) 36533 p2 = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) 36534 36535 if uint64(*(*int32)(unsafe.Pointer(bp + 16))) != uint64(unsafe.Sizeof(sqlite3_snapshot{})) || *(*int32)(unsafe.Pointer(bp + 16)) != *(*int32)(unsafe.Pointer(bp + 20)) { 36536 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16283, 0)) 36537 return TCL_ERROR 36538 } 36539 36540 res = sqlite3.Xsqlite3_snapshot_cmp(tls, p1, p2) 36541 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, res)) 36542 return TCL_OK 36543 } 36544 36545 func test_delete_database(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36546 var rc int32 36547 var zFile uintptr 36548 if objc != 2 { 36549 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16296) 36550 return TCL_ERROR 36551 } 36552 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 36553 rc = sqlite3_delete_database(tls, zFile) 36554 36555 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 36556 return TCL_OK 36557 } 36558 36559 func test_atomic_batch_write(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36560 bp := tls.Alloc(32) 36561 defer tls.Free(32) 36562 36563 var zFile uintptr = uintptr(0) 36564 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 36565 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 36566 var bRes int32 = 0 36567 var dc int32 = 0 36568 var rc int32 36569 36570 if objc != 2 { 36571 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16301) 36572 return TCL_ERROR 36573 } 36574 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 36575 36576 rc = sqlite3.Xsqlite3_open(tls, zFile, bp+16) 36577 if rc != SQLITE_OK { 36578 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), 0)) 36579 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 36580 return TCL_ERROR 36581 } 36582 36583 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+85, SQLITE_FCNTL_FILE_POINTER, bp+24) 36584 dc = (*struct { 36585 f func(*libc.TLS, uintptr) int32 36586 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 24)))).FpMethods)).FxDeviceCharacteristics})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 36587 if dc&SQLITE_IOCAP_BATCH_ATOMIC != 0 { 36588 bRes = 1 36589 } 36590 36591 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, bRes)) 36592 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 36593 return TCL_OK 36594 } 36595 36596 func test_next_stmt(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36597 bp := tls.Alloc(114) 36598 defer tls.Free(114) 36599 36600 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 36601 36602 if objc != 3 { 36603 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36604 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16306, 0)) 36605 return TCL_ERROR 36606 } 36607 36608 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 36609 return TCL_ERROR 36610 } 36611 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+56) != 0 { 36612 return TCL_ERROR 36613 } 36614 *(*uintptr)(unsafe.Pointer(bp + 56)) = sqlite3.Xsqlite3_next_stmt(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*uintptr)(unsafe.Pointer(bp + 56))) 36615 if *(*uintptr)(unsafe.Pointer(bp + 56)) != 0 { 36616 if sqlite3TestMakePointerStr(tls, interp, bp+64, *(*uintptr)(unsafe.Pointer(bp + 56))) != 0 { 36617 return TCL_ERROR 36618 } 36619 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+64, 0)) 36620 } 36621 return TCL_OK 36622 } 36623 36624 func test_stmt_readonly(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36625 bp := tls.Alloc(40) 36626 defer tls.Free(40) 36627 36628 var rc int32 36629 36630 if objc != 2 { 36631 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36632 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 36633 return TCL_ERROR 36634 } 36635 36636 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36637 return TCL_ERROR 36638 } 36639 rc = sqlite3.Xsqlite3_stmt_readonly(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36640 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewBooleanObj(tls, rc)) 36641 return TCL_OK 36642 } 36643 36644 func test_stmt_isexplain(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36645 bp := tls.Alloc(40) 36646 defer tls.Free(40) 36647 36648 var rc int32 36649 36650 if objc != 2 { 36651 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36652 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 36653 return TCL_ERROR 36654 } 36655 36656 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36657 return TCL_ERROR 36658 } 36659 rc = sqlite3.Xsqlite3_stmt_isexplain(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36660 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 36661 return TCL_OK 36662 } 36663 36664 func test_stmt_busy(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36665 bp := tls.Alloc(40) 36666 defer tls.Free(40) 36667 36668 var rc int32 36669 36670 if objc != 2 { 36671 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36672 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 36673 return TCL_ERROR 36674 } 36675 36676 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36677 return TCL_ERROR 36678 } 36679 rc = sqlite3.Xsqlite3_stmt_busy(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36680 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewBooleanObj(tls, rc)) 36681 return TCL_OK 36682 } 36683 36684 func uses_stmt_journal(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36685 bp := tls.Alloc(40) 36686 defer tls.Free(40) 36687 36688 if objc != 2 { 36689 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36690 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16315, 0)) 36691 return TCL_ERROR 36692 } 36693 36694 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36695 return TCL_ERROR 36696 } 36697 sqlite3.Xsqlite3_stmt_readonly(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36698 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewBooleanObj(tls, int32(*(*uint8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)) + 200))&0x20>>5))) 36699 return TCL_OK 36700 } 36701 36702 func test_reset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36703 bp := tls.Alloc(40) 36704 defer tls.Free(40) 36705 36706 var rc int32 36707 36708 if objc != 2 { 36709 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36710 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 36711 return TCL_ERROR 36712 } 36713 36714 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36715 return TCL_ERROR 36716 } 36717 36718 rc = sqlite3.Xsqlite3_reset(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 36719 if *(*uintptr)(unsafe.Pointer(bp + 32)) != 0 && sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 36720 return TCL_ERROR 36721 } 36722 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 36723 36724 return TCL_OK 36725 } 36726 36727 func test_expired(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36728 bp := tls.Alloc(40) 36729 defer tls.Free(40) 36730 36731 if objc != 2 { 36732 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36733 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16001, 0)) 36734 return TCL_ERROR 36735 } 36736 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36737 return TCL_ERROR 36738 } 36739 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewBooleanObj(tls, sqlite3.Xsqlite3_expired(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 36740 return TCL_OK 36741 } 36742 36743 func test_transfer_bind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36744 bp := tls.Alloc(48) 36745 defer tls.Free(48) 36746 36747 if objc != 3 { 36748 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36749 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16321, 0)) 36750 return TCL_ERROR 36751 } 36752 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36753 return TCL_ERROR 36754 } 36755 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+40) != 0 { 36756 return TCL_ERROR 36757 } 36758 tcl.XTcl_SetObjResult(tls, interp, 36759 tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_transfer_bindings(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(bp + 40))))) 36760 return TCL_OK 36761 } 36762 36763 func test_changes(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36764 bp := tls.Alloc(40) 36765 defer tls.Free(40) 36766 36767 if objc != 2 { 36768 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 36769 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 36770 return TCL_ERROR 36771 } 36772 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 36773 return TCL_ERROR 36774 } 36775 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_changes(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 36776 return TCL_OK 36777 } 36778 36779 var sqlite_static_bind_value uintptr = uintptr(0) 36780 var sqlite_static_bind_nbyte int32 = 0 36781 36782 func test_bind(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 36783 bp := tls.Alloc(142) 36784 defer tls.Free(142) 36785 36786 var rc int32 36787 36788 if argc != 5 { 36789 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 36790 ts+16340, 0)) 36791 return TCL_ERROR 36792 } 36793 if getStmtPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+80) != 0 { 36794 return TCL_ERROR 36795 } 36796 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+88) != 0 { 36797 return TCL_ERROR 36798 } 36799 if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+7939) == 0 { 36800 rc = sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88))) 36801 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16376) == 0 { 36802 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), sqlite_static_bind_value, -1, uintptr(0)) 36803 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16383) == 0 { 36804 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), sqlite_static_bind_value, 36805 sqlite_static_bind_nbyte, uintptr(0)) 36806 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16397) == 0 { 36807 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), *(*uintptr)(unsafe.Pointer(argv + 3*8)), -1, libc.UintptrFromInt32(-1)) 36808 } else if libc.Xstrcmp(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8)), ts+16404) == 0 { 36809 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), ts+16411, 10, uintptr(0)) 36810 } else { 36811 tcl.XTcl_AppendResult(tls, interp, 36812 libc.VaList(bp+32, ts+16422, 0)) 36813 return TCL_ERROR 36814 } 36815 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), rc) != 0 { 36816 return TCL_ERROR 36817 } 36818 if rc != 0 { 36819 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+92, ts+16476, libc.VaList(bp+48, rc)) 36820 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+92, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 36821 return TCL_ERROR 36822 } 36823 return TCL_OK 36824 } 36825 36826 var pTestCollateInterp uintptr 36827 36828 func test_collate_func(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 36829 bp := tls.Alloc(4) 36830 defer tls.Free(4) 36831 36832 var i uintptr = pTestCollateInterp 36833 var encin int32 = int32(pCtx) 36834 36835 var n int32 36836 var pVal uintptr 36837 var pX uintptr 36838 36839 pX = tcl.XTcl_NewStringObj(tls, ts+16482, -1) 36840 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 36841 36842 switch encin { 36843 case SQLITE_UTF8: 36844 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16495, -1)) 36845 break 36846 case SQLITE_UTF16LE: 36847 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16501, -1)) 36848 break 36849 case SQLITE_UTF16BE: 36850 tcl.XTcl_ListObjAppendElement(tls, i, pX, tcl.XTcl_NewStringObj(tls, ts+16510, -1)) 36851 break 36852 default: 36853 } 36854 36855 sqlite3.Xsqlite3BeginBenignMalloc(tls) 36856 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 36857 if pVal != 0 { 36858 sqlite3.Xsqlite3ValueSetStr(tls, pVal, nA, zA, uint8(encin), uintptr(0)) 36859 n = sqlite3.Xsqlite3_value_bytes(tls, pVal) 36860 tcl.XTcl_ListObjAppendElement(tls, i, pX, 36861 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pVal), n)) 36862 sqlite3.Xsqlite3ValueSetStr(tls, pVal, nB, zB, uint8(encin), uintptr(0)) 36863 n = sqlite3.Xsqlite3_value_bytes(tls, pVal) 36864 tcl.XTcl_ListObjAppendElement(tls, i, pX, 36865 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, pVal), n)) 36866 sqlite3.Xsqlite3ValueFree(tls, pVal) 36867 } 36868 sqlite3.Xsqlite3EndBenignMalloc(tls) 36869 36870 tcl.XTcl_EvalObjEx(tls, i, pX, 0) 36871 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 36872 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount, 1) <= 0 { 36873 tcl.XTclFreeObj(tls, pX) 36874 } 36875 } 36876 tcl.XTcl_GetIntFromObj(tls, i, tcl.XTcl_GetObjResult(tls, i), bp) 36877 return *(*int32)(unsafe.Pointer(bp)) 36878 } 36879 36880 func test_collate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 36881 bp := tls.Alloc(60) 36882 defer tls.Free(60) 36883 36884 var pVal uintptr 36885 var rc int32 36886 var zUtf16 uintptr 36887 36888 if !(objc != 5) { 36889 goto __1 36890 } 36891 goto bad_args 36892 __1: 36893 ; 36894 pTestCollateInterp = interp 36895 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 36896 goto __2 36897 } 36898 return TCL_ERROR 36899 __2: 36900 ; 36901 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56)) { 36902 goto __3 36903 } 36904 return TCL_ERROR 36905 __3: 36906 ; 36907 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+16482, SQLITE_UTF8, 36908 uintptr(SQLITE_UTF8), func() uintptr { 36909 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 36910 return *(*uintptr)(unsafe.Pointer(&struct { 36911 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 36912 }{test_collate_func})) 36913 } 36914 return uintptr(0) 36915 }()) 36916 if !(rc == SQLITE_OK) { 36917 goto __4 36918 } 36919 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+56)) { 36920 goto __5 36921 } 36922 return TCL_ERROR 36923 __5: 36924 ; 36925 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), ts+16482, SQLITE_UTF16LE, 36926 uintptr(SQLITE_UTF16LE), func() uintptr { 36927 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 36928 return *(*uintptr)(unsafe.Pointer(&struct { 36929 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 36930 }{test_collate_func})) 36931 } 36932 return uintptr(0) 36933 }()) 36934 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+56)) { 36935 goto __6 36936 } 36937 return TCL_ERROR 36938 __6: 36939 ; 36940 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).Fmutex) 36941 pVal = sqlite3.Xsqlite3ValueNew(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 36942 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, ts+16482, uint8(SQLITE_UTF8), uintptr(0)) 36943 zUtf16 = sqlite3.Xsqlite3ValueText(tls, pVal, uint8(SQLITE_UTF16LE)) 36944 if !((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).FmallocFailed != 0) { 36945 goto __7 36946 } 36947 rc = SQLITE_NOMEM 36948 goto __8 36949 __7: 36950 rc = sqlite3.Xsqlite3_create_collation16(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zUtf16, SQLITE_UTF16BE, 36951 uintptr(SQLITE_UTF16BE), func() uintptr { 36952 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 36953 return *(*uintptr)(unsafe.Pointer(&struct { 36954 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 36955 }{test_collate_func})) 36956 } 36957 return uintptr(0) 36958 }()) 36959 __8: 36960 ; 36961 sqlite3.Xsqlite3ValueFree(tls, pVal) 36962 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)))).Fmutex) 36963 __4: 36964 ; 36965 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0) { 36966 goto __9 36967 } 36968 return TCL_ERROR 36969 __9: 36970 ; 36971 if !(rc != SQLITE_OK) { 36972 goto __10 36973 } 36974 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 36975 return TCL_ERROR 36976 __10: 36977 ; 36978 return TCL_OK 36979 36980 bad_args: 36981 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+14949, 36982 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16519, 0)) 36983 return TCL_ERROR 36984 } 36985 36986 func test_utf16bin_collate_func(tls *libc.TLS, pCtx uintptr, nA int32, zA uintptr, nB int32, zB uintptr) int32 { 36987 var nCmp int32 = func() int32 { 36988 if nA > nB { 36989 return nB 36990 } 36991 return nA 36992 }() 36993 var res int32 = libc.Xmemcmp(tls, zA, zB, uint64(nCmp)) 36994 if res == 0 { 36995 res = nA - nB 36996 } 36997 return res 36998 } 36999 37000 func test_utf16bin_collate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37001 bp := tls.Alloc(8) 37002 defer tls.Free(8) 37003 37004 var rc int32 37005 37006 if !(objc != 2) { 37007 goto __1 37008 } 37009 goto bad_args 37010 __1: 37011 ; 37012 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 37013 goto __2 37014 } 37015 return TCL_ERROR 37016 __2: 37017 ; 37018 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16552, SQLITE_UTF16, uintptr(0), 37019 *(*uintptr)(unsafe.Pointer(&struct { 37020 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 37021 }{test_utf16bin_collate_func}))) 37022 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp)), rc) != 0) { 37023 goto __3 37024 } 37025 return TCL_ERROR 37026 __3: 37027 ; 37028 return TCL_OK 37029 37030 bad_args: 37031 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37032 return TCL_ERROR 37033 } 37034 37035 var zNeededCollation [200]int8 37036 var pzNeededCollation uintptr = 0 37037 37038 func test_collate_needed_cb(tls *libc.TLS, pCtx uintptr, db uintptr, eTextRep int32, pName uintptr) { 37039 var enc int32 = int32((*sqlite31)(unsafe.Pointer(db)).Fenc) 37040 var i int32 37041 var z uintptr 37042 z = pName 37043 i = 0 37044 for ; *(*int8)(unsafe.Pointer(z)) != 0 || *(*int8)(unsafe.Pointer(z + 1)) != 0; z++ { 37045 if *(*int8)(unsafe.Pointer(z)) != 0 { 37046 zNeededCollation[libc.PostIncInt32(&i, 1)] = *(*int8)(unsafe.Pointer(z)) 37047 } 37048 } 37049 zNeededCollation[i] = int8(0) 37050 sqlite3.Xsqlite3_create_collation(tls, 37051 db, ts+16482, int32((*sqlite31)(unsafe.Pointer(db)).Fenc), uintptr(intptr_t(enc)), *(*uintptr)(unsafe.Pointer(&struct { 37052 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 37053 }{test_collate_func}))) 37054 } 37055 37056 func test_collate_needed(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37057 bp := tls.Alloc(8) 37058 defer tls.Free(8) 37059 37060 var rc int32 37061 37062 if !(objc != 2) { 37063 goto __1 37064 } 37065 goto bad_args 37066 __1: 37067 ; 37068 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 37069 goto __2 37070 } 37071 return TCL_ERROR 37072 __2: 37073 ; 37074 rc = sqlite3.Xsqlite3_collation_needed16(tls, *(*uintptr)(unsafe.Pointer(bp)), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 37075 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) 37076 }{test_collate_needed_cb}))) 37077 zNeededCollation[0] = int8(0) 37078 if !(sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp)), rc) != 0) { 37079 goto __3 37080 } 37081 return TCL_ERROR 37082 __3: 37083 ; 37084 return TCL_OK 37085 37086 bad_args: 37087 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 37088 return TCL_ERROR 37089 } 37090 37091 var unaligned_string_counter int32 = 0 37092 37093 func alignmentCollFunc(tls *libc.TLS, NotUsed uintptr, nKey1 int32, pKey1 uintptr, nKey2 int32, pKey2 uintptr) int32 { 37094 var rc int32 37095 var n int32 37096 if nKey1 < nKey2 { 37097 n = nKey1 37098 } else { 37099 n = nKey2 37100 } 37101 if nKey1 > 0 && 1 == 1&int32(pKey1) { 37102 unaligned_string_counter++ 37103 } 37104 if nKey2 > 0 && 1 == 1&int32(pKey2) { 37105 unaligned_string_counter++ 37106 } 37107 rc = libc.Xmemcmp(tls, pKey1, pKey2, uint64(n)) 37108 if rc == 0 { 37109 rc = nKey1 - nKey2 37110 } 37111 return rc 37112 } 37113 37114 func add_alignment_test_collations(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37115 bp := tls.Alloc(8) 37116 defer tls.Free(8) 37117 37118 if objc >= 2 { 37119 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37120 return TCL_ERROR 37121 } 37122 sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16561, SQLITE_UTF16, 37123 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 37124 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 37125 }{alignmentCollFunc}))) 37126 sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+16577, SQLITE_UTF16_ALIGNED, 37127 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 37128 f func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32 37129 }{alignmentCollFunc}))) 37130 } 37131 return SQLITE_OK 37132 } 37133 37134 func test_function_utf8(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 37135 var interp uintptr 37136 var pX uintptr 37137 var pVal uintptr 37138 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 37139 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 37140 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 37141 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16495, -1)) 37142 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 37143 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 37144 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 37145 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37146 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount, 1) <= 0 { 37147 tcl.XTclFreeObj(tls, pX) 37148 } 37149 } 37150 sqlite3.Xsqlite3_result_text(tls, pCtx, tcl.XTcl_GetStringResult(tls, interp), -1, libc.UintptrFromInt32(-1)) 37151 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 37152 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 37153 uint8(SQLITE_UTF8), uintptr(0)) 37154 sqlite3.Xsqlite3_result_text16be(tls, pCtx, sqlite3.Xsqlite3_value_text16be(tls, pVal), 37155 -1, libc.UintptrFromInt32(-1)) 37156 sqlite3.Xsqlite3ValueFree(tls, pVal) 37157 } 37158 37159 func test_function_utf16le(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 37160 var interp uintptr 37161 var pX uintptr 37162 var pVal uintptr 37163 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 37164 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 37165 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 37166 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16501, -1)) 37167 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 37168 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 37169 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 37170 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37171 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount, 1) <= 0 { 37172 tcl.XTclFreeObj(tls, pX) 37173 } 37174 } 37175 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 37176 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 37177 uint8(SQLITE_UTF8), uintptr(0)) 37178 sqlite3.Xsqlite3_result_text(tls, pCtx, sqlite3.Xsqlite3_value_text(tls, pVal), -1, libc.UintptrFromInt32(-1)) 37179 sqlite3.Xsqlite3ValueFree(tls, pVal) 37180 } 37181 37182 func test_function_utf16be(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 37183 var interp uintptr 37184 var pX uintptr 37185 var pVal uintptr 37186 interp = sqlite3.Xsqlite3_user_data(tls, pCtx) 37187 pX = tcl.XTcl_NewStringObj(tls, ts+16591, -1) 37188 (*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount++ 37189 tcl.XTcl_ListObjAppendElement(tls, interp, pX, tcl.XTcl_NewStringObj(tls, ts+16510, -1)) 37190 tcl.XTcl_ListObjAppendElement(tls, interp, pX, 37191 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1)) 37192 tcl.XTcl_EvalObjEx(tls, interp, pX, 0) 37193 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 37194 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pX)).FrefCount, 1) <= 0 { 37195 tcl.XTclFreeObj(tls, pX) 37196 } 37197 } 37198 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 37199 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, tcl.XTcl_GetStringResult(tls, interp), 37200 uint8(SQLITE_UTF8), uintptr(0)) 37201 sqlite3.Xsqlite3_result_text16(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 37202 -1, libc.UintptrFromInt32(-1)) 37203 sqlite3.Xsqlite3_result_text16be(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 37204 -1, libc.UintptrFromInt32(-1)) 37205 sqlite3.Xsqlite3_result_text16le(tls, pCtx, sqlite3.Xsqlite3_value_text16le(tls, pVal), 37206 -1, libc.UintptrFromInt32(-1)) 37207 sqlite3.Xsqlite3ValueFree(tls, pVal) 37208 } 37209 37210 func test_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37211 bp := tls.Alloc(44) 37212 defer tls.Free(44) 37213 37214 if !(objc != 5) { 37215 goto __1 37216 } 37217 goto bad_args 37218 __1: 37219 ; 37220 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0) { 37221 goto __2 37222 } 37223 return TCL_ERROR 37224 __2: 37225 ; 37226 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40)) { 37227 goto __3 37228 } 37229 return TCL_ERROR 37230 __3: 37231 ; 37232 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 37233 goto __4 37234 } 37235 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF8, 37236 interp, *(*uintptr)(unsafe.Pointer(&struct { 37237 f func(*libc.TLS, uintptr, int32, uintptr) 37238 }{test_function_utf8})), uintptr(0), uintptr(0)) 37239 __4: 37240 ; 37241 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+40)) { 37242 goto __5 37243 } 37244 return TCL_ERROR 37245 __5: 37246 ; 37247 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 37248 goto __6 37249 } 37250 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF16LE, 37251 interp, *(*uintptr)(unsafe.Pointer(&struct { 37252 f func(*libc.TLS, uintptr, int32, uintptr) 37253 }{test_function_utf16le})), uintptr(0), uintptr(0)) 37254 __6: 37255 ; 37256 if !(TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+40)) { 37257 goto __7 37258 } 37259 return TCL_ERROR 37260 __7: 37261 ; 37262 if !(*(*int32)(unsafe.Pointer(bp + 40)) != 0) { 37263 goto __8 37264 } 37265 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+16591, 1, SQLITE_UTF16BE, 37266 interp, *(*uintptr)(unsafe.Pointer(&struct { 37267 f func(*libc.TLS, uintptr, int32, uintptr) 37268 }{test_function_utf16be})), uintptr(0), uintptr(0)) 37269 __8: 37270 ; 37271 return TCL_OK 37272 bad_args: 37273 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37274 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16519, 0)) 37275 return TCL_ERROR 37276 } 37277 37278 func test_errstr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37279 var zCode uintptr 37280 var i int32 37281 if objc != 1 { 37282 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16605) 37283 } 37284 37285 zCode = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 37286 for i = 0; i < 200; i++ { 37287 if 0 == libc.Xstrcmp(tls, sqlite3.Xsqlite3ErrName(tls, i), zCode) { 37288 break 37289 } 37290 } 37291 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, i), uintptr(0)) 37292 return TCL_OK 37293 } 37294 37295 func test_breakpoint(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 37296 return TCL_OK 37297 } 37298 37299 func test_bind_zeroblob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37300 bp := tls.Alloc(16) 37301 defer tls.Free(16) 37302 37303 var rc int32 37304 37305 if objc != 4 { 37306 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16618) 37307 return TCL_ERROR 37308 } 37309 37310 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 37311 return TCL_ERROR 37312 } 37313 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 37314 return TCL_ERROR 37315 } 37316 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 37317 return TCL_ERROR 37318 } 37319 37320 rc = sqlite3.Xsqlite3_bind_zeroblob(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), *(*int32)(unsafe.Pointer(bp + 12))) 37321 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp))), rc) != 0 { 37322 return TCL_ERROR 37323 } 37324 if rc != SQLITE_OK { 37325 return TCL_ERROR 37326 } 37327 37328 return TCL_OK 37329 } 37330 37331 func test_bind_zeroblob64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37332 bp := tls.Alloc(40) 37333 defer tls.Free(40) 37334 37335 var rc int32 37336 37337 if objc != 4 { 37338 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16618) 37339 return TCL_ERROR 37340 } 37341 37342 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 37343 return TCL_ERROR 37344 } 37345 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 37346 return TCL_ERROR 37347 } 37348 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+32) != 0 { 37349 return TCL_ERROR 37350 } 37351 37352 rc = sqlite3.Xsqlite3_bind_zeroblob64(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp + 24)), uint64(*(*Tcl_WideInt)(unsafe.Pointer(bp + 32)))) 37353 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 16))), rc) != 0 { 37354 return TCL_ERROR 37355 } 37356 if rc != SQLITE_OK { 37357 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 37358 return TCL_ERROR 37359 } 37360 37361 return TCL_OK 37362 } 37363 37364 func test_bind_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37365 bp := tls.Alloc(48) 37366 defer tls.Free(48) 37367 37368 var rc int32 37369 37370 if objc != 4 { 37371 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37372 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 37373 return TCL_ERROR 37374 } 37375 37376 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37377 return TCL_ERROR 37378 } 37379 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 37380 return TCL_ERROR 37381 } 37382 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+44) != 0 { 37383 return TCL_ERROR 37384 } 37385 37386 rc = sqlite3.Xsqlite3_bind_int(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*int32)(unsafe.Pointer(bp + 44))) 37387 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 37388 return TCL_ERROR 37389 } 37390 if rc != SQLITE_OK { 37391 return TCL_ERROR 37392 } 37393 37394 return TCL_OK 37395 } 37396 37397 func test_intarray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37398 var i int32 37399 37400 sqlite3.Xsqlite3_free(tls, p) 37401 p = uintptr(0) 37402 if objc > 1 { 37403 p = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(objc-1))) 37404 if p == uintptr(0) { 37405 return TCL_ERROR 37406 } 37407 for i = 0; i < objc-1; i++ { 37408 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), p+uintptr(i)*4) != 0 { 37409 sqlite3.Xsqlite3_free(tls, p) 37410 p = uintptr(0) 37411 return TCL_ERROR 37412 } 37413 } 37414 } 37415 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p))) 37416 return TCL_OK 37417 } 37418 37419 var p uintptr = uintptr(0) 37420 37421 func test_int64array_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37422 bp := tls.Alloc(8) 37423 defer tls.Free(8) 37424 37425 var i int32 37426 37427 sqlite3.Xsqlite3_free(tls, p1) 37428 p1 = uintptr(0) 37429 if objc > 1 { 37430 p1 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(objc-1))) 37431 if p1 == uintptr(0) { 37432 return TCL_ERROR 37433 } 37434 for i = 0; i < objc-1; i++ { 37435 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), bp) != 0 { 37436 sqlite3.Xsqlite3_free(tls, p1) 37437 p1 = uintptr(0) 37438 return TCL_ERROR 37439 } 37440 *(*sqlite3_int64)(unsafe.Pointer(p1 + uintptr(i)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp)) 37441 } 37442 } 37443 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p1))) 37444 return TCL_OK 37445 } 37446 37447 var p1 uintptr = uintptr(0) 37448 37449 func test_doublearray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37450 var i int32 37451 37452 sqlite3.Xsqlite3_free(tls, p2) 37453 p2 = uintptr(0) 37454 if objc > 1 { 37455 p2 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(float64(0)))*uint64(objc-1))) 37456 if p2 == uintptr(0) { 37457 return TCL_ERROR 37458 } 37459 for i = 0; i < objc-1; i++ { 37460 if tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8)), p2+uintptr(i)*8) != 0 { 37461 sqlite3.Xsqlite3_free(tls, p2) 37462 p2 = uintptr(0) 37463 return TCL_ERROR 37464 } 37465 } 37466 } 37467 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p2))) 37468 return TCL_OK 37469 } 37470 37471 var p2 uintptr = uintptr(0) 37472 37473 func test_textarray_addr(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37474 bp := tls.Alloc(8) 37475 defer tls.Free(8) 37476 37477 var i int32 37478 37479 for i = 0; i < n; i++ { 37480 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(p3 + uintptr(i)*8))) 37481 } 37482 sqlite3.Xsqlite3_free(tls, p3) 37483 p3 = uintptr(0) 37484 if objc > 1 { 37485 p3 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(objc-1))) 37486 if p3 == uintptr(0) { 37487 return TCL_ERROR 37488 } 37489 for i = 0; i < objc-1; i++ { 37490 *(*uintptr)(unsafe.Pointer(p3 + uintptr(i)*8)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(1+i)*8))))) 37491 } 37492 } 37493 n = objc - 1 37494 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(p3))) 37495 return TCL_OK 37496 } 37497 37498 var n int32 = 0 37499 var p3 uintptr = uintptr(0) 37500 37501 func test_bind_int64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37502 bp := tls.Alloc(56) 37503 defer tls.Free(56) 37504 37505 var rc int32 37506 37507 if objc != 4 { 37508 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37509 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 37510 return TCL_ERROR 37511 } 37512 37513 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37514 return TCL_ERROR 37515 } 37516 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 37517 return TCL_ERROR 37518 } 37519 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+48) != 0 { 37520 return TCL_ERROR 37521 } 37522 37523 rc = sqlite3.Xsqlite3_bind_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 48))) 37524 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 37525 return TCL_ERROR 37526 } 37527 if rc != SQLITE_OK { 37528 return TCL_ERROR 37529 } 37530 37531 return TCL_OK 37532 } 37533 37534 func test_bind_double(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37535 bp := tls.Alloc(64) 37536 defer tls.Free(64) 37537 37538 *(*float64)(unsafe.Pointer(bp + 48)) = float64(0) 37539 var rc int32 37540 var zVal uintptr 37541 var i int32 37542 37543 if objc != 4 { 37544 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37545 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16629, 0)) 37546 return TCL_ERROR 37547 } 37548 37549 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37550 return TCL_ERROR 37551 } 37552 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 37553 return TCL_ERROR 37554 } 37555 37556 zVal = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 37557 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aSpecialFp))/uint64(unsafe.Sizeof(struct { 37558 FzName uintptr 37559 FiUpper uint32 37560 FiLower uint32 37561 }{})); i++ { 37562 if libc.Xstrcmp(tls, aSpecialFp[i].FzName, zVal) == 0 { 37563 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) = sqlite3_uint64(aSpecialFp[i].FiUpper) 37564 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) <<= 32 37565 *(*sqlite3_uint64)(unsafe.Pointer(bp + 56)) |= sqlite3_uint64(aSpecialFp[i].FiLower) 37566 37567 libc.X__builtin___memcpy_chk(tls, bp+48, bp+56, uint64(8), libc.X__builtin_object_size(tls, bp+48, 0)) 37568 break 37569 } 37570 } 37571 if uint64(i) >= uint64(unsafe.Sizeof(aSpecialFp))/uint64(unsafe.Sizeof(struct { 37572 FzName uintptr 37573 FiUpper uint32 37574 FiLower uint32 37575 }{})) && tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+48) != 0 { 37576 return TCL_ERROR 37577 } 37578 rc = sqlite3.Xsqlite3_bind_double(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40)), *(*float64)(unsafe.Pointer(bp + 48))) 37579 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 37580 return TCL_ERROR 37581 } 37582 if rc != SQLITE_OK { 37583 return TCL_ERROR 37584 } 37585 37586 return TCL_OK 37587 } 37588 37589 var aSpecialFp = [10]struct { 37590 FzName uintptr 37591 FiUpper uint32 37592 FiLower uint32 37593 }{ 37594 {FzName: ts + 16643, FiUpper: uint32(0x7fffffff), FiLower: 0xffffffff}, 37595 {FzName: ts + 16647, FiUpper: uint32(0x7ff7ffff), FiLower: 0xffffffff}, 37596 {FzName: ts + 16652, FiUpper: 0xffffffff, FiLower: 0xffffffff}, 37597 {FzName: ts + 16657, FiUpper: 0xfff7ffff, FiLower: 0xffffffff}, 37598 {FzName: ts + 16663, FiUpper: uint32(0x7ff00000)}, 37599 {FzName: ts + 16668, FiUpper: 0xfff00000}, 37600 {FzName: ts + 16673, FiLower: uint32(0x00000001)}, 37601 {FzName: ts + 16681, FiUpper: 0x80000000, FiLower: uint32(0x00000001)}, 37602 {FzName: ts + 16690, FiUpper: uint32(0x7ff80000)}, 37603 {FzName: ts + 16695, FiUpper: 0xfff80000}, 37604 } 37605 37606 func test_bind_null(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37607 bp := tls.Alloc(44) 37608 defer tls.Free(44) 37609 37610 var rc int32 37611 37612 if objc != 3 { 37613 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37614 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16701, 0)) 37615 return TCL_ERROR 37616 } 37617 37618 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 37619 return TCL_ERROR 37620 } 37621 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 37622 return TCL_ERROR 37623 } 37624 37625 rc = sqlite3.Xsqlite3_bind_null(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 37626 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), rc) != 0 { 37627 return TCL_ERROR 37628 } 37629 if rc != SQLITE_OK { 37630 return TCL_ERROR 37631 } 37632 37633 return TCL_OK 37634 } 37635 37636 func test_bind_text(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37637 bp := tls.Alloc(84) 37638 defer tls.Free(84) 37639 37640 *(*int32)(unsafe.Pointer(bp + 76)) = 0 37641 37642 var value uintptr 37643 var rc int32 37644 var toFree uintptr = uintptr(0) 37645 37646 if objc != 5 { 37647 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37648 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16709, 0)) 37649 return TCL_ERROR 37650 } 37651 37652 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 37653 return TCL_ERROR 37654 } 37655 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 37656 return TCL_ERROR 37657 } 37658 value = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) 37659 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 37660 return TCL_ERROR 37661 } 37662 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 { 37663 toFree = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 76))+1)) 37664 if toFree == uintptr(0) { 37665 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+2069, uintptr(0))) 37666 return TCL_ERROR 37667 } 37668 libc.X__builtin___memcpy_chk(tls, toFree, value, uint64(*(*int32)(unsafe.Pointer(bp + 76))), libc.X__builtin_object_size(tls, toFree, 0)) 37669 *(*int8)(unsafe.Pointer(toFree + uintptr(*(*int32)(unsafe.Pointer(bp + 76))))) = int8(0) 37670 value = toFree 37671 } 37672 rc = sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 72)), value, *(*int32)(unsafe.Pointer(bp + 80)), libc.UintptrFromInt32(-1)) 37673 libc.Xfree(tls, toFree) 37674 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 37675 return TCL_ERROR 37676 } 37677 if rc != SQLITE_OK { 37678 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 37679 return TCL_ERROR 37680 } 37681 37682 return TCL_OK 37683 } 37684 37685 func test_bind_text16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37686 bp := tls.Alloc(84) 37687 defer tls.Free(84) 37688 37689 var value uintptr 37690 var toFree uintptr = uintptr(0) 37691 var rc int32 37692 *(*int32)(unsafe.Pointer(bp + 76)) = 0 37693 37694 var xDel uintptr = func() uintptr { 37695 if objc == 6 { 37696 return uintptr(0) 37697 } 37698 return libc.UintptrFromInt32(-1) 37699 }() 37700 var oStmt uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-4)*8)) 37701 var oN uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-3)*8)) 37702 var oString uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)) 37703 var oBytes uintptr = *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)) 37704 37705 if objc != 5 && objc != 6 { 37706 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37707 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16709, 0)) 37708 return TCL_ERROR 37709 } 37710 37711 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, oStmt), bp+64) != 0 { 37712 return TCL_ERROR 37713 } 37714 if tcl.XTcl_GetIntFromObj(tls, interp, oN, bp+72) != 0 { 37715 return TCL_ERROR 37716 } 37717 value = tcl.XTcl_GetByteArrayFromObj(tls, oString, bp+76) 37718 if tcl.XTcl_GetIntFromObj(tls, interp, oBytes, bp+80) != 0 { 37719 return TCL_ERROR 37720 } 37721 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 && xDel == libc.UintptrFromInt32(-1) { 37722 toFree = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 76))+3)) 37723 if toFree == uintptr(0) { 37724 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+2069, uintptr(0))) 37725 return TCL_ERROR 37726 } 37727 libc.X__builtin___memcpy_chk(tls, toFree, value, uint64(*(*int32)(unsafe.Pointer(bp + 76))), libc.X__builtin_object_size(tls, toFree, 0)) 37728 libc.X__builtin___memset_chk(tls, toFree+uintptr(*(*int32)(unsafe.Pointer(bp + 76))), 0, uint64(3), libc.X__builtin_object_size(tls, toFree+uintptr(*(*int32)(unsafe.Pointer(bp + 76))), 0)) 37729 value = toFree 37730 } 37731 rc = sqlite3.Xsqlite3_bind_text16(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 72)), value, *(*int32)(unsafe.Pointer(bp + 80)), xDel) 37732 libc.Xfree(tls, toFree) 37733 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 37734 return TCL_ERROR 37735 } 37736 if rc != SQLITE_OK { 37737 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 37738 return TCL_ERROR 37739 } 37740 37741 return TCL_OK 37742 } 37743 37744 func test_bind_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37745 bp := tls.Alloc(284) 37746 defer tls.Free(284) 37747 37748 var value uintptr 37749 var rc int32 37750 var xDestructor sqlite3_destructor_type = libc.UintptrFromInt32(-1) 37751 37752 if objc != 5 && objc != 6 { 37753 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 37754 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+16729, 0)) 37755 return TCL_ERROR 37756 } 37757 37758 if objc == 6 { 37759 xDestructor = uintptr(0) 37760 objv += 8 37761 } 37762 37763 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 37764 return TCL_ERROR 37765 } 37766 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 37767 return TCL_ERROR 37768 } 37769 37770 value = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) 37771 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 37772 return TCL_ERROR 37773 } 37774 37775 if *(*int32)(unsafe.Pointer(bp + 80)) > *(*int32)(unsafe.Pointer(bp + 76)) { 37776 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+84, 37777 ts+16748, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 76)))) 37778 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+84, uintptr(0))) 37779 return TCL_ERROR 37780 } 37781 37782 rc = sqlite3.Xsqlite3_bind_blob(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), *(*int32)(unsafe.Pointer(bp + 72)), value, *(*int32)(unsafe.Pointer(bp + 80)), xDestructor) 37783 if sqlite3TestErrCode(tls, interp, sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 64))), rc) != 0 { 37784 return TCL_ERROR 37785 } 37786 if rc != SQLITE_OK { 37787 return TCL_ERROR 37788 } 37789 37790 return TCL_OK 37791 } 37792 37793 func test_bind_value_from_preupdate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37794 bp := tls.Alloc(48) 37795 defer tls.Free(48) 37796 37797 var z3 uintptr = uintptr(0) 37798 var db uintptr = uintptr(0) 37799 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 37800 37801 if objc != 5 { 37802 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16782) 37803 return TCL_ERROR 37804 } 37805 37806 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) != 0 { 37807 return TCL_ERROR 37808 } 37809 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+32) != 0 { 37810 return TCL_ERROR 37811 } 37812 z3 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 37813 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+36) != 0 { 37814 return TCL_ERROR 37815 } 37816 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 37817 37818 if int32(*(*int8)(unsafe.Pointer(z3))) == 'n' { 37819 sqlite3.Xsqlite3_preupdate_new(tls, db, *(*int32)(unsafe.Pointer(bp + 36)), bp+40) 37820 } else if int32(*(*int8)(unsafe.Pointer(z3))) == 'o' { 37821 sqlite3.Xsqlite3_preupdate_old(tls, db, *(*int32)(unsafe.Pointer(bp + 36)), bp+40) 37822 } else { 37823 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16801, z3, uintptr(0))) 37824 return TCL_ERROR 37825 } 37826 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(bp + 40))) 37827 37828 return TCL_OK 37829 } 37830 37831 func test_bind_value_from_select(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37832 bp := tls.Alloc(72) 37833 defer tls.Free(72) 37834 37835 var zSql uintptr = uintptr(0) 37836 var db uintptr = uintptr(0) 37837 var rc int32 = SQLITE_OK 37838 37839 if objc != 4 { 37840 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16828) 37841 return TCL_ERROR 37842 } 37843 37844 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 37845 return TCL_ERROR 37846 } 37847 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) != 0 { 37848 return TCL_ERROR 37849 } 37850 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 37851 db = sqlite3.Xsqlite3_db_handle(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 37852 37853 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+64, uintptr(0)) 37854 if rc != SQLITE_OK { 37855 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+16842, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(0))) 37856 return TCL_ERROR 37857 } 37858 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) == SQLITE_ROW { 37859 var pVal uintptr = sqlite3.Xsqlite3_column_value(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), 0) 37860 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 56)), pVal) 37861 } 37862 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 64))) 37863 if rc != SQLITE_OK { 37864 tcl.XTcl_AppendResult(tls, interp, 37865 libc.VaList(bp+24, ts+16857, sqlite3.Xsqlite3_errmsg(tls, db), uintptr(0))) 37866 return TCL_ERROR 37867 } 37868 37869 return TCL_OK 37870 } 37871 37872 func test_carray_bind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 37873 bp := tls.Alloc(112) 37874 defer tls.Free(112) 37875 37876 var eType int32 37877 var nData int32 37878 var aData uintptr 37879 var isTransient int32 37880 var isStatic int32 37881 37882 var i int32 37883 var j int32 37884 var rc int32 37885 var xDel uintptr 37886 var z uintptr 37887 37888 var a uintptr 37889 37890 var a1 uintptr 37891 37892 var a2 uintptr 37893 var v3 uintptr 37894 var a3 uintptr 37895 eType = 0 37896 nData = 0 37897 aData = uintptr(0) 37898 isTransient = 0 37899 isStatic = 0 37900 xDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 37901 37902 if !(aStaticData != 0) { 37903 goto __1 37904 } 37905 37906 if !(eStaticType == 3) { 37907 goto __2 37908 } 37909 i = 0 37910 __3: 37911 if !(i < nStaticData) { 37912 goto __5 37913 } 37914 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(aStaticData + uintptr(i)*8))) 37915 goto __4 37916 __4: 37917 i++ 37918 goto __3 37919 goto __5 37920 __5: 37921 ; 37922 __2: 37923 ; 37924 sqlite3.Xsqlite3_free(tls, aStaticData) 37925 aStaticData = uintptr(0) 37926 nStaticData = 0 37927 eStaticType = 0 37928 __1: 37929 ; 37930 if !(objc == 1) { 37931 goto __6 37932 } 37933 return TCL_OK 37934 __6: 37935 ; 37936 i = 1 37937 __7: 37938 if !(i < objc && int32(*(*int8)(unsafe.Pointer(tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)))))) == '-') { 37939 goto __9 37940 } 37941 z = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 37942 if !(libc.Xstrcmp(tls, z, ts+16878) == 0) { 37943 goto __10 37944 } 37945 isTransient = 1 37946 xDel = libc.UintptrFromInt32(-1) 37947 goto __11 37948 __10: 37949 if !(libc.Xstrcmp(tls, z, ts+16889) == 0) { 37950 goto __12 37951 } 37952 isStatic = 1 37953 xDel = uintptr(0) 37954 goto __13 37955 __12: 37956 if !(libc.Xstrcmp(tls, z, ts+16897) == 0) { 37957 goto __14 37958 } 37959 eType = 0 37960 goto __15 37961 __14: 37962 if !(libc.Xstrcmp(tls, z, ts+16904) == 0) { 37963 goto __16 37964 } 37965 eType = 1 37966 goto __17 37967 __16: 37968 if !(libc.Xstrcmp(tls, z, ts+16911) == 0) { 37969 goto __18 37970 } 37971 eType = 2 37972 goto __19 37973 __18: 37974 if !(libc.Xstrcmp(tls, z, ts+16919) == 0) { 37975 goto __20 37976 } 37977 eType = 3 37978 goto __21 37979 __20: 37980 if !(libc.Xstrcmp(tls, z, ts+16925) == 0) { 37981 goto __22 37982 } 37983 goto __9 37984 goto __23 37985 __22: 37986 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+12444, z, uintptr(0))) 37987 return TCL_ERROR 37988 __23: 37989 ; 37990 __21: 37991 ; 37992 __19: 37993 ; 37994 __17: 37995 ; 37996 __15: 37997 ; 37998 __13: 37999 ; 38000 __11: 38001 ; 38002 goto __8 38003 __8: 38004 i++ 38005 goto __7 38006 goto __9 38007 __9: 38008 ; 38009 if !(eType == 3 && !(isStatic != 0) && !(isTransient != 0)) { 38010 goto __24 38011 } 38012 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+16928, 38013 uintptr(0))) 38014 return TCL_ERROR 38015 __24: 38016 ; 38017 if !(isStatic != 0 && isTransient != 0) { 38018 goto __25 38019 } 38020 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+16975, 38021 uintptr(0))) 38022 return TCL_ERROR 38023 __25: 38024 ; 38025 if !(objc-i < 2) { 38026 goto __26 38027 } 38028 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17013) 38029 return TCL_ERROR 38030 __26: 38031 ; 38032 if !(getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))), bp+80) != 0) { 38033 goto __27 38034 } 38035 return TCL_ERROR 38036 __27: 38037 ; 38038 i++ 38039 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+88) != 0) { 38040 goto __28 38041 } 38042 return TCL_ERROR 38043 __28: 38044 ; 38045 i++ 38046 nData = objc - i 38047 switch eType + 4*libc.Bool32(nData <= 0) { 38048 case 0: 38049 goto __30 38050 case 1: 38051 goto __31 38052 case 2: 38053 goto __32 38054 case 3: 38055 goto __33 38056 case 4: 38057 goto __34 38058 } 38059 goto __29 38060 __30: 38061 a = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(int32(0)))*uint64(nData))) 38062 if !(a == uintptr(0)) { 38063 goto __35 38064 } 38065 rc = SQLITE_NOMEM 38066 goto carray_bind_done 38067 __35: 38068 ; 38069 j = 0 38070 __36: 38071 if !(j < nData) { 38072 goto __38 38073 } 38074 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+92) != 0) { 38075 goto __39 38076 } 38077 sqlite3.Xsqlite3_free(tls, a) 38078 return TCL_ERROR 38079 __39: 38080 ; 38081 *(*int32)(unsafe.Pointer(a + uintptr(j)*4)) = *(*int32)(unsafe.Pointer(bp + 92)) 38082 goto __37 38083 __37: 38084 j++ 38085 goto __36 38086 goto __38 38087 __38: 38088 ; 38089 aData = a 38090 goto __29 38091 38092 __31: 38093 a1 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(nData))) 38094 if !(a1 == uintptr(0)) { 38095 goto __40 38096 } 38097 rc = SQLITE_NOMEM 38098 goto carray_bind_done 38099 __40: 38100 ; 38101 j = 0 38102 __41: 38103 if !(j < nData) { 38104 goto __43 38105 } 38106 if !(tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+96) != 0) { 38107 goto __44 38108 } 38109 sqlite3.Xsqlite3_free(tls, a1) 38110 return TCL_ERROR 38111 __44: 38112 ; 38113 *(*sqlite3_int64)(unsafe.Pointer(a1 + uintptr(j)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 96)) 38114 goto __42 38115 __42: 38116 j++ 38117 goto __41 38118 goto __43 38119 __43: 38120 ; 38121 aData = a1 38122 goto __29 38123 38124 __32: 38125 a2 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(float64(0)))*uint64(nData))) 38126 if !(a2 == uintptr(0)) { 38127 goto __45 38128 } 38129 rc = SQLITE_NOMEM 38130 goto carray_bind_done 38131 __45: 38132 ; 38133 j = 0 38134 __46: 38135 if !(j < nData) { 38136 goto __48 38137 } 38138 if !(tcl.XTcl_GetDoubleFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8)), bp+104) != 0) { 38139 goto __49 38140 } 38141 sqlite3.Xsqlite3_free(tls, a2) 38142 return TCL_ERROR 38143 __49: 38144 ; 38145 *(*float64)(unsafe.Pointer(a2 + uintptr(j)*8)) = *(*float64)(unsafe.Pointer(bp + 104)) 38146 goto __47 38147 __47: 38148 j++ 38149 goto __46 38150 goto __48 38151 __48: 38152 ; 38153 aData = a2 38154 goto __29 38155 38156 __33: 38157 a3 = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(nData))) 38158 if !(a3 == uintptr(0)) { 38159 goto __50 38160 } 38161 rc = SQLITE_NOMEM 38162 goto carray_bind_done 38163 __50: 38164 ; 38165 j = 0 38166 __51: 38167 if !(j < nData) { 38168 goto __53 38169 } 38170 v3 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+j)*8))) 38171 *(*uintptr)(unsafe.Pointer(a3 + uintptr(j)*8)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+56, v3)) 38172 goto __52 38173 __52: 38174 j++ 38175 goto __51 38176 goto __53 38177 __53: 38178 ; 38179 aData = a3 38180 goto __29 38181 38182 __34: 38183 aData = ts + 584 38184 xDel = uintptr(0) 38185 isTransient = 0 38186 isStatic = 0 38187 goto __29 38188 38189 __29: 38190 ; 38191 if !(isStatic != 0) { 38192 goto __54 38193 } 38194 aStaticData = aData 38195 nStaticData = nData 38196 eStaticType = eType 38197 __54: 38198 ; 38199 rc = sqlite3_carray_bind(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 88)), aData, nData, eType, xDel) 38200 if !(isTransient != 0) { 38201 goto __55 38202 } 38203 if !(eType == 3) { 38204 goto __56 38205 } 38206 i = 0 38207 __57: 38208 if !(i < nData) { 38209 goto __59 38210 } 38211 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(aData + uintptr(i)*8))) 38212 goto __58 38213 __58: 38214 i++ 38215 goto __57 38216 goto __59 38217 __59: 38218 ; 38219 __56: 38220 ; 38221 sqlite3.Xsqlite3_free(tls, aData) 38222 __55: 38223 ; 38224 carray_bind_done: 38225 if !(rc != 0) { 38226 goto __60 38227 } 38228 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, sqlite3.Xsqlite3_errstr(tls, rc), uintptr(0))) 38229 return TCL_ERROR 38230 __60: 38231 ; 38232 return TCL_OK 38233 } 38234 38235 var aStaticData uintptr = uintptr(0) 38236 var nStaticData int32 = 0 38237 var eStaticType int32 = 0 38238 38239 func test_bind_parameter_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38240 bp := tls.Alloc(8) 38241 defer tls.Free(8) 38242 38243 if objc != 2 { 38244 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 38245 return TCL_ERROR 38246 } 38247 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38248 return TCL_ERROR 38249 } 38250 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_bind_parameter_count(tls, *(*uintptr)(unsafe.Pointer(bp))))) 38251 return TCL_OK 38252 } 38253 38254 func test_bind_parameter_name(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38255 bp := tls.Alloc(12) 38256 defer tls.Free(12) 38257 38258 if objc != 3 { 38259 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17047) 38260 return TCL_ERROR 38261 } 38262 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38263 return TCL_ERROR 38264 } 38265 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 38266 return TCL_ERROR 38267 } 38268 tcl.XTcl_SetObjResult(tls, interp, 38269 tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_bind_parameter_name(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))), -1)) 38270 return TCL_OK 38271 } 38272 38273 func test_bind_parameter_index(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38274 bp := tls.Alloc(8) 38275 defer tls.Free(8) 38276 38277 if objc != 3 { 38278 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17054) 38279 return TCL_ERROR 38280 } 38281 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38282 return TCL_ERROR 38283 } 38284 tcl.XTcl_SetObjResult(tls, interp, 38285 tcl.XTcl_NewIntObj(tls, 38286 sqlite3.Xsqlite3_bind_parameter_index(tls, *(*uintptr)(unsafe.Pointer(bp)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))))) 38287 return TCL_OK 38288 } 38289 38290 func test_clear_bindings(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38291 bp := tls.Alloc(8) 38292 defer tls.Free(8) 38293 38294 if objc != 2 { 38295 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 38296 return TCL_ERROR 38297 } 38298 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38299 return TCL_ERROR 38300 } 38301 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_clear_bindings(tls, *(*uintptr)(unsafe.Pointer(bp))))) 38302 return TCL_OK 38303 } 38304 38305 func test_sleep(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38306 bp := tls.Alloc(4) 38307 defer tls.Free(4) 38308 38309 if objc != 2 { 38310 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+13117) 38311 return TCL_ERROR 38312 } 38313 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 38314 return TCL_ERROR 38315 } 38316 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_sleep(tls, *(*int32)(unsafe.Pointer(bp))))) 38317 return TCL_OK 38318 } 38319 38320 func test_ex_errcode(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38321 bp := tls.Alloc(56) 38322 defer tls.Free(56) 38323 38324 var rc int32 38325 38326 if objc != 2 { 38327 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38328 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 38329 return TCL_ERROR 38330 } 38331 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 38332 return TCL_ERROR 38333 } 38334 rc = sqlite3.Xsqlite3_extended_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 38335 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38336 return TCL_OK 38337 } 38338 38339 func test_errcode(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38340 bp := tls.Alloc(56) 38341 defer tls.Free(56) 38342 38343 var rc int32 38344 38345 if objc != 2 { 38346 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38347 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 38348 return TCL_ERROR 38349 } 38350 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 38351 return TCL_ERROR 38352 } 38353 rc = sqlite3.Xsqlite3_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 48))) 38354 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 38355 return TCL_OK 38356 } 38357 38358 func test_errmsg(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38359 bp := tls.Alloc(40) 38360 defer tls.Free(40) 38361 38362 var zErr uintptr 38363 38364 if objc != 2 { 38365 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38366 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 38367 return TCL_ERROR 38368 } 38369 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 38370 return TCL_ERROR 38371 } 38372 38373 zErr = sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 38374 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zErr, -1)) 38375 return TCL_OK 38376 } 38377 38378 func test_error_offset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38379 bp := tls.Alloc(40) 38380 defer tls.Free(40) 38381 38382 var iByteOffset int32 38383 38384 if objc != 2 { 38385 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38386 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 38387 return TCL_ERROR 38388 } 38389 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 38390 return TCL_ERROR 38391 } 38392 38393 iByteOffset = sqlite3.Xsqlite3_error_offset(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 38394 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iByteOffset)) 38395 return TCL_OK 38396 } 38397 38398 func test_errmsg16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38399 bp := tls.Alloc(40) 38400 defer tls.Free(40) 38401 38402 var zErr uintptr 38403 var z uintptr 38404 var bytes int32 = 0 38405 38406 if objc != 2 { 38407 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38408 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+15001, 0)) 38409 return TCL_ERROR 38410 } 38411 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 38412 return TCL_ERROR 38413 } 38414 38415 zErr = sqlite3.Xsqlite3_errmsg16(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 38416 if zErr != 0 { 38417 z = zErr 38418 for bytes = 0; *(*int8)(unsafe.Pointer(z + uintptr(bytes))) != 0 || *(*int8)(unsafe.Pointer(z + uintptr(bytes+1))) != 0; bytes = bytes + 2 { 38419 } 38420 } 38421 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, zErr, bytes)) 38422 return TCL_OK 38423 } 38424 38425 func test_prepare(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38426 bp := tls.Alloc(162) 38427 defer tls.Free(162) 38428 38429 var zSql uintptr 38430 38431 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 38432 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 38433 38434 var rc int32 38435 38436 if objc != 5 && objc != 4 { 38437 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38438 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 38439 return TCL_ERROR 38440 } 38441 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 38442 return TCL_ERROR 38443 } 38444 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38445 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 38446 return TCL_ERROR 38447 } 38448 38449 rc = sqlite3.Xsqlite3_prepare(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, func() uintptr { 38450 if objc >= 5 { 38451 return bp + 104 38452 } 38453 return uintptr(0) 38454 }()) 38455 tcl.XTcl_ResetResult(tls, interp) 38456 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 38457 return TCL_ERROR 38458 } 38459 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 && objc >= 5 { 38460 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 38461 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 104)))-int64(zSql))/1) 38462 } 38463 if int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 104)))) < *(*int32)(unsafe.Pointer(bp + 88)) { 38464 *(*int32)(unsafe.Pointer(bp + 88)) = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(bp + 104)))) 38465 } 38466 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 104)), *(*int32)(unsafe.Pointer(bp + 88))), 0) 38467 } 38468 if rc != SQLITE_OK { 38469 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 38470 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 38471 return TCL_ERROR 38472 } 38473 38474 if *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 38475 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 96))) != 0 { 38476 return TCL_ERROR 38477 } 38478 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 38479 } 38480 return TCL_OK 38481 } 38482 38483 func test_prepare_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38484 bp := tls.Alloc(162) 38485 defer tls.Free(162) 38486 38487 var zSql uintptr 38488 var zCopy uintptr = uintptr(0) 38489 38490 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 38491 var pzTail uintptr 38492 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 38493 38494 var rc int32 38495 38496 if objc != 5 && objc != 4 { 38497 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38498 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 38499 return TCL_ERROR 38500 } 38501 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 38502 return TCL_ERROR 38503 } 38504 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38505 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 38506 return TCL_ERROR 38507 } 38508 38509 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 38510 zCopy = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 38511 libc.X__builtin___memcpy_chk(tls, zCopy, zSql, uint64(*(*int32)(unsafe.Pointer(bp + 88))), libc.X__builtin_object_size(tls, zCopy, 0)) 38512 } else { 38513 var n int32 = int32(libc.Xstrlen(tls, zSql)) + 1 38514 zCopy = libc.Xmalloc(tls, uint64(n)) 38515 libc.X__builtin___memcpy_chk(tls, zCopy, zSql, uint64(n), libc.X__builtin_object_size(tls, zCopy, 0)) 38516 } 38517 if objc >= 5 { 38518 pzTail = bp + 96 38519 } else { 38520 pzTail = uintptr(0) 38521 } 38522 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zCopy, *(*int32)(unsafe.Pointer(bp + 88)), bp+104, pzTail) 38523 if objc >= 5 { 38524 *(*uintptr)(unsafe.Pointer(bp + 96)) = zSql + uintptr((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zCopy))/1) 38525 } 38526 libc.Xfree(tls, zCopy) 38527 38528 tcl.XTcl_ResetResult(tls, interp) 38529 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 38530 return TCL_ERROR 38531 } 38532 if rc == SQLITE_OK && objc >= 5 && *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 38533 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 38534 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zSql))/1) 38535 } 38536 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 96)), *(*int32)(unsafe.Pointer(bp + 88))), 0) 38537 } 38538 if rc != SQLITE_OK { 38539 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 38540 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 38541 return TCL_ERROR 38542 } 38543 38544 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 { 38545 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 104))) != 0 { 38546 return TCL_ERROR 38547 } 38548 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 38549 } 38550 return TCL_OK 38551 } 38552 38553 func test_prepare_v3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38554 bp := tls.Alloc(162) 38555 defer tls.Free(162) 38556 38557 var zSql uintptr 38558 var zCopy uintptr = uintptr(0) 38559 38560 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 38561 var pzTail uintptr 38562 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 38563 38564 var rc int32 38565 38566 if objc != 6 && objc != 5 { 38567 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38568 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17110, 0)) 38569 return TCL_ERROR 38570 } 38571 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 38572 return TCL_ERROR 38573 } 38574 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 38575 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 38576 return TCL_ERROR 38577 } 38578 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+92) != 0 { 38579 return TCL_ERROR 38580 } 38581 38582 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 38583 zCopy = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 88)))) 38584 libc.X__builtin___memcpy_chk(tls, zCopy, zSql, uint64(*(*int32)(unsafe.Pointer(bp + 88))), libc.X__builtin_object_size(tls, zCopy, 0)) 38585 } else { 38586 var n int32 = int32(libc.Xstrlen(tls, zSql)) + 1 38587 zCopy = libc.Xmalloc(tls, uint64(n)) 38588 libc.X__builtin___memcpy_chk(tls, zCopy, zSql, uint64(n), libc.X__builtin_object_size(tls, zCopy, 0)) 38589 } 38590 if objc >= 6 { 38591 pzTail = bp + 96 38592 } else { 38593 pzTail = uintptr(0) 38594 } 38595 rc = sqlite3.Xsqlite3_prepare_v3(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zCopy, *(*int32)(unsafe.Pointer(bp + 88)), uint32(*(*int32)(unsafe.Pointer(bp + 92))), bp+104, pzTail) 38596 libc.Xfree(tls, zCopy) 38597 *(*uintptr)(unsafe.Pointer(bp + 96)) = zSql + uintptr((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zCopy))/1) 38598 38599 tcl.XTcl_ResetResult(tls, interp) 38600 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 38601 return TCL_ERROR 38602 } 38603 if rc == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 && objc >= 6 { 38604 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 38605 *(*int32)(unsafe.Pointer(bp + 88)) = *(*int32)(unsafe.Pointer(bp + 88)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 96)))-int64(zSql))/1) 38606 } 38607 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), uintptr(0), tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 96)), *(*int32)(unsafe.Pointer(bp + 88))), 0) 38608 } 38609 if rc != SQLITE_OK { 38610 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+16476, libc.VaList(bp+32, rc)) 38611 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 38612 return TCL_ERROR 38613 } 38614 38615 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 { 38616 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 104))) != 0 { 38617 return TCL_ERROR 38618 } 38619 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 38620 } 38621 return TCL_OK 38622 } 38623 38624 func test_prepare_tkt3134(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38625 bp := tls.Alloc(146) 38626 defer tls.Free(146) 38627 38628 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 38629 38630 var rc int32 38631 38632 if objc != 2 { 38633 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38634 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 38635 return TCL_ERROR 38636 } 38637 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 38638 return TCL_ERROR 38639 } 38640 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), uintptr(unsafe.Pointer(&zSql))+1, 0, bp+88, uintptr(0)) 38641 38642 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 80)), rc) != 0 { 38643 return TCL_ERROR 38644 } 38645 if rc != SQLITE_OK { 38646 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+96, ts+16476, libc.VaList(bp+32, rc)) 38647 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+96, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 38648 return TCL_ERROR 38649 } 38650 38651 if *(*uintptr)(unsafe.Pointer(bp + 88)) != 0 { 38652 if sqlite3TestMakePointerStr(tls, interp, bp+96, *(*uintptr)(unsafe.Pointer(bp + 88))) != 0 { 38653 return TCL_ERROR 38654 } 38655 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+96, 0)) 38656 } 38657 return TCL_OK 38658 } 38659 38660 var zSql = *(*[10]int8)(unsafe.Pointer(ts + 17138)) 38661 38662 func test_prepare16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38663 bp := tls.Alloc(130) 38664 defer tls.Free(130) 38665 38666 var zSql uintptr 38667 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 38668 var pTail uintptr = uintptr(0) 38669 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 38670 38671 var rc int32 38672 38673 if objc != 5 && objc != 4 { 38674 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38675 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 38676 return TCL_ERROR 38677 } 38678 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 38679 return TCL_ERROR 38680 } 38681 zSql = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) 38682 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+60) != 0 { 38683 return TCL_ERROR 38684 } 38685 38686 rc = sqlite3.Xsqlite3_prepare16(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*int32)(unsafe.Pointer(bp + 60)), bp+64, func() uintptr { 38687 if objc >= 5 { 38688 return bp + 72 38689 } 38690 return uintptr(0) 38691 }()) 38692 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 38693 return TCL_ERROR 38694 } 38695 if rc != 0 { 38696 return TCL_ERROR 38697 } 38698 38699 if objc >= 5 { 38700 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 38701 *(*int32)(unsafe.Pointer(bp + 56)) = *(*int32)(unsafe.Pointer(bp + 56)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 72)))-int64(zSql))/1) 38702 } else { 38703 *(*int32)(unsafe.Pointer(bp + 56)) = 0 38704 } 38705 pTail = tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 56))) 38706 (*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount++ 38707 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), pTail, 0) 38708 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 38709 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount, 1) <= 0 { 38710 tcl.XTclFreeObj(tls, pTail) 38711 } 38712 } 38713 } 38714 38715 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 38716 if sqlite3TestMakePointerStr(tls, interp, bp+80, *(*uintptr)(unsafe.Pointer(bp + 64))) != 0 { 38717 return TCL_ERROR 38718 } 38719 } 38720 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+80, 0)) 38721 return TCL_OK 38722 } 38723 38724 func test_prepare16_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38725 bp := tls.Alloc(130) 38726 defer tls.Free(130) 38727 38728 var zSql uintptr 38729 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 38730 var pTail uintptr = uintptr(0) 38731 *(*uintptr)(unsafe.Pointer(bp + 64)) = uintptr(0) 38732 38733 var rc int32 38734 38735 if objc != 5 && objc != 4 { 38736 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38737 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17064, 0)) 38738 return TCL_ERROR 38739 } 38740 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 38741 return TCL_ERROR 38742 } 38743 zSql = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+56) 38744 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+60) != 0 { 38745 return TCL_ERROR 38746 } 38747 38748 rc = sqlite3.Xsqlite3_prepare16_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zSql, *(*int32)(unsafe.Pointer(bp + 60)), bp+64, func() uintptr { 38749 if objc >= 5 { 38750 return bp + 72 38751 } 38752 return uintptr(0) 38753 }()) 38754 if sqlite3TestErrCode(tls, interp, *(*uintptr)(unsafe.Pointer(bp + 48)), rc) != 0 { 38755 return TCL_ERROR 38756 } 38757 if rc != 0 { 38758 return TCL_ERROR 38759 } 38760 38761 if objc >= 5 { 38762 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 38763 *(*int32)(unsafe.Pointer(bp + 56)) = *(*int32)(unsafe.Pointer(bp + 56)) - int32((int64(*(*uintptr)(unsafe.Pointer(bp + 72)))-int64(zSql))/1) 38764 } else { 38765 *(*int32)(unsafe.Pointer(bp + 56)) = 0 38766 } 38767 pTail = tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), *(*int32)(unsafe.Pointer(bp + 56))) 38768 (*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount++ 38769 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), pTail, 0) 38770 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 38771 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pTail)).FrefCount, 1) <= 0 { 38772 tcl.XTclFreeObj(tls, pTail) 38773 } 38774 } 38775 } 38776 38777 if *(*uintptr)(unsafe.Pointer(bp + 64)) != 0 { 38778 if sqlite3TestMakePointerStr(tls, interp, bp+80, *(*uintptr)(unsafe.Pointer(bp + 64))) != 0 { 38779 return TCL_ERROR 38780 } 38781 } 38782 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+80, 0)) 38783 return TCL_OK 38784 } 38785 38786 func test_open(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38787 bp := tls.Alloc(156) 38788 defer tls.Free(156) 38789 38790 var zFilename uintptr 38791 38792 if objc != 3 && objc != 2 && objc != 1 { 38793 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38794 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17148, 0)) 38795 return TCL_ERROR 38796 } 38797 38798 if objc > 1 { 38799 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 38800 } else { 38801 zFilename = uintptr(0) 38802 } 38803 sqlite3.Xsqlite3_open(tls, zFilename, bp+48) 38804 38805 if sqlite3TestMakePointerStr(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(bp + 48))) != 0 { 38806 return TCL_ERROR 38807 } 38808 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+56, 0)) 38809 return TCL_OK 38810 } 38811 38812 func test_open_v2(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38813 bp := tls.Alloc(484) 38814 defer tls.Free(484) 38815 38816 var zFilename uintptr 38817 var zVfs uintptr 38818 var flags int32 = 0 38819 38820 var rc int32 38821 38822 var i int32 38823 38824 if objc != 4 { 38825 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17171) 38826 return TCL_ERROR 38827 } 38828 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 38829 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 38830 if int32(*(*int8)(unsafe.Pointer(zVfs))) == 0x00 { 38831 zVfs = uintptr(0) 38832 } 38833 38834 rc = tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16, bp+24) 38835 if rc != TCL_OK { 38836 return rc 38837 } 38838 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 16)); i++ { 38839 *(*[21]OpenFlag)(unsafe.Pointer(bp + 32)) = [21]OpenFlag{ 38840 {FzFlag: ts + 17190, Fflag: SQLITE_OPEN_READONLY}, 38841 {FzFlag: ts + 17211, Fflag: SQLITE_OPEN_READWRITE}, 38842 {FzFlag: ts + 17233, Fflag: SQLITE_OPEN_CREATE}, 38843 {FzFlag: ts + 17252, Fflag: SQLITE_OPEN_DELETEONCLOSE}, 38844 {FzFlag: ts + 17278, Fflag: SQLITE_OPEN_EXCLUSIVE}, 38845 {FzFlag: ts + 17300, Fflag: SQLITE_OPEN_AUTOPROXY}, 38846 {FzFlag: ts + 17322, Fflag: SQLITE_OPEN_MAIN_DB}, 38847 {FzFlag: ts + 17342, Fflag: SQLITE_OPEN_TEMP_DB}, 38848 {FzFlag: ts + 17362, Fflag: SQLITE_OPEN_TRANSIENT_DB}, 38849 {FzFlag: ts + 17387, Fflag: SQLITE_OPEN_MAIN_JOURNAL}, 38850 {FzFlag: ts + 17412, Fflag: SQLITE_OPEN_TEMP_JOURNAL}, 38851 {FzFlag: ts + 17437, Fflag: SQLITE_OPEN_SUBJOURNAL}, 38852 {FzFlag: ts + 17460, Fflag: SQLITE_OPEN_SUPER_JOURNAL}, 38853 {FzFlag: ts + 17486, Fflag: SQLITE_OPEN_NOMUTEX}, 38854 {FzFlag: ts + 17506, Fflag: SQLITE_OPEN_FULLMUTEX}, 38855 {FzFlag: ts + 17528, Fflag: SQLITE_OPEN_SHAREDCACHE}, 38856 {FzFlag: ts + 17552, Fflag: SQLITE_OPEN_PRIVATECACHE}, 38857 {FzFlag: ts + 17577, Fflag: SQLITE_OPEN_WAL}, 38858 {FzFlag: ts + 17593, Fflag: SQLITE_OPEN_URI}, 38859 {FzFlag: ts + 17609, Fflag: SQLITE_OPEN_EXRESCODE}, 38860 {}, 38861 } 38862 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 24)) + uintptr(i)*8)), bp+32, int32(unsafe.Sizeof(OpenFlag{})), 38863 ts+17631, 0, bp+368) 38864 if rc != TCL_OK { 38865 return rc 38866 } 38867 flags = flags | (*OpenFlag)(unsafe.Pointer(bp+32+uintptr(*(*int32)(unsafe.Pointer(bp + 368)))*16)).Fflag 38868 } 38869 38870 rc = sqlite3.Xsqlite3_open_v2(tls, zFilename, bp+376, flags, zVfs) 38871 if sqlite3TestMakePointerStr(tls, interp, bp+384, *(*uintptr)(unsafe.Pointer(bp + 376))) != 0 { 38872 return TCL_ERROR 38873 } 38874 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+384, 0)) 38875 return TCL_OK 38876 } 38877 38878 type OpenFlag = struct { 38879 FzFlag uintptr 38880 Fflag int32 38881 F__ccgo_pad1 [4]byte 38882 } 38883 38884 func test_open16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38885 bp := tls.Alloc(156) 38886 defer tls.Free(156) 38887 38888 var zFilename uintptr 38889 38890 if objc != 3 { 38891 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38892 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17148, 0)) 38893 return TCL_ERROR 38894 } 38895 38896 zFilename = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 38897 sqlite3.Xsqlite3_open16(tls, zFilename, bp+48) 38898 38899 if sqlite3TestMakePointerStr(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(bp + 48))) != 0 { 38900 return TCL_ERROR 38901 } 38902 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+56, 0)) 38903 return TCL_OK 38904 } 38905 38906 func test_complete16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38907 var zBuf uintptr 38908 38909 if objc != 2 { 38910 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17636) 38911 return TCL_ERROR 38912 } 38913 38914 zBuf = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(0)) 38915 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_complete16(tls, zBuf))) 38916 return TCL_OK 38917 } 38918 38919 func test_normalize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38920 var zSql uintptr 38921 var zNorm uintptr 38922 38923 if objc != 2 { 38924 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9535) 38925 return TCL_ERROR 38926 } 38927 38928 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 38929 zNorm = sqlite3_normalize(tls, zSql) 38930 if zNorm != 0 { 38931 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zNorm, -1)) 38932 sqlite3.Xsqlite3_free(tls, zNorm) 38933 } 38934 return TCL_OK 38935 } 38936 38937 func test_step(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38938 bp := tls.Alloc(40) 38939 defer tls.Free(40) 38940 38941 var rc int32 38942 38943 if objc != 2 { 38944 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 38945 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+16315, 0)) 38946 return TCL_ERROR 38947 } 38948 38949 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 38950 return TCL_ERROR 38951 } 38952 rc = sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 38953 38954 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 38955 return TCL_OK 38956 } 38957 38958 func test_sql(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38959 bp := tls.Alloc(8) 38960 defer tls.Free(8) 38961 38962 if objc != 2 { 38963 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 38964 return TCL_ERROR 38965 } 38966 38967 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38968 return TCL_ERROR 38969 } 38970 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_sql(tls, *(*uintptr)(unsafe.Pointer(bp))), uintptr(1)) 38971 return TCL_OK 38972 } 38973 38974 func test_ex_sql(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38975 bp := tls.Alloc(8) 38976 defer tls.Free(8) 38977 38978 var z uintptr 38979 38980 if objc != 2 { 38981 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 38982 return TCL_ERROR 38983 } 38984 38985 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 38986 return TCL_ERROR 38987 } 38988 z = sqlite3.Xsqlite3_expanded_sql(tls, *(*uintptr)(unsafe.Pointer(bp))) 38989 tcl.XTcl_SetResult(tls, interp, z, uintptr(1)) 38990 sqlite3.Xsqlite3_free(tls, z) 38991 return TCL_OK 38992 } 38993 38994 func test_column_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 38995 bp := tls.Alloc(40) 38996 defer tls.Free(40) 38997 38998 if objc != 2 { 38999 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39000 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 39001 return TCL_ERROR 39002 } 39003 39004 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 39005 return TCL_ERROR 39006 } 39007 39008 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 39009 return TCL_OK 39010 } 39011 39012 func test_column_type(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39013 bp := tls.Alloc(44) 39014 defer tls.Free(44) 39015 39016 var tp int32 39017 39018 if objc != 3 { 39019 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39020 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 39021 return TCL_ERROR 39022 } 39023 39024 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 39025 return TCL_ERROR 39026 } 39027 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 39028 return TCL_ERROR 39029 } 39030 39031 tp = sqlite3.Xsqlite3_column_type(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 39032 switch tp { 39033 case SQLITE_INTEGER: 39034 tcl.XTcl_SetResult(tls, interp, ts+2413, uintptr(0)) 39035 break 39036 case SQLITE_NULL: 39037 tcl.XTcl_SetResult(tls, interp, ts+5846, uintptr(0)) 39038 break 39039 case SQLITE_FLOAT: 39040 tcl.XTcl_SetResult(tls, interp, ts+17662, uintptr(0)) 39041 break 39042 case SQLITE_TEXT: 39043 tcl.XTcl_SetResult(tls, interp, ts+17668, uintptr(0)) 39044 break 39045 case SQLITE_BLOB: 39046 tcl.XTcl_SetResult(tls, interp, ts+17673, uintptr(0)) 39047 break 39048 default: 39049 } 39050 39051 return TCL_OK 39052 } 39053 39054 func test_column_int64(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39055 bp := tls.Alloc(44) 39056 defer tls.Free(44) 39057 39058 var iVal i64 39059 39060 if objc != 3 { 39061 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39062 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 39063 return TCL_ERROR 39064 } 39065 39066 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 39067 return TCL_ERROR 39068 } 39069 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 39070 return TCL_ERROR 39071 } 39072 39073 iVal = sqlite3.Xsqlite3_column_int64(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 39074 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, iVal)) 39075 return TCL_OK 39076 } 39077 39078 func test_column_blob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39079 bp := tls.Alloc(44) 39080 defer tls.Free(44) 39081 39082 var len int32 39083 var pBlob uintptr 39084 39085 if objc != 3 { 39086 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39087 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 39088 return TCL_ERROR 39089 } 39090 39091 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 39092 return TCL_ERROR 39093 } 39094 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 39095 return TCL_ERROR 39096 } 39097 39098 len = sqlite3.Xsqlite3_column_bytes(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 39099 pBlob = sqlite3.Xsqlite3_column_blob(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 39100 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, pBlob, len)) 39101 return TCL_OK 39102 } 39103 39104 func test_column_double(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39105 bp := tls.Alloc(44) 39106 defer tls.Free(44) 39107 39108 var rVal float64 39109 39110 if objc != 3 { 39111 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39112 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 39113 return TCL_ERROR 39114 } 39115 39116 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 39117 return TCL_ERROR 39118 } 39119 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 39120 return TCL_ERROR 39121 } 39122 39123 rVal = sqlite3.Xsqlite3_column_double(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 39124 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewDoubleObj(tls, rVal)) 39125 return TCL_OK 39126 } 39127 39128 func test_data_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39129 bp := tls.Alloc(40) 39130 defer tls.Free(40) 39131 39132 if objc != 2 { 39133 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39134 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 39135 return TCL_ERROR 39136 } 39137 39138 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 39139 return TCL_ERROR 39140 } 39141 39142 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_data_count(tls, *(*uintptr)(unsafe.Pointer(bp + 32))))) 39143 return TCL_OK 39144 } 39145 39146 func test_stmt_utf8(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39147 bp := tls.Alloc(44) 39148 defer tls.Free(44) 39149 39150 var xFunc uintptr 39151 var zRet uintptr 39152 39153 xFunc = clientData 39154 if objc != 3 { 39155 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39156 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 39157 return TCL_ERROR 39158 } 39159 39160 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 39161 return TCL_ERROR 39162 } 39163 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 39164 return TCL_ERROR 39165 } 39166 zRet = (*struct { 39167 f func(*libc.TLS, uintptr, int32) uintptr 39168 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 39169 if zRet != 0 { 39170 tcl.XTcl_SetResult(tls, interp, zRet, uintptr(0)) 39171 } 39172 return TCL_OK 39173 } 39174 39175 func test_global_recover(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39176 var rc int32 39177 if objc != 1 { 39178 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 39179 return TCL_ERROR 39180 } 39181 rc = sqlite3.Xsqlite3_global_recover(tls) 39182 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 39183 return TCL_OK 39184 } 39185 39186 func test_stmt_utf16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39187 bp := tls.Alloc(44) 39188 defer tls.Free(44) 39189 39190 var pRet uintptr 39191 var zName16 uintptr 39192 var xFunc uintptr 39193 39194 xFunc = clientData 39195 if objc != 3 { 39196 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39197 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 39198 return TCL_ERROR 39199 } 39200 39201 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 39202 return TCL_ERROR 39203 } 39204 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 39205 return TCL_ERROR 39206 } 39207 39208 zName16 = (*struct { 39209 f func(*libc.TLS, uintptr, int32) uintptr 39210 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))) 39211 if zName16 != 0 { 39212 var n int32 39213 var z uintptr = zName16 39214 for n = 0; *(*int8)(unsafe.Pointer(z + uintptr(n))) != 0 || *(*int8)(unsafe.Pointer(z + uintptr(n+1))) != 0; n = n + 2 { 39215 } 39216 pRet = tcl.XTcl_NewByteArrayObj(tls, zName16, n+2) 39217 tcl.XTcl_SetObjResult(tls, interp, pRet) 39218 } 39219 39220 return TCL_OK 39221 } 39222 39223 func test_stmt_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39224 bp := tls.Alloc(44) 39225 defer tls.Free(44) 39226 39227 var xFunc uintptr 39228 39229 xFunc = clientData 39230 if objc != 3 { 39231 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39232 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17649, 0)) 39233 return TCL_ERROR 39234 } 39235 39236 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 39237 return TCL_ERROR 39238 } 39239 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 39240 return TCL_ERROR 39241 } 39242 39243 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*struct { 39244 f func(*libc.TLS, uintptr, int32) int32 39245 })(unsafe.Pointer(&struct{ uintptr }{xFunc})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*int32)(unsafe.Pointer(bp + 40))))) 39246 return TCL_OK 39247 } 39248 39249 func test_interrupt(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39250 bp := tls.Alloc(40) 39251 defer tls.Free(40) 39252 39253 if argc != 2 { 39254 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+15001, 0)) 39255 return TCL_ERROR 39256 } 39257 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 39258 return TCL_ERROR 39259 } 39260 sqlite3.Xsqlite3_interrupt(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 39261 return TCL_OK 39262 } 39263 39264 func delete_function(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39265 bp := tls.Alloc(40) 39266 defer tls.Free(40) 39267 39268 var rc int32 39269 39270 if argc != 3 { 39271 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39272 ts+17678, 0)) 39273 return TCL_ERROR 39274 } 39275 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 39276 return TCL_ERROR 39277 } 39278 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), -1, SQLITE_UTF8, uintptr(0), uintptr(0), uintptr(0), uintptr(0)) 39279 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 39280 return TCL_OK 39281 } 39282 39283 func delete_collation(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39284 bp := tls.Alloc(40) 39285 defer tls.Free(40) 39286 39287 var rc int32 39288 39289 if argc != 3 { 39290 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39291 ts+17678, 0)) 39292 return TCL_ERROR 39293 } 39294 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+32) != 0 { 39295 return TCL_ERROR 39296 } 39297 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(argv + 2*8)), SQLITE_UTF8, uintptr(0), uintptr(0)) 39298 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 39299 return TCL_OK 39300 } 39301 39302 func get_autocommit(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39303 bp := tls.Alloc(94) 39304 defer tls.Free(94) 39305 39306 if argc != 2 { 39307 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39308 ts+15001, 0)) 39309 return TCL_ERROR 39310 } 39311 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+56) != 0 { 39312 return TCL_ERROR 39313 } 39314 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+64, ts+1333, libc.VaList(bp+32, sqlite3.Xsqlite3_get_autocommit(tls, *(*uintptr)(unsafe.Pointer(bp + 56))))) 39315 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+64, 0)) 39316 return TCL_OK 39317 } 39318 39319 func test_busy_timeout(tls *libc.TLS, clientData uintptr, interp uintptr, argc int32, argv uintptr) int32 { 39320 bp := tls.Alloc(60) 39321 defer tls.Free(60) 39322 39323 var rc int32 39324 39325 if argc != 3 { 39326 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 39327 ts+15001, 0)) 39328 return TCL_ERROR 39329 } 39330 if getDbPointer(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 39331 return TCL_ERROR 39332 } 39333 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+56) != 0 { 39334 return TCL_ERROR 39335 } 39336 rc = sqlite3.Xsqlite3_busy_timeout(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 56))) 39337 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 39338 return TCL_OK 39339 } 39340 39341 func tcl_variable_type(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39342 var pVar uintptr 39343 if objc != 2 { 39344 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17696) 39345 return TCL_ERROR 39346 } 39347 pVar = tcl.XTcl_GetVar2Ex(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0), TCL_LEAVE_ERR_MSG) 39348 if pVar == uintptr(0) { 39349 return TCL_ERROR 39350 } 39351 if (*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr != 0 { 39352 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*Tcl_ObjType)(unsafe.Pointer((*Tcl_Obj)(unsafe.Pointer(pVar)).FtypePtr)).Fname, -1)) 39353 } 39354 return TCL_OK 39355 } 39356 39357 func test_release_memory(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39358 bp := tls.Alloc(4) 39359 defer tls.Free(4) 39360 39361 var amt int32 39362 if objc != 1 && objc != 2 { 39363 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 39364 return TCL_ERROR 39365 } 39366 if objc == 2 { 39367 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 39368 return TCL_ERROR 39369 } 39370 } else { 39371 *(*int32)(unsafe.Pointer(bp)) = -1 39372 } 39373 amt = sqlite3.Xsqlite3_release_memory(tls, *(*int32)(unsafe.Pointer(bp))) 39374 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, amt)) 39375 return TCL_OK 39376 } 39377 39378 func test_db_release_memory(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39379 bp := tls.Alloc(8) 39380 defer tls.Free(8) 39381 39382 var rc int32 39383 if objc != 2 { 39384 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 39385 return TCL_ERROR 39386 } 39387 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 39388 return TCL_ERROR 39389 } 39390 rc = sqlite3.Xsqlite3_db_release_memory(tls, *(*uintptr)(unsafe.Pointer(bp))) 39391 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39392 return TCL_OK 39393 } 39394 39395 func test_db_cacheflush(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39396 bp := tls.Alloc(8) 39397 defer tls.Free(8) 39398 39399 var rc int32 39400 if objc != 2 { 39401 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 39402 return TCL_ERROR 39403 } 39404 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 39405 return TCL_ERROR 39406 } 39407 rc = sqlite3.Xsqlite3_db_cacheflush(tls, *(*uintptr)(unsafe.Pointer(bp))) 39408 if rc != 0 { 39409 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrStr(tls, rc), uintptr(0)) 39410 return TCL_ERROR 39411 } 39412 39413 tcl.XTcl_ResetResult(tls, interp) 39414 return TCL_OK 39415 } 39416 39417 func test_system_errno(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39418 bp := tls.Alloc(8) 39419 defer tls.Free(8) 39420 39421 var iErrno int32 39422 if objc != 2 { 39423 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 39424 return TCL_ERROR 39425 } 39426 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 39427 return TCL_ERROR 39428 } 39429 iErrno = sqlite3.Xsqlite3_system_errno(tls, *(*uintptr)(unsafe.Pointer(bp))) 39430 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iErrno)) 39431 return TCL_OK 39432 } 39433 39434 func test_db_filename(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39435 bp := tls.Alloc(24) 39436 defer tls.Free(24) 39437 39438 var zDbName uintptr 39439 if objc != 3 { 39440 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 39441 return TCL_ERROR 39442 } 39443 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 39444 return TCL_ERROR 39445 } 39446 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 39447 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3_db_filename(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDbName), uintptr(0))) 39448 return TCL_OK 39449 } 39450 39451 func test_db_readonly(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39452 bp := tls.Alloc(8) 39453 defer tls.Free(8) 39454 39455 var zDbName uintptr 39456 if objc != 3 { 39457 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16225) 39458 return TCL_ERROR 39459 } 39460 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 39461 return TCL_ERROR 39462 } 39463 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 39464 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_db_readonly(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbName))) 39465 return TCL_OK 39466 } 39467 39468 func test_soft_heap_limit(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39469 bp := tls.Alloc(8) 39470 defer tls.Free(8) 39471 39472 var amt sqlite3_int64 39473 *(*Tcl_WideInt)(unsafe.Pointer(bp)) = int64(-1) 39474 if objc != 1 && objc != 2 { 39475 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 39476 return TCL_ERROR 39477 } 39478 if objc == 2 { 39479 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 39480 return TCL_ERROR 39481 } 39482 } 39483 amt = sqlite3.Xsqlite3_soft_heap_limit64(tls, *(*Tcl_WideInt)(unsafe.Pointer(bp))) 39484 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, amt)) 39485 return TCL_OK 39486 } 39487 39488 func test_hard_heap_limit(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39489 bp := tls.Alloc(8) 39490 defer tls.Free(8) 39491 39492 var amt sqlite3_int64 39493 *(*Tcl_WideInt)(unsafe.Pointer(bp)) = int64(-1) 39494 if objc != 1 && objc != 2 { 39495 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17705) 39496 return TCL_ERROR 39497 } 39498 if objc == 2 { 39499 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 39500 return TCL_ERROR 39501 } 39502 } 39503 amt = sqlite3.Xsqlite3_hard_heap_limit64(tls, *(*Tcl_WideInt)(unsafe.Pointer(bp))) 39504 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, amt)) 39505 return TCL_OK 39506 } 39507 39508 func test_thread_cleanup(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39509 sqlite3.Xsqlite3_thread_cleanup(tls) 39510 return TCL_OK 39511 } 39512 39513 func test_pager_refcounts(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 39514 bp := tls.Alloc(40) 39515 defer tls.Free(40) 39516 39517 var i int32 39518 var v int32 39519 var a uintptr 39520 var pResult uintptr 39521 39522 if objc != 2 { 39523 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39524 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 39525 return TCL_ERROR 39526 } 39527 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 39528 return TCL_ERROR 39529 } 39530 pResult = tcl.XTcl_NewObj(tls) 39531 for i = 0; i < (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FnDb; i++ { 39532 if (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FaDb+uintptr(i)*32)).FpBt == uintptr(0) { 39533 v = -1 39534 } else { 39535 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 39536 a = sqlite3.Xsqlite3PagerStats(tls, sqlite3.Xsqlite3BtreePager(tls, (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FaDb+uintptr(i)*32)).FpBt)) 39537 v = *(*int32)(unsafe.Pointer(a)) 39538 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).Fmutex) 39539 } 39540 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, v)) 39541 } 39542 tcl.XTcl_SetObjResult(tls, interp, pResult) 39543 return TCL_OK 39544 } 39545 39546 func working_64bit_int(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39547 var pTestObj uintptr 39548 var working int32 = 0 39549 39550 pTestObj = tcl.XTcl_NewWideIntObj(tls, int64(1000000)*int64(1234567890)) 39551 working = libc.Bool32(libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, pTestObj), ts+17709) == 0) 39552 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 39553 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pTestObj)).FrefCount, 1) <= 0 { 39554 tcl.XTclFreeObj(tls, pTestObj) 39555 } 39556 } 39557 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewBooleanObj(tls, working)) 39558 return TCL_OK 39559 } 39560 39561 func vfs_unlink_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39562 bp := tls.Alloc(496) 39563 defer tls.Free(496) 39564 39565 var i int32 39566 var pMain uintptr 39567 39568 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(0)) 39569 (*sqlite3_vfs)(unsafe.Pointer(bp)).FzName = ts + 17726 39570 (*sqlite3_vfs)(unsafe.Pointer(bp + 168)).FzName = ts + 17732 39571 39572 pMain = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 39573 sqlite3.Xsqlite3_vfs_register(tls, bp, 0) 39574 39575 sqlite3.Xsqlite3_vfs_register(tls, bp+168, 0) 39576 39577 sqlite3.Xsqlite3_vfs_register(tls, bp, 1) 39578 39579 sqlite3.Xsqlite3_vfs_register(tls, bp+168, 1) 39580 39581 if pMain != 0 { 39582 sqlite3.Xsqlite3_vfs_register(tls, pMain, 1) 39583 39584 } 39585 39586 for i = 0; uint64(i) < uint64(unsafe.Sizeof([20]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 39587 *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 39588 if *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) != 0 { 39589 sqlite3.Xsqlite3_vfs_unregister(tls, *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8))) 39590 39591 } 39592 } 39593 39594 sqlite3.Xsqlite3_vfs_register(tls, pMain, 0) 39595 39596 sqlite3.Xsqlite3_vfs_unregister(tls, pMain) 39597 39598 for i = int32(uint64(unsafe.Sizeof([20]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))) - uint64(1)); i >= 0; i-- { 39599 if *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)) != 0 { 39600 sqlite3.Xsqlite3_vfs_register(tls, *(*uintptr)(unsafe.Pointer(bp + 336 + uintptr(i)*8)), 1) 39601 39602 } 39603 } 39604 39605 sqlite3.Xsqlite3_vfs_unregister(tls, bp) 39606 sqlite3.Xsqlite3_vfs_unregister(tls, bp+168) 39607 39608 sqlite3.Xsqlite3_vfs_unregister(tls, bp) 39609 sqlite3.Xsqlite3_vfs_unregister(tls, bp+168) 39610 39611 return TCL_OK 39612 } 39613 39614 func vfs_initfail_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39615 bp := tls.Alloc(168) 39616 defer tls.Free(168) 39617 39618 (*sqlite3_vfs)(unsafe.Pointer(bp)).FzName = ts + 17726 39619 39620 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 39621 return TCL_ERROR 39622 } 39623 sqlite3.Xsqlite3_vfs_register(tls, bp, 0) 39624 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 39625 return TCL_ERROR 39626 } 39627 sqlite3.Xsqlite3_vfs_register(tls, bp, 1) 39628 if sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) != 0 { 39629 return TCL_ERROR 39630 } 39631 return TCL_OK 39632 } 39633 39634 var apVfs [20]uintptr 39635 var nVfs int32 = 0 39636 39637 func vfs_unregister_all(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39638 var i int32 39639 for i = 0; i < int32(uint64(unsafe.Sizeof(apVfs))/uint64(unsafe.Sizeof(uintptr(0)))); i++ { 39640 apVfs[i] = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 39641 if apVfs[i] == uintptr(0) { 39642 break 39643 } 39644 sqlite3.Xsqlite3_vfs_unregister(tls, apVfs[i]) 39645 } 39646 nVfs = i 39647 return TCL_OK 39648 } 39649 39650 func vfs_reregister_all(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39651 var i int32 39652 for i = nVfs - 1; i >= 0; i-- { 39653 sqlite3.Xsqlite3_vfs_register(tls, apVfs[i], 1) 39654 } 39655 return TCL_OK 39656 } 39657 39658 func file_control_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39659 bp := tls.Alloc(44) 39660 defer tls.Free(44) 39661 39662 *(*int32)(unsafe.Pointer(bp + 40)) = 0 39663 39664 var rc int32 39665 _ = rc 39666 39667 if objc != 2 { 39668 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39669 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 39670 return TCL_ERROR 39671 } 39672 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 39673 return TCL_ERROR 39674 } 39675 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), uintptr(0), 0, bp+40) 39676 39677 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+17738, SQLITE_FCNTL_LOCKSTATE, bp+40) 39678 39679 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+85, -1, bp+40) 39680 39681 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), ts+8931, -1, bp+40) 39682 39683 return TCL_OK 39684 } 39685 39686 func file_control_lasterrno_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39687 bp := tls.Alloc(76) 39688 defer tls.Free(76) 39689 39690 *(*int32)(unsafe.Pointer(bp + 72)) = 0 39691 39692 var rc int32 39693 39694 if objc != 2 { 39695 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39696 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+15001, 0)) 39697 return TCL_ERROR 39698 } 39699 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 39700 return TCL_ERROR 39701 } 39702 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_LAST_ERRNO, bp+72) 39703 if rc != 0 { 39704 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39705 return TCL_ERROR 39706 } 39707 if *(*int32)(unsafe.Pointer(bp + 72)) != 0 { 39708 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17751, 39709 tcl.XTcl_GetStringFromObj(tls, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 72))), uintptr(0)), ts+4894, 0)) 39710 return TCL_ERROR 39711 } 39712 return TCL_OK 39713 } 39714 39715 func file_control_data_version(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39716 bp := tls.Alloc(120) 39717 defer tls.Free(120) 39718 39719 var zDb uintptr 39720 39721 var rc int32 39722 39723 if objc != 3 && objc != 2 { 39724 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17779) 39725 return TCL_ERROR 39726 } 39727 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 39728 return TCL_ERROR 39729 } 39730 if objc == 3 { 39731 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 39732 } else { 39733 zDb = uintptr(0) 39734 } 39735 39736 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), zDb, SQLITE_FCNTL_DATA_VERSION, bp+16) 39737 if rc != 0 { 39738 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 39739 return TCL_ERROR 39740 } else { 39741 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+20, ts+17791, libc.VaList(bp, *(*uint32)(unsafe.Pointer(bp + 16)))) 39742 tcl.XTcl_SetResult(tls, interp, bp+20, uintptr(1)) 39743 return TCL_OK 39744 } 39745 return int32(0) 39746 } 39747 39748 func file_control_chunksize_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39749 bp := tls.Alloc(12) 39750 defer tls.Free(12) 39751 39752 var zDb uintptr 39753 39754 var rc int32 39755 39756 if objc != 4 { 39757 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17794) 39758 return TCL_ERROR 39759 } 39760 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 39761 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8) != 0 { 39762 return TCL_ERROR 39763 } 39764 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 39765 if int32(*(*int8)(unsafe.Pointer(zDb))) == 0 { 39766 zDb = uintptr(0) 39767 } 39768 39769 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb, SQLITE_FCNTL_CHUNK_SIZE, bp+8) 39770 if rc != 0 { 39771 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 39772 return TCL_ERROR 39773 } 39774 return TCL_OK 39775 } 39776 39777 func file_control_sizehint_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39778 bp := tls.Alloc(16) 39779 defer tls.Free(16) 39780 39781 var zDb uintptr 39782 39783 var rc int32 39784 39785 if objc != 4 { 39786 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17794) 39787 return TCL_ERROR 39788 } 39789 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 39790 tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8) != 0 { 39791 return TCL_ERROR 39792 } 39793 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 39794 if int32(*(*int8)(unsafe.Pointer(zDb))) == 0 { 39795 zDb = uintptr(0) 39796 } 39797 39798 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb, SQLITE_FCNTL_SIZE_HINT, bp+8) 39799 if rc != 0 { 39800 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 39801 return TCL_ERROR 39802 } 39803 return TCL_OK 39804 } 39805 39806 func file_control_lockproxy_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39807 bp := tls.Alloc(496) 39808 defer tls.Free(496) 39809 39810 if objc != 3 { 39811 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39812 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17809, 0)) 39813 return TCL_ERROR 39814 } 39815 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+72) != 0 { 39816 return TCL_ERROR 39817 } 39818 39819 { 39820 var rc int32 39821 39822 var zPwd uintptr 39823 39824 zPwd = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+80) 39825 if uint64(unsafe.Sizeof([400]int8{})) < uint64(*(*int32)(unsafe.Pointer(bp + 80))+20) { 39826 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17817, uintptr(0))) 39827 return TCL_ERROR 39828 } 39829 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([400]int8{})), bp+84, ts+17829, libc.VaList(bp+48, zPwd)) 39830 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), uintptr(0), SQLITE_FCNTL_SET_LOCKPROXYFILE, bp+84) 39831 if rc != 0 { 39832 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39833 return TCL_ERROR 39834 } 39835 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), uintptr(0), SQLITE_FCNTL_GET_LOCKPROXYFILE, bp+488) 39836 if libc.Xstrncmp(tls, bp+84, *(*uintptr)(unsafe.Pointer(bp + 488)), uint64(11)) != 0 { 39837 tcl.XTcl_AppendResult(tls, interp, 39838 libc.VaList(bp+56, ts+17843, 0)) 39839 return TCL_ERROR 39840 } 39841 if rc != 0 { 39842 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39843 return TCL_ERROR 39844 } 39845 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), uintptr(0), SQLITE_FCNTL_SET_LOCKPROXYFILE, bp+84) 39846 if rc != 0 { 39847 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 39848 return TCL_ERROR 39849 } 39850 39851 } 39852 return TCL_OK 39853 } 39854 39855 func file_control_persist_wal(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39856 bp := tls.Alloc(176) 39857 defer tls.Free(176) 39858 39859 var rc int32 39860 39861 if objc != 3 { 39862 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39863 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17903, 0)) 39864 return TCL_ERROR 39865 } 39866 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 39867 return TCL_ERROR 39868 } 39869 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 39870 return TCL_ERROR 39871 } 39872 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_PERSIST_WAL, bp+72) 39873 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+76, ts+17912, libc.VaList(bp+32, rc, *(*int32)(unsafe.Pointer(bp + 72)))) 39874 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+76, uintptr(0))) 39875 return TCL_OK 39876 } 39877 39878 func file_control_powersafe_overwrite(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39879 bp := tls.Alloc(176) 39880 defer tls.Free(176) 39881 39882 var rc int32 39883 39884 if objc != 3 { 39885 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39886 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17903, 0)) 39887 return TCL_ERROR 39888 } 39889 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 39890 return TCL_ERROR 39891 } 39892 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 39893 return TCL_ERROR 39894 } 39895 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), uintptr(0), SQLITE_FCNTL_POWERSAFE_OVERWRITE, bp+72) 39896 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+76, ts+17912, libc.VaList(bp+32, rc, *(*int32)(unsafe.Pointer(bp + 72)))) 39897 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+76, uintptr(0))) 39898 return TCL_OK 39899 } 39900 39901 func file_control_vfsname(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39902 bp := tls.Alloc(64) 39903 defer tls.Free(64) 39904 39905 var zDbName uintptr = ts + 85 39906 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 39907 39908 if objc != 2 && objc != 3 { 39909 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39910 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17918, 0)) 39911 return TCL_ERROR 39912 } 39913 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 39914 return TCL_ERROR 39915 } 39916 if objc == 3 { 39917 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 39918 } 39919 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zDbName, SQLITE_FCNTL_VFSNAME, bp+56) 39920 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(bp + 56)), uintptr(0))) 39921 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 39922 return TCL_OK 39923 } 39924 39925 func file_control_reservebytes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39926 bp := tls.Alloc(12) 39927 defer tls.Free(12) 39928 39929 var zDbName uintptr = ts + 85 39930 *(*int32)(unsafe.Pointer(bp + 8)) = 0 39931 var rc int32 39932 39933 if objc != 3 { 39934 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17930) 39935 return TCL_ERROR 39936 } 39937 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 39938 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 39939 return TCL_ERROR 39940 } 39941 39942 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbName, SQLITE_FCNTL_RESERVE_BYTES, bp+8) 39943 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 39944 return TCL_OK 39945 } 39946 39947 func file_control_tempfilename(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39948 bp := tls.Alloc(64) 39949 defer tls.Free(64) 39950 39951 var zDbName uintptr = ts + 85 39952 *(*uintptr)(unsafe.Pointer(bp + 56)) = uintptr(0) 39953 39954 if objc != 2 && objc != 3 { 39955 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39956 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17918, 0)) 39957 return TCL_ERROR 39958 } 39959 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 39960 return TCL_ERROR 39961 } 39962 if objc == 3 { 39963 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 39964 } 39965 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), zDbName, SQLITE_FCNTL_TEMPFILENAME, bp+56) 39966 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, *(*uintptr)(unsafe.Pointer(bp + 56)), uintptr(0))) 39967 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 56))) 39968 return TCL_OK 39969 } 39970 39971 func file_control_external_reader(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 39972 bp := tls.Alloc(44) 39973 defer tls.Free(44) 39974 39975 var zName uintptr = ts + 85 39976 *(*int32)(unsafe.Pointer(bp + 40)) = 0 39977 var rc int32 = SQLITE_OK 39978 39979 if objc != 2 && objc != 3 { 39980 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 39981 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17918, 0)) 39982 return TCL_ERROR 39983 } 39984 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 39985 return TCL_ERROR 39986 } 39987 if objc == 3 { 39988 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 39989 } 39990 rc = sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zName, SQLITE_FCNTL_EXTERNAL_READER, bp+40) 39991 if rc != SQLITE_OK { 39992 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 39993 return TCL_ERROR 39994 } 39995 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 40)))) 39996 return TCL_OK 39997 } 39998 39999 func vfs_list(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40000 var pVfs uintptr 40001 var pRet uintptr = tcl.XTcl_NewObj(tls) 40002 if objc != 1 { 40003 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 40004 return TCL_ERROR 40005 } 40006 for pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)); pVfs != 0; pVfs = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpNext { 40007 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName, -1)) 40008 } 40009 tcl.XTcl_SetObjResult(tls, interp, pRet) 40010 return TCL_OK 40011 } 40012 40013 func test_limit(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40014 bp := tls.Alloc(68) 40015 defer tls.Free(68) 40016 40017 var rc int32 40018 var i int32 40019 var id int32 = 0 40020 40021 var zId uintptr 40022 40023 if objc != 4 { 40024 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 40025 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+17935, 0)) 40026 return TCL_ERROR 40027 } 40028 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 40029 return TCL_ERROR 40030 } 40031 zId = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 40032 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aId))/uint64(unsafe.Sizeof(struct { 40033 FzName uintptr 40034 Fid int32 40035 F__ccgo_pad1 [4]byte 40036 }{})); i++ { 40037 if libc.Xstrcmp(tls, zId, aId[i].FzName) == 0 { 40038 id = aId[i].Fid 40039 break 40040 } 40041 } 40042 if uint64(i) >= uint64(unsafe.Sizeof(aId))/uint64(unsafe.Sizeof(struct { 40043 FzName uintptr 40044 Fid int32 40045 F__ccgo_pad1 [4]byte 40046 }{})) { 40047 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+17948, zId, uintptr(0))) 40048 return TCL_ERROR 40049 } 40050 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 40051 return TCL_ERROR 40052 } 40053 rc = sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), id, *(*int32)(unsafe.Pointer(bp + 64))) 40054 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 40055 return TCL_OK 40056 } 40057 40058 var aId = [14]struct { 40059 FzName uintptr 40060 Fid int32 40061 F__ccgo_pad1 [4]byte 40062 }{ 40063 {FzName: ts + 17969}, 40064 {FzName: ts + 17989, Fid: SQLITE_LIMIT_SQL_LENGTH}, 40065 {FzName: ts + 18013, Fid: SQLITE_LIMIT_COLUMN}, 40066 {FzName: ts + 18033, Fid: SQLITE_LIMIT_EXPR_DEPTH}, 40067 {FzName: ts + 18057, Fid: SQLITE_LIMIT_COMPOUND_SELECT}, 40068 {FzName: ts + 18086, Fid: SQLITE_LIMIT_VDBE_OP}, 40069 {FzName: ts + 18107, Fid: SQLITE_LIMIT_FUNCTION_ARG}, 40070 {FzName: ts + 18133, Fid: SQLITE_LIMIT_ATTACHED}, 40071 {FzName: ts + 18155, Fid: SQLITE_LIMIT_LIKE_PATTERN_LENGTH}, 40072 {FzName: ts + 18188, Fid: SQLITE_LIMIT_VARIABLE_NUMBER}, 40073 {FzName: ts + 18217, Fid: SQLITE_LIMIT_TRIGGER_DEPTH}, 40074 {FzName: ts + 18244, Fid: SQLITE_LIMIT_WORKER_THREADS}, 40075 {FzName: ts + 18272, Fid: -1}, 40076 {FzName: ts + 18294, Fid: SQLITE_LIMIT_WORKER_THREADS + 1}, 40077 } 40078 40079 func save_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40080 var rc int32 = sqlite3.Xsqlite3_test_control(tls, 9999, 0) 40081 _ = rc 40082 40083 rc = sqlite3.Xsqlite3_test_control(tls, -1, 0) 40084 40085 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_SAVE, 0) 40086 return TCL_OK 40087 } 40088 40089 func restore_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40090 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_RESTORE, 0) 40091 return TCL_OK 40092 } 40093 40094 func reset_prng_state(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40095 sqlite3.Xsqlite3_randomness(tls, 0, uintptr(0)) 40096 return TCL_OK 40097 } 40098 40099 func prng_seed(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40100 bp := tls.Alloc(32) 40101 defer tls.Free(32) 40102 40103 *(*int32)(unsafe.Pointer(bp + 16)) = 0 40104 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 40105 if objc != 2 && objc != 3 { 40106 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18314) 40107 return TCL_ERROR 40108 } 40109 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 40110 return TCL_ERROR 40111 } 40112 if objc == 3 && getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+24) != 0 { 40113 return TCL_ERROR 40114 } 40115 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PRNG_SEED, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(bp + 24)))) 40116 return TCL_OK 40117 } 40118 40119 func extra_schema_checks(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40120 bp := tls.Alloc(12) 40121 defer tls.Free(12) 40122 40123 *(*int32)(unsafe.Pointer(bp + 8)) = 0 40124 if objc != 2 { 40125 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18324) 40126 return TCL_ERROR 40127 } 40128 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 40129 return TCL_ERROR 40130 } 40131 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 40132 return TCL_OK 40133 } 40134 40135 func database_may_be_corrupt(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40136 bp := tls.Alloc(8) 40137 defer tls.Free(8) 40138 40139 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_NEVER_CORRUPT, libc.VaList(bp, 0)) 40140 return TCL_OK 40141 } 40142 40143 func database_never_corrupt(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40144 bp := tls.Alloc(8) 40145 defer tls.Free(8) 40146 40147 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_NEVER_CORRUPT, libc.VaList(bp, 1)) 40148 return TCL_OK 40149 } 40150 40151 func test_pcache_stats(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40152 bp := tls.Alloc(16) 40153 defer tls.Free(16) 40154 40155 var pRet uintptr 40156 40157 sqlite3.Xsqlite3PcacheStats(tls, bp, bp+4, bp+8, bp+12) 40158 40159 pRet = tcl.XTcl_NewObj(tls) 40160 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18332, -1)) 40161 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp)))) 40162 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18340, -1)) 40163 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4)))) 40164 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18344, -1)) 40165 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 8)))) 40166 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+18348, -1)) 40167 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 40168 40169 tcl.XTcl_SetObjResult(tls, interp, pRet) 40170 40171 return TCL_OK 40172 } 40173 40174 func test_unlock_notify_cb(tls *libc.TLS, aArg uintptr, nArg int32) { 40175 var ii int32 40176 for ii = 0; ii < nArg; ii++ { 40177 tcl.XTcl_EvalEx(tls, *(*uintptr)(unsafe.Pointer(aArg + uintptr(ii)*8)), ts+13692, -1, TCL_EVAL_GLOBAL) 40178 } 40179 } 40180 40181 func test_unlock_notify(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40182 bp := tls.Alloc(8) 40183 defer tls.Free(8) 40184 40185 var rc int32 40186 40187 if objc != 2 { 40188 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 40189 return TCL_ERROR 40190 } 40191 40192 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 40193 return TCL_ERROR 40194 } 40195 rc = sqlite3.Xsqlite3_unlock_notify(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*uintptr)(unsafe.Pointer(&struct { 40196 f func(*libc.TLS, uintptr, int32) 40197 }{test_unlock_notify_cb})), interp) 40198 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 40199 return TCL_OK 40200 } 40201 40202 func test_wal_checkpoint(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40203 bp := tls.Alloc(8) 40204 defer tls.Free(8) 40205 40206 var zDb uintptr = uintptr(0) 40207 40208 var rc int32 40209 40210 if objc != 3 && objc != 2 { 40211 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18359) 40212 return TCL_ERROR 40213 } 40214 40215 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 40216 return TCL_ERROR 40217 } 40218 if objc == 3 { 40219 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 40220 } 40221 rc = sqlite3.Xsqlite3_wal_checkpoint(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb) 40222 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 40223 return TCL_OK 40224 } 40225 40226 func test_wal_checkpoint_v2(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40227 bp := tls.Alloc(96) 40228 defer tls.Free(96) 40229 40230 var zDb uintptr = uintptr(0) 40231 40232 var rc int32 40233 40234 *(*int32)(unsafe.Pointer(bp + 88)) = -555 40235 *(*int32)(unsafe.Pointer(bp + 92)) = -555 40236 var pRet uintptr 40237 40238 *(*[5]uintptr)(unsafe.Pointer(bp + 48)) = [5]uintptr{ts + 18369, ts + 18377, ts + 18382, ts + 18390, uintptr(0)} 40239 40240 if objc != 3 && objc != 4 { 40241 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18399) 40242 return TCL_ERROR 40243 } 40244 40245 if objc == 4 { 40246 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 40247 } 40248 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 || TCL_OK != tcl.XTcl_GetIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) && 40249 TCL_OK != tcl.XTcl_GetIndexFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+48, ts+18414, 0, bp+40) { 40250 return TCL_ERROR 40251 } 40252 40253 rc = sqlite3.Xsqlite3_wal_checkpoint_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zDb, *(*int32)(unsafe.Pointer(bp + 40)), bp+88, bp+92) 40254 if rc != SQLITE_OK && rc != SQLITE_BUSY { 40255 var zErrCode uintptr = sqlite3.Xsqlite3ErrName(tls, rc) 40256 tcl.XTcl_ResetResult(tls, interp) 40257 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, zErrCode, ts+9645, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), 0)) 40258 return TCL_ERROR 40259 } 40260 40261 pRet = tcl.XTcl_NewObj(tls) 40262 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, func() int32 { 40263 if rc == SQLITE_BUSY { 40264 return 1 40265 } 40266 return 0 40267 }())) 40268 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 88)))) 40269 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 92)))) 40270 tcl.XTcl_SetObjResult(tls, interp, pRet) 40271 40272 return TCL_OK 40273 } 40274 40275 func test_wal_autocheckpoint(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40276 bp := tls.Alloc(12) 40277 defer tls.Free(12) 40278 40279 var rc int32 40280 40281 if objc != 3 { 40282 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18419) 40283 return TCL_ERROR 40284 } 40285 40286 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 40287 tcl.XTcl_GetIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 40288 return TCL_ERROR 40289 } 40290 40291 rc = sqlite3.Xsqlite3_wal_autocheckpoint(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8))) 40292 tcl.XTcl_ResetResult(tls, interp) 40293 if rc != SQLITE_OK { 40294 var zErrCode uintptr = sqlite3.Xsqlite3ErrName(tls, rc) 40295 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zErrCode, -1)) 40296 return TCL_ERROR 40297 } 40298 40299 return TCL_OK 40300 } 40301 40302 type LogCallback = struct { 40303 FpInterp uintptr 40304 FpObj uintptr 40305 } 40306 40307 var logcallback = LogCallback{} 40308 40309 func xLogcallback(tls *libc.TLS, unused uintptr, err int32, zMsg uintptr) { 40310 var pNew uintptr = tcl.XTcl_DuplicateObj(tls, logcallback.FpObj) 40311 (*Tcl_Obj)(unsafe.Pointer(pNew)).FrefCount++ 40312 tcl.XTcl_ListObjAppendElement(tls, 40313 uintptr(0), pNew, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, err), -1)) 40314 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pNew, tcl.XTcl_NewStringObj(tls, zMsg, -1)) 40315 tcl.XTcl_EvalObjEx(tls, logcallback.FpInterp, pNew, TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT) 40316 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 40317 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pNew)).FrefCount, 1) <= 0 { 40318 tcl.XTclFreeObj(tls, pNew) 40319 } 40320 } 40321 } 40322 40323 func test_sqlite3_log(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40324 bp := tls.Alloc(32) 40325 defer tls.Free(32) 40326 40327 if objc > 2 { 40328 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10187) 40329 return TCL_ERROR 40330 } 40331 if logcallback.FpObj != 0 { 40332 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 40333 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(logcallback.FpObj)).FrefCount, 1) <= 0 { 40334 tcl.XTclFreeObj(tls, logcallback.FpObj) 40335 } 40336 } 40337 logcallback.FpObj = uintptr(0) 40338 logcallback.FpInterp = uintptr(0) 40339 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOG, libc.VaList(bp, uintptr(0), uintptr(0))) 40340 } 40341 if objc > 1 { 40342 logcallback.FpObj = *(*uintptr)(unsafe.Pointer(objv + 1*8)) 40343 (*Tcl_Obj)(unsafe.Pointer(logcallback.FpObj)).FrefCount++ 40344 logcallback.FpInterp = interp 40345 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOG, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(&struct { 40346 f func(*libc.TLS, uintptr, int32, uintptr) 40347 }{xLogcallback})), uintptr(0))) 40348 } 40349 return TCL_OK 40350 } 40351 40352 func runAsObjProc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40353 bp := tls.Alloc(112) 40354 defer tls.Free(112) 40355 40356 if objc < 2 { 40357 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18428) 40358 return TCL_ERROR 40359 } 40360 if !(tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0) { 40361 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14859, 40362 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 40363 return TCL_ERROR 40364 } 40365 if (*Tcl_CmdInfo)(unsafe.Pointer(bp+48)).FobjProc == uintptr(0) { 40366 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+18440, 40367 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 40368 return TCL_ERROR 40369 } 40370 return (*struct { 40371 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 40372 })(unsafe.Pointer(&struct{ uintptr }{(*Tcl_CmdInfo)(unsafe.Pointer(bp + 48)).FobjProc})).f(tls, (*Tcl_CmdInfo)(unsafe.Pointer(bp+48)).FobjClientData, interp, objc-1, objv+uintptr(1)*8) 40373 } 40374 40375 func printExplainQueryPlan(tls *libc.TLS, pStmt uintptr) int32 { 40376 bp := tls.Alloc(48) 40377 defer tls.Free(48) 40378 40379 var zSql uintptr 40380 var zExplain uintptr 40381 40382 var rc int32 40383 40384 zSql = sqlite3.Xsqlite3_sql(tls, pStmt) 40385 if zSql == uintptr(0) { 40386 return SQLITE_ERROR 40387 } 40388 40389 zExplain = sqlite3.Xsqlite3_mprintf(tls, ts+330, libc.VaList(bp, zSql)) 40390 if zExplain == uintptr(0) { 40391 return SQLITE_NOMEM 40392 } 40393 40394 rc = sqlite3.Xsqlite3_prepare_v2(tls, sqlite3.Xsqlite3_db_handle(tls, pStmt), zExplain, -1, bp+40, uintptr(0)) 40395 sqlite3.Xsqlite3_free(tls, zExplain) 40396 if rc != SQLITE_OK { 40397 return rc 40398 } 40399 40400 for SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) { 40401 var iSelectid int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 0) 40402 var iOrder int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 1) 40403 var iFrom int32 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 2) 40404 var zDetail uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), 3) 40405 40406 libc.Xprintf(tls, ts+18465, libc.VaList(bp+8, iSelectid, iOrder, iFrom, zDetail)) 40407 } 40408 40409 return sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 40))) 40410 } 40411 40412 func test_print_eqp(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40413 bp := tls.Alloc(8) 40414 defer tls.Free(8) 40415 40416 var rc int32 40417 40418 if objc != 2 { 40419 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 40420 return TCL_ERROR 40421 } 40422 if getStmtPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 40423 return TCL_ERROR 40424 } 40425 rc = printExplainQueryPlan(tls, *(*uintptr)(unsafe.Pointer(bp))) 40426 40427 libc.Xfflush(tls, libc.X__stdoutp) 40428 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 40429 return TCL_OK 40430 } 40431 40432 func testLocaltime(tls *libc.TLS, aliasT uintptr, aliasTM uintptr) int32 { 40433 var t time_t = *(*time_t)(unsafe.Pointer(aliasT)) 40434 var pTm uintptr = aliasTM 40435 var altT time_t 40436 var iJD sqlite3_int64 40437 var Z int32 40438 var A int32 40439 var B int32 40440 var C int32 40441 var D int32 40442 var E int32 40443 var X1 int32 40444 var S int32 40445 40446 if t/int64(86400)&int64(1) != 0 { 40447 altT = t + int64(1800) 40448 } else { 40449 altT = t - int64(1800) 40450 } 40451 iJD = altT + 210866760000 40452 Z = int32((iJD + int64(43200)) / int64(86400)) 40453 A = libc.Int32FromFloat64((float64(Z) - 1867216.25) / 36524.25) 40454 A = Z + 1 + A - A/4 40455 B = A + 1524 40456 C = libc.Int32FromFloat64((float64(B) - 122.1) / 365.25) 40457 D = 36525 * (C & 32767) / 100 40458 E = libc.Int32FromFloat64(float64(B-D) / 30.6001) 40459 X1 = libc.Int32FromFloat64(30.6001 * float64(E)) 40460 (*tm)(unsafe.Pointer(pTm)).Ftm_mday = B - D - X1 40461 (*tm)(unsafe.Pointer(pTm)).Ftm_mon = func() int32 { 40462 if E < 14 { 40463 return E - 2 40464 } 40465 return E - 14 40466 }() 40467 (*tm)(unsafe.Pointer(pTm)).Ftm_year = func() int32 { 40468 if (*tm)(unsafe.Pointer(pTm)).Ftm_mon > 1 { 40469 return C - 4716 40470 } 40471 return C - 4715 40472 }() - 1900 40473 S = int32((iJD + int64(43200)) % int64(86400)) 40474 (*tm)(unsafe.Pointer(pTm)).Ftm_hour = S / 3600 40475 (*tm)(unsafe.Pointer(pTm)).Ftm_min = S / 60 % 60 40476 (*tm)(unsafe.Pointer(pTm)).Ftm_sec = S % 60 40477 return libc.Bool32(t == int64(959609760)) 40478 } 40479 40480 func test_test_control(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40481 bp := tls.Alloc(192) 40482 defer tls.Free(192) 40483 40484 *(*[4]Verb)(unsafe.Pointer(bp + 72)) = [4]Verb{ 40485 {FzName: ts + 18478, Fi: SQLITE_TESTCTRL_LOCALTIME_FAULT}, 40486 {FzName: ts + 18510, Fi: SQLITE_TESTCTRL_SORTER_MMAP}, 40487 {FzName: ts + 18538, Fi: SQLITE_TESTCTRL_IMPOSTER}, 40488 {FzName: ts + 18563, Fi: SQLITE_TESTCTRL_INTERNAL_FUNCTIONS}, 40489 } 40490 40491 var iFlag int32 40492 var rc int32 40493 40494 if objc < 2 { 40495 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18598) 40496 return TCL_ERROR 40497 } 40498 40499 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 40500 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+72, int32(unsafe.Sizeof(Verb{})), ts+18611, 0, bp+136) 40501 if rc != TCL_OK { 40502 return rc 40503 } 40504 40505 iFlag = (*Verb)(unsafe.Pointer(bp + 72 + uintptr(*(*int32)(unsafe.Pointer(bp + 136)))*16)).Fi 40506 switch iFlag { 40507 case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: 40508 { 40509 *(*uintptr)(unsafe.Pointer(bp + 144)) = uintptr(0) 40510 if objc != 3 { 40511 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+2050) 40512 return TCL_ERROR 40513 } 40514 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+144) != 0 { 40515 return TCL_ERROR 40516 } 40517 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_INTERNAL_FUNCTIONS, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(bp + 144)))) 40518 break 40519 40520 } 40521 case SQLITE_TESTCTRL_LOCALTIME_FAULT: 40522 { 40523 if objc != 3 { 40524 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18616) 40525 return TCL_ERROR 40526 } 40527 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+152) != 0 { 40528 return TCL_ERROR 40529 } 40530 sqlite3.Xsqlite3_test_control(tls, iFlag, libc.VaList(bp+8, *(*int32)(unsafe.Pointer(bp + 152)), *(*uintptr)(unsafe.Pointer(&struct { 40531 f func(*libc.TLS, uintptr, uintptr) int32 40532 }{testLocaltime})))) 40533 break 40534 40535 } 40536 40537 case SQLITE_TESTCTRL_SORTER_MMAP: 40538 { 40539 if objc != 4 { 40540 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18622) 40541 return TCL_ERROR 40542 } 40543 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+160) != 0 { 40544 return TCL_ERROR 40545 } 40546 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+168) != 0 { 40547 return TCL_ERROR 40548 } 40549 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_SORTER_MMAP, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(bp + 160)), *(*int32)(unsafe.Pointer(bp + 168)))) 40550 break 40551 40552 } 40553 40554 case SQLITE_TESTCTRL_IMPOSTER: 40555 { 40556 var zDbName uintptr 40557 40558 if objc != 6 { 40559 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+18631) 40560 return TCL_ERROR 40561 } 40562 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+176) != 0 { 40563 return TCL_ERROR 40564 } 40565 zDbName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 40566 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+184) != 0 { 40567 return TCL_ERROR 40568 } 40569 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+188) != 0 { 40570 return TCL_ERROR 40571 } 40572 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_IMPOSTER, libc.VaList(bp+40, *(*uintptr)(unsafe.Pointer(bp + 176)), zDbName, *(*int32)(unsafe.Pointer(bp + 184)), *(*int32)(unsafe.Pointer(bp + 188)))) 40573 break 40574 40575 } 40576 } 40577 40578 tcl.XTcl_ResetResult(tls, interp) 40579 return TCL_OK 40580 } 40581 40582 type Verb = struct { 40583 FzName uintptr 40584 Fi int32 40585 F__ccgo_pad1 [4]byte 40586 } 40587 40588 func test_getrusage(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40589 bp := tls.Alloc(1216) 40590 defer tls.Free(1216) 40591 40592 libc.X__builtin___memset_chk(tls, bp+48, 0, uint64(unsafe.Sizeof(rusage{})), libc.X__builtin_object_size(tls, bp+48, 0)) 40593 libc.Xgetrusage(tls, RUSAGE_SELF, bp+48) 40594 40595 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1024]int8{})), bp+192, 40596 ts+18652, 40597 libc.VaList(bp, int32((*rusage)(unsafe.Pointer(bp+48)).Fru_utime.Ftv_sec), (*rusage)(unsafe.Pointer(bp+48)).Fru_utime.Ftv_usec, 40598 int32((*rusage)(unsafe.Pointer(bp+48)).Fru_stime.Ftv_sec), (*rusage)(unsafe.Pointer(bp+48)).Fru_stime.Ftv_usec, 40599 int32((*rusage)(unsafe.Pointer(bp+48)).Fru_minflt), int32((*rusage)(unsafe.Pointer(bp+48)).Fru_majflt))) 40600 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+192, -1)) 40601 return TCL_OK 40602 } 40603 40604 func optimization_control(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40605 bp := tls.Alloc(68) 40606 defer tls.Free(68) 40607 40608 var i int32 40609 40610 var zOpt uintptr 40611 40612 var mask int32 = 0 40613 40614 if objc != 4 { 40615 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18712) 40616 return TCL_ERROR 40617 } 40618 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 40619 return TCL_ERROR 40620 } 40621 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 40622 return TCL_ERROR 40623 } 40624 zOpt = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 40625 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 40626 FzOptName uintptr 40627 Fmask int32 40628 F__ccgo_pad1 [4]byte 40629 }{})); i++ { 40630 if libc.Xstrcmp(tls, zOpt, aOpt[i].FzOptName) == 0 { 40631 mask = aOpt[i].Fmask 40632 break 40633 } 40634 } 40635 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 40636 mask = ^mask 40637 } 40638 if uint64(i) >= uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 40639 FzOptName uintptr 40640 Fmask int32 40641 F__ccgo_pad1 [4]byte 40642 }{})) { 40643 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18727, 40644 uintptr(0))) 40645 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aOpt))/uint64(unsafe.Sizeof(struct { 40646 FzOptName uintptr 40647 Fmask int32 40648 F__ccgo_pad1 [4]byte 40649 }{})); i++ { 40650 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+4894, aOpt[i].FzOptName, uintptr(0))) 40651 } 40652 return TCL_ERROR 40653 } 40654 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_OPTIMIZATIONS, libc.VaList(bp+40, *(*uintptr)(unsafe.Pointer(bp + 56)), mask)) 40655 return TCL_OK 40656 } 40657 40658 var aOpt = [14]struct { 40659 FzOptName uintptr 40660 Fmask int32 40661 F__ccgo_pad1 [4]byte 40662 }{ 40663 {FzOptName: ts + 18768, Fmask: libc.Int32FromUint32(SQLITE_AllOpts)}, 40664 {FzOptName: ts + 18772}, 40665 {FzOptName: ts + 18777, Fmask: SQLITE_QueryFlattener}, 40666 {FzOptName: ts + 18793, Fmask: SQLITE_GroupByOrder}, 40667 {FzOptName: ts + 18807, Fmask: SQLITE_FactorOutConst}, 40668 {FzOptName: ts + 18824, Fmask: SQLITE_DistinctOpt}, 40669 {FzOptName: ts + 18837, Fmask: SQLITE_CoverIdxScan}, 40670 {FzOptName: ts + 18852, Fmask: SQLITE_OrderByIdxJoin}, 40671 {FzOptName: ts + 18870, Fmask: SQLITE_Transitive}, 40672 {FzOptName: ts + 18881, Fmask: SQLITE_OmitNoopJoin}, 40673 {FzOptName: ts + 18896, Fmask: SQLITE_Stat4}, 40674 {FzOptName: ts + 18902, Fmask: SQLITE_SkipScan}, 40675 {FzOptName: ts + 18912, Fmask: SQLITE_PushDown}, 40676 {FzOptName: ts + 18922, Fmask: SQLITE_BalancedMerge}, 40677 } 40678 40679 func tclLoadStaticExtensionCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40680 bp := tls.Alloc(80) 40681 defer tls.Free(80) 40682 40683 var zName uintptr 40684 var i int32 40685 var j int32 40686 var rc int32 40687 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 40688 if objc < 3 { 40689 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18937) 40690 return TCL_ERROR 40691 } 40692 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 40693 return TCL_ERROR 40694 } 40695 for j = 2; j < objc; j++ { 40696 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(j)*8))) 40697 for i = 0; i < int32(uint64(unsafe.Sizeof(aExtension))/uint64(unsafe.Sizeof(struct { 40698 FzExtName uintptr 40699 FpInit uintptr 40700 }{}))); i++ { 40701 if libc.Xstrcmp(tls, zName, aExtension[i].FzExtName) == 0 { 40702 break 40703 } 40704 } 40705 if i >= int32(uint64(unsafe.Sizeof(aExtension))/uint64(unsafe.Sizeof(struct { 40706 FzExtName uintptr 40707 FpInit uintptr 40708 }{}))) { 40709 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+18949, zName, uintptr(0))) 40710 return TCL_ERROR 40711 } 40712 if aExtension[i].FpInit != 0 { 40713 rc = (*struct { 40714 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 40715 })(unsafe.Pointer(&struct{ uintptr }{aExtension[i].FpInit})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), bp+72, uintptr(0)) 40716 } else { 40717 rc = SQLITE_OK 40718 } 40719 if rc != SQLITE_OK && rc != SQLITE_OK|int32(1)<<8 || *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 40720 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+18969, zName, ts+18988, *(*uintptr)(unsafe.Pointer(bp + 72)), 40721 uintptr(0))) 40722 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 40723 return TCL_ERROR 40724 } 40725 } 40726 return TCL_OK 40727 } 40728 40729 var aExtension = [22]struct { 40730 FzExtName uintptr 40731 FpInit uintptr 40732 }{ 40733 {FzExtName: ts + 18998, FpInit: 0}, 40734 {FzExtName: ts + 19005, FpInit: 0}, 40735 {FzExtName: ts + 4060, FpInit: 0}, 40736 {FzExtName: ts + 19015, FpInit: 0}, 40737 {FzExtName: ts + 4815, FpInit: 0}, 40738 {FzExtName: ts + 4838, FpInit: 0}, 40739 {FzExtName: ts + 4896, FpInit: 0}, 40740 {FzExtName: ts + 4974, FpInit: 0}, 40741 {FzExtName: ts + 19023, FpInit: 0}, 40742 {FzExtName: ts + 5483, FpInit: 0}, 40743 {FzExtName: ts + 5507, FpInit: 0}, 40744 {FzExtName: ts + 19030, FpInit: 0}, 40745 {FzExtName: ts + 6087, FpInit: 0}, 40746 {FzExtName: ts + 6162, FpInit: 0}, 40747 {FzExtName: ts + 6535, FpInit: 0}, 40748 {FzExtName: ts + 6831, FpInit: 0}, 40749 {FzExtName: ts + 6846, FpInit: 0}, 40750 {FzExtName: ts + 19039, FpInit: 0}, 40751 {FzExtName: ts + 19046, FpInit: 0}, 40752 {FzExtName: ts + 19055, FpInit: 0}, 40753 {FzExtName: ts + 8921, FpInit: 0}, 40754 {FzExtName: ts + 9463, FpInit: 0}, 40755 } 40756 40757 func sorter_test_fakeheap(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40758 bp := tls.Alloc(4) 40759 defer tls.Free(4) 40760 40761 if objc != 2 { 40762 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 40763 return TCL_ERROR 40764 } 40765 40766 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 40767 return TCL_ERROR 40768 } 40769 40770 if *(*int32)(unsafe.Pointer(bp)) != 0 { 40771 if sqlite3.Xsqlite3Config.FpHeap == uintptr(0) { 40772 sqlite3.Xsqlite3Config.FpHeap = libc.UintptrFromInt64(int64(-1)) 40773 } 40774 } else { 40775 if sqlite3.Xsqlite3Config.FpHeap == libc.UintptrFromInt64(int64(-1)) { 40776 sqlite3.Xsqlite3Config.FpHeap = uintptr(0) 40777 } 40778 } 40779 40780 tcl.XTcl_ResetResult(tls, interp) 40781 return TCL_OK 40782 } 40783 40784 func sorter_test_sort4_helper(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40785 bp := tls.Alloc(80) 40786 defer tls.Free(80) 40787 40788 var zSql1 uintptr 40789 var zSql2 uintptr 40790 40791 var iStep int32 40792 var iCksum1 uint32 40793 var iCksum2 uint32 40794 var rc int32 40795 var iB int32 40796 40797 var a int32 40798 var a1 int32 40799 iCksum1 = uint32(0) 40800 iCksum2 = uint32(0) 40801 40802 if !(objc != 5) { 40803 goto __1 40804 } 40805 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19062) 40806 return TCL_ERROR 40807 __1: 40808 ; 40809 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0) { 40810 goto __2 40811 } 40812 return TCL_ERROR 40813 __2: 40814 ; 40815 zSql1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 40816 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0) { 40817 goto __3 40818 } 40819 return TCL_ERROR 40820 __3: 40821 ; 40822 zSql2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 40823 40824 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), zSql1, -1, bp+72, uintptr(0)) 40825 if !(rc != SQLITE_OK) { 40826 goto __4 40827 } 40828 goto sql_error 40829 __4: 40830 ; 40831 iB = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) - 1 40832 iStep = 0 40833 __5: 40834 if !(iStep < *(*int32)(unsafe.Pointer(bp + 64)) && SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 72)))) { 40835 goto __7 40836 } 40837 a = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), 0) 40838 if !(a != sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), iB)) { 40839 goto __8 40840 } 40841 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+19081, 0)) 40842 return TCL_ERROR 40843 __8: 40844 ; 40845 iCksum1 = iCksum1 + (iCksum1<<3 + uint32(a)) 40846 goto __6 40847 __6: 40848 iStep++ 40849 goto __5 40850 goto __7 40851 __7: 40852 ; 40853 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 40854 if !(rc != SQLITE_OK) { 40855 goto __9 40856 } 40857 goto sql_error 40858 __9: 40859 ; 40860 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 56)), zSql2, -1, bp+72, uintptr(0)) 40861 if !(rc != SQLITE_OK) { 40862 goto __10 40863 } 40864 goto sql_error 40865 __10: 40866 ; 40867 iStep = 0 40868 __11: 40869 if !(SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 72)))) { 40870 goto __13 40871 } 40872 a1 = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 72)), 0) 40873 iCksum2 = iCksum2 + (iCksum2<<3 + uint32(a1)) 40874 goto __12 40875 __12: 40876 iStep++ 40877 goto __11 40878 goto __13 40879 __13: 40880 ; 40881 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 40882 if !(rc != SQLITE_OK) { 40883 goto __14 40884 } 40885 goto sql_error 40886 __14: 40887 ; 40888 if !(iCksum1 != iCksum2) { 40889 goto __15 40890 } 40891 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+19100, 0)) 40892 return TCL_ERROR 40893 __15: 40894 ; 40895 return TCL_OK 40896 sql_error: 40897 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+19118, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 56))), 0)) 40898 return TCL_ERROR 40899 } 40900 40901 func test_bad_behavior(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 40902 bp := tls.Alloc(44) 40903 defer tls.Free(44) 40904 40905 var xyz int32 40906 var i int32 = *(*int32)(unsafe.Pointer(clientData)) 40907 var j int32 40908 40909 var a uintptr 40910 if objc != 2 { 40911 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19130) 40912 return TCL_ERROR 40913 } 40914 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 40915 return TCL_ERROR 40916 } 40917 switch *(*int32)(unsafe.Pointer(bp)) { 40918 case 1: 40919 { 40920 xyz = 0x7fffff00 - i 40921 xyz = xyz + 0x100 40922 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, xyz)) 40923 break 40924 40925 } 40926 case 2: 40927 { 40928 *(*int32)(unsafe.Pointer(bp + 4 + 1*4)) = 5 40929 if *(*int32)(unsafe.Pointer(bp + 4 + uintptr(i)*4)) > 0 { 40930 *(*int32)(unsafe.Pointer(bp + 4 + 1*4))++ 40931 } 40932 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 4 + 1*4)))) 40933 break 40934 40935 } 40936 case 3: 40937 { 40938 a = libc.Xmalloc(tls, uint64(unsafe.Sizeof(int32(0)))*uint64(10)) 40939 for j = 0; j < 10; j++ { 40940 *(*int32)(unsafe.Pointer(a + uintptr(j)*4)) = j 40941 } 40942 libc.Xfree(tls, a) 40943 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 40944 break 40945 40946 } 40947 case 4: 40948 { 40949 tcl.XTcl_Panic(tls, ts+19135, 0) 40950 break 40951 40952 } 40953 } 40954 return TCL_OK 40955 } 40956 40957 func test_register_dbstat_vtab(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40958 bp := tls.Alloc(64) 40959 defer tls.Free(64) 40960 40961 var zDb uintptr 40962 40963 if objc != 2 { 40964 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 40965 return TCL_ERROR 40966 } 40967 40968 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 40969 if tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp) != 0 { 40970 var db uintptr = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData)).Fdb 40971 sqlite3.Xsqlite3DbstatRegister(tls, db) 40972 } 40973 return TCL_OK 40974 } 40975 40976 func test_sqlite3_db_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 40977 bp := tls.Alloc(28) 40978 defer tls.Free(28) 40979 40980 var i int32 40981 *(*int32)(unsafe.Pointer(bp + 24)) = 0 40982 var zSetting uintptr 40983 40984 if objc != 4 && objc != 3 { 40985 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19152) 40986 return TCL_ERROR 40987 } 40988 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 { 40989 return TCL_ERROR 40990 } 40991 zSetting = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 40992 if sqlite3.Xsqlite3_strglob(tls, ts+19171, zSetting) == 0 { 40993 zSetting += uintptr(7) 40994 } 40995 if sqlite3.Xsqlite3_strglob(tls, ts+19180, zSetting) == 0 { 40996 zSetting += uintptr(9) 40997 } 40998 if sqlite3.Xsqlite3_strglob(tls, ts+19191, zSetting) == 0 { 40999 zSetting += uintptr(7) 41000 } 41001 for i = 0; i < int32(uint64(unsafe.Sizeof(aSetting))/uint64(unsafe.Sizeof(struct { 41002 FzName uintptr 41003 FeVal int32 41004 F__ccgo_pad1 [4]byte 41005 }{}))); i++ { 41006 if libc.Xstrcmp(tls, zSetting, aSetting[i].FzName) == 0 { 41007 break 41008 } 41009 } 41010 if i >= int32(uint64(unsafe.Sizeof(aSetting))/uint64(unsafe.Sizeof(struct { 41011 FzName uintptr 41012 FeVal int32 41013 F__ccgo_pad1 [4]byte 41014 }{}))) { 41015 tcl.XTcl_SetObjResult(tls, interp, 41016 tcl.XTcl_NewStringObj(tls, ts+19200, -1)) 41017 return TCL_ERROR 41018 } 41019 if objc == 4 { 41020 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 41021 return TCL_ERROR 41022 } 41023 } else { 41024 *(*int32)(unsafe.Pointer(bp + 24)) = -1 41025 } 41026 sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), aSetting[i].FeVal, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 24)), bp+24)) 41027 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 24)))) 41028 return TCL_OK 41029 } 41030 41031 var aSetting = [14]struct { 41032 FzName uintptr 41033 FeVal int32 41034 F__ccgo_pad1 [4]byte 41035 }{ 41036 {FzName: ts + 19234, FeVal: SQLITE_DBCONFIG_ENABLE_FKEY}, 41037 {FzName: ts + 19239, FeVal: SQLITE_DBCONFIG_ENABLE_TRIGGER}, 41038 {FzName: ts + 19247, FeVal: SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER}, 41039 {FzName: ts + 19262, FeVal: SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION}, 41040 {FzName: ts + 19277, FeVal: SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE}, 41041 {FzName: ts + 19294, FeVal: SQLITE_DBCONFIG_ENABLE_QPSG}, 41042 {FzName: ts + 19299, FeVal: SQLITE_DBCONFIG_TRIGGER_EQP}, 41043 {FzName: ts + 19311, FeVal: SQLITE_DBCONFIG_RESET_DATABASE}, 41044 {FzName: ts + 19320, FeVal: SQLITE_DBCONFIG_DEFENSIVE}, 41045 {FzName: ts + 19330, FeVal: SQLITE_DBCONFIG_WRITABLE_SCHEMA}, 41046 {FzName: ts + 19346, FeVal: SQLITE_DBCONFIG_LEGACY_ALTER_TABLE}, 41047 {FzName: ts + 19365, FeVal: SQLITE_DBCONFIG_DQS_DML}, 41048 {FzName: ts + 19373, FeVal: SQLITE_DBCONFIG_DQS_DDL}, 41049 {FzName: ts + 19381, FeVal: SQLITE_DBCONFIG_LEGACY_FILE_FORMAT}, 41050 } 41051 41052 func test_sqlite3_txn_state(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41053 bp := tls.Alloc(8) 41054 defer tls.Free(8) 41055 41056 var zSchema uintptr 41057 var iTxn int32 41058 41059 if objc != 2 && objc != 3 { 41060 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19400) 41061 return TCL_ERROR 41062 } 41063 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 41064 return TCL_ERROR 41065 } 41066 if objc == 3 { 41067 zSchema = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 41068 } else { 41069 zSchema = uintptr(0) 41070 } 41071 iTxn = sqlite3.Xsqlite3_txn_state(tls, *(*uintptr)(unsafe.Pointer(bp)), zSchema) 41072 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iTxn)) 41073 return TCL_OK 41074 } 41075 41076 func test_dbconfig_maindbname_icecube(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41077 bp := tls.Alloc(16) 41078 defer tls.Free(16) 41079 41080 var rc int32 41081 41082 if objc != 2 { 41083 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 41084 return TCL_ERROR 41085 } else { 41086 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 41087 return TCL_ERROR 41088 } 41089 rc = sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), SQLITE_DBCONFIG_MAINDBNAME, libc.VaList(bp, ts+19412)) 41090 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 41091 return TCL_OK 41092 } 41093 return int32(0) 41094 } 41095 41096 func test_mmap_warm(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41097 bp := tls.Alloc(8) 41098 defer tls.Free(8) 41099 41100 if objc != 2 && objc != 3 { 41101 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19420) 41102 return TCL_ERROR 41103 } else { 41104 var rc int32 41105 41106 var zDb uintptr = uintptr(0) 41107 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 41108 return TCL_ERROR 41109 } 41110 if objc == 3 { 41111 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 41112 } 41113 rc = sqlite3_mmap_warm(tls, *(*uintptr)(unsafe.Pointer(bp)), zDb) 41114 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 41115 return TCL_OK 41116 } 41117 return int32(0) 41118 } 41119 41120 func test_write_db(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41121 bp := tls.Alloc(32) 41122 defer tls.Free(32) 41123 41124 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 41125 *(*Tcl_WideInt)(unsafe.Pointer(bp + 8)) = int64(0) 41126 var aData uintptr = uintptr(0) 41127 *(*int32)(unsafe.Pointer(bp + 16)) = 0 41128 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 41129 var rc int32 41130 41131 if objc != 4 { 41132 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19432) 41133 return TCL_ERROR 41134 } 41135 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 41136 return TCL_ERROR 41137 } 41138 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 41139 return TCL_ERROR 41140 } 41141 aData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+16) 41142 41143 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+85, SQLITE_FCNTL_FILE_POINTER, bp+24) 41144 rc = (*struct { 41145 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 41146 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 24)))).FpMethods)).FxWrite})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), aData, *(*int32)(unsafe.Pointer(bp + 16)), *(*Tcl_WideInt)(unsafe.Pointer(bp + 8))) 41147 41148 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 41149 return TCL_OK 41150 } 41151 41152 func test_register_cksumvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41153 if objc != 1 { 41154 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 41155 return TCL_ERROR 41156 } else { 41157 var rc int32 = sqlite3_register_cksumvfs(tls, uintptr(0)) 41158 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 41159 } 41160 return TCL_OK 41161 } 41162 41163 func test_unregister_cksumvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41164 if objc != 1 { 41165 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 41166 return TCL_ERROR 41167 } else { 41168 var rc int32 = sqlite3_unregister_cksumvfs(tls) 41169 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 41170 } 41171 return TCL_OK 41172 } 41173 41174 func test_decode_hexdb(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41175 bp := tls.Alloc(296) 41176 defer tls.Free(296) 41177 41178 var zIn uintptr = uintptr(0) 41179 var a uintptr = uintptr(0) 41180 *(*int32)(unsafe.Pointer(bp + 216)) = 0 41181 var lineno int32 = 0 41182 var i int32 41183 var iNext int32 41184 var iOffset int32 = 0 41185 41186 var rc int32 41187 41188 if objc != 2 { 41189 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19447) 41190 return TCL_ERROR 41191 } 41192 zIn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 41193 for i = 0; *(*int8)(unsafe.Pointer(zIn + uintptr(i))) != 0; i = iNext { 41194 lineno++ 41195 for iNext = i; *(*int8)(unsafe.Pointer(zIn + uintptr(iNext))) != 0 && int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iNext)))) != '\n'; iNext++ { 41196 } 41197 if int32(*(*int8)(unsafe.Pointer(zIn + uintptr(iNext)))) == '\n' { 41198 iNext++ 41199 } 41200 for int32(*(*int8)(unsafe.Pointer(zIn + uintptr(i)))) == ' ' || int32(*(*int8)(unsafe.Pointer(zIn + uintptr(i)))) == '\t' { 41201 i++ 41202 } 41203 if a == uintptr(0) { 41204 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19453, libc.VaList(bp, bp+216, bp+220)) 41205 if rc != 2 { 41206 continue 41207 } 41208 if *(*int32)(unsafe.Pointer(bp + 220)) < 512 || *(*int32)(unsafe.Pointer(bp + 220)) > 65536 || *(*int32)(unsafe.Pointer(bp + 220))&(*(*int32)(unsafe.Pointer(bp + 220))-1) != 0 { 41209 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+19475, uintptr(0))) 41210 return TCL_ERROR 41211 } 41212 *(*int32)(unsafe.Pointer(bp + 216)) = (*(*int32)(unsafe.Pointer(bp + 216)) + *(*int32)(unsafe.Pointer(bp + 220)) - 1) & ^(*(*int32)(unsafe.Pointer(bp + 220)) - 1) 41213 if *(*int32)(unsafe.Pointer(bp + 216)) < 512 { 41214 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+19496, uintptr(0))) 41215 return TCL_ERROR 41216 } 41217 a = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 216)))) 41218 if a == uintptr(0) { 41219 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+2069, uintptr(0))) 41220 return TCL_ERROR 41221 } 41222 libc.X__builtin___memset_chk(tls, a, 0, uint64(*(*int32)(unsafe.Pointer(bp + 216))), libc.X__builtin_object_size(tls, a, 0)) 41223 continue 41224 } 41225 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19513, libc.VaList(bp+64, bp+224, bp+228)) 41226 if rc == 2 { 41227 iOffset = *(*int32)(unsafe.Pointer(bp + 228)) 41228 continue 41229 } 41230 rc = libc.Xsscanf(tls, zIn+uintptr(i), ts+19533, 41231 libc.VaList(bp+80, bp+224, bp+232, bp+232+1*4, bp+232+2*4, bp+232+3*4, bp+232+4*4, bp+232+5*4, bp+232+6*4, bp+232+7*4, 41232 bp+232+8*4, bp+232+9*4, bp+232+10*4, bp+232+11*4, bp+232+12*4, bp+232+13*4, bp+232+14*4, bp+232+15*4)) 41233 if rc == 17 { 41234 *(*int32)(unsafe.Pointer(bp + 228)) = iOffset + *(*int32)(unsafe.Pointer(bp + 224)) 41235 if *(*int32)(unsafe.Pointer(bp + 228))+16 <= *(*int32)(unsafe.Pointer(bp + 216)) { 41236 var ii int32 41237 for ii = 0; ii < 16; ii++ { 41238 *(*uint8)(unsafe.Pointer(a + uintptr(*(*int32)(unsafe.Pointer(bp + 228))+ii))) = uint8(*(*uint32)(unsafe.Pointer(bp + 232 + uintptr(ii)*4)) & uint32(0xff)) 41239 } 41240 } 41241 continue 41242 } 41243 } 41244 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, a, *(*int32)(unsafe.Pointer(bp + 216)))) 41245 libc.Xfree(tls, a) 41246 return TCL_OK 41247 } 41248 41249 type AutovacPageData1 = struct { 41250 Finterp uintptr 41251 FzScript uintptr 41252 } 41253 41254 type AutovacPageData = AutovacPageData1 41255 41256 func test_autovacuum_pages_callback(tls *libc.TLS, pClientData uintptr, zSchema uintptr, nFilePages uint32, nFreePages uint32, nBytePerPage uint32) uint32 { 41257 bp := tls.Alloc(344) 41258 defer tls.Free(344) 41259 41260 var pData uintptr = pClientData 41261 41262 tcl.XTcl_DStringInit(tls, bp+24) 41263 tcl.XTcl_DStringAppend(tls, bp+24, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, -1) 41264 tcl.XTcl_DStringAppendElement(tls, bp+24, zSchema) 41265 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+240, ts+17791, libc.VaList(bp, nFilePages)) 41266 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 41267 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+240, ts+17791, libc.VaList(bp+8, nFreePages)) 41268 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 41269 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+240, ts+17791, libc.VaList(bp+16, nBytePerPage)) 41270 tcl.XTcl_DStringAppendElement(tls, bp+24, bp+240) 41271 tcl.XTcl_ResetResult(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp) 41272 tcl.XTcl_Eval(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp, (*Tcl_DString)(unsafe.Pointer(bp+24)).Fstring) 41273 tcl.XTcl_DStringFree(tls, bp+24) 41274 *(*uint32)(unsafe.Pointer(bp + 340)) = nFreePages 41275 tcl.XTcl_GetIntFromObj(tls, uintptr(0), tcl.XTcl_GetObjResult(tls, (*AutovacPageData)(unsafe.Pointer(pData)).Finterp), bp+340) 41276 return *(*uint32)(unsafe.Pointer(bp + 340)) 41277 } 41278 41279 func test_autovacuum_pages(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 41280 bp := tls.Alloc(1048) 41281 defer tls.Free(1048) 41282 41283 var pData uintptr 41284 41285 var rc int32 41286 var zScript uintptr 41287 if objc != 2 && objc != 3 { 41288 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+19587) 41289 return TCL_ERROR 41290 } 41291 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+40) != 0 { 41292 return TCL_ERROR 41293 } 41294 if objc == 3 { 41295 zScript = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 41296 } else { 41297 zScript = uintptr(0) 41298 } 41299 if zScript != 0 { 41300 var nScript size_t = libc.Xstrlen(tls, zScript) 41301 pData = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(AutovacPageData{}))+nScript+uint64(1)) 41302 if pData == uintptr(0) { 41303 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+2069, uintptr(0))) 41304 return TCL_ERROR 41305 } 41306 (*AutovacPageData)(unsafe.Pointer(pData)).Finterp = interp 41307 (*AutovacPageData)(unsafe.Pointer(pData)).FzScript = pData + 1*16 41308 libc.X__builtin___memcpy_chk(tls, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, zScript, nScript+uint64(1), libc.X__builtin_object_size(tls, (*AutovacPageData)(unsafe.Pointer(pData)).FzScript, 0)) 41309 rc = sqlite3.Xsqlite3_autovacuum_pages(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), *(*uintptr)(unsafe.Pointer(&struct { 41310 f func(*libc.TLS, uintptr, uintptr, uint32, uint32, uint32) uint32 41311 }{test_autovacuum_pages_callback})), 41312 pData, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 41313 } else { 41314 rc = sqlite3.Xsqlite3_autovacuum_pages(tls, *(*uintptr)(unsafe.Pointer(bp + 40)), uintptr(0), uintptr(0), uintptr(0)) 41315 } 41316 if rc != 0 { 41317 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]int8{})), bp+48, 41318 ts+19599, libc.VaList(bp+16, rc)) 41319 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, bp+48, uintptr(0))) 41320 return TCL_ERROR 41321 } 41322 return TCL_OK 41323 } 41324 41325 func Sqlitetest1_Init(tls *libc.TLS, interp uintptr) int32 { 41326 var i int32 41327 41328 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd1))/uint64(unsafe.Sizeof(struct { 41329 FzName uintptr 41330 FxProc uintptr 41331 }{})); i++ { 41332 tcl.XTcl_CreateCommand(tls, interp, aCmd1[i].FzName, aCmd1[i].FxProc, uintptr(0), uintptr(0)) 41333 } 41334 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd1))/uint64(unsafe.Sizeof(struct { 41335 FzName uintptr 41336 FxProc uintptr 41337 FclientData uintptr 41338 }{})); i++ { 41339 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd1[i].FzName, 41340 aObjCmd1[i].FxProc, aObjCmd1[i].FclientData, uintptr(0)) 41341 } 41342 tcl.XTcl_LinkVar(tls, interp, ts+19637, 41343 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_search_count)), TCL_LINK_INT) 41344 tcl.XTcl_LinkVar(tls, interp, ts+19657, 41345 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_found_count)), TCL_LINK_INT) 41346 tcl.XTcl_LinkVar(tls, interp, ts+19676, 41347 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_sort_count)), TCL_LINK_INT) 41348 tcl.XTcl_LinkVar(tls, interp, ts+19694, 41349 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_max_blobsize)), TCL_LINK_INT) 41350 tcl.XTcl_LinkVar(tls, interp, ts+19715, 41351 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_like_count)), TCL_LINK_INT) 41352 tcl.XTcl_LinkVar(tls, interp, ts+19733, 41353 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_interrupt_count)), TCL_LINK_INT) 41354 tcl.XTcl_LinkVar(tls, interp, ts+19756, 41355 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_open_file_count)), TCL_LINK_INT) 41356 tcl.XTcl_LinkVar(tls, interp, ts+19779, 41357 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_current_time)), TCL_LINK_INT) 41358 tcl.XTcl_LinkVar(tls, interp, ts+19799, 41359 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_hostid_num)), TCL_LINK_INT) 41360 tcl.XTcl_LinkVar(tls, interp, ts+19817, 41361 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_xferopt_count)), TCL_LINK_INT) 41362 tcl.XTcl_LinkVar(tls, interp, ts+19839, 41363 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_readdb_count)), TCL_LINK_INT) 41364 tcl.XTcl_LinkVar(tls, interp, ts+19866, 41365 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_writedb_count)), TCL_LINK_INT) 41366 tcl.XTcl_LinkVar(tls, interp, ts+19894, 41367 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_pager_writej_count)), TCL_LINK_INT) 41368 tcl.XTcl_LinkVar(tls, interp, ts+19921, 41369 uintptr(unsafe.Pointer(&unaligned_string_counter)), TCL_LINK_INT) 41370 tcl.XTcl_LinkVar(tls, interp, ts+19946, 41371 uintptr(unsafe.Pointer(&pzNeededCollation)), TCL_LINK_STRING|TCL_LINK_READ_ONLY) 41372 { 41373 tcl.XTcl_LinkVar(tls, interp, ts+19975, 41374 uintptr(unsafe.Pointer(&query_plan)), TCL_LINK_STRING|TCL_LINK_READ_ONLY) 41375 41376 } 41377 tcl.XTcl_LinkVar(tls, interp, ts+19993, 41378 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_opentemp_count)), TCL_LINK_INT) 41379 tcl.XTcl_LinkVar(tls, interp, ts+20015, 41380 uintptr(unsafe.Pointer(&sqlite_static_bind_value)), TCL_LINK_STRING) 41381 tcl.XTcl_LinkVar(tls, interp, ts+20040, 41382 uintptr(unsafe.Pointer(&sqlite_static_bind_nbyte)), TCL_LINK_INT) 41383 tcl.XTcl_LinkVar(tls, interp, ts+20065, 41384 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_temp_directory)), TCL_LINK_STRING) 41385 tcl.XTcl_LinkVar(tls, interp, ts+20087, 41386 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_data_directory)), TCL_LINK_STRING) 41387 tcl.XTcl_LinkVar(tls, interp, ts+20109, 41388 uintptr(unsafe.Pointer(&bitmask_size)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 41389 tcl.XTcl_LinkVar(tls, interp, ts+20122, 41390 uintptr(unsafe.Pointer(&longdouble_size)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 41391 tcl.XTcl_LinkVar(tls, interp, ts+20138, 41392 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_sync_count)), TCL_LINK_INT) 41393 tcl.XTcl_LinkVar(tls, interp, ts+20156, 41394 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_fullsync_count)), TCL_LINK_INT) 41395 return TCL_OK 41396 } 41397 41398 var iZero int32 = 0 41399 var aCmd1 = [39]struct { 41400 FzName uintptr 41401 FxProc uintptr 41402 }{ 41403 {FzName: ts + 20178, FxProc: 0}, 41404 {FzName: ts + 20187, FxProc: 0}, 41405 {FzName: ts + 20196, FxProc: 0}, 41406 {FzName: ts + 20216, FxProc: 0}, 41407 {FzName: ts + 20238, FxProc: 0}, 41408 {FzName: ts + 20259, FxProc: 0}, 41409 {FzName: ts + 20279, FxProc: 0}, 41410 {FzName: ts + 20300, FxProc: 0}, 41411 {FzName: ts + 20324, FxProc: 0}, 41412 {FzName: ts + 20347, FxProc: 0}, 41413 {FzName: ts + 20370, FxProc: 0}, 41414 {FzName: ts + 20396, FxProc: 0}, 41415 {FzName: ts + 20419, FxProc: 0}, 41416 {FzName: ts + 20442, FxProc: 0}, 41417 {FzName: ts + 20463, FxProc: 0}, 41418 {FzName: ts + 20489, FxProc: 0}, 41419 {FzName: ts + 20509, FxProc: 0}, 41420 {FzName: ts + 20526, FxProc: 0}, 41421 {FzName: ts + 20539, FxProc: 0}, 41422 {FzName: ts + 20555, FxProc: 0}, 41423 {FzName: ts + 20580, FxProc: 0}, 41424 {FzName: ts + 20594, FxProc: 0}, 41425 {FzName: ts + 20611, FxProc: 0}, 41426 {FzName: ts + 20635, FxProc: 0}, 41427 {FzName: ts + 20660, FxProc: 0}, 41428 {FzName: ts + 20681, FxProc: 0}, 41429 {FzName: ts + 20711, FxProc: 0}, 41430 {FzName: ts + 20724, FxProc: 0}, 41431 {FzName: ts + 20736, FxProc: 0}, 41432 {FzName: ts + 20747, FxProc: 0}, 41433 {FzName: ts + 20759, FxProc: 0}, 41434 {FzName: ts + 20773, FxProc: 0}, 41435 {FzName: ts + 20791, FxProc: 0}, 41436 {FzName: ts + 20814, FxProc: 0}, 41437 {FzName: ts + 20838, FxProc: 0}, 41438 {FzName: ts + 20861, FxProc: 0}, 41439 {FzName: ts + 20882, FxProc: 0}, 41440 {FzName: ts + 20889, FxProc: 0}, 41441 {FzName: ts + 20904, FxProc: 0}, 41442 } 41443 var aObjCmd1 = [165]struct { 41444 FzName uintptr 41445 FxProc uintptr 41446 FclientData uintptr 41447 }{ 41448 {FzName: ts + 20927, FxProc: 0}, 41449 {FzName: ts + 20945, FxProc: 0}, 41450 {FzName: ts + 20963, FxProc: 0, FclientData: 0}, 41451 {FzName: ts + 20976, FxProc: 0}, 41452 {FzName: ts + 20997, FxProc: 0}, 41453 {FzName: ts + 21024, FxProc: 0}, 41454 {FzName: ts + 21038, FxProc: 0}, 41455 {FzName: ts + 21054, FxProc: 0}, 41456 {FzName: ts + 21071, FxProc: 0}, 41457 {FzName: ts + 21086, FxProc: 0}, 41458 {FzName: ts + 21103, FxProc: 0}, 41459 {FzName: ts + 21125, FxProc: 0}, 41460 {FzName: ts + 21149, FxProc: 0}, 41461 {FzName: ts + 21168, FxProc: 0}, 41462 {FzName: ts + 21188, FxProc: 0}, 41463 {FzName: ts + 21206, FxProc: 0}, 41464 {FzName: ts + 21224, FxProc: 0}, 41465 {FzName: ts + 21244, FxProc: 0}, 41466 {FzName: ts + 21262, FxProc: 0}, 41467 {FzName: ts + 21293, FxProc: 0}, 41468 {FzName: ts + 21327, FxProc: 0}, 41469 {FzName: ts + 21347, FxProc: 0}, 41470 {FzName: ts + 21376, FxProc: 0}, 41471 {FzName: ts + 21404, FxProc: 0}, 41472 {FzName: ts + 21433, FxProc: 0}, 41473 {FzName: ts + 21456, FxProc: 0}, 41474 {FzName: ts + 21470, FxProc: 0}, 41475 {FzName: ts + 21486, FxProc: 0}, 41476 {FzName: ts + 21511, FxProc: 0}, 41477 {FzName: ts + 21526, FxProc: 0}, 41478 {FzName: ts + 21547, FxProc: 0}, 41479 {FzName: ts + 21564, FxProc: 0}, 41480 {FzName: ts + 21577, FxProc: 0}, 41481 {FzName: ts + 21592, FxProc: 0}, 41482 {FzName: ts + 21608, FxProc: 0}, 41483 {FzName: ts + 21627, FxProc: 0}, 41484 {FzName: ts + 21645, FxProc: 0}, 41485 {FzName: ts + 21661, FxProc: 0}, 41486 {FzName: ts + 21679, FxProc: 0}, 41487 {FzName: ts + 21698, FxProc: 0}, 41488 {FzName: ts + 21717, FxProc: 0}, 41489 {FzName: ts + 21741, FxProc: 0}, 41490 {FzName: ts + 21762, FxProc: 0}, 41491 {FzName: ts + 21779, FxProc: 0}, 41492 {FzName: ts + 21799, FxProc: 0}, 41493 {FzName: ts + 21813, FxProc: 0}, 41494 {FzName: ts + 21829, FxProc: 0}, 41495 {FzName: ts + 21855, FxProc: 0}, 41496 {FzName: ts + 21871, FxProc: 0}, 41497 {FzName: ts + 21884, FxProc: 0}, 41498 {FzName: ts + 21896, FxProc: 0}, 41499 {FzName: ts + 21917, FxProc: 0}, 41500 {FzName: ts + 21935, FxProc: 0}, 41501 {FzName: ts + 21957, FxProc: 0}, 41502 {FzName: ts + 21980, FxProc: 0}, 41503 {FzName: ts + 21998, FxProc: 0}, 41504 {FzName: ts + 22016, FxProc: 0}, 41505 {FzName: ts + 22039, FxProc: 0}, 41506 {FzName: ts + 22065, FxProc: 0}, 41507 {FzName: ts + 22087, FxProc: 0}, 41508 {FzName: ts + 22108, FxProc: 0}, 41509 {FzName: ts + 22128, FxProc: 0}, 41510 {FzName: ts + 22148, FxProc: 0}, 41511 {FzName: ts + 22172, FxProc: 0}, 41512 {FzName: ts + 22198, FxProc: 0}, 41513 {FzName: ts + 22224, FxProc: 0}, 41514 {FzName: ts + 22247, FxProc: 0}, 41515 {FzName: ts + 22271, FxProc: 0}, 41516 {FzName: ts + 22294, FxProc: 0}, 41517 {FzName: ts + 22324, FxProc: 0}, 41518 {FzName: ts + 22354, FxProc: 0}, 41519 {FzName: ts + 22368, FxProc: 0}, 41520 {FzName: ts + 22396, FxProc: 0}, 41521 {FzName: ts + 22412, FxProc: 0}, 41522 {FzName: ts + 22431, FxProc: 0}, 41523 {FzName: ts + 22448, FxProc: 0}, 41524 {FzName: ts + 22458, FxProc: 0}, 41525 {FzName: ts + 22478, FxProc: 0}, 41526 {FzName: ts + 22501, FxProc: 0}, 41527 {FzName: ts + 22525, FxProc: 0}, 41528 {FzName: ts + 22546, FxProc: 0}, 41529 {FzName: ts + 22558, FxProc: 0}, 41530 {FzName: ts + 22579, FxProc: 0}, 41531 {FzName: ts + 22598, FxProc: 0}, 41532 {FzName: ts + 22618, FxProc: 0}, 41533 {FzName: ts + 22638, FxProc: 0}, 41534 {FzName: ts + 22660, FxProc: 0}, 41535 {FzName: ts + 22681, FxProc: 0, FclientData: 0}, 41536 {FzName: ts + 22701, FxProc: 0, FclientData: 0}, 41537 {FzName: ts + 22721, FxProc: 0, FclientData: 0}, 41538 {FzName: ts + 22740, FxProc: 0, FclientData: 0}, 41539 {FzName: ts + 22761, FxProc: 0, FclientData: 0}, 41540 {FzName: ts + 22785, FxProc: 0, FclientData: 0}, 41541 {FzName: ts + 22814, FxProc: 0, FclientData: 0}, 41542 {FzName: ts + 22840, FxProc: 0, FclientData: 0}, 41543 {FzName: ts + 22867, FxProc: 0, FclientData: 0}, 41544 {FzName: ts + 22890, FxProc: 0, FclientData: 0}, 41545 {FzName: ts + 22912, FxProc: 0, FclientData: 0}, 41546 {FzName: ts + 22934, FxProc: 0}, 41547 {FzName: ts + 22964, FxProc: 0, FclientData: 0}, 41548 {FzName: ts + 22990, 41549 FxProc: 0, FclientData: 0}, 41550 {FzName: ts + 23021, FxProc: 0, FclientData: 0}, 41551 {FzName: ts + 23049, FxProc: 0, FclientData: 0}, 41552 {FzName: ts + 23078, FxProc: 0}, 41553 {FzName: ts + 23106, FxProc: 0}, 41554 {FzName: ts + 23129, FxProc: 0}, 41555 {FzName: ts + 23147, FxProc: 0}, 41556 {FzName: ts + 23163, FxProc: 0}, 41557 {FzName: ts + 23181, FxProc: 0}, 41558 {FzName: ts + 23200, FxProc: 0}, 41559 {FzName: ts + 23219, FxProc: 0}, 41560 {FzName: ts + 23237, FxProc: 0}, 41561 {FzName: ts + 23265, FxProc: 0}, 41562 {FzName: ts + 23293, FxProc: 0}, 41563 {FzName: ts + 23321, FxProc: 0}, 41564 {FzName: ts + 23348, FxProc: 0}, 41565 {FzName: ts + 23374, FxProc: 0}, 41566 {FzName: ts + 23399, FxProc: 0}, 41567 {FzName: ts + 23432, FxProc: 0}, 41568 {FzName: ts + 23453, FxProc: 0}, 41569 {FzName: ts + 23479, FxProc: 0}, 41570 {FzName: ts + 23505, FxProc: 0}, 41571 {FzName: ts + 23534, FxProc: 0}, 41572 {FzName: ts + 23551, FxProc: 0}, 41573 {FzName: ts + 23578, FxProc: 0}, 41574 {FzName: ts + 23595, FxProc: 0}, 41575 {FzName: ts + 23619, FxProc: 0}, 41576 {FzName: ts + 23637, FxProc: 0}, 41577 {FzName: ts + 23663, FxProc: 0}, 41578 {FzName: ts + 23683, FxProc: 0}, 41579 {FzName: ts + 23701, FxProc: 0}, 41580 {FzName: ts + 23729, FxProc: 0}, 41581 {FzName: ts + 23757, FxProc: 0}, 41582 {FzName: ts + 23783, FxProc: 0}, 41583 {FzName: ts + 23813, FxProc: 0}, 41584 {FzName: ts + 23833, FxProc: 0}, 41585 {FzName: ts + 23846, FxProc: 0}, 41586 {FzName: ts + 23868, FxProc: 0}, 41587 {FzName: ts + 23891, FxProc: 0}, 41588 {FzName: ts + 23917, FxProc: 0}, 41589 {FzName: ts + 23944, FxProc: 0}, 41590 {FzName: ts + 23961, FxProc: 0}, 41591 {FzName: ts + 23986, FxProc: 0}, 41592 {FzName: ts + 24007, FxProc: 0}, 41593 {FzName: ts + 24017, FxProc: 0}, 41594 {FzName: ts + 24039, FxProc: 0}, 41595 {FzName: ts + 24060, FxProc: 0}, 41596 {FzName: ts + 24085, FxProc: 0}, 41597 {FzName: ts + 24108, FxProc: 0}, 41598 {FzName: ts + 24129, FxProc: 0}, 41599 {FzName: ts + 24151, FxProc: 0}, 41600 {FzName: ts + 24173, FxProc: 0}, 41601 {FzName: ts + 24194, FxProc: 0}, 41602 {FzName: ts + 24219, FxProc: 0}, 41603 {FzName: ts + 24245, FxProc: 0}, 41604 {FzName: ts + 24272, FxProc: 0}, 41605 {FzName: ts + 24298, FxProc: 0}, 41606 {FzName: ts + 24322, FxProc: 0}, 41607 {FzName: ts + 24341, FxProc: 0}, 41608 {FzName: ts + 24359, FxProc: 0}, 41609 {FzName: ts + 24384, FxProc: 0}, 41610 {FzName: ts + 24409, FxProc: 0}, 41611 {FzName: ts + 24422, FxProc: 0}, 41612 {FzName: ts + 24436, FxProc: 0}, 41613 {FzName: ts + 24462, FxProc: 0}, 41614 } 41615 var bitmask_size int32 = int32(uint64(unsafe.Sizeof(Bitmask(0))) * uint64(8)) 41616 var longdouble_size int32 = int32(unsafe.Sizeof(float64(0))) 41617 var query_plan uintptr = ts + 24490 41618 41619 var test_pagesize int32 = 1024 41620 41621 func pager_test_reiniter(tls *libc.TLS, pNotUsed uintptr) { 41622 return 41623 } 41624 41625 func pager_open(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41626 bp := tls.Alloc(192) 41627 defer tls.Free(192) 41628 41629 var rc int32 41630 41631 if argc != 3 { 41632 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41633 ts+24516, 0)) 41634 return TCL_ERROR 41635 } 41636 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 41637 return TCL_ERROR 41638 } 41639 rc = sqlite3.Xsqlite3PagerOpen(tls, sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)), bp+80, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 0, 0, 41640 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB, 41641 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{pager_test_reiniter}))) 41642 if rc != SQLITE_OK { 41643 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 41644 return TCL_ERROR 41645 } 41646 sqlite3.Xsqlite3PagerSetCachesize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 72))) 41647 *(*u32)(unsafe.Pointer(bp + 88)) = u32(test_pagesize) 41648 sqlite3.Xsqlite3PagerSetPagesize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), bp+88, -1) 41649 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+92, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 41650 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+92, 0)) 41651 return TCL_OK 41652 } 41653 41654 func pager_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41655 bp := tls.Alloc(48) 41656 defer tls.Free(48) 41657 41658 var pPager uintptr 41659 var rc int32 41660 if argc != 2 { 41661 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41662 ts+24534, 0)) 41663 return TCL_ERROR 41664 } 41665 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41666 rc = sqlite3.Xsqlite3PagerClose(tls, pPager, uintptr(0)) 41667 if rc != SQLITE_OK { 41668 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 41669 return TCL_ERROR 41670 } 41671 return TCL_OK 41672 } 41673 41674 func pager_rollback(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41675 bp := tls.Alloc(48) 41676 defer tls.Free(48) 41677 41678 var pPager uintptr 41679 var rc int32 41680 if argc != 2 { 41681 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41682 ts+24534, 0)) 41683 return TCL_ERROR 41684 } 41685 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41686 rc = sqlite3.Xsqlite3PagerRollback(tls, pPager) 41687 if rc != SQLITE_OK { 41688 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 41689 return TCL_ERROR 41690 } 41691 return TCL_OK 41692 } 41693 41694 func pager_commit(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41695 bp := tls.Alloc(64) 41696 defer tls.Free(64) 41697 41698 var pPager uintptr 41699 var rc int32 41700 if argc != 2 { 41701 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41702 ts+24534, 0)) 41703 return TCL_ERROR 41704 } 41705 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41706 rc = sqlite3.Xsqlite3PagerCommitPhaseOne(tls, pPager, uintptr(0), 0) 41707 if rc != SQLITE_OK { 41708 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 41709 return TCL_ERROR 41710 } 41711 rc = sqlite3.Xsqlite3PagerCommitPhaseTwo(tls, pPager) 41712 if rc != SQLITE_OK { 41713 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 41714 return TCL_ERROR 41715 } 41716 return TCL_OK 41717 } 41718 41719 func pager_stmt_begin(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41720 bp := tls.Alloc(48) 41721 defer tls.Free(48) 41722 41723 var pPager uintptr 41724 var rc int32 41725 if argc != 2 { 41726 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41727 ts+24534, 0)) 41728 return TCL_ERROR 41729 } 41730 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41731 rc = sqlite3.Xsqlite3PagerOpenSavepoint(tls, pPager, 1) 41732 if rc != SQLITE_OK { 41733 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 41734 return TCL_ERROR 41735 } 41736 return TCL_OK 41737 } 41738 41739 func pager_stmt_rollback(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41740 bp := tls.Alloc(48) 41741 defer tls.Free(48) 41742 41743 var pPager uintptr 41744 var rc int32 41745 if argc != 2 { 41746 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41747 ts+24534, 0)) 41748 return TCL_ERROR 41749 } 41750 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41751 rc = sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_ROLLBACK, 0) 41752 sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_RELEASE, 0) 41753 if rc != SQLITE_OK { 41754 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 41755 return TCL_ERROR 41756 } 41757 return TCL_OK 41758 } 41759 41760 func pager_stmt_commit(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41761 bp := tls.Alloc(48) 41762 defer tls.Free(48) 41763 41764 var pPager uintptr 41765 var rc int32 41766 if argc != 2 { 41767 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41768 ts+24534, 0)) 41769 return TCL_ERROR 41770 } 41771 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41772 rc = sqlite3.Xsqlite3PagerSavepoint(tls, pPager, SAVEPOINT_RELEASE, 0) 41773 if rc != SQLITE_OK { 41774 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 41775 return TCL_ERROR 41776 } 41777 return TCL_OK 41778 } 41779 41780 func pager_stats(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41781 bp := tls.Alloc(140) 41782 defer tls.Free(140) 41783 41784 var pPager uintptr 41785 var i int32 41786 var a uintptr 41787 if argc != 2 { 41788 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41789 ts+24534, 0)) 41790 return TCL_ERROR 41791 } 41792 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41793 a = sqlite3.Xsqlite3PagerStats(tls, pPager) 41794 for i = 0; i < 9; i++ { 41795 tcl.XTcl_AppendElement(tls, interp, zName[i]) 41796 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 41797 tcl.XTcl_AppendElement(tls, interp, bp+40) 41798 } 41799 return TCL_OK 41800 } 41801 41802 var zName = [9]uintptr{ 41803 ts + 24539, ts + 24543, ts + 18340, ts + 11809, ts + 9558, ts + 24548, 41804 ts + 24552, ts + 24556, ts + 24561, 41805 } 41806 41807 func pager_pagecount(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41808 bp := tls.Alloc(160) 41809 defer tls.Free(160) 41810 41811 var pPager uintptr 41812 41813 if argc != 2 { 41814 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41815 ts+24534, 0)) 41816 return TCL_ERROR 41817 } 41818 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41819 sqlite3.Xsqlite3PagerPagecount(tls, pPager, bp+56) 41820 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+60, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 56)))) 41821 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 41822 return TCL_OK 41823 } 41824 41825 func page_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41826 bp := tls.Alloc(188) 41827 defer tls.Free(188) 41828 41829 var pPager uintptr 41830 41831 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 41832 41833 var rc int32 41834 if argc != 3 { 41835 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41836 ts+24566, 0)) 41837 return TCL_ERROR 41838 } 41839 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41840 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 41841 return TCL_ERROR 41842 } 41843 rc = sqlite3.Xsqlite3PagerSharedLock(tls, pPager) 41844 if rc == SQLITE_OK { 41845 rc = sqlite3.Xsqlite3PagerGet(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 72))), bp+80, 0) 41846 } 41847 if rc != SQLITE_OK { 41848 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 41849 return TCL_ERROR 41850 } 41851 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+88, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 41852 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+88, 0)) 41853 return TCL_OK 41854 } 41855 41856 func page_lookup(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41857 bp := tls.Alloc(160) 41858 defer tls.Free(160) 41859 41860 var pPager uintptr 41861 41862 var pPage uintptr 41863 41864 if argc != 3 { 41865 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41866 ts+24566, 0)) 41867 return TCL_ERROR 41868 } 41869 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41870 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+56) != 0 { 41871 return TCL_ERROR 41872 } 41873 pPage = sqlite3.Xsqlite3PagerLookup(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 56)))) 41874 if pPage != 0 { 41875 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+60, ts+9889, libc.VaList(bp+32, pPage)) 41876 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+60, 0)) 41877 } 41878 return TCL_OK 41879 } 41880 41881 func pager_truncate(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41882 bp := tls.Alloc(36) 41883 defer tls.Free(36) 41884 41885 var pPager uintptr 41886 41887 if argc != 3 { 41888 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41889 ts+24566, 0)) 41890 return TCL_ERROR 41891 } 41892 pPager = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41893 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+32) != 0 { 41894 return TCL_ERROR 41895 } 41896 sqlite3.Xsqlite3PagerTruncateImage(tls, pPager, uint32(*(*int32)(unsafe.Pointer(bp + 32)))) 41897 return TCL_OK 41898 } 41899 41900 func page_unref(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41901 bp := tls.Alloc(32) 41902 defer tls.Free(32) 41903 41904 var pPage uintptr 41905 if argc != 2 { 41906 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41907 ts+24576, 0)) 41908 return TCL_ERROR 41909 } 41910 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41911 sqlite3.Xsqlite3PagerUnref(tls, pPage) 41912 return TCL_OK 41913 } 41914 41915 func page_read(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41916 bp := tls.Alloc(148) 41917 defer tls.Free(148) 41918 41919 var pPage uintptr 41920 if argc != 2 { 41921 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41922 ts+24576, 0)) 41923 return TCL_ERROR 41924 } 41925 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41926 libc.X__builtin___memcpy_chk(tls, bp+48, sqlite3.Xsqlite3PagerGetData(tls, pPage), uint64(unsafe.Sizeof([100]int8{})), libc.X__builtin_object_size(tls, bp+48, 0)) 41927 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+48, 0)) 41928 return TCL_OK 41929 } 41930 41931 func page_number(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41932 bp := tls.Alloc(156) 41933 defer tls.Free(156) 41934 41935 var pPage uintptr 41936 if argc != 2 { 41937 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41938 ts+24576, 0)) 41939 return TCL_ERROR 41940 } 41941 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41942 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+56, ts+1333, libc.VaList(bp+32, sqlite3.Xsqlite3PagerPagenumber(tls, pPage))) 41943 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 41944 return TCL_OK 41945 } 41946 41947 func page_write(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41948 bp := tls.Alloc(48) 41949 defer tls.Free(48) 41950 41951 var pPage uintptr 41952 var pData uintptr 41953 var rc int32 41954 if argc != 3 { 41955 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41956 ts+24583, 0)) 41957 return TCL_ERROR 41958 } 41959 pPage = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 41960 rc = sqlite3.Xsqlite3PagerWrite(tls, pPage) 41961 if rc != SQLITE_OK { 41962 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 41963 return TCL_ERROR 41964 } 41965 pData = sqlite3.Xsqlite3PagerGetData(tls, pPage) 41966 libc.X__builtin___strncpy_chk(tls, pData, *(*uintptr)(unsafe.Pointer(argv + 2*8)), uint64(test_pagesize-1), libc.X__builtin_object_size(tls, pData, func() int32 { 41967 if X_USE_FORTIFY_LEVEL > 1 { 41968 return 1 41969 } 41970 return 0 41971 }())) 41972 *(*int8)(unsafe.Pointer(pData + uintptr(test_pagesize-1))) = int8(0) 41973 return TCL_OK 41974 } 41975 41976 func fake_big_file(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 41977 bp := tls.Alloc(96) 41978 defer tls.Free(96) 41979 41980 var pVfs uintptr 41981 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 41982 var rc int32 41983 41984 var offset i64 41985 var zFile uintptr 41986 var nFile int32 41987 if argc != 3 { 41988 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 41989 ts+24595, 0)) 41990 return TCL_ERROR 41991 } 41992 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+80) != 0 { 41993 return TCL_ERROR 41994 } 41995 41996 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 41997 nFile = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 41998 zFile = sqlite3.Xsqlite3_malloc(tls, nFile+2) 41999 if zFile == uintptr(0) { 42000 return TCL_ERROR 42001 } 42002 libc.X__builtin___memcpy_chk(tls, zFile, *(*uintptr)(unsafe.Pointer(argv + 2*8)), uint64(nFile+1), libc.X__builtin_object_size(tls, zFile, 0)) 42003 *(*int8)(unsafe.Pointer(zFile + uintptr(nFile+1))) = int8(0) 42004 rc = sqlite3.Xsqlite3OsOpenMalloc(tls, pVfs, zFile, bp+88, 42005 SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB, uintptr(0)) 42006 if rc != 0 { 42007 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+24614, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 42008 sqlite3.Xsqlite3_free(tls, zFile) 42009 return TCL_ERROR 42010 } 42011 offset = i64(*(*int32)(unsafe.Pointer(bp + 80))) 42012 offset = offset * int64(1024*1024) 42013 rc = sqlite3.Xsqlite3OsWrite(tls, *(*uintptr)(unsafe.Pointer(bp + 88)), ts+24628, 14, offset) 42014 sqlite3.Xsqlite3OsCloseFree(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 42015 sqlite3.Xsqlite3_free(tls, zFile) 42016 if rc != 0 { 42017 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, ts+24642, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 42018 return TCL_ERROR 42019 } 42020 return TCL_OK 42021 } 42022 42023 func testPendingByte(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42024 bp := tls.Alloc(44) 42025 defer tls.Free(44) 42026 42027 var rc int32 42028 if argc != 2 { 42029 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42030 ts+24657, uintptr(0))) 42031 return TCL_ERROR 42032 } 42033 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+40) != 0 { 42034 return TCL_ERROR 42035 } 42036 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_PENDING_BYTE, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 40)))) 42037 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 42038 return TCL_OK 42039 } 42040 42041 var faultSimInterp uintptr = uintptr(0) 42042 var faultSimScriptSize int32 = 0 42043 var faultSimScript uintptr 42044 42045 func faultSimCallback(tls *libc.TLS, x int32) int32 { 42046 bp := tls.Alloc(38) 42047 defer tls.Free(38) 42048 42049 var i int32 42050 var isNeg int32 42051 var rc int32 42052 if x == 0 { 42053 libc.X__builtin___memcpy_chk(tls, faultSimScript+uintptr(faultSimScriptSize), ts+14193, uint64(2), libc.X__builtin_object_size(tls, faultSimScript+uintptr(faultSimScriptSize), 0)) 42054 } else { 42055 if x < 0 { 42056 isNeg = 1 42057 x = -x 42058 } else { 42059 isNeg = 0 42060 } 42061 *(*int8)(unsafe.Pointer(bp + 8 + 29)) = int8(0) 42062 i = int32(uint64(unsafe.Sizeof([30]int8{})) - uint64(2)) 42063 __1: 42064 if !(i > 0 && x > 0) { 42065 goto __3 42066 } 42067 { 42068 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) = int8(x%10 + '0') 42069 42070 } 42071 goto __2 42072 __2: 42073 i-- 42074 x = x / 10 42075 goto __1 42076 goto __3 42077 __3: 42078 ; 42079 if isNeg != 0 { 42080 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(libc.PostDecInt32(&i, 1)))) = int8('-') 42081 } 42082 libc.X__builtin___memcpy_chk(tls, faultSimScript+uintptr(faultSimScriptSize), bp+8+uintptr(i)+uintptr(1), uint64(unsafe.Sizeof([30]int8{}))-uint64(i), libc.X__builtin_object_size(tls, faultSimScript+uintptr(faultSimScriptSize), 0)) 42083 } 42084 rc = tcl.XTcl_Eval(tls, faultSimInterp, faultSimScript) 42085 if rc != 0 { 42086 libc.Xfprintf(tls, libc.X__stderrp, ts+24672, libc.VaList(bp, faultSimScript)) 42087 rc = SQLITE_ERROR 42088 } else { 42089 rc = libc.Xatoi(tls, tcl.XTcl_GetStringResult(tls, faultSimInterp)) 42090 } 42091 tcl.XTcl_ResetResult(tls, faultSimInterp) 42092 return rc 42093 } 42094 42095 func faultInstallCmd(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42096 bp := tls.Alloc(64) 42097 defer tls.Free(64) 42098 42099 var zScript uintptr 42100 var nScript int32 42101 var rc int32 42102 if argc != 1 && argc != 2 { 42103 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42104 ts+24708, uintptr(0))) 42105 } 42106 if argc == 2 { 42107 zScript = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 42108 } else { 42109 zScript = ts + 584 42110 } 42111 nScript = int32(libc.Xstrlen(tls, zScript)) 42112 if faultSimScript != 0 { 42113 libc.Xfree(tls, faultSimScript) 42114 faultSimScript = uintptr(0) 42115 } 42116 if nScript == 0 { 42117 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_FAULT_INSTALL, libc.VaList(bp+32, 0)) 42118 } else { 42119 faultSimScript = libc.Xmalloc(tls, uint64(nScript+100)) 42120 if faultSimScript == uintptr(0) { 42121 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+2069, uintptr(0))) 42122 return SQLITE_ERROR 42123 } 42124 libc.X__builtin___memcpy_chk(tls, faultSimScript, zScript, uint64(nScript), libc.X__builtin_object_size(tls, faultSimScript, 0)) 42125 *(*int8)(unsafe.Pointer(faultSimScript + uintptr(nScript))) = int8(' ') 42126 faultSimScriptSize = nScript + 1 42127 faultSimInterp = interp 42128 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_FAULT_INSTALL, libc.VaList(bp+56, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{faultSimCallback})))) 42129 } 42130 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 42131 return SQLITE_OK 42132 } 42133 42134 func testBitvecBuiltinTest(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42135 bp := tls.Alloc(452) 42136 defer tls.Free(452) 42137 42138 var rc int32 42139 var nProg int32 = 0 42140 42141 var z uintptr 42142 if argc != 3 { 42143 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42144 ts+24717, uintptr(0))) 42145 } 42146 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+48) != 0 { 42147 return TCL_ERROR 42148 } 42149 z = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 42150 for nProg < 99 && *(*int8)(unsafe.Pointer(z)) != 0 { 42151 for *(*int8)(unsafe.Pointer(z)) != 0 && !(int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0) { 42152 z++ 42153 } 42154 if int32(*(*int8)(unsafe.Pointer(z))) == 0 { 42155 break 42156 } 42157 *(*int32)(unsafe.Pointer(bp + 52 + uintptr(libc.PostIncInt32(&nProg, 1))*4)) = libc.Xatoi(tls, z) 42158 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0 { 42159 z++ 42160 } 42161 } 42162 *(*int32)(unsafe.Pointer(bp + 52 + uintptr(nProg)*4)) = 0 42163 rc = sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BITVEC_TEST, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 48)), bp+52)) 42164 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 42165 return TCL_OK 42166 } 42167 42168 func Sqlitetest2_Init(tls *libc.TLS, interp uintptr) int32 { 42169 var i int32 42170 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd2))/uint64(unsafe.Sizeof(struct { 42171 FzName uintptr 42172 FxProc uintptr 42173 }{})); i++ { 42174 tcl.XTcl_CreateCommand(tls, interp, aCmd2[i].FzName, aCmd2[i].FxProc, uintptr(0), uintptr(0)) 42175 } 42176 tcl.XTcl_LinkVar(tls, interp, ts+24732, 42177 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_pending)), TCL_LINK_INT) 42178 tcl.XTcl_LinkVar(tls, interp, ts+24756, 42179 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_persist)), TCL_LINK_INT) 42180 tcl.XTcl_LinkVar(tls, interp, ts+24780, 42181 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_hit)), TCL_LINK_INT) 42182 tcl.XTcl_LinkVar(tls, interp, ts+24800, 42183 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_io_error_hardhit)), TCL_LINK_INT) 42184 tcl.XTcl_LinkVar(tls, interp, ts+24824, 42185 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_diskfull_pending)), TCL_LINK_INT) 42186 tcl.XTcl_LinkVar(tls, interp, ts+24848, 42187 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3_diskfull)), TCL_LINK_INT) 42188 tcl.XTcl_LinkVar(tls, interp, ts+24864, 42189 uintptr(unsafe.Pointer(&sqlite3.Xsqlite3PendingByte)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 42190 return TCL_OK 42191 } 42192 42193 var aCmd2 = [20]struct { 42194 FzName uintptr 42195 FxProc uintptr 42196 }{ 42197 {FzName: ts + 24884, FxProc: 0}, 42198 {FzName: ts + 24895, FxProc: 0}, 42199 {FzName: ts + 24907, FxProc: 0}, 42200 {FzName: ts + 24920, FxProc: 0}, 42201 {FzName: ts + 24935, FxProc: 0}, 42202 {FzName: ts + 24952, FxProc: 0}, 42203 {FzName: ts + 24970, FxProc: 0}, 42204 {FzName: ts + 24990, FxProc: 0}, 42205 {FzName: ts + 25002, FxProc: 0}, 42206 {FzName: ts + 25018, FxProc: 0}, 42207 {FzName: ts + 25027, FxProc: 0}, 42208 {FzName: ts + 25039, FxProc: 0}, 42209 {FzName: ts + 25050, FxProc: 0}, 42210 {FzName: ts + 25060, FxProc: 0}, 42211 {FzName: ts + 25071, FxProc: 0}, 42212 {FzName: ts + 25083, FxProc: 0}, 42213 {FzName: ts + 25098, FxProc: 0}, 42214 {FzName: ts + 25112, FxProc: 0}, 42215 {FzName: ts + 25137, FxProc: 0}, 42216 {FzName: ts + 25171, FxProc: 0}, 42217 } 42218 42219 type Btree = Btree1 42220 type BtCursor = BtCursor1 42221 type BtShared = BtShared1 42222 42223 type MemPage1 = struct { 42224 FisInit u8 42225 FintKey u8 42226 FintKeyLeaf u8 42227 F__ccgo_pad1 [1]byte 42228 Fpgno Pgno 42229 Fleaf u8 42230 FhdrOffset u8 42231 FchildPtrSize u8 42232 Fmax1bytePayload u8 42233 FnOverflow u8 42234 F__ccgo_pad2 [1]byte 42235 FmaxLocal u16 42236 FminLocal u16 42237 FcellOffset u16 42238 FnFree int32 42239 FnCell u16 42240 FmaskPage u16 42241 FaiOvfl [4]u16 42242 F__ccgo_pad3 [4]byte 42243 FapOvfl [4]uintptr 42244 FpBt uintptr 42245 FaData uintptr 42246 FaDataEnd uintptr 42247 FaCellIdx uintptr 42248 FaDataOfst uintptr 42249 FpDbPage uintptr 42250 FxCellSize uintptr 42251 FxParseCell uintptr 42252 } 42253 42254 type MemPage = MemPage1 42255 type BtLock1 = struct { 42256 FpBtree uintptr 42257 FiTable Pgno 42258 FeLock u8 42259 F__ccgo_pad1 [3]byte 42260 FpNext uintptr 42261 } 42262 42263 type BtLock = BtLock1 42264 type CellInfo1 = struct { 42265 FnKey i64 42266 FpPayload uintptr 42267 FnPayload u32 42268 FnLocal u16 42269 FnSize u16 42270 } 42271 42272 type CellInfo = CellInfo1 42273 42274 type IntegrityCk1 = struct { 42275 FpBt uintptr 42276 FpPager uintptr 42277 FaPgRef uintptr 42278 FnPage Pgno 42279 FmxErr int32 42280 FnErr int32 42281 FbOomFault int32 42282 FzPfx uintptr 42283 Fv1 Pgno 42284 Fv2 int32 42285 FerrMsg StrAccum 42286 Fheap uintptr 42287 Fdb uintptr 42288 } 42289 42290 type IntegrityCk = IntegrityCk1 42291 42292 var sDb sqlite31 42293 var nRefSqlite3 int32 = 0 42294 42295 func btree_open(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42296 bp := tls.Alloc(188) 42297 defer tls.Free(188) 42298 42299 var rc int32 42300 42301 var n int32 42302 var zFilename uintptr 42303 if argc != 3 { 42304 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42305 ts+25206, 0)) 42306 return TCL_ERROR 42307 } 42308 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 42309 return TCL_ERROR 42310 } 42311 nRefSqlite3++ 42312 if nRefSqlite3 == 1 { 42313 sDb.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 42314 sDb.Fmutex = sqlite3.Xsqlite3MutexAlloc(tls, SQLITE_MUTEX_RECURSIVE) 42315 sqlite3.Xsqlite3_mutex_enter(tls, sDb.Fmutex) 42316 } 42317 n = int32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 42318 zFilename = sqlite3.Xsqlite3_malloc(tls, n+2) 42319 if zFilename == uintptr(0) { 42320 return TCL_ERROR 42321 } 42322 libc.X__builtin___memcpy_chk(tls, zFilename, *(*uintptr)(unsafe.Pointer(argv + 1*8)), uint64(n+1), libc.X__builtin_object_size(tls, zFilename, 0)) 42323 *(*int8)(unsafe.Pointer(zFilename + uintptr(n+1))) = int8(0) 42324 rc = sqlite3.Xsqlite3BtreeOpen(tls, sDb.FpVfs, zFilename, uintptr(unsafe.Pointer(&sDb)), bp+80, 0, 42325 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_MAIN_DB) 42326 sqlite3.Xsqlite3_free(tls, zFilename) 42327 if rc != SQLITE_OK { 42328 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 42329 return TCL_ERROR 42330 } 42331 sqlite3.Xsqlite3BtreeSetCacheSize(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 72))) 42332 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+88, ts+9889, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(bp + 80)))) 42333 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+88, 0)) 42334 return TCL_OK 42335 } 42336 42337 func btree_close(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42338 bp := tls.Alloc(48) 42339 defer tls.Free(48) 42340 42341 var pBt uintptr 42342 var rc int32 42343 if argc != 2 { 42344 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42345 ts+24534, 0)) 42346 return TCL_ERROR 42347 } 42348 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42349 rc = sqlite3.Xsqlite3BtreeClose(tls, pBt) 42350 if rc != SQLITE_OK { 42351 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 42352 return TCL_ERROR 42353 } 42354 nRefSqlite3-- 42355 if nRefSqlite3 == 0 { 42356 sqlite3.Xsqlite3_mutex_leave(tls, sDb.Fmutex) 42357 sqlite3.Xsqlite3_mutex_free(tls, sDb.Fmutex) 42358 sDb.Fmutex = uintptr(0) 42359 sDb.FpVfs = uintptr(0) 42360 } 42361 return TCL_OK 42362 } 42363 42364 func btree_begin_transaction(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42365 bp := tls.Alloc(48) 42366 defer tls.Free(48) 42367 42368 var pBt uintptr 42369 var rc int32 42370 if argc != 2 { 42371 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42372 ts+24534, 0)) 42373 return TCL_ERROR 42374 } 42375 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42376 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 42377 rc = sqlite3.Xsqlite3BtreeBeginTrans(tls, pBt, 1, uintptr(0)) 42378 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 42379 if rc != SQLITE_OK { 42380 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 42381 return TCL_ERROR 42382 } 42383 return TCL_OK 42384 } 42385 42386 func btree_pager_stats(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42387 bp := tls.Alloc(140) 42388 defer tls.Free(140) 42389 42390 var pBt uintptr 42391 var i int32 42392 var a uintptr 42393 42394 if argc != 2 { 42395 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42396 ts+24534, 0)) 42397 return TCL_ERROR 42398 } 42399 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42400 42401 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 42402 42403 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 42404 a = sqlite3.Xsqlite3PagerStats(tls, sqlite3.Xsqlite3BtreePager(tls, pBt)) 42405 for i = 0; i < 11; i++ { 42406 tcl.XTcl_AppendElement(tls, interp, zName1[i]) 42407 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+40, ts+1333, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(a + uintptr(i)*4)))) 42408 tcl.XTcl_AppendElement(tls, interp, bp+40) 42409 } 42410 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 42411 42412 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 42413 return TCL_OK 42414 } 42415 42416 var zName1 = [11]uintptr{ 42417 ts + 24539, ts + 24543, ts + 18340, ts + 11809, ts + 9558, ts + 24548, 42418 ts + 24552, ts + 24556, ts + 24561, ts + 25230, ts + 25235, 42419 } 42420 42421 func btree_cursor(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42422 bp := tls.Alloc(110) 42423 defer tls.Free(110) 42424 42425 var pBt uintptr 42426 42427 var pCur uintptr 42428 var rc int32 = SQLITE_OK 42429 42430 if argc != 4 { 42431 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42432 ts+25241, 0)) 42433 return TCL_ERROR 42434 } 42435 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42436 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+72) != 0 { 42437 return TCL_ERROR 42438 } 42439 if tcl.XTcl_GetBoolean(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 3*8)), bp+76) != 0 { 42440 return TCL_ERROR 42441 } 42442 if *(*int32)(unsafe.Pointer(bp + 76)) != 0 { 42443 *(*int32)(unsafe.Pointer(bp + 76)) = BTREE_WRCSR 42444 } 42445 pCur = tcl.XTcl_Alloc(tls, uint32(sqlite3.Xsqlite3BtreeCursorSize(tls))) 42446 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(sqlite3.Xsqlite3BtreeCursorSize(tls)), libc.X__builtin_object_size(tls, pCur, 0)) 42447 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 42448 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 42449 rc = sqlite3.Xsqlite3BtreeLockTable(tls, pBt, *(*int32)(unsafe.Pointer(bp + 72)), libc.BoolUint8(!!(*(*int32)(unsafe.Pointer(bp + 76)) != 0))) 42450 if rc == SQLITE_OK { 42451 rc = sqlite3.Xsqlite3BtreeCursor(tls, pBt, uint32(*(*int32)(unsafe.Pointer(bp + 72))), *(*int32)(unsafe.Pointer(bp + 76)), uintptr(0), pCur) 42452 } 42453 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 42454 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 42455 if rc != 0 { 42456 tcl.XTcl_Free(tls, pCur) 42457 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 42458 return TCL_ERROR 42459 } 42460 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+80, ts+9889, libc.VaList(bp+48, pCur)) 42461 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+80, 0)) 42462 return SQLITE_OK 42463 } 42464 42465 func btree_close_cursor(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42466 bp := tls.Alloc(48) 42467 defer tls.Free(48) 42468 42469 var pCur uintptr 42470 var rc int32 42471 42472 if argc != 2 { 42473 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42474 ts+24534, 0)) 42475 return TCL_ERROR 42476 } 42477 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42478 { 42479 var pBt uintptr = (*BtCursor)(unsafe.Pointer(pCur)).FpBtree 42480 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 42481 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 42482 rc = sqlite3.Xsqlite3BtreeCloseCursor(tls, pCur) 42483 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 42484 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 42485 42486 } 42487 tcl.XTcl_Free(tls, pCur) 42488 if rc != 0 { 42489 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 42490 return TCL_ERROR 42491 } 42492 return SQLITE_OK 42493 } 42494 42495 func btree_next(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42496 bp := tls.Alloc(172) 42497 defer tls.Free(172) 42498 42499 var pCur uintptr 42500 var rc int32 42501 var res int32 = 0 42502 42503 if argc != 2 { 42504 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42505 ts+24534, 0)) 42506 return TCL_ERROR 42507 } 42508 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42509 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 42510 rc = sqlite3.Xsqlite3BtreeNext(tls, pCur, 0) 42511 if rc == SQLITE_DONE { 42512 res = 1 42513 rc = SQLITE_OK 42514 } 42515 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 42516 if rc != 0 { 42517 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 42518 return TCL_ERROR 42519 } 42520 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, res)) 42521 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 42522 return SQLITE_OK 42523 } 42524 42525 func btree_first(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42526 bp := tls.Alloc(176) 42527 defer tls.Free(176) 42528 42529 var pCur uintptr 42530 var rc int32 42531 *(*int32)(unsafe.Pointer(bp + 72)) = 0 42532 42533 if argc != 2 { 42534 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42535 ts+24534, 0)) 42536 return TCL_ERROR 42537 } 42538 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42539 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 42540 rc = sqlite3.Xsqlite3BtreeFirst(tls, pCur, bp+72) 42541 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 42542 if rc != 0 { 42543 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc), 0)) 42544 return TCL_ERROR 42545 } 42546 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+76, ts+1333, libc.VaList(bp+48, *(*int32)(unsafe.Pointer(bp + 72)))) 42547 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+76, 0)) 42548 return SQLITE_OK 42549 } 42550 42551 func btree_eof(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42552 bp := tls.Alloc(106) 42553 defer tls.Free(106) 42554 42555 var pCur uintptr 42556 var rc int32 42557 42558 if argc != 2 { 42559 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42560 ts+24534, 0)) 42561 return TCL_ERROR 42562 } 42563 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42564 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 42565 rc = sqlite3.Xsqlite3BtreeEof(tls, pCur) 42566 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 42567 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+56, ts+1333, libc.VaList(bp+32, rc)) 42568 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 42569 return SQLITE_OK 42570 } 42571 42572 func btree_payload_size(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42573 bp := tls.Alloc(106) 42574 defer tls.Free(106) 42575 42576 var pCur uintptr 42577 var n u32 42578 42579 if argc != 2 { 42580 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42581 ts+24534, 0)) 42582 return TCL_ERROR 42583 } 42584 pCur = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42585 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 42586 n = sqlite3.Xsqlite3BtreePayloadSize(tls, pCur) 42587 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 42588 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+56, ts+17791, libc.VaList(bp+32, n)) 42589 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+56, 0)) 42590 return SQLITE_OK 42591 } 42592 42593 func btree_varint_test(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42594 bp := tls.Alloc(516) 42595 defer tls.Free(516) 42596 42597 var in u64 42598 42599 var n1 int32 42600 var n2 int32 42601 var i int32 42602 var j int32 42603 42604 if argc != 5 { 42605 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42606 ts+25265, 0)) 42607 return TCL_ERROR 42608 } 42609 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+184) != 0 { 42610 return TCL_ERROR 42611 } 42612 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+188) != 0 { 42613 return TCL_ERROR 42614 } 42615 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 3*8)), bp+192) != 0 { 42616 return TCL_ERROR 42617 } 42618 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 4*8)), bp+196) != 0 { 42619 return TCL_ERROR 42620 } 42621 in = u64(*(*u32)(unsafe.Pointer(bp + 184))) 42622 in = in * u64(*(*u32)(unsafe.Pointer(bp + 188))) 42623 for i = 0; i < int32(*(*u32)(unsafe.Pointer(bp + 192))); i++ { 42624 n1 = sqlite3.Xsqlite3PutVarint(tls, bp+200, in) 42625 if n1 > 9 || n1 < 1 { 42626 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 42627 ts+25300, libc.VaList(bp+32, n1)) 42628 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+300, 0)) 42629 return TCL_ERROR 42630 } 42631 n2 = int32(sqlite3.Xsqlite3GetVarint(tls, bp+200, bp+504)) 42632 if n1 != n2 { 42633 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 42634 ts+25350, libc.VaList(bp+56, n1, n2)) 42635 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, bp+300, 0)) 42636 return TCL_ERROR 42637 } 42638 if in != *(*u64)(unsafe.Pointer(bp + 504)) { 42639 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 42640 ts+25398, libc.VaList(bp+88, in, *(*u64)(unsafe.Pointer(bp + 504)))) 42641 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+104, bp+300, 0)) 42642 return TCL_ERROR 42643 } 42644 if in&uint64(0xffffffff) == in { 42645 n2 = int32(func() uint8 { 42646 if int32(*(*uint8)(unsafe.Pointer(bp + 200))) < int32(u8(0x80)) { 42647 return uint8(func() int32 { *(*u32)(unsafe.Pointer(bp + 512)) = u32(*(*uint8)(unsafe.Pointer(bp + 200))); return 1 }()) 42648 } 42649 return sqlite3.Xsqlite3GetVarint32(tls, bp+200, bp+512) 42650 }()) 42651 *(*u64)(unsafe.Pointer(bp + 504)) = u64(*(*u32)(unsafe.Pointer(bp + 512))) 42652 if n1 != n2 { 42653 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 42654 ts+25437, 42655 libc.VaList(bp+120, n1, n2)) 42656 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+136, bp+300, 0)) 42657 return TCL_ERROR 42658 } 42659 if in != *(*u64)(unsafe.Pointer(bp + 504)) { 42660 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([200]int8{})), bp+300, 42661 ts+25487, 42662 libc.VaList(bp+152, in, *(*u64)(unsafe.Pointer(bp + 504)))) 42663 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+168, bp+300, 0)) 42664 return TCL_ERROR 42665 } 42666 } 42667 42668 for j = 0; j < 19; j++ { 42669 sqlite3.Xsqlite3GetVarint(tls, bp+200, bp+504) 42670 } 42671 in = in + u64(*(*u32)(unsafe.Pointer(bp + 196))) 42672 } 42673 return TCL_OK 42674 } 42675 42676 func btree_from_db(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42677 bp := tls.Alloc(236) 42678 defer tls.Free(236) 42679 42680 var db uintptr 42681 var pBt uintptr 42682 var iDb int32 = 0 42683 42684 if argc != 2 && argc != 3 { 42685 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42686 ts+25543, 0)) 42687 return TCL_ERROR 42688 } 42689 42690 if 1 != tcl.XTcl_GetCommandInfo(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8)), bp+72) { 42691 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25559, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+11945, 0)) 42692 return TCL_ERROR 42693 } 42694 if argc == 3 { 42695 iDb = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 42696 } 42697 42698 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 72)).FobjClientData)) 42699 42700 pBt = (*Db)(unsafe.Pointer((*sqlite31)(unsafe.Pointer(db)).FaDb + uintptr(iDb)*32)).FpBt 42701 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+136, ts+9889, libc.VaList(bp+64, pBt)) 42702 tcl.XTcl_SetResult(tls, interp, bp+136, uintptr(1)) 42703 return TCL_OK 42704 } 42705 42706 func btree_ismemdb(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42707 bp := tls.Alloc(32) 42708 defer tls.Free(32) 42709 42710 var pBt uintptr 42711 var res int32 42712 var pFile uintptr 42713 42714 if argc != 2 { 42715 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42716 ts+24534, 0)) 42717 return TCL_ERROR 42718 } 42719 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42720 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 42721 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 42722 pFile = sqlite3.Xsqlite3PagerFile(tls, sqlite3.Xsqlite3BtreePager(tls, pBt)) 42723 res = libc.Bool32((*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods == uintptr(0)) 42724 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 42725 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 42726 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewBooleanObj(tls, res)) 42727 return SQLITE_OK 42728 } 42729 42730 func btree_set_cache_size(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42731 bp := tls.Alloc(36) 42732 defer tls.Free(36) 42733 42734 var pBt uintptr 42735 42736 if argc != 3 { 42737 tcl.XTcl_AppendResult(tls, 42738 interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), ts+25580, 0)) 42739 return TCL_ERROR 42740 } 42741 pBt = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42742 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+32) != 0 { 42743 return TCL_ERROR 42744 } 42745 42746 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 42747 sqlite3.Xsqlite3BtreeEnter(tls, pBt) 42748 sqlite3.Xsqlite3BtreeSetCacheSize(tls, pBt, *(*int32)(unsafe.Pointer(bp + 32))) 42749 sqlite3.Xsqlite3BtreeLeave(tls, pBt) 42750 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer(pBt)).Fdb)).Fmutex) 42751 return TCL_OK 42752 } 42753 42754 func btree_insert(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 42755 bp := tls.Alloc(68) 42756 defer tls.Free(68) 42757 42758 var pCur uintptr 42759 42760 if objc != 4 && objc != 3 { 42761 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+25592) 42762 return TCL_ERROR 42763 } 42764 42765 libc.X__builtin___memset_chk(tls, bp+16, 0, uint64(unsafe.Sizeof(BtreePayload{})), libc.X__builtin_object_size(tls, bp+16, 0)) 42766 if objc == 4 { 42767 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 42768 return TCL_ERROR 42769 } 42770 (*BtreePayload)(unsafe.Pointer(bp + 16)).FnKey = sqlite3_int64(*(*int32)(unsafe.Pointer(bp + 64))) 42771 (*BtreePayload)(unsafe.Pointer(bp + 16)).FpData = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+16+36) 42772 } else { 42773 (*BtreePayload)(unsafe.Pointer(bp + 16)).FpKey = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) 42774 (*BtreePayload)(unsafe.Pointer(bp + 16)).FnKey = sqlite3_int64(*(*int32)(unsafe.Pointer(bp + 64))) 42775 } 42776 pCur = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 42777 42778 sqlite3.Xsqlite3_mutex_enter(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer((*BtCursor)(unsafe.Pointer(pCur)).FpBtree)).Fdb)).Fmutex) 42779 sqlite3.Xsqlite3BtreeEnter(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 42780 *(*int32)(unsafe.Pointer(bp + 64)) = sqlite3.Xsqlite3BtreeInsert(tls, pCur, bp+16, 0, 0) 42781 sqlite3.Xsqlite3BtreeLeave(tls, (*BtCursor)(unsafe.Pointer(pCur)).FpBtree) 42782 sqlite3.Xsqlite3_mutex_leave(tls, (*sqlite31)(unsafe.Pointer((*Btree)(unsafe.Pointer((*BtCursor)(unsafe.Pointer(pCur)).FpBtree)).Fdb)).Fmutex) 42783 42784 tcl.XTcl_ResetResult(tls, interp) 42785 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 42786 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, *(*int32)(unsafe.Pointer(bp + 64))), 0)) 42787 return TCL_ERROR 42788 } 42789 return TCL_OK 42790 } 42791 42792 func Sqlitetest3_Init(tls *libc.TLS, interp uintptr) int32 { 42793 var i int32 42794 42795 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd3))/uint64(unsafe.Sizeof(struct { 42796 FzName uintptr 42797 FxProc uintptr 42798 }{})); i++ { 42799 tcl.XTcl_CreateCommand(tls, interp, aCmd3[i].FzName, aCmd3[i].FxProc, uintptr(0), uintptr(0)) 42800 } 42801 42802 tcl.XTcl_CreateObjCommand(tls, interp, ts+25616, *(*uintptr)(unsafe.Pointer(&struct { 42803 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 42804 }{btree_insert})), uintptr(0), uintptr(0)) 42805 42806 return TCL_OK 42807 } 42808 42809 var aCmd3 = [14]struct { 42810 FzName uintptr 42811 FxProc uintptr 42812 }{ 42813 {FzName: ts + 25629, FxProc: 0}, 42814 {FzName: ts + 25640, FxProc: 0}, 42815 {FzName: ts + 25652, FxProc: 0}, 42816 {FzName: ts + 25676, FxProc: 0}, 42817 {FzName: ts + 25694, FxProc: 0}, 42818 {FzName: ts + 25707, FxProc: 0}, 42819 {FzName: ts + 25726, FxProc: 0}, 42820 {FzName: ts + 25737, FxProc: 0}, 42821 {FzName: ts + 25747, FxProc: 0}, 42822 {FzName: ts + 25766, FxProc: 0}, 42823 {FzName: ts + 25778, FxProc: 0}, 42824 {FzName: ts + 25796, FxProc: 0}, 42825 {FzName: ts + 25810, FxProc: 0}, 42826 {FzName: ts + 25824, FxProc: 0}, 42827 } 42828 42829 type sched_param = struct { 42830 Fsched_priority int32 42831 F__opaque [4]int8 42832 } 42833 42834 type qos_class_t = uint32 42835 42836 type pthread_override_t = uintptr 42837 42838 type mach_port_t = uint32 42839 42840 type Thread = struct { 42841 FzFilename uintptr 42842 FxOp uintptr 42843 FzArg uintptr 42844 Fopnum int32 42845 Fbusy int32 42846 Fcompleted int32 42847 F__ccgo_pad1 [4]byte 42848 Fdb uintptr 42849 FpStmt uintptr 42850 FzErr uintptr 42851 FzStaticErr uintptr 42852 Frc int32 42853 Fargc int32 42854 Fargv [100]uintptr 42855 Fcolv [100]uintptr 42856 } 42857 42858 var threadset [26]Thread 42859 42860 func test_barrier(tls *libc.TLS) { 42861 var pMutex uintptr = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_APP1) 42862 sqlite3.Xsqlite3_mutex_enter(tls, pMutex) 42863 sqlite3.Xsqlite3_mutex_leave(tls, pMutex) 42864 } 42865 42866 func test_thread_main(tls *libc.TLS, pArg uintptr) uintptr { 42867 var p uintptr = pArg 42868 if (*Thread)(unsafe.Pointer(p)).Fdb != 0 { 42869 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 42870 } 42871 sqlite3.Xsqlite3_open(tls, (*Thread)(unsafe.Pointer(p)).FzFilename, p+40) 42872 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*Thread)(unsafe.Pointer(p)).Fdb) { 42873 (*Thread)(unsafe.Pointer(p)).FzErr = libc.Xstrdup(tls, sqlite3.Xsqlite3_errmsg(tls, (*Thread)(unsafe.Pointer(p)).Fdb)) 42874 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 42875 (*Thread)(unsafe.Pointer(p)).Fdb = uintptr(0) 42876 } 42877 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42878 test_barrier(tls) 42879 (*Thread)(unsafe.Pointer(p)).Fcompleted = 1 42880 for (*Thread)(unsafe.Pointer(p)).Fopnum <= (*Thread)(unsafe.Pointer(p)).Fcompleted { 42881 libc.Xsched_yield(tls) 42882 } 42883 test_barrier(tls) 42884 for (*Thread)(unsafe.Pointer(p)).FxOp != 0 { 42885 if (*Thread)(unsafe.Pointer(p)).FzErr != 0 && (*Thread)(unsafe.Pointer(p)).FzErr != (*Thread)(unsafe.Pointer(p)).FzStaticErr { 42886 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzErr) 42887 (*Thread)(unsafe.Pointer(p)).FzErr = uintptr(0) 42888 } 42889 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Thread)(unsafe.Pointer(p)).FxOp})).f(tls, p) 42890 test_barrier(tls) 42891 (*Thread)(unsafe.Pointer(p)).Fcompleted++ 42892 for (*Thread)(unsafe.Pointer(p)).Fopnum <= (*Thread)(unsafe.Pointer(p)).Fcompleted { 42893 libc.Xsched_yield(tls) 42894 } 42895 test_barrier(tls) 42896 } 42897 if (*Thread)(unsafe.Pointer(p)).FpStmt != 0 { 42898 sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 42899 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 42900 } 42901 if (*Thread)(unsafe.Pointer(p)).Fdb != 0 { 42902 sqlite3.Xsqlite3_close(tls, (*Thread)(unsafe.Pointer(p)).Fdb) 42903 (*Thread)(unsafe.Pointer(p)).Fdb = uintptr(0) 42904 } 42905 if (*Thread)(unsafe.Pointer(p)).FzErr != 0 && (*Thread)(unsafe.Pointer(p)).FzErr != (*Thread)(unsafe.Pointer(p)).FzStaticErr { 42906 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzErr) 42907 (*Thread)(unsafe.Pointer(p)).FzErr = uintptr(0) 42908 } 42909 test_barrier(tls) 42910 (*Thread)(unsafe.Pointer(p)).Fcompleted++ 42911 sqlite3.Xsqlite3_thread_cleanup(tls) 42912 return uintptr(0) 42913 } 42914 42915 func parse_thread_id(tls *libc.TLS, interp uintptr, zArg uintptr) int32 { 42916 bp := tls.Alloc(16) 42917 defer tls.Free(16) 42918 42919 if zArg == uintptr(0) || int32(*(*int8)(unsafe.Pointer(zArg))) == 0 || int32(*(*int8)(unsafe.Pointer(zArg + 1))) != 0 || !(isupper(tls, int32(uint8(*(*int8)(unsafe.Pointer(zArg))))) != 0) { 42920 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+25845, 0)) 42921 return -1 42922 } 42923 return int32(*(*int8)(unsafe.Pointer(zArg))) - 'A' 42924 } 42925 42926 func tcl_thread_create(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42927 bp := tls.Alloc(96) 42928 defer tls.Free(96) 42929 42930 var i int32 42931 42932 var rc int32 42933 42934 if argc != 3 { 42935 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42936 ts+25884, 0)) 42937 return TCL_ERROR 42938 } 42939 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42940 if i < 0 { 42941 return TCL_ERROR 42942 } 42943 if threadset[i].Fbusy != 0 { 42944 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25897, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+25905, 0)) 42945 return TCL_ERROR 42946 } 42947 threadset[i].Fbusy = 1 42948 sqlite3.Xsqlite3_free(tls, threadset[i].FzFilename) 42949 threadset[i].FzFilename = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 42950 threadset[i].Fopnum = 1 42951 threadset[i].Fcompleted = 0 42952 rc = libc.Xpthread_create(tls, bp+88, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 42953 f func(*libc.TLS, uintptr) uintptr 42954 }{test_thread_main})), uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 42955 if rc != 0 { 42956 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+25925, 0)) 42957 sqlite3.Xsqlite3_free(tls, threadset[i].FzFilename) 42958 threadset[i].Fbusy = 0 42959 return TCL_ERROR 42960 } 42961 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp + 88))) 42962 return TCL_OK 42963 } 42964 42965 func test_thread_wait(tls *libc.TLS, p uintptr) { 42966 test_barrier(tls) 42967 for (*Thread)(unsafe.Pointer(p)).Fopnum > (*Thread)(unsafe.Pointer(p)).Fcompleted { 42968 libc.Xsched_yield(tls) 42969 } 42970 test_barrier(tls) 42971 } 42972 42973 func tcl_thread_wait(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 42974 bp := tls.Alloc(48) 42975 defer tls.Free(48) 42976 42977 var i int32 42978 42979 if argc != 2 { 42980 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 42981 ts+25953, 0)) 42982 return TCL_ERROR 42983 } 42984 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 42985 if i < 0 { 42986 return TCL_ERROR 42987 } 42988 if !(threadset[i].Fbusy != 0) { 42989 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 42990 return TCL_ERROR 42991 } 42992 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 42993 return TCL_OK 42994 } 42995 42996 func test_stop_thread(tls *libc.TLS, p uintptr) { 42997 test_thread_wait(tls, p) 42998 (*Thread)(unsafe.Pointer(p)).FxOp = uintptr(0) 42999 (*Thread)(unsafe.Pointer(p)).Fopnum++ 43000 test_thread_wait(tls, p) 43001 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzArg) 43002 (*Thread)(unsafe.Pointer(p)).FzArg = uintptr(0) 43003 sqlite3.Xsqlite3_free(tls, (*Thread)(unsafe.Pointer(p)).FzFilename) 43004 (*Thread)(unsafe.Pointer(p)).FzFilename = uintptr(0) 43005 (*Thread)(unsafe.Pointer(p)).Fbusy = 0 43006 } 43007 43008 func tcl_thread_halt(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43009 bp := tls.Alloc(48) 43010 defer tls.Free(48) 43011 43012 var i int32 43013 43014 if argc != 2 { 43015 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43016 ts+25953, 0)) 43017 return TCL_ERROR 43018 } 43019 if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8))))) == '*' && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8)) + 1))) == 0 { 43020 for i = 0; i < N_THREAD; i++ { 43021 if threadset[i].Fbusy != 0 { 43022 test_stop_thread(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 43023 } 43024 } 43025 } else { 43026 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43027 if i < 0 { 43028 return TCL_ERROR 43029 } 43030 if !(threadset[i].Fbusy != 0) { 43031 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 43032 return TCL_ERROR 43033 } 43034 test_stop_thread(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 43035 } 43036 return TCL_OK 43037 } 43038 43039 func tcl_thread_argc(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43040 bp := tls.Alloc(172) 43041 defer tls.Free(172) 43042 43043 var i int32 43044 43045 if argc != 2 { 43046 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43047 ts+25953, 0)) 43048 return TCL_ERROR 43049 } 43050 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43051 if i < 0 { 43052 return TCL_ERROR 43053 } 43054 if !(threadset[i].Fbusy != 0) { 43055 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 43056 return TCL_ERROR 43057 } 43058 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 43059 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, threadset[i].Fargc)) 43060 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 43061 return TCL_OK 43062 } 43063 43064 func tcl_thread_argv(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43065 bp := tls.Alloc(84) 43066 defer tls.Free(84) 43067 43068 var i int32 43069 43070 if argc != 3 { 43071 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43072 ts+25972, 0)) 43073 return TCL_ERROR 43074 } 43075 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43076 if i < 0 { 43077 return TCL_ERROR 43078 } 43079 if !(threadset[i].Fbusy != 0) { 43080 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 43081 return TCL_ERROR 43082 } 43083 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 43084 return TCL_ERROR 43085 } 43086 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 43087 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset[i].Fargc { 43088 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25978, 0)) 43089 return TCL_ERROR 43090 } 43091 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&threadset)) + uintptr(i)*1680 + 80 + uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*8)), 0)) 43092 return TCL_OK 43093 } 43094 43095 func tcl_thread_colname(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43096 bp := tls.Alloc(84) 43097 defer tls.Free(84) 43098 43099 var i int32 43100 43101 if argc != 3 { 43102 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43103 ts+25972, 0)) 43104 return TCL_ERROR 43105 } 43106 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43107 if i < 0 { 43108 return TCL_ERROR 43109 } 43110 if !(threadset[i].Fbusy != 0) { 43111 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 43112 return TCL_ERROR 43113 } 43114 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 43115 return TCL_ERROR 43116 } 43117 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 43118 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset[i].Fargc { 43119 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25978, 0)) 43120 return TCL_ERROR 43121 } 43122 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&threadset)) + uintptr(i)*1680 + 880 + uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*8)), 0)) 43123 return TCL_OK 43124 } 43125 43126 func tcl_thread_result(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43127 bp := tls.Alloc(64) 43128 defer tls.Free(64) 43129 43130 var i int32 43131 var zName uintptr 43132 43133 if argc != 2 { 43134 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43135 ts+25953, 0)) 43136 return TCL_ERROR 43137 } 43138 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43139 if i < 0 { 43140 return TCL_ERROR 43141 } 43142 if !(threadset[i].Fbusy != 0) { 43143 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 43144 return TCL_ERROR 43145 } 43146 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 43147 zName = sqlite3.Xsqlite3ErrName(tls, threadset[i].Frc) 43148 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, zName, 0)) 43149 return TCL_OK 43150 } 43151 43152 func tcl_thread_error(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43153 bp := tls.Alloc(64) 43154 defer tls.Free(64) 43155 43156 var i int32 43157 43158 if argc != 2 { 43159 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43160 ts+25953, 0)) 43161 return TCL_ERROR 43162 } 43163 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43164 if i < 0 { 43165 return TCL_ERROR 43166 } 43167 if !(threadset[i].Fbusy != 0) { 43168 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 43169 return TCL_ERROR 43170 } 43171 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 43172 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, threadset[i].FzErr, 0)) 43173 return TCL_OK 43174 } 43175 43176 func do_compile(tls *libc.TLS, p uintptr) { 43177 if (*Thread)(unsafe.Pointer(p)).Fdb == uintptr(0) { 43178 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+26005) 43179 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 43180 return 43181 } 43182 if (*Thread)(unsafe.Pointer(p)).FpStmt != 0 { 43183 sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 43184 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 43185 } 43186 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_prepare(tls, (*Thread)(unsafe.Pointer(p)).Fdb, (*Thread)(unsafe.Pointer(p)).FzArg, -1, p+48, uintptr(0)) 43187 } 43188 43189 func tcl_thread_compile(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43190 bp := tls.Alloc(56) 43191 defer tls.Free(56) 43192 43193 var i int32 43194 if argc != 3 { 43195 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43196 ts+26025, 0)) 43197 return TCL_ERROR 43198 } 43199 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43200 if i < 0 { 43201 return TCL_ERROR 43202 } 43203 if !(threadset[i].Fbusy != 0) { 43204 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 43205 return TCL_ERROR 43206 } 43207 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 43208 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_compile})) 43209 sqlite3.Xsqlite3_free(tls, threadset[i].FzArg) 43210 threadset[i].FzArg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 43211 test_barrier(tls) 43212 threadset[i].Fopnum++ 43213 return TCL_OK 43214 } 43215 43216 func do_step(tls *libc.TLS, p uintptr) { 43217 var i int32 43218 if (*Thread)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 43219 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+26033) 43220 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 43221 return 43222 } 43223 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_step(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 43224 if (*Thread)(unsafe.Pointer(p)).Frc == SQLITE_ROW { 43225 (*Thread)(unsafe.Pointer(p)).Fargc = sqlite3.Xsqlite3_column_count(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 43226 for i = 0; i < sqlite3.Xsqlite3_data_count(tls, (*Thread)(unsafe.Pointer(p)).FpStmt); i++ { 43227 *(*uintptr)(unsafe.Pointer(p + 80 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_text(tls, (*Thread)(unsafe.Pointer(p)).FpStmt, i) 43228 } 43229 for i = 0; i < (*Thread)(unsafe.Pointer(p)).Fargc; i++ { 43230 *(*uintptr)(unsafe.Pointer(p + 880 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_name(tls, (*Thread)(unsafe.Pointer(p)).FpStmt, i) 43231 } 43232 } 43233 } 43234 43235 func tcl_thread_step(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43236 bp := tls.Alloc(48) 43237 defer tls.Free(48) 43238 43239 var i int32 43240 if argc != 2 { 43241 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43242 ts+26062, 0)) 43243 return TCL_ERROR 43244 } 43245 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43246 if i < 0 { 43247 return TCL_ERROR 43248 } 43249 if !(threadset[i].Fbusy != 0) { 43250 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 43251 return TCL_ERROR 43252 } 43253 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 43254 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_step})) 43255 test_barrier(tls) 43256 threadset[i].Fopnum++ 43257 return TCL_OK 43258 } 43259 43260 func do_finalize(tls *libc.TLS, p uintptr) { 43261 if (*Thread)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 43262 (*Thread)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+26033) 43263 (*Thread)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 43264 return 43265 } 43266 (*Thread)(unsafe.Pointer(p)).Frc = sqlite3.Xsqlite3_finalize(tls, (*Thread)(unsafe.Pointer(p)).FpStmt) 43267 (*Thread)(unsafe.Pointer(p)).FpStmt = uintptr(0) 43268 } 43269 43270 func tcl_thread_finalize(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43271 bp := tls.Alloc(48) 43272 defer tls.Free(48) 43273 43274 var i int32 43275 if argc != 2 { 43276 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43277 ts+26062, 0)) 43278 return TCL_ERROR 43279 } 43280 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43281 if i < 0 { 43282 return TCL_ERROR 43283 } 43284 if !(threadset[i].Fbusy != 0) { 43285 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 43286 return TCL_ERROR 43287 } 43288 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 43289 threadset[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_finalize})) 43290 sqlite3.Xsqlite3_free(tls, threadset[i].FzArg) 43291 threadset[i].FzArg = uintptr(0) 43292 test_barrier(tls) 43293 threadset[i].Fopnum++ 43294 return TCL_OK 43295 } 43296 43297 func tcl_thread_swap(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43298 bp := tls.Alloc(64) 43299 defer tls.Free(64) 43300 43301 var i int32 43302 var j int32 43303 var temp uintptr 43304 if argc != 3 { 43305 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43306 ts+26067, 0)) 43307 return TCL_ERROR 43308 } 43309 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43310 if i < 0 { 43311 return TCL_ERROR 43312 } 43313 if !(threadset[i].Fbusy != 0) { 43314 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 43315 return TCL_ERROR 43316 } 43317 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 43318 j = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 43319 if j < 0 { 43320 return TCL_ERROR 43321 } 43322 if !(threadset[j].Fbusy != 0) { 43323 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25957, 0)) 43324 return TCL_ERROR 43325 } 43326 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(j)*1680) 43327 temp = threadset[i].Fdb 43328 threadset[i].Fdb = threadset[j].Fdb 43329 threadset[j].Fdb = temp 43330 return TCL_OK 43331 } 43332 43333 func tcl_thread_db_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43334 bp := tls.Alloc(164) 43335 defer tls.Free(164) 43336 43337 var i int32 43338 43339 if argc != 2 { 43340 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43341 ts+25953, 0)) 43342 return TCL_ERROR 43343 } 43344 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43345 if i < 0 { 43346 return TCL_ERROR 43347 } 43348 if !(threadset[i].Fbusy != 0) { 43349 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 43350 return TCL_ERROR 43351 } 43352 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 43353 sqlite3TestMakePointerStr(tls, interp, bp+64, threadset[i].Fdb) 43354 threadset[i].Fdb = uintptr(0) 43355 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+64, uintptr(0))) 43356 return TCL_OK 43357 } 43358 43359 func tcl_thread_db_put(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43360 bp := tls.Alloc(48) 43361 defer tls.Free(48) 43362 43363 var i int32 43364 if argc != 3 { 43365 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43366 ts+26076, 0)) 43367 return TCL_ERROR 43368 } 43369 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43370 if i < 0 { 43371 return TCL_ERROR 43372 } 43373 if !(threadset[i].Fbusy != 0) { 43374 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 43375 return TCL_ERROR 43376 } 43377 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 43378 43379 threadset[i].Fdb = sqlite3TestTextToPtr(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 43380 return TCL_OK 43381 } 43382 43383 func tcl_thread_stmt_get(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 43384 bp := tls.Alloc(164) 43385 defer tls.Free(164) 43386 43387 var i int32 43388 43389 if argc != 2 { 43390 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 43391 ts+25953, 0)) 43392 return TCL_ERROR 43393 } 43394 i = parse_thread_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 43395 if i < 0 { 43396 return TCL_ERROR 43397 } 43398 if !(threadset[i].Fbusy != 0) { 43399 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 43400 return TCL_ERROR 43401 } 43402 test_thread_wait(tls, uintptr(unsafe.Pointer(&threadset))+uintptr(i)*1680) 43403 sqlite3TestMakePointerStr(tls, interp, bp+64, threadset[i].FpStmt) 43404 threadset[i].FpStmt = uintptr(0) 43405 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, bp+64, uintptr(0))) 43406 return TCL_OK 43407 } 43408 43409 func Sqlitetest4_Init(tls *libc.TLS, interp uintptr) int32 { 43410 var i int32 43411 43412 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd4))/uint64(unsafe.Sizeof(struct { 43413 FzName uintptr 43414 FxProc uintptr 43415 }{})); i++ { 43416 tcl.XTcl_CreateCommand(tls, interp, aCmd4[i].FzName, aCmd4[i].FxProc, uintptr(0), uintptr(0)) 43417 } 43418 return TCL_OK 43419 } 43420 43421 var aCmd4 = [15]struct { 43422 FzName uintptr 43423 FxProc uintptr 43424 }{ 43425 {FzName: ts + 26083, FxProc: 0}, 43426 {FzName: ts + 26097, FxProc: 0}, 43427 {FzName: ts + 26109, FxProc: 0}, 43428 {FzName: ts + 26121, FxProc: 0}, 43429 {FzName: ts + 26133, FxProc: 0}, 43430 {FzName: ts + 26145, FxProc: 0}, 43431 {FzName: ts + 26160, FxProc: 0}, 43432 {FzName: ts + 26174, FxProc: 0}, 43433 {FzName: ts + 26187, FxProc: 0}, 43434 {FzName: ts + 26202, FxProc: 0}, 43435 {FzName: ts + 26214, FxProc: 0}, 43436 {FzName: ts + 26230, FxProc: 0}, 43437 {FzName: ts + 26242, FxProc: 0}, 43438 {FzName: ts + 26256, FxProc: 0}, 43439 {FzName: ts + 26270, FxProc: 0}, 43440 } 43441 43442 func binarize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 43443 bp := tls.Alloc(4) 43444 defer tls.Free(4) 43445 43446 var bytes uintptr 43447 var pRet uintptr 43448 43449 bytes = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 43450 pRet = tcl.XTcl_NewByteArrayObj(tls, bytes, *(*int32)(unsafe.Pointer(bp))+1) 43451 tcl.XTcl_SetObjResult(tls, interp, pRet) 43452 return TCL_OK 43453 } 43454 43455 func test_value_overhead(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 43456 bp := tls.Alloc(96) 43457 defer tls.Free(96) 43458 43459 var i int32 43460 43461 if objc != 3 { 43462 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 43463 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), ts+26286, 0)) 43464 return TCL_ERROR 43465 } 43466 43467 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+32) != 0 { 43468 return TCL_ERROR 43469 } 43470 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+36) != 0 { 43471 return TCL_ERROR 43472 } 43473 43474 (*Mem)(unsafe.Pointer(bp + 40)).Fflags = u16(MEM_Str | MEM_Term | MEM_Static) 43475 (*Mem)(unsafe.Pointer(bp + 40)).Fz = ts + 26313 43476 (*Mem)(unsafe.Pointer(bp + 40)).Fenc = u8(SQLITE_UTF8) 43477 43478 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 32)); i++ { 43479 if *(*int32)(unsafe.Pointer(bp + 36)) != 0 { 43480 sqlite3.Xsqlite3_value_text(tls, bp+40) 43481 } 43482 } 43483 43484 return TCL_OK 43485 } 43486 43487 func name_to_enc(tls *libc.TLS, interp uintptr, pObj uintptr) u8 { 43488 bp := tls.Alloc(104) 43489 defer tls.Free(104) 43490 43491 *(*[5]EncName)(unsafe.Pointer(bp + 24)) = [5]EncName{ 43492 {FzName: ts + 26325, Fenc: u8(SQLITE_UTF8)}, 43493 {FzName: ts + 26330, Fenc: u8(SQLITE_UTF16LE)}, 43494 {FzName: ts + 26338, Fenc: u8(SQLITE_UTF16BE)}, 43495 {FzName: ts + 26346, Fenc: u8(SQLITE_UTF16)}, 43496 {}, 43497 } 43498 var pEnc uintptr 43499 var z uintptr = tcl.XTcl_GetString(tls, pObj) 43500 for pEnc = bp + 24; (*EncName)(unsafe.Pointer(pEnc)).FzName != 0; pEnc += 16 { 43501 if 0 == sqlite3.Xsqlite3StrICmp(tls, z, (*EncName)(unsafe.Pointer(pEnc)).FzName) { 43502 break 43503 } 43504 } 43505 if !(int32((*EncName)(unsafe.Pointer(pEnc)).Fenc) != 0) { 43506 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+26352, z, 0)) 43507 } 43508 if int32((*EncName)(unsafe.Pointer(pEnc)).Fenc) == SQLITE_UTF16 { 43509 return u8(SQLITE_UTF16LE) 43510 } 43511 return (*EncName)(unsafe.Pointer(pEnc)).Fenc 43512 } 43513 43514 type EncName = struct { 43515 FzName uintptr 43516 Fenc u8 43517 F__ccgo_pad1 [7]byte 43518 } 43519 43520 func test_translate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 43521 bp := tls.Alloc(44) 43522 defer tls.Free(44) 43523 43524 var enc_from u8 43525 var enc_to u8 43526 var pVal uintptr 43527 var z uintptr 43528 43529 var xDel uintptr = uintptr(0) 43530 43531 if objc != 4 && objc != 5 { 43532 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 43533 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv)), uintptr(0)), 43534 ts+26371, 0)) 43535 return TCL_ERROR 43536 } 43537 if objc == 5 { 43538 xDel = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free})) 43539 } 43540 43541 enc_from = name_to_enc(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 43542 if !(enc_from != 0) { 43543 return TCL_ERROR 43544 } 43545 enc_to = name_to_enc(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 43546 if !(enc_to != 0) { 43547 return TCL_ERROR 43548 } 43549 43550 pVal = sqlite3.Xsqlite3ValueNew(tls, uintptr(0)) 43551 43552 if int32(enc_from) == SQLITE_UTF8 { 43553 z = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 43554 if objc == 5 { 43555 z = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+32, z)) 43556 } 43557 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, z, enc_from, xDel) 43558 } else { 43559 z = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+40) 43560 if objc == 5 { 43561 var zTmp uintptr = z 43562 z = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 40))) 43563 libc.X__builtin___memcpy_chk(tls, z, zTmp, uint64(*(*int32)(unsafe.Pointer(bp + 40))), libc.X__builtin_object_size(tls, z, 0)) 43564 } 43565 sqlite3.Xsqlite3ValueSetStr(tls, pVal, -1, z, enc_from, xDel) 43566 } 43567 43568 z = sqlite3.Xsqlite3ValueText(tls, pVal, enc_to) 43569 *(*int32)(unsafe.Pointer(bp + 40)) = sqlite3.Xsqlite3ValueBytes(tls, pVal, enc_to) + func() int32 { 43570 if int32(enc_to) == SQLITE_UTF8 { 43571 return 1 43572 } 43573 return 2 43574 }() 43575 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, z, *(*int32)(unsafe.Pointer(bp + 40)))) 43576 43577 sqlite3.Xsqlite3ValueFree(tls, pVal) 43578 43579 return TCL_OK 43580 } 43581 43582 func test_translate_selftest(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 43583 sqlite3.Xsqlite3UtfSelfTest(tls) 43584 return SQLITE_OK 43585 } 43586 43587 func Sqlitetest5_Init(tls *libc.TLS, interp uintptr) int32 { 43588 var i int32 43589 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd5))/uint64(unsafe.Sizeof(struct { 43590 FzName uintptr 43591 FxProc uintptr 43592 }{})); i++ { 43593 tcl.XTcl_CreateObjCommand(tls, interp, aCmd5[i].FzName, aCmd5[i].FxProc, uintptr(0), uintptr(0)) 43594 } 43595 return SQLITE_OK 43596 } 43597 43598 var aCmd5 = [4]struct { 43599 FzName uintptr 43600 FxProc uintptr 43601 }{ 43602 {FzName: ts + 26406, FxProc: 0}, 43603 {FzName: ts + 26415, FxProc: 0}, 43604 {FzName: ts + 26435, FxProc: 0}, 43605 {FzName: ts + 26450, FxProc: 0}, 43606 } 43607 43608 type CrashFile1 = struct { 43609 FpMethod uintptr 43610 FpRealFile uintptr 43611 FzName uintptr 43612 Fflags int32 43613 F__ccgo_pad1 [4]byte 43614 FzData uintptr 43615 FnData int32 43616 F__ccgo_pad2 [4]byte 43617 FiSize i64 43618 } 43619 43620 type CrashFile = CrashFile1 43621 type CrashGlobal1 = struct { 43622 FpWriteList uintptr 43623 FpWriteListEnd uintptr 43624 FiSectorSize int32 43625 FiDeviceCharacteristics int32 43626 FiCrash int32 43627 FzCrashFile [500]int8 43628 } 43629 43630 type CrashGlobal = CrashGlobal1 43631 type WriteBuffer1 = struct { 43632 FiOffset i64 43633 FnBuf int32 43634 F__ccgo_pad1 [4]byte 43635 FzBuf uintptr 43636 FpFile uintptr 43637 FpNext uintptr 43638 } 43639 43640 type WriteBuffer = WriteBuffer1 43641 43642 var g = CrashGlobal{FiSectorSize: SQLITE_DEFAULT_SECTOR_SIZE} 43643 43644 var sqlite3CrashTestEnable int32 = 0 43645 43646 func crash_malloc(tls *libc.TLS, nByte int32) uintptr { 43647 return tcl.XTcl_AttemptAlloc(tls, uint32(size_t(nByte))) 43648 } 43649 43650 func crash_free(tls *libc.TLS, p uintptr) { 43651 tcl.XTcl_Free(tls, p) 43652 } 43653 43654 func crash_realloc(tls *libc.TLS, p uintptr, n int32) uintptr { 43655 return tcl.XTcl_AttemptRealloc(tls, p, uint32(size_t(n))) 43656 } 43657 43658 func writeDbFile(tls *libc.TLS, p uintptr, z uintptr, iAmt i64, iOff i64) int32 { 43659 var rc int32 = SQLITE_OK 43660 var iSkip int32 = 0 43661 if iAmt-i64(iSkip) > int64(0) { 43662 rc = sqlite3.Xsqlite3OsWrite(tls, (*CrashFile)(unsafe.Pointer(p)).FpRealFile, z+uintptr(iSkip), int32(iAmt-i64(iSkip)), iOff+i64(iSkip)) 43663 } 43664 return rc 43665 } 43666 43667 func writeListSync(tls *libc.TLS, pFile uintptr, isCrash int32) int32 { 43668 bp := tls.Alloc(16) 43669 defer tls.Free(16) 43670 43671 var rc int32 = SQLITE_OK 43672 var iDc int32 = g.FiDeviceCharacteristics 43673 var pWrite uintptr 43674 var ppPtr uintptr 43675 43676 var pFinal uintptr = uintptr(0) 43677 if !(isCrash != 0) { 43678 for pWrite = g.FpWriteList; pWrite != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 43679 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile == pFile { 43680 pFinal = pWrite 43681 } 43682 } 43683 } else if iDc&(SQLITE_IOCAP_SEQUENTIAL|SQLITE_IOCAP_SAFE_APPEND) != 0 { 43684 var nWrite int32 = 0 43685 43686 for pWrite = g.FpWriteList; pWrite != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 43687 nWrite++ 43688 } 43689 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(int32(0))), bp) 43690 *(*int32)(unsafe.Pointer(bp)) = func() int32 { 43691 if *(*int32)(unsafe.Pointer(bp)) < 0 { 43692 return -1 * *(*int32)(unsafe.Pointer(bp)) 43693 } 43694 return *(*int32)(unsafe.Pointer(bp)) 43695 }() % nWrite 43696 for pWrite = g.FpWriteList; *(*int32)(unsafe.Pointer(bp)) > 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 43697 *(*int32)(unsafe.Pointer(bp))-- 43698 } 43699 pFinal = pWrite 43700 } 43701 43702 ppPtr = uintptr(unsafe.Pointer(&g)) 43703 for pWrite = *(*uintptr)(unsafe.Pointer(ppPtr)); rc == SQLITE_OK && pWrite != 0; pWrite = *(*uintptr)(unsafe.Pointer(ppPtr)) { 43704 var pRealFile uintptr = (*CrashFile)(unsafe.Pointer((*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile)).FpRealFile 43705 43706 var eAction int32 = 0 43707 if !(isCrash != 0) { 43708 eAction = 2 43709 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile == pFile || iDc&SQLITE_IOCAP_SEQUENTIAL != 0 { 43710 eAction = 1 43711 } 43712 } else { 43713 sqlite3.Xsqlite3_randomness(tls, 1, bp+4) 43714 43715 if iDc&SQLITE_IOCAP_ATOMIC != 0 || (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf == uintptr(0) { 43716 *(*int8)(unsafe.Pointer(bp + 4)) &= int8(0x01) 43717 } 43718 43719 if iDc&SQLITE_IOCAP_SEQUENTIAL != 0 && pWrite != pFinal { 43720 *(*int8)(unsafe.Pointer(bp + 4)) = int8(0) 43721 } 43722 43723 if iDc&SQLITE_IOCAP_SAFE_APPEND != 0 && (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf != 0 { 43724 sqlite3.Xsqlite3OsFileSize(tls, pRealFile, bp+8) 43725 if *(*i64)(unsafe.Pointer(bp + 8)) == (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset { 43726 *(*int8)(unsafe.Pointer(bp + 4)) = int8(0) 43727 } 43728 } 43729 43730 if int32(*(*int8)(unsafe.Pointer(bp + 4)))&0x06 == 0x06 { 43731 eAction = 3 43732 } else { 43733 eAction = func() int32 { 43734 if int32(*(*int8)(unsafe.Pointer(bp + 4)))&0x01 != 0 { 43735 return 2 43736 } 43737 return 1 43738 }() 43739 } 43740 } 43741 43742 switch eAction { 43743 case 1: 43744 { 43745 if (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf != 0 { 43746 rc = writeDbFile(tls, 43747 (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile, (*WriteBuffer)(unsafe.Pointer(pWrite)).FzBuf, int64((*WriteBuffer)(unsafe.Pointer(pWrite)).FnBuf), (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset) 43748 } else { 43749 rc = sqlite3.Xsqlite3OsTruncate(tls, pRealFile, (*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset) 43750 } 43751 *(*uintptr)(unsafe.Pointer(ppPtr)) = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext 43752 crash_free(tls, pWrite) 43753 break 43754 43755 } 43756 case 2: 43757 { 43758 ppPtr = pWrite + 32 43759 break 43760 43761 } 43762 case 3: 43763 { 43764 var zGarbage uintptr 43765 var iFirst int32 = int32((*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset / i64(g.FiSectorSize)) 43766 var iLast int32 = int32(((*WriteBuffer)(unsafe.Pointer(pWrite)).FiOffset + i64((*WriteBuffer)(unsafe.Pointer(pWrite)).FnBuf) - int64(1)) / i64(g.FiSectorSize)) 43767 43768 zGarbage = crash_malloc(tls, g.FiSectorSize) 43769 if zGarbage != 0 { 43770 var i sqlite3_int64 43771 for i = sqlite3_int64(iFirst); rc == SQLITE_OK && i <= sqlite3_int64(iLast); i++ { 43772 sqlite3.Xsqlite3_randomness(tls, g.FiSectorSize, zGarbage) 43773 rc = writeDbFile(tls, 43774 (*WriteBuffer)(unsafe.Pointer(pWrite)).FpFile, zGarbage, int64(g.FiSectorSize), i*sqlite3_int64(g.FiSectorSize)) 43775 } 43776 crash_free(tls, zGarbage) 43777 } else { 43778 rc = SQLITE_NOMEM 43779 } 43780 43781 ppPtr = pWrite + 32 43782 break 43783 43784 } 43785 43786 default: 43787 } 43788 43789 if pWrite == pFinal { 43790 break 43791 } 43792 } 43793 43794 if rc == SQLITE_OK && isCrash != 0 { 43795 libc.Xexit(tls, -1) 43796 } 43797 43798 for pWrite = g.FpWriteList; pWrite != 0 && (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext != 0; pWrite = (*WriteBuffer)(unsafe.Pointer(pWrite)).FpNext { 43799 } 43800 g.FpWriteListEnd = pWrite 43801 43802 return rc 43803 } 43804 43805 func writeListAppend(tls *libc.TLS, pFile uintptr, iOffset sqlite3_int64, zBuf uintptr, nBuf int32) int32 { 43806 var pNew uintptr 43807 43808 pNew = crash_malloc(tls, int32(uint64(unsafe.Sizeof(WriteBuffer{}))+uint64(nBuf))) 43809 if pNew == uintptr(0) { 43810 libc.Xfprintf(tls, libc.X__stderrp, ts+26469, 0) 43811 } 43812 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(WriteBuffer{}))+uint64(nBuf), libc.X__builtin_object_size(tls, pNew, 0)) 43813 (*WriteBuffer)(unsafe.Pointer(pNew)).FiOffset = iOffset 43814 (*WriteBuffer)(unsafe.Pointer(pNew)).FnBuf = nBuf 43815 (*WriteBuffer)(unsafe.Pointer(pNew)).FpFile = pFile 43816 if zBuf != 0 { 43817 (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf = pNew + 1*40 43818 libc.X__builtin___memcpy_chk(tls, (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf, zBuf, uint64(nBuf), libc.X__builtin_object_size(tls, (*WriteBuffer)(unsafe.Pointer(pNew)).FzBuf, 0)) 43819 } 43820 43821 if g.FpWriteList != 0 { 43822 (*WriteBuffer)(unsafe.Pointer(g.FpWriteListEnd)).FpNext = pNew 43823 } else { 43824 g.FpWriteList = pNew 43825 } 43826 g.FpWriteListEnd = pNew 43827 43828 return SQLITE_OK 43829 } 43830 43831 func cfClose(tls *libc.TLS, pFile uintptr) int32 { 43832 var pCrash uintptr = pFile 43833 writeListSync(tls, pCrash, 0) 43834 sqlite3.Xsqlite3OsClose(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FpRealFile) 43835 return SQLITE_OK 43836 } 43837 43838 func cfRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 43839 var pCrash uintptr = pFile 43840 var nCopy int32 = func() int32 { 43841 if i64(iAmt) < (*CrashFile)(unsafe.Pointer(pCrash)).FiSize-iOfst { 43842 return int32(i64(iAmt)) 43843 } 43844 return int32((*CrashFile)(unsafe.Pointer(pCrash)).FiSize - iOfst) 43845 }() 43846 43847 if nCopy > 0 { 43848 libc.X__builtin___memcpy_chk(tls, zBuf, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), uint64(nCopy), libc.X__builtin_object_size(tls, zBuf, 0)) 43849 } 43850 43851 if nCopy < iAmt { 43852 return SQLITE_IOERR | int32(2)<<8 43853 } 43854 43855 return SQLITE_OK 43856 } 43857 43858 func cfWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 43859 var pCrash uintptr = pFile 43860 if sqlite_int64(iAmt)+iOfst > (*CrashFile)(unsafe.Pointer(pCrash)).FiSize { 43861 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(sqlite_int64(iAmt) + iOfst)) 43862 } 43863 for (*CrashFile)(unsafe.Pointer(pCrash)).FiSize > i64((*CrashFile)(unsafe.Pointer(pCrash)).FnData) { 43864 var zNew uintptr 43865 var nNew int32 = (*CrashFile)(unsafe.Pointer(pCrash)).FnData*2 + 4096 43866 zNew = crash_realloc(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData, nNew) 43867 if !(zNew != 0) { 43868 return SQLITE_NOMEM 43869 } 43870 libc.X__builtin___memset_chk(tls, zNew+uintptr((*CrashFile)(unsafe.Pointer(pCrash)).FnData), 0, uint64(nNew-(*CrashFile)(unsafe.Pointer(pCrash)).FnData), libc.X__builtin_object_size(tls, zNew+uintptr((*CrashFile)(unsafe.Pointer(pCrash)).FnData), 0)) 43871 (*CrashFile)(unsafe.Pointer(pCrash)).FnData = nNew 43872 (*CrashFile)(unsafe.Pointer(pCrash)).FzData = zNew 43873 } 43874 libc.X__builtin___memcpy_chk(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), zBuf, uint64(iAmt), libc.X__builtin_object_size(tls, (*CrashFile)(unsafe.Pointer(pCrash)).FzData+uintptr(iOfst), 0)) 43875 return writeListAppend(tls, pFile, iOfst, zBuf, iAmt) 43876 } 43877 43878 func cfTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 43879 var pCrash uintptr = pFile 43880 43881 if (*CrashFile)(unsafe.Pointer(pCrash)).FiSize > size { 43882 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(size)) 43883 } 43884 return writeListAppend(tls, pFile, size, uintptr(0), 0) 43885 } 43886 43887 func cfSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 43888 var pCrash uintptr = pFile 43889 var isCrash int32 = 0 43890 43891 var zName uintptr = (*CrashFile)(unsafe.Pointer(pCrash)).FzName 43892 var zCrashFile uintptr = uintptr(unsafe.Pointer(&g)) + 28 43893 var nName int32 = int32(libc.Xstrlen(tls, zName)) 43894 var nCrashFile int32 = int32(libc.Xstrlen(tls, zCrashFile)) 43895 43896 if nCrashFile > 0 && int32(*(*int8)(unsafe.Pointer(zCrashFile + uintptr(nCrashFile-1)))) == '*' { 43897 nCrashFile-- 43898 if nName > nCrashFile { 43899 nName = nCrashFile 43900 } 43901 } 43902 43903 if nName == nCrashFile && 0 == libc.Xmemcmp(tls, zName, zCrashFile, uint64(nName)) { 43904 if libc.PreDecInt32(&g.FiCrash, 1) == 0 { 43905 isCrash = 1 43906 } 43907 } 43908 43909 return writeListSync(tls, pCrash, isCrash) 43910 } 43911 43912 func cfFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 43913 var pCrash uintptr = pFile 43914 *(*sqlite_int64)(unsafe.Pointer(pSize)) = (*CrashFile)(unsafe.Pointer(pCrash)).FiSize 43915 return SQLITE_OK 43916 } 43917 43918 func cfLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 43919 return sqlite3.Xsqlite3OsLock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, eLock) 43920 } 43921 43922 func cfUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 43923 return sqlite3.Xsqlite3OsUnlock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, eLock) 43924 } 43925 43926 func cfCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 43927 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, pResOut) 43928 } 43929 43930 func cfFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 43931 if op == SQLITE_FCNTL_SIZE_HINT { 43932 var pCrash uintptr = pFile 43933 var nByte i64 = *(*i64)(unsafe.Pointer(pArg)) 43934 if nByte > (*CrashFile)(unsafe.Pointer(pCrash)).FiSize { 43935 if SQLITE_OK == writeListAppend(tls, pFile, nByte, uintptr(0), 0) { 43936 (*CrashFile)(unsafe.Pointer(pCrash)).FiSize = i64(int32(nByte)) 43937 } 43938 } 43939 return SQLITE_OK 43940 } 43941 return sqlite3.Xsqlite3OsFileControl(tls, (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile, op, pArg) 43942 } 43943 43944 func cfSectorSize(tls *libc.TLS, pFile uintptr) int32 { 43945 return g.FiSectorSize 43946 } 43947 43948 func cfDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 43949 return g.FiDeviceCharacteristics 43950 } 43951 43952 func cfShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 43953 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 43954 return (*struct { 43955 f func(*libc.TLS, uintptr, int32, int32, int32) int32 43956 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmLock})).f(tls, pReal, ofst, n, flags) 43957 } 43958 43959 func cfShmBarrier(tls *libc.TLS, pFile uintptr) { 43960 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 43961 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmBarrier})).f(tls, pReal) 43962 } 43963 43964 func cfShmUnmap(tls *libc.TLS, pFile uintptr, delFlag int32) int32 { 43965 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 43966 return (*struct { 43967 f func(*libc.TLS, uintptr, int32) int32 43968 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmUnmap})).f(tls, pReal, delFlag) 43969 } 43970 43971 func cfShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, sz int32, w int32, pp uintptr) int32 { 43972 var pReal uintptr = (*CrashFile)(unsafe.Pointer(pFile)).FpRealFile 43973 return (*struct { 43974 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 43975 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmMap})).f(tls, pReal, iRegion, sz, w, pp) 43976 } 43977 43978 var CrashFileVtab = sqlite3_io_methods{ 43979 FiVersion: 2, 43980 FxClose: 0, 43981 FxRead: 0, 43982 FxWrite: 0, 43983 FxTruncate: 0, 43984 FxSync: 0, 43985 FxFileSize: 0, 43986 FxLock: 0, 43987 FxUnlock: 0, 43988 FxCheckReservedLock: 0, 43989 FxFileControl: 0, 43990 FxSectorSize: 0, 43991 FxDeviceCharacteristics: 0, 43992 FxShmMap: 0, 43993 FxShmLock: 0, 43994 FxShmBarrier: 0, 43995 FxShmUnmap: 0, 43996 } 43997 43998 type crashAppData = struct{ FpOrig uintptr } 43999 44000 func cfOpen(tls *libc.TLS, pCfVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 44001 bp := tls.Alloc(8) 44002 defer tls.Free(8) 44003 44004 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 44005 var rc int32 44006 var pWrapper uintptr = pFile 44007 var pReal uintptr = pWrapper + 1*56 44008 44009 libc.X__builtin___memset_chk(tls, pWrapper, 0, uint64(unsafe.Sizeof(CrashFile{})), libc.X__builtin_object_size(tls, pWrapper, 0)) 44010 rc = sqlite3.Xsqlite3OsOpen(tls, pVfs, zName, pReal, flags, pOutFlags) 44011 44012 if rc == SQLITE_OK { 44013 (*CrashFile)(unsafe.Pointer(pWrapper)).FpMethod = uintptr(unsafe.Pointer(&CrashFileVtab)) 44014 (*CrashFile)(unsafe.Pointer(pWrapper)).FzName = zName 44015 (*CrashFile)(unsafe.Pointer(pWrapper)).FpRealFile = pReal 44016 rc = sqlite3.Xsqlite3OsFileSize(tls, pReal, bp) 44017 (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize = i64(int32(*(*i64)(unsafe.Pointer(bp)))) 44018 (*CrashFile)(unsafe.Pointer(pWrapper)).Fflags = flags 44019 } 44020 if rc == SQLITE_OK { 44021 (*CrashFile)(unsafe.Pointer(pWrapper)).FnData = int32(int64(4096) + (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize) 44022 (*CrashFile)(unsafe.Pointer(pWrapper)).FzData = crash_malloc(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FnData) 44023 if (*CrashFile)(unsafe.Pointer(pWrapper)).FzData != 0 { 44024 var iOff i64 44025 44026 libc.X__builtin___memset_chk(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData, 0, uint64((*CrashFile)(unsafe.Pointer(pWrapper)).FnData), libc.X__builtin_object_size(tls, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData, 0)) 44027 for iOff = int64(0); iOff < (*CrashFile)(unsafe.Pointer(pWrapper)).FiSize; iOff = iOff + int64(512) { 44028 var nRead int32 = int32((*CrashFile)(unsafe.Pointer(pWrapper)).FiSize - iOff) 44029 if nRead > 512 { 44030 nRead = 512 44031 } 44032 rc = sqlite3.Xsqlite3OsRead(tls, pReal, (*CrashFile)(unsafe.Pointer(pWrapper)).FzData+uintptr(iOff), nRead, iOff) 44033 } 44034 } else { 44035 rc = SQLITE_NOMEM 44036 } 44037 } 44038 if rc != SQLITE_OK && (*CrashFile)(unsafe.Pointer(pWrapper)).FpMethod != 0 { 44039 sqlite3.Xsqlite3OsClose(tls, pFile) 44040 } 44041 return rc 44042 } 44043 44044 func cfDelete(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, dirSync int32) int32 { 44045 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 44046 return (*struct { 44047 f func(*libc.TLS, uintptr, uintptr, int32) int32 44048 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDelete})).f(tls, pVfs, zPath, dirSync) 44049 } 44050 44051 func cfAccess(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 44052 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 44053 return (*struct { 44054 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 44055 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxAccess})).f(tls, pVfs, zPath, flags, pResOut) 44056 } 44057 44058 func cfFullPathname(tls *libc.TLS, pCfVfs uintptr, zPath uintptr, nPathOut int32, zPathOut uintptr) int32 { 44059 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 44060 return (*struct { 44061 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 44062 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxFullPathname})).f(tls, pVfs, zPath, nPathOut, zPathOut) 44063 } 44064 44065 func cfDlOpen(tls *libc.TLS, pCfVfs uintptr, zPath uintptr) uintptr { 44066 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 44067 return (*struct { 44068 f func(*libc.TLS, uintptr, uintptr) uintptr 44069 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlOpen})).f(tls, pVfs, zPath) 44070 } 44071 44072 func cfDlError(tls *libc.TLS, pCfVfs uintptr, nByte int32, zErrMsg uintptr) { 44073 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 44074 (*struct { 44075 f func(*libc.TLS, uintptr, int32, uintptr) 44076 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlError})).f(tls, pVfs, nByte, zErrMsg) 44077 } 44078 44079 func cfDlSym(tls *libc.TLS, pCfVfs uintptr, pH uintptr, zSym uintptr) uintptr { 44080 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 44081 return (*struct { 44082 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 44083 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlSym})).f(tls, pVfs, pH, zSym) 44084 } 44085 44086 func cfDlClose(tls *libc.TLS, pCfVfs uintptr, pHandle uintptr) { 44087 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 44088 (*struct { 44089 f func(*libc.TLS, uintptr, uintptr) 44090 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxDlClose})).f(tls, pVfs, pHandle) 44091 } 44092 44093 func cfRandomness(tls *libc.TLS, pCfVfs uintptr, nByte int32, zBufOut uintptr) int32 { 44094 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 44095 return (*struct { 44096 f func(*libc.TLS, uintptr, int32, uintptr) int32 44097 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxRandomness})).f(tls, pVfs, nByte, zBufOut) 44098 } 44099 44100 func cfSleep(tls *libc.TLS, pCfVfs uintptr, nMicro int32) int32 { 44101 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 44102 return (*struct { 44103 f func(*libc.TLS, uintptr, int32) int32 44104 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSleep})).f(tls, pVfs, nMicro) 44105 } 44106 44107 func cfCurrentTime(tls *libc.TLS, pCfVfs uintptr, pTimeOut uintptr) int32 { 44108 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 44109 return (*struct { 44110 f func(*libc.TLS, uintptr, uintptr) int32 44111 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxCurrentTime})).f(tls, pVfs, pTimeOut) 44112 } 44113 44114 func cfGetLastError(tls *libc.TLS, pCfVfs uintptr, n int32, z uintptr) int32 { 44115 var pVfs uintptr = (*sqlite3_vfs)(unsafe.Pointer(pCfVfs)).FpAppData 44116 return (*struct { 44117 f func(*libc.TLS, uintptr, int32, uintptr) int32 44118 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetLastError})).f(tls, pVfs, n, z) 44119 } 44120 44121 func processDevSymArgs(tls *libc.TLS, interp uintptr, objc int32, objv uintptr, piDeviceChar uintptr, piSectorSize uintptr) int32 { 44122 bp := tls.Alloc(316) 44123 defer tls.Free(316) 44124 44125 *(*[14]DeviceFlag)(unsafe.Pointer(bp + 88)) = [14]DeviceFlag{ 44126 {FzName: ts + 26507, FiValue: SQLITE_IOCAP_ATOMIC}, 44127 {FzName: ts + 26514, FiValue: SQLITE_IOCAP_ATOMIC512}, 44128 {FzName: ts + 26524, FiValue: SQLITE_IOCAP_ATOMIC1K}, 44129 {FzName: ts + 26533, FiValue: SQLITE_IOCAP_ATOMIC2K}, 44130 {FzName: ts + 26542, FiValue: SQLITE_IOCAP_ATOMIC4K}, 44131 {FzName: ts + 26551, FiValue: SQLITE_IOCAP_ATOMIC8K}, 44132 {FzName: ts + 26560, FiValue: SQLITE_IOCAP_ATOMIC16K}, 44133 {FzName: ts + 26570, FiValue: SQLITE_IOCAP_ATOMIC32K}, 44134 {FzName: ts + 26580, FiValue: SQLITE_IOCAP_ATOMIC64K}, 44135 {FzName: ts + 26590, FiValue: SQLITE_IOCAP_SEQUENTIAL}, 44136 {FzName: ts + 26601, FiValue: SQLITE_IOCAP_SAFE_APPEND}, 44137 {FzName: ts + 26613, FiValue: SQLITE_IOCAP_POWERSAFE_OVERWRITE}, 44138 {FzName: ts + 26633, FiValue: SQLITE_IOCAP_BATCH_ATOMIC}, 44139 {}, 44140 } 44141 var i int32 44142 var iDc int32 = 0 44143 *(*int32)(unsafe.Pointer(bp + 68)) = 0 44144 var setSectorsize int32 = 0 44145 var setDeviceChar int32 = 0 44146 44147 for i = 0; i < objc; i = i + 2 { 44148 var zOpt uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp+64) 44149 44150 if (*(*int32)(unsafe.Pointer(bp + 64)) > 11 || *(*int32)(unsafe.Pointer(bp + 64)) < 2 || libc.Xstrncmp(tls, ts+26646, zOpt, uint64(*(*int32)(unsafe.Pointer(bp + 64)))) != 0) && 44151 (*(*int32)(unsafe.Pointer(bp + 64)) > 16 || *(*int32)(unsafe.Pointer(bp + 64)) < 2 || libc.Xstrncmp(tls, ts+26658, zOpt, uint64(*(*int32)(unsafe.Pointer(bp + 64)))) != 0) { 44152 tcl.XTcl_AppendResult(tls, interp, 44153 libc.VaList(bp, ts+26675, zOpt, 44154 ts+26689, 0)) 44155 return TCL_ERROR 44156 } 44157 if i == objc-1 { 44158 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+26737, zOpt, ts+11945, 0)) 44159 return TCL_ERROR 44160 } 44161 44162 if int32(*(*int8)(unsafe.Pointer(zOpt + 1))) == 's' { 44163 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+68) != 0 { 44164 return TCL_ERROR 44165 } 44166 setSectorsize = 1 44167 } else { 44168 var j int32 44169 44170 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+72, bp+80) != 0 { 44171 return TCL_ERROR 44172 } 44173 for j = 0; j < *(*int32)(unsafe.Pointer(bp + 72)); j++ { 44174 var rc int32 44175 44176 var pFlag uintptr = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80)) + uintptr(j)*8))) 44177 (*Tcl_Obj)(unsafe.Pointer(pFlag)).FrefCount++ 44178 tcl.XTcl_UtfToLower(tls, tcl.XTcl_GetString(tls, pFlag)) 44179 44180 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 44181 interp, pFlag, bp+88, int32(unsafe.Sizeof(DeviceFlag{})), ts+26768, 0, bp+312) 44182 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 44183 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pFlag)).FrefCount, 1) <= 0 { 44184 tcl.XTclFreeObj(tls, pFlag) 44185 } 44186 } 44187 if rc != 0 { 44188 return TCL_ERROR 44189 } 44190 44191 iDc = iDc | (*DeviceFlag)(unsafe.Pointer(bp+88+uintptr(*(*int32)(unsafe.Pointer(bp + 312)))*16)).FiValue 44192 } 44193 setDeviceChar = 1 44194 } 44195 } 44196 44197 if setDeviceChar != 0 { 44198 *(*int32)(unsafe.Pointer(piDeviceChar)) = iDc 44199 } 44200 if setSectorsize != 0 { 44201 *(*int32)(unsafe.Pointer(piSectorSize)) = *(*int32)(unsafe.Pointer(bp + 68)) 44202 } 44203 44204 return TCL_OK 44205 } 44206 44207 type DeviceFlag = struct { 44208 FzName uintptr 44209 FiValue int32 44210 F__ccgo_pad1 [4]byte 44211 } 44212 44213 func crashNowCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 44214 if objc != 1 { 44215 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 44216 return TCL_ERROR 44217 } 44218 writeListSync(tls, uintptr(0), 1) 44219 44220 return TCL_OK 44221 } 44222 44223 func crashEnableCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 44224 bp := tls.Alloc(8) 44225 defer tls.Free(8) 44226 44227 *(*int32)(unsafe.Pointer(bp + 4)) = 0 44228 44229 if objc != 2 && objc != 3 { 44230 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26781) 44231 return TCL_ERROR 44232 } 44233 44234 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 44235 return TCL_ERROR 44236 } 44237 if objc == 3 && tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 44238 return TCL_ERROR 44239 } 44240 44241 if *(*int32)(unsafe.Pointer(bp)) != 0 && crashVfs.FpAppData != 0 || !(*(*int32)(unsafe.Pointer(bp)) != 0) && !(int32(crashVfs.FpAppData) != 0) { 44242 return TCL_OK 44243 } 44244 44245 if crashVfs.FpAppData == uintptr(0) { 44246 var pOriginalVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 44247 crashVfs.FmxPathname = (*sqlite3_vfs)(unsafe.Pointer(pOriginalVfs)).FmxPathname 44248 crashVfs.FpAppData = pOriginalVfs 44249 crashVfs.FszOsFile = int32(uint64(unsafe.Sizeof(CrashFile{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(pOriginalVfs)).FszOsFile)) 44250 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&crashVfs)), *(*int32)(unsafe.Pointer(bp + 4))) 44251 } else { 44252 crashVfs.FpAppData = uintptr(0) 44253 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&crashVfs))) 44254 } 44255 44256 return TCL_OK 44257 } 44258 44259 var crashVfs = sqlite3_vfs{ 44260 FiVersion: 2, 44261 FzName: ts + 26798, 44262 FxOpen: 0, 44263 FxDelete: 0, 44264 FxAccess: 0, 44265 FxFullPathname: 0, 44266 FxDlOpen: 0, 44267 FxDlError: 0, 44268 FxDlSym: 0, 44269 FxDlClose: 0, 44270 FxRandomness: 0, 44271 FxSleep: 0, 44272 FxCurrentTime: 0, 44273 FxGetLastError: 0, 44274 } 44275 44276 func crashParamsObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 44277 bp := tls.Alloc(48) 44278 defer tls.Free(48) 44279 44280 var zCrashFile uintptr 44281 44282 *(*int32)(unsafe.Pointer(bp + 40)) = -1 44283 *(*int32)(unsafe.Pointer(bp + 44)) = -1 44284 44285 if !(objc < 3) { 44286 goto __1 44287 } 44288 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26804) 44289 goto error 44290 __1: 44291 ; 44292 zCrashFile = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-1)*8)), bp+32) 44293 if !(uint64(*(*int32)(unsafe.Pointer(bp + 32))) >= uint64(unsafe.Sizeof([500]int8{}))) { 44294 goto __2 44295 } 44296 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+26830, zCrashFile, ts+11945, 0)) 44297 goto error 44298 __2: 44299 ; 44300 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(objc-2)*8)), bp+36) != 0) { 44301 goto __3 44302 } 44303 goto error 44304 __3: 44305 ; 44306 if !(processDevSymArgs(tls, interp, objc-3, objv+1*8, bp+40, bp+44) != 0) { 44307 goto __4 44308 } 44309 return TCL_ERROR 44310 __4: 44311 ; 44312 if !(*(*int32)(unsafe.Pointer(bp + 40)) >= 0) { 44313 goto __5 44314 } 44315 g.FiDeviceCharacteristics = *(*int32)(unsafe.Pointer(bp + 40)) 44316 __5: 44317 ; 44318 if !(*(*int32)(unsafe.Pointer(bp + 44)) >= 0) { 44319 goto __6 44320 } 44321 g.FiSectorSize = *(*int32)(unsafe.Pointer(bp + 44)) 44322 __6: 44323 ; 44324 g.FiCrash = *(*int32)(unsafe.Pointer(bp + 36)) 44325 libc.X__builtin___memcpy_chk(tls, uintptr(unsafe.Pointer(&g))+28, zCrashFile, uint64(*(*int32)(unsafe.Pointer(bp + 32))+1), libc.X__builtin_object_size(tls, uintptr(unsafe.Pointer(&g))+28, 0)) 44326 sqlite3CrashTestEnable = 1 44327 return TCL_OK 44328 44329 error: 44330 return TCL_ERROR 44331 } 44332 44333 func devSymObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 44334 bp := tls.Alloc(8) 44335 defer tls.Free(8) 44336 44337 *(*int32)(unsafe.Pointer(bp)) = -1 44338 *(*int32)(unsafe.Pointer(bp + 4)) = -1 44339 44340 if processDevSymArgs(tls, interp, objc-1, objv+1*8, bp, bp+4) != 0 { 44341 return TCL_ERROR 44342 } 44343 devsym_register(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 44344 44345 return TCL_OK 44346 } 44347 44348 func writeCrashObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 44349 bp := tls.Alloc(4) 44350 defer tls.Free(4) 44351 44352 *(*int32)(unsafe.Pointer(bp)) = 0 44353 44354 if objc != 2 { 44355 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26854) 44356 return TCL_ERROR 44357 } 44358 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 44359 return TCL_ERROR 44360 } 44361 44362 devsym_crash_on_write(tls, *(*int32)(unsafe.Pointer(bp))) 44363 return TCL_OK 44364 } 44365 44366 func dsUnregisterObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 44367 if objc != 1 { 44368 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 44369 return TCL_ERROR 44370 } 44371 44372 devsym_unregister(tls) 44373 return TCL_OK 44374 } 44375 44376 func jtObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 44377 bp := tls.Alloc(48) 44378 defer tls.Free(48) 44379 44380 var zParent uintptr = uintptr(0) 44381 44382 if objc != 2 && objc != 3 { 44383 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+26861) 44384 return TCL_ERROR 44385 } 44386 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 44387 if objc == 3 { 44388 if libc.Xstrcmp(tls, zParent, ts+26883) != 0 { 44389 tcl.XTcl_AppendResult(tls, interp, 44390 libc.VaList(bp, ts+11851, zParent, ts+26892, 0)) 44391 return TCL_ERROR 44392 } 44393 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 44394 } 44395 44396 if !(int32(*(*int8)(unsafe.Pointer(zParent))) != 0) { 44397 zParent = uintptr(0) 44398 } 44399 if jt_register(tls, zParent, libc.Bool32(objc == 3)) != 0 { 44400 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+26912, 0)) 44401 return TCL_ERROR 44402 } 44403 44404 return TCL_OK 44405 } 44406 44407 func jtUnregisterObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 44408 if objc != 1 { 44409 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 44410 return TCL_ERROR 44411 } 44412 44413 jt_unregister(tls) 44414 return TCL_OK 44415 } 44416 44417 func Sqlitetest6_Init(tls *libc.TLS, interp uintptr) int32 { 44418 tcl.XTcl_CreateObjCommand(tls, interp, ts+26933, *(*uintptr)(unsafe.Pointer(&struct { 44419 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 44420 }{crashEnableCmd})), uintptr(0), uintptr(0)) 44421 tcl.XTcl_CreateObjCommand(tls, interp, ts+26954, *(*uintptr)(unsafe.Pointer(&struct { 44422 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 44423 }{crashParamsObjCmd})), uintptr(0), uintptr(0)) 44424 tcl.XTcl_CreateObjCommand(tls, interp, ts+26974, *(*uintptr)(unsafe.Pointer(&struct { 44425 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 44426 }{crashNowCmd})), uintptr(0), uintptr(0)) 44427 tcl.XTcl_CreateObjCommand(tls, interp, ts+26992, *(*uintptr)(unsafe.Pointer(&struct { 44428 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 44429 }{devSymObjCmd})), uintptr(0), uintptr(0)) 44430 tcl.XTcl_CreateObjCommand(tls, interp, ts+27016, *(*uintptr)(unsafe.Pointer(&struct { 44431 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 44432 }{writeCrashObjCmd})), uintptr(0), uintptr(0)) 44433 tcl.XTcl_CreateObjCommand(tls, interp, ts+27039, *(*uintptr)(unsafe.Pointer(&struct { 44434 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 44435 }{dsUnregisterObjCmd})), uintptr(0), uintptr(0)) 44436 tcl.XTcl_CreateObjCommand(tls, interp, ts+27057, *(*uintptr)(unsafe.Pointer(&struct { 44437 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 44438 }{jtObjCmd})), uintptr(0), uintptr(0)) 44439 tcl.XTcl_CreateObjCommand(tls, interp, ts+27073, *(*uintptr)(unsafe.Pointer(&struct { 44440 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 44441 }{jtUnregisterObjCmd})), uintptr(0), uintptr(0)) 44442 return TCL_OK 44443 } 44444 44445 type Thread1 = struct { 44446 FzFilename uintptr 44447 FxOp uintptr 44448 FzArg uintptr 44449 Fopnum int32 44450 Fbusy int32 44451 Fcompleted int32 44452 F__ccgo_pad1 [4]byte 44453 Fdb uintptr 44454 FpStmt uintptr 44455 FzErr uintptr 44456 FzStaticErr uintptr 44457 Frc int32 44458 Fargc int32 44459 Fargv [100]uintptr 44460 Fcolv [100]uintptr 44461 FnServer int32 44462 F__ccgo_pad2 [4]byte 44463 } 44464 44465 var threadset1 [26]Thread1 44466 44467 func client_main(tls *libc.TLS, pArg uintptr) uintptr { 44468 var p uintptr = pArg 44469 if (*Thread1)(unsafe.Pointer(p)).Fdb != 0 { 44470 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 44471 } 44472 sqlite3_client_open(tls, (*Thread1)(unsafe.Pointer(p)).FzFilename, p+40) 44473 if SQLITE_OK != sqlite3.Xsqlite3_errcode(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) { 44474 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.Xstrdup(tls, sqlite3.Xsqlite3_errmsg(tls, (*Thread1)(unsafe.Pointer(p)).Fdb)) 44475 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 44476 (*Thread1)(unsafe.Pointer(p)).Fdb = uintptr(0) 44477 } 44478 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 44479 (*Thread1)(unsafe.Pointer(p)).Fcompleted = 1 44480 for (*Thread1)(unsafe.Pointer(p)).Fopnum <= (*Thread1)(unsafe.Pointer(p)).Fcompleted { 44481 libc.Xsched_yield(tls) 44482 } 44483 for (*Thread1)(unsafe.Pointer(p)).FxOp != 0 { 44484 if (*Thread1)(unsafe.Pointer(p)).FzErr != 0 && (*Thread1)(unsafe.Pointer(p)).FzErr != (*Thread1)(unsafe.Pointer(p)).FzStaticErr { 44485 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzErr) 44486 (*Thread1)(unsafe.Pointer(p)).FzErr = uintptr(0) 44487 } 44488 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*Thread1)(unsafe.Pointer(p)).FxOp})).f(tls, p) 44489 (*Thread1)(unsafe.Pointer(p)).Fcompleted++ 44490 for (*Thread1)(unsafe.Pointer(p)).Fopnum <= (*Thread1)(unsafe.Pointer(p)).Fcompleted { 44491 libc.Xsched_yield(tls) 44492 } 44493 } 44494 if (*Thread1)(unsafe.Pointer(p)).FpStmt != 0 { 44495 sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 44496 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 44497 } 44498 if (*Thread1)(unsafe.Pointer(p)).Fdb != 0 { 44499 sqlite3_client_close(tls, (*Thread1)(unsafe.Pointer(p)).Fdb) 44500 (*Thread1)(unsafe.Pointer(p)).Fdb = uintptr(0) 44501 } 44502 if (*Thread1)(unsafe.Pointer(p)).FzErr != 0 && (*Thread1)(unsafe.Pointer(p)).FzErr != (*Thread1)(unsafe.Pointer(p)).FzStaticErr { 44503 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzErr) 44504 (*Thread1)(unsafe.Pointer(p)).FzErr = uintptr(0) 44505 } 44506 (*Thread1)(unsafe.Pointer(p)).Fcompleted++ 44507 sqlite3.Xsqlite3_thread_cleanup(tls) 44508 return uintptr(0) 44509 } 44510 44511 func parse_client_id(tls *libc.TLS, interp uintptr, zArg uintptr) int32 { 44512 bp := tls.Alloc(16) 44513 defer tls.Free(16) 44514 44515 if zArg == uintptr(0) || int32(*(*int8)(unsafe.Pointer(zArg))) == 0 || int32(*(*int8)(unsafe.Pointer(zArg + 1))) != 0 || !(isupper(tls, int32(uint8(*(*int8)(unsafe.Pointer(zArg))))) != 0) { 44516 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+25845, 0)) 44517 return -1 44518 } 44519 return int32(*(*int8)(unsafe.Pointer(zArg))) - 'A' 44520 } 44521 44522 func tcl_client_create(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 44523 bp := tls.Alloc(96) 44524 defer tls.Free(96) 44525 44526 var i int32 44527 44528 var rc int32 44529 44530 if argc != 3 { 44531 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 44532 ts+25884, 0)) 44533 return TCL_ERROR 44534 } 44535 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 44536 if i < 0 { 44537 return TCL_ERROR 44538 } 44539 if threadset1[i].Fbusy != 0 { 44540 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25897, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+25905, 0)) 44541 return TCL_ERROR 44542 } 44543 threadset1[i].Fbusy = 1 44544 sqlite3.Xsqlite3_free(tls, threadset1[i].FzFilename) 44545 threadset1[i].FzFilename = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 44546 threadset1[i].Fopnum = 1 44547 threadset1[i].Fcompleted = 0 44548 rc = libc.Xpthread_create(tls, bp+88, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 44549 f func(*libc.TLS, uintptr) uintptr 44550 }{client_main})), uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 44551 if rc != 0 { 44552 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+25925, 0)) 44553 sqlite3.Xsqlite3_free(tls, threadset1[i].FzFilename) 44554 threadset1[i].Fbusy = 0 44555 return TCL_ERROR 44556 } 44557 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp + 88))) 44558 if threadset1[i].FnServer == 0 { 44559 threadset1[i].FnServer = 1 44560 sqlite3_server_start2(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688+1680) 44561 } 44562 return TCL_OK 44563 } 44564 44565 func client_wait(tls *libc.TLS, p uintptr) { 44566 for (*Thread1)(unsafe.Pointer(p)).Fopnum > (*Thread1)(unsafe.Pointer(p)).Fcompleted { 44567 libc.Xsched_yield(tls) 44568 } 44569 } 44570 44571 func tcl_client_wait(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 44572 bp := tls.Alloc(48) 44573 defer tls.Free(48) 44574 44575 var i int32 44576 44577 if argc != 2 { 44578 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 44579 ts+25953, 0)) 44580 return TCL_ERROR 44581 } 44582 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 44583 if i < 0 { 44584 return TCL_ERROR 44585 } 44586 if !(threadset1[i].Fbusy != 0) { 44587 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 44588 return TCL_ERROR 44589 } 44590 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 44591 return TCL_OK 44592 } 44593 44594 func stop_thread(tls *libc.TLS, p uintptr) { 44595 client_wait(tls, p) 44596 (*Thread1)(unsafe.Pointer(p)).FxOp = uintptr(0) 44597 (*Thread1)(unsafe.Pointer(p)).Fopnum++ 44598 client_wait(tls, p) 44599 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzArg) 44600 (*Thread1)(unsafe.Pointer(p)).FzArg = uintptr(0) 44601 sqlite3.Xsqlite3_free(tls, (*Thread1)(unsafe.Pointer(p)).FzFilename) 44602 (*Thread1)(unsafe.Pointer(p)).FzFilename = uintptr(0) 44603 (*Thread1)(unsafe.Pointer(p)).Fbusy = 0 44604 } 44605 44606 func tcl_client_halt(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 44607 bp := tls.Alloc(48) 44608 defer tls.Free(48) 44609 44610 var i int32 44611 44612 if argc != 2 { 44613 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 44614 ts+25953, 0)) 44615 return TCL_ERROR 44616 } 44617 if int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8))))) == '*' && int32(*(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(argv + 1*8)) + 1))) == 0 { 44618 for i = 0; i < N_THREAD; i++ { 44619 if threadset1[i].Fbusy != 0 { 44620 stop_thread(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 44621 } 44622 } 44623 } else { 44624 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 44625 if i < 0 { 44626 return TCL_ERROR 44627 } 44628 if !(threadset1[i].Fbusy != 0) { 44629 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 44630 return TCL_ERROR 44631 } 44632 stop_thread(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 44633 } 44634 44635 for i = 0; i < N_THREAD && threadset1[i].Fbusy == 0; i++ { 44636 } 44637 if i >= N_THREAD { 44638 sqlite3_server_stop(tls) 44639 for 1 != 0 { 44640 for i = 0; i < N_THREAD && threadset1[i].FnServer == 0; i++ { 44641 } 44642 if i == N_THREAD { 44643 break 44644 } 44645 libc.Xsched_yield(tls) 44646 } 44647 } 44648 return TCL_OK 44649 } 44650 44651 func tcl_client_argc(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 44652 bp := tls.Alloc(172) 44653 defer tls.Free(172) 44654 44655 var i int32 44656 44657 if argc != 2 { 44658 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 44659 ts+25953, 0)) 44660 return TCL_ERROR 44661 } 44662 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 44663 if i < 0 { 44664 return TCL_ERROR 44665 } 44666 if !(threadset1[i].Fbusy != 0) { 44667 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 44668 return TCL_ERROR 44669 } 44670 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 44671 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+72, ts+1333, libc.VaList(bp+48, threadset1[i].Fargc)) 44672 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+56, bp+72, 0)) 44673 return TCL_OK 44674 } 44675 44676 func tcl_client_argv(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 44677 bp := tls.Alloc(84) 44678 defer tls.Free(84) 44679 44680 var i int32 44681 44682 if argc != 3 { 44683 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 44684 ts+25972, 0)) 44685 return TCL_ERROR 44686 } 44687 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 44688 if i < 0 { 44689 return TCL_ERROR 44690 } 44691 if !(threadset1[i].Fbusy != 0) { 44692 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 44693 return TCL_ERROR 44694 } 44695 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 44696 return TCL_ERROR 44697 } 44698 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 44699 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset1[i].Fargc { 44700 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25978, 0)) 44701 return TCL_ERROR 44702 } 44703 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&threadset1)) + uintptr(i)*1688 + 80 + uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*8)), 0)) 44704 return TCL_OK 44705 } 44706 44707 func tcl_client_colname(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 44708 bp := tls.Alloc(84) 44709 defer tls.Free(84) 44710 44711 var i int32 44712 44713 if argc != 3 { 44714 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 44715 ts+25972, 0)) 44716 return TCL_ERROR 44717 } 44718 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 44719 if i < 0 { 44720 return TCL_ERROR 44721 } 44722 if !(threadset1[i].Fbusy != 0) { 44723 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 44724 return TCL_ERROR 44725 } 44726 if tcl.XTcl_GetInt(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8)), bp+80) != 0 { 44727 return TCL_ERROR 44728 } 44729 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 44730 if *(*int32)(unsafe.Pointer(bp + 80)) < 0 || *(*int32)(unsafe.Pointer(bp + 80)) >= threadset1[i].Fargc { 44731 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25978, 0)) 44732 return TCL_ERROR 44733 } 44734 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&threadset1)) + uintptr(i)*1688 + 880 + uintptr(*(*int32)(unsafe.Pointer(bp + 80)))*8)), 0)) 44735 return TCL_OK 44736 } 44737 44738 func tcl_client_result(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 44739 bp := tls.Alloc(64) 44740 defer tls.Free(64) 44741 44742 var i int32 44743 var zName uintptr 44744 44745 if argc != 2 { 44746 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 44747 ts+25953, 0)) 44748 return TCL_ERROR 44749 } 44750 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 44751 if i < 0 { 44752 return TCL_ERROR 44753 } 44754 if !(threadset1[i].Fbusy != 0) { 44755 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 44756 return TCL_ERROR 44757 } 44758 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 44759 zName = sqlite3.Xsqlite3ErrName(tls, threadset1[i].Frc) 44760 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, zName, 0)) 44761 return TCL_OK 44762 } 44763 44764 func tcl_client_error(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 44765 bp := tls.Alloc(64) 44766 defer tls.Free(64) 44767 44768 var i int32 44769 44770 if argc != 2 { 44771 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 44772 ts+25953, 0)) 44773 return TCL_ERROR 44774 } 44775 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 44776 if i < 0 { 44777 return TCL_ERROR 44778 } 44779 if !(threadset1[i].Fbusy != 0) { 44780 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 44781 return TCL_ERROR 44782 } 44783 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 44784 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, threadset1[i].FzErr, 0)) 44785 return TCL_OK 44786 } 44787 44788 func do_compile1(tls *libc.TLS, p uintptr) { 44789 if (*Thread1)(unsafe.Pointer(p)).Fdb == uintptr(0) { 44790 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+26005) 44791 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 44792 return 44793 } 44794 if (*Thread1)(unsafe.Pointer(p)).FpStmt != 0 { 44795 sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 44796 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 44797 } 44798 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_prepare(tls, (*Thread1)(unsafe.Pointer(p)).Fdb, (*Thread1)(unsafe.Pointer(p)).FzArg, -1, p+48, uintptr(0)) 44799 } 44800 44801 func tcl_client_compile(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 44802 bp := tls.Alloc(56) 44803 defer tls.Free(56) 44804 44805 var i int32 44806 if argc != 3 { 44807 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 44808 ts+26025, 0)) 44809 return TCL_ERROR 44810 } 44811 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 44812 if i < 0 { 44813 return TCL_ERROR 44814 } 44815 if !(threadset1[i].Fbusy != 0) { 44816 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 44817 return TCL_ERROR 44818 } 44819 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 44820 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_compile1})) 44821 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 44822 threadset1[i].FzArg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 44823 threadset1[i].Fopnum++ 44824 return TCL_OK 44825 } 44826 44827 func do_step1(tls *libc.TLS, p uintptr) { 44828 var i int32 44829 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 44830 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+26033) 44831 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 44832 return 44833 } 44834 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_step(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 44835 if (*Thread1)(unsafe.Pointer(p)).Frc == SQLITE_ROW { 44836 (*Thread1)(unsafe.Pointer(p)).Fargc = sqlite3.Xsqlite3_column_count(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 44837 for i = 0; i < sqlite3.Xsqlite3_data_count(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt); i++ { 44838 *(*uintptr)(unsafe.Pointer(p + 80 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_text(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt, i) 44839 } 44840 for i = 0; i < (*Thread1)(unsafe.Pointer(p)).Fargc; i++ { 44841 *(*uintptr)(unsafe.Pointer(p + 880 + uintptr(i)*8)) = sqlite3.Xsqlite3_column_name(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt, i) 44842 } 44843 } 44844 } 44845 44846 func tcl_client_step(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 44847 bp := tls.Alloc(48) 44848 defer tls.Free(48) 44849 44850 var i int32 44851 if argc != 2 { 44852 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 44853 ts+26062, 0)) 44854 return TCL_ERROR 44855 } 44856 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 44857 if i < 0 { 44858 return TCL_ERROR 44859 } 44860 if !(threadset1[i].Fbusy != 0) { 44861 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 44862 return TCL_ERROR 44863 } 44864 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 44865 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_step1})) 44866 threadset1[i].Fopnum++ 44867 return TCL_OK 44868 } 44869 44870 func do_finalize1(tls *libc.TLS, p uintptr) { 44871 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 44872 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+26033) 44873 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 44874 return 44875 } 44876 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_finalize(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 44877 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 44878 } 44879 44880 func tcl_client_finalize(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 44881 bp := tls.Alloc(48) 44882 defer tls.Free(48) 44883 44884 var i int32 44885 if argc != 2 { 44886 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 44887 ts+26062, 0)) 44888 return TCL_ERROR 44889 } 44890 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 44891 if i < 0 { 44892 return TCL_ERROR 44893 } 44894 if !(threadset1[i].Fbusy != 0) { 44895 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 44896 return TCL_ERROR 44897 } 44898 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 44899 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_finalize1})) 44900 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 44901 threadset1[i].FzArg = uintptr(0) 44902 threadset1[i].Fopnum++ 44903 return TCL_OK 44904 } 44905 44906 func do_reset(tls *libc.TLS, p uintptr) { 44907 if (*Thread1)(unsafe.Pointer(p)).FpStmt == uintptr(0) { 44908 (*Thread1)(unsafe.Pointer(p)).FzErr = libc.AssignPtrUintptr(p+64, ts+26033) 44909 (*Thread1)(unsafe.Pointer(p)).Frc = SQLITE_ERROR 44910 return 44911 } 44912 (*Thread1)(unsafe.Pointer(p)).Frc = sqlite3_client_reset(tls, (*Thread1)(unsafe.Pointer(p)).FpStmt) 44913 (*Thread1)(unsafe.Pointer(p)).FpStmt = uintptr(0) 44914 } 44915 44916 func tcl_client_reset(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 44917 bp := tls.Alloc(48) 44918 defer tls.Free(48) 44919 44920 var i int32 44921 if argc != 2 { 44922 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 44923 ts+26062, 0)) 44924 return TCL_ERROR 44925 } 44926 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 44927 if i < 0 { 44928 return TCL_ERROR 44929 } 44930 if !(threadset1[i].Fbusy != 0) { 44931 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 44932 return TCL_ERROR 44933 } 44934 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 44935 threadset1[i].FxOp = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{do_reset})) 44936 sqlite3.Xsqlite3_free(tls, threadset1[i].FzArg) 44937 threadset1[i].FzArg = uintptr(0) 44938 threadset1[i].Fopnum++ 44939 return TCL_OK 44940 } 44941 44942 func tcl_client_swap(tls *libc.TLS, NotUsed uintptr, interp uintptr, argc int32, argv uintptr) int32 { 44943 bp := tls.Alloc(64) 44944 defer tls.Free(64) 44945 44946 var i int32 44947 var j int32 44948 var temp uintptr 44949 if argc != 3 { 44950 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 44951 ts+26067, 0)) 44952 return TCL_ERROR 44953 } 44954 i = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 44955 if i < 0 { 44956 return TCL_ERROR 44957 } 44958 if !(threadset1[i].Fbusy != 0) { 44959 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+25957, 0)) 44960 return TCL_ERROR 44961 } 44962 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(i)*1688) 44963 j = parse_client_id(tls, interp, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 44964 if j < 0 { 44965 return TCL_ERROR 44966 } 44967 if !(threadset1[j].Fbusy != 0) { 44968 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+25957, 0)) 44969 return TCL_ERROR 44970 } 44971 client_wait(tls, uintptr(unsafe.Pointer(&threadset1))+uintptr(j)*1688) 44972 temp = threadset1[i].Fdb 44973 threadset1[i].Fdb = threadset1[j].Fdb 44974 threadset1[j].Fdb = temp 44975 return TCL_OK 44976 } 44977 44978 func Sqlitetest7_Init(tls *libc.TLS, interp uintptr) int32 { 44979 var i int32 44980 44981 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd6))/uint64(unsafe.Sizeof(struct { 44982 FzName uintptr 44983 FxProc uintptr 44984 }{})); i++ { 44985 tcl.XTcl_CreateCommand(tls, interp, aCmd6[i].FzName, aCmd6[i].FxProc, uintptr(0), uintptr(0)) 44986 } 44987 return TCL_OK 44988 } 44989 44990 var aCmd6 = [13]struct { 44991 FzName uintptr 44992 FxProc uintptr 44993 }{ 44994 {FzName: ts + 27091, FxProc: 0}, 44995 {FzName: ts + 27105, FxProc: 0}, 44996 {FzName: ts + 27117, FxProc: 0}, 44997 {FzName: ts + 27129, FxProc: 0}, 44998 {FzName: ts + 27141, FxProc: 0}, 44999 {FzName: ts + 27153, FxProc: 0}, 45000 {FzName: ts + 27168, FxProc: 0}, 45001 {FzName: ts + 27182, FxProc: 0}, 45002 {FzName: ts + 27195, FxProc: 0}, 45003 {FzName: ts + 27210, FxProc: 0}, 45004 {FzName: ts + 27222, FxProc: 0}, 45005 {FzName: ts + 27235, FxProc: 0}, 45006 {FzName: ts + 27251, FxProc: 0}, 45007 } 45008 45009 type echo_vtab1 = struct { 45010 Fbase sqlite3_vtab 45011 Finterp uintptr 45012 Fdb uintptr 45013 FisPattern int32 45014 FinTransaction int32 45015 FzThis uintptr 45016 FzTableName uintptr 45017 FzLogName uintptr 45018 FnCol int32 45019 F__ccgo_pad1 [4]byte 45020 FaIndex uintptr 45021 FaCol uintptr 45022 } 45023 45024 type echo_vtab = echo_vtab1 45025 type echo_cursor1 = struct { 45026 Fbase sqlite3_vtab_cursor 45027 FpStmt uintptr 45028 } 45029 45030 type echo_cursor = echo_cursor1 45031 45032 func simulateVtabError(tls *libc.TLS, p uintptr, zMethod uintptr) int32 { 45033 bp := tls.Alloc(152) 45034 defer tls.Free(152) 45035 45036 var zErr uintptr 45037 45038 *(*int8)(unsafe.Pointer(bp + 24 + 127)) = int8(0) 45039 sqlite3.Xsqlite3_snprintf(tls, 127, bp+24, ts+27263, libc.VaList(bp, zMethod, (*echo_vtab)(unsafe.Pointer(p)).FzTableName)) 45040 zErr = tcl.XTcl_GetVar(tls, (*echo_vtab)(unsafe.Pointer(p)).Finterp, bp+24, TCL_GLOBAL_ONLY) 45041 if zErr != 0 { 45042 (*echo_vtab)(unsafe.Pointer(p)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+27287, libc.VaList(bp+16, zErr)) 45043 } 45044 return libc.Bool32(zErr != uintptr(0)) 45045 } 45046 45047 func dequoteString(tls *libc.TLS, z uintptr) { 45048 var quote int32 45049 var i int32 45050 var j int32 45051 if z == uintptr(0) { 45052 return 45053 } 45054 quote = int32(*(*int8)(unsafe.Pointer(z))) 45055 switch quote { 45056 case '\'': 45057 break 45058 case '"': 45059 break 45060 case '`': 45061 break 45062 case '[': 45063 quote = ']' 45064 break 45065 default: 45066 return 45067 } 45068 i = 1 45069 j = 0 45070 for ; *(*int8)(unsafe.Pointer(z + uintptr(i))) != 0; i++ { 45071 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == quote { 45072 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i+1)))) == quote { 45073 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(quote) 45074 i++ 45075 } else { 45076 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = int8(0) 45077 break 45078 } 45079 } else { 45080 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&j, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(i))) 45081 } 45082 } 45083 } 45084 45085 func getColumnNames(tls *libc.TLS, db uintptr, zTab uintptr, paCol uintptr, pnCol uintptr) int32 { 45086 bp := tls.Alloc(24) 45087 defer tls.Free(24) 45088 45089 var aCol uintptr 45090 var zSql uintptr 45091 45092 var rc int32 45093 var nCol int32 45094 var zName uintptr 45095 var ii int32 45096 var nBytes int32 45097 var zSpace uintptr 45098 aCol = uintptr(0) 45099 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 45100 rc = SQLITE_OK 45101 nCol = 0 45102 45103 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27307, libc.VaList(bp, zTab)) 45104 if !!(zSql != 0) { 45105 goto __1 45106 } 45107 rc = SQLITE_NOMEM 45108 goto out 45109 __1: 45110 ; 45111 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+16, uintptr(0)) 45112 sqlite3.Xsqlite3_free(tls, zSql) 45113 45114 if !(rc == SQLITE_OK) { 45115 goto __2 45116 } 45117 nCol = sqlite3.Xsqlite3_column_count(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 45118 45119 nBytes = int32(uint64(unsafe.Sizeof(uintptr(0))) * uint64(nCol)) 45120 ii = 0 45121 __3: 45122 if !(ii < nCol) { 45123 goto __5 45124 } 45125 zName = sqlite3.Xsqlite3_column_name(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ii) 45126 if !!(zName != 0) { 45127 goto __6 45128 } 45129 rc = SQLITE_NOMEM 45130 goto out 45131 __6: 45132 ; 45133 nBytes = nBytes + (int32(libc.Xstrlen(tls, zName)) + 1) 45134 goto __4 45135 __4: 45136 ii++ 45137 goto __3 45138 goto __5 45139 __5: 45140 ; 45141 aCol = sqlite3.Xsqlite3MallocZero(tls, uint64(nBytes)) 45142 if !!(aCol != 0) { 45143 goto __7 45144 } 45145 rc = SQLITE_NOMEM 45146 goto out 45147 __7: 45148 ; 45149 zSpace = aCol + uintptr(nCol)*8 45150 ii = 0 45151 __8: 45152 if !(ii < nCol) { 45153 goto __10 45154 } 45155 *(*uintptr)(unsafe.Pointer(aCol + uintptr(ii)*8)) = zSpace 45156 sqlite3.Xsqlite3_snprintf(tls, nBytes, zSpace, ts, libc.VaList(bp+8, sqlite3.Xsqlite3_column_name(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ii))) 45157 zSpace += uintptr(int32(libc.Xstrlen(tls, zSpace)) + 1) 45158 goto __9 45159 __9: 45160 ii++ 45161 goto __8 45162 goto __10 45163 __10: 45164 ; 45165 __2: 45166 ; 45167 *(*uintptr)(unsafe.Pointer(paCol)) = aCol 45168 *(*int32)(unsafe.Pointer(pnCol)) = nCol 45169 45170 out: 45171 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 45172 return rc 45173 } 45174 45175 func getIndexArray(tls *libc.TLS, db uintptr, zTab uintptr, nCol int32, paIndex uintptr) int32 { 45176 bp := tls.Alloc(32) 45177 defer tls.Free(32) 45178 45179 var aIndex uintptr 45180 var rc int32 45181 var zSql uintptr 45182 var cid int32 45183 var zIdx uintptr 45184 45185 var rc2 int32 45186 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 45187 aIndex = uintptr(0) 45188 45189 aIndex = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(int32(0)))*uint64(nCol)) 45190 if !!(aIndex != 0) { 45191 goto __1 45192 } 45193 rc = SQLITE_NOMEM 45194 goto get_index_array_out 45195 __1: 45196 ; 45197 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27324, libc.VaList(bp, zTab)) 45198 if !!(zSql != 0) { 45199 goto __2 45200 } 45201 rc = SQLITE_NOMEM 45202 goto get_index_array_out 45203 __2: 45204 ; 45205 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+16, uintptr(0)) 45206 sqlite3.Xsqlite3_free(tls, zSql) 45207 45208 __3: 45209 if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0 && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) == SQLITE_ROW) { 45210 goto __4 45211 } 45212 zIdx = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 1) 45213 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 45214 if !(zIdx == uintptr(0)) { 45215 goto __5 45216 } 45217 goto __3 45218 __5: 45219 ; 45220 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27346, libc.VaList(bp+8, zIdx)) 45221 if !!(zSql != 0) { 45222 goto __6 45223 } 45224 rc = SQLITE_NOMEM 45225 goto get_index_array_out 45226 __6: 45227 ; 45228 rc = sqlite3.Xsqlite3_prepare(tls, db, zSql, -1, bp+24, uintptr(0)) 45229 sqlite3.Xsqlite3_free(tls, zSql) 45230 if !(*(*uintptr)(unsafe.Pointer(bp + 24)) != 0 && sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) == SQLITE_ROW) { 45231 goto __7 45232 } 45233 cid = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), 1) 45234 45235 *(*int32)(unsafe.Pointer(aIndex + uintptr(cid)*4)) = 1 45236 __7: 45237 ; 45238 if !(*(*uintptr)(unsafe.Pointer(bp + 24)) != 0) { 45239 goto __8 45240 } 45241 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 45242 __8: 45243 ; 45244 if !(rc != SQLITE_OK) { 45245 goto __9 45246 } 45247 goto get_index_array_out 45248 __9: 45249 ; 45250 goto __3 45251 __4: 45252 ; 45253 get_index_array_out: 45254 if !(*(*uintptr)(unsafe.Pointer(bp + 16)) != 0) { 45255 goto __10 45256 } 45257 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 45258 if !(rc == SQLITE_OK) { 45259 goto __11 45260 } 45261 rc = rc2 45262 __11: 45263 ; 45264 __10: 45265 ; 45266 if !(rc != SQLITE_OK) { 45267 goto __12 45268 } 45269 sqlite3.Xsqlite3_free(tls, aIndex) 45270 aIndex = uintptr(0) 45271 __12: 45272 ; 45273 *(*uintptr)(unsafe.Pointer(paIndex)) = aIndex 45274 return rc 45275 } 45276 45277 func appendToEchoModule(tls *libc.TLS, interp uintptr, zArg uintptr) { 45278 var flags int32 = TCL_APPEND_VALUE | TCL_LIST_ELEMENT | TCL_GLOBAL_ONLY 45279 tcl.XTcl_SetVar(tls, interp, ts+27368, func() uintptr { 45280 if zArg != 0 { 45281 return zArg 45282 } 45283 return ts + 584 45284 }(), flags) 45285 } 45286 45287 func echoDeclareVtab(tls *libc.TLS, pVtab uintptr, db uintptr) int32 { 45288 bp := tls.Alloc(8) 45289 defer tls.Free(8) 45290 45291 var rc int32 = SQLITE_OK 45292 45293 if (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName != 0 { 45294 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 45295 rc = sqlite3.Xsqlite3_prepare(tls, db, 45296 ts+27380, 45297 -1, bp, uintptr(0)) 45298 if rc == SQLITE_OK { 45299 sqlite3.Xsqlite3_bind_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 1, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, -1, uintptr(0)) 45300 if sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) == SQLITE_ROW { 45301 var rc2 int32 45302 var zCreateTable uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) 45303 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, zCreateTable) 45304 rc2 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 45305 if rc == SQLITE_OK { 45306 rc = rc2 45307 } 45308 } else { 45309 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 45310 if rc == SQLITE_OK { 45311 rc = SQLITE_ERROR 45312 } 45313 } 45314 if rc == SQLITE_OK { 45315 rc = getColumnNames(tls, db, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, pVtab+88, pVtab+72) 45316 } 45317 if rc == SQLITE_OK { 45318 rc = getIndexArray(tls, db, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName, (*echo_vtab)(unsafe.Pointer(pVtab)).FnCol, pVtab+80) 45319 } 45320 } 45321 } 45322 45323 return rc 45324 } 45325 45326 func echoDestructor(tls *libc.TLS, pVtab uintptr) int32 { 45327 var p uintptr = pVtab 45328 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FaIndex) 45329 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FaCol) 45330 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzThis) 45331 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzTableName) 45332 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(p)).FzLogName) 45333 sqlite3.Xsqlite3_free(tls, p) 45334 return 0 45335 } 45336 45337 type EchoModule1 = struct { 45338 Finterp uintptr 45339 Fdb uintptr 45340 } 45341 45342 type EchoModule = EchoModule1 45343 45344 func echoConstructor(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 45345 bp := tls.Alloc(32) 45346 defer tls.Free(32) 45347 45348 var rc int32 45349 var i int32 45350 var pVtab uintptr 45351 45352 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(echo_vtab{}))) 45353 if !(pVtab != 0) { 45354 return SQLITE_NOMEM 45355 } 45356 (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp = (*EchoModule)(unsafe.Pointer(pAux)).Finterp 45357 (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb = db 45358 45359 (*echo_vtab)(unsafe.Pointer(pVtab)).FzThis = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 2*8)))) 45360 if !(int32((*echo_vtab)(unsafe.Pointer(pVtab)).FzThis) != 0) { 45361 echoDestructor(tls, pVtab) 45362 return SQLITE_NOMEM 45363 } 45364 45365 if argc > 3 { 45366 (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 45367 dequoteString(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) 45368 if (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName != 0 && int32(*(*int8)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName))) == '*' { 45369 var z uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+27444, libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(argv + 2*8)), (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName+1)) 45370 sqlite3.Xsqlite3_free(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) 45371 (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName = z 45372 (*echo_vtab)(unsafe.Pointer(pVtab)).FisPattern = 1 45373 } 45374 if !(int32((*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) != 0) { 45375 echoDestructor(tls, pVtab) 45376 return SQLITE_NOMEM 45377 } 45378 } 45379 45380 for i = 0; i < argc; i++ { 45381 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 45382 } 45383 45384 rc = echoDeclareVtab(tls, pVtab, db) 45385 if rc != SQLITE_OK { 45386 echoDestructor(tls, pVtab) 45387 return rc 45388 } 45389 45390 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 45391 return SQLITE_OK 45392 } 45393 45394 func echoCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 45395 bp := tls.Alloc(24) 45396 defer tls.Free(24) 45397 45398 var rc int32 = SQLITE_OK 45399 appendToEchoModule(tls, (*EchoModule)(unsafe.Pointer(pAux)).Finterp, ts+27449) 45400 rc = echoConstructor(tls, db, pAux, argc, argv, ppVtab, pzErr) 45401 45402 if rc == SQLITE_OK && argc == 5 { 45403 var zSql uintptr 45404 var pVtab uintptr = *(*uintptr)(unsafe.Pointer(ppVtab)) 45405 (*echo_vtab)(unsafe.Pointer(pVtab)).FzLogName = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 4*8)))) 45406 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27457, libc.VaList(bp+8, (*echo_vtab)(unsafe.Pointer(pVtab)).FzLogName)) 45407 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 45408 sqlite3.Xsqlite3_free(tls, zSql) 45409 if rc != SQLITE_OK { 45410 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, sqlite3.Xsqlite3_errmsg(tls, db))) 45411 } 45412 } 45413 45414 if *(*uintptr)(unsafe.Pointer(ppVtab)) != 0 && rc != SQLITE_OK { 45415 echoDestructor(tls, *(*uintptr)(unsafe.Pointer(ppVtab))) 45416 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 45417 } 45418 45419 if rc == SQLITE_OK { 45420 (*echo_vtab)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(ppVtab)))).FinTransaction = 1 45421 } 45422 45423 return rc 45424 } 45425 45426 func echoConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 45427 appendToEchoModule(tls, (*EchoModule)(unsafe.Pointer(pAux)).Finterp, ts+27481) 45428 return echoConstructor(tls, db, pAux, argc, argv, ppVtab, pzErr) 45429 } 45430 45431 func echoDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 45432 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27490) 45433 return echoDestructor(tls, pVtab) 45434 } 45435 45436 func echoDestroy(tls *libc.TLS, pVtab uintptr) int32 { 45437 bp := tls.Alloc(8) 45438 defer tls.Free(8) 45439 45440 var rc int32 = SQLITE_OK 45441 var p uintptr = pVtab 45442 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27502) 45443 45444 if p != 0 && (*echo_vtab)(unsafe.Pointer(p)).FzLogName != 0 { 45445 var zSql uintptr 45446 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+27511, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(p)).FzLogName)) 45447 rc = sqlite3.Xsqlite3_exec(tls, (*echo_vtab)(unsafe.Pointer(p)).Fdb, zSql, uintptr(0), uintptr(0), uintptr(0)) 45448 sqlite3.Xsqlite3_free(tls, zSql) 45449 } 45450 45451 if rc == SQLITE_OK { 45452 rc = echoDestructor(tls, pVtab) 45453 } 45454 return rc 45455 } 45456 45457 func echoOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 45458 var pCur uintptr 45459 if simulateVtabError(tls, pVTab, ts+27525) != 0 { 45460 return SQLITE_ERROR 45461 } 45462 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(echo_cursor{}))) 45463 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 45464 return func() int32 { 45465 if pCur != 0 { 45466 return SQLITE_OK 45467 } 45468 return SQLITE_NOMEM 45469 }() 45470 } 45471 45472 func echoClose(tls *libc.TLS, cur uintptr) int32 { 45473 var rc int32 45474 var pCur uintptr = cur 45475 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt 45476 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 45477 sqlite3.Xsqlite3_free(tls, pCur) 45478 rc = sqlite3.Xsqlite3_finalize(tls, pStmt) 45479 return rc 45480 } 45481 45482 func echoEof(tls *libc.TLS, cur uintptr) int32 { 45483 return func() int32 { 45484 if (*echo_cursor)(unsafe.Pointer(cur)).FpStmt != 0 { 45485 return 0 45486 } 45487 return 1 45488 }() 45489 } 45490 45491 func echoNext(tls *libc.TLS, cur uintptr) int32 { 45492 var rc int32 = SQLITE_OK 45493 var pCur uintptr = cur 45494 45495 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+27531) != 0 { 45496 return SQLITE_ERROR 45497 } 45498 45499 if (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt != 0 { 45500 rc = sqlite3.Xsqlite3_step(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 45501 if rc == SQLITE_ROW { 45502 rc = SQLITE_OK 45503 } else { 45504 rc = sqlite3.Xsqlite3_finalize(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 45505 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 45506 } 45507 } 45508 45509 return rc 45510 } 45511 45512 func echoColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 45513 var iCol int32 = i + 1 45514 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(cur)).FpStmt 45515 45516 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+27537) != 0 { 45517 return SQLITE_ERROR 45518 } 45519 45520 if !(pStmt != 0) { 45521 sqlite3.Xsqlite3_result_null(tls, ctx) 45522 } else { 45523 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, pStmt, iCol)) 45524 } 45525 return SQLITE_OK 45526 } 45527 45528 func echoRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 45529 var pStmt uintptr = (*echo_cursor)(unsafe.Pointer(cur)).FpStmt 45530 45531 if simulateVtabError(tls, (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab, ts+2304) != 0 { 45532 return SQLITE_ERROR 45533 } 45534 45535 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, pStmt, 0) 45536 return SQLITE_OK 45537 } 45538 45539 func hashString(tls *libc.TLS, zString uintptr) int32 { 45540 var val u32 = u32(0) 45541 var ii int32 45542 for ii = 0; *(*int8)(unsafe.Pointer(zString + uintptr(ii))) != 0; ii++ { 45543 val = val<<3 + u32(int32(*(*int8)(unsafe.Pointer(zString + uintptr(ii))))) 45544 } 45545 return int32(val & u32(0x7fffffff)) 45546 } 45547 45548 func echoFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 45549 var rc int32 45550 var i int32 45551 45552 var pCur uintptr = pVtabCursor 45553 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 45554 var db uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb 45555 45556 if simulateVtabError(tls, pVtab, ts+27545) != 0 { 45557 return SQLITE_ERROR 45558 } 45559 45560 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27545) 45561 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, idxStr) 45562 for i = 0; i < argc; i++ { 45563 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8)))) 45564 } 45565 45566 sqlite3.Xsqlite3_finalize(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt) 45567 (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt = uintptr(0) 45568 45569 rc = sqlite3.Xsqlite3_prepare(tls, db, idxStr, -1, pCur+8, uintptr(0)) 45570 45571 for i = 0; rc == SQLITE_OK && i < argc; i++ { 45572 rc = sqlite3.Xsqlite3_bind_value(tls, (*echo_cursor)(unsafe.Pointer(pCur)).FpStmt, i+1, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 45573 } 45574 45575 if rc == SQLITE_OK { 45576 rc = echoNext(tls, pVtabCursor) 45577 } 45578 45579 return rc 45580 } 45581 45582 func string_concat(tls *libc.TLS, pzStr uintptr, zAppend uintptr, doFree int32, pRc uintptr) { 45583 bp := tls.Alloc(24) 45584 defer tls.Free(24) 45585 45586 var zIn uintptr = *(*uintptr)(unsafe.Pointer(pzStr)) 45587 if !(zAppend != 0) && doFree != 0 && *(*int32)(unsafe.Pointer(pRc)) == SQLITE_OK { 45588 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 45589 } 45590 if *(*int32)(unsafe.Pointer(pRc)) != SQLITE_OK { 45591 sqlite3.Xsqlite3_free(tls, zIn) 45592 zIn = uintptr(0) 45593 } else { 45594 if zIn != 0 { 45595 var zTemp uintptr = zIn 45596 zIn = sqlite3.Xsqlite3_mprintf(tls, ts+27444, libc.VaList(bp, zIn, zAppend)) 45597 sqlite3.Xsqlite3_free(tls, zTemp) 45598 } else { 45599 zIn = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zAppend)) 45600 } 45601 if !(zIn != 0) { 45602 *(*int32)(unsafe.Pointer(pRc)) = SQLITE_NOMEM 45603 } 45604 } 45605 *(*uintptr)(unsafe.Pointer(pzStr)) = zIn 45606 if doFree != 0 { 45607 sqlite3.Xsqlite3_free(tls, zAppend) 45608 } 45609 } 45610 45611 func echoSelectList(tls *libc.TLS, pTab uintptr, pIdxInfo uintptr) uintptr { 45612 bp := tls.Alloc(24) 45613 defer tls.Free(24) 45614 45615 var zRet uintptr = uintptr(0) 45616 if sqlite3.Xsqlite3_libversion_number(tls) < 3010000 { 45617 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27553, 0) 45618 } else { 45619 var i int32 45620 for i = 0; i < (*echo_vtab)(unsafe.Pointer(pTab)).FnCol; i++ { 45621 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed&(uint64(1)<<func() int32 { 45622 if i >= 63 { 45623 return 63 45624 } 45625 return i 45626 }()) != 0 { 45627 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27557, libc.VaList(bp, zRet, *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pTab)).FaCol + uintptr(i)*8)))) 45628 } else { 45629 zRet = sqlite3.Xsqlite3_mprintf(tls, ts+27564, libc.VaList(bp+16, zRet)) 45630 } 45631 if !(zRet != 0) { 45632 break 45633 } 45634 } 45635 } 45636 return zRet 45637 } 45638 45639 func echoBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 45640 bp := tls.Alloc(100) 45641 defer tls.Free(100) 45642 45643 var ii int32 45644 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 45645 var zCol uintptr = uintptr(0) 45646 var zNew uintptr 45647 var nArg int32 = 0 45648 var zSep uintptr = ts + 9392 45649 var pVtab uintptr = tab 45650 *(*uintptr)(unsafe.Pointer(bp + 80)) = uintptr(0) 45651 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 45652 45653 var nRow int32 = 0 45654 var useIdx int32 = 0 45655 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_OK 45656 var useCost int32 = 0 45657 var cost float64 = float64(0) 45658 var isIgnoreUsable int32 = 0 45659 if tcl.XTcl_GetVar(tls, interp, ts+27573, TCL_GLOBAL_ONLY) != 0 { 45660 isIgnoreUsable = 1 45661 } 45662 45663 if simulateVtabError(tls, pVtab, ts+27599) != 0 { 45664 return SQLITE_ERROR 45665 } 45666 45667 if tcl.XTcl_GetVar(tls, interp, ts+27610, TCL_GLOBAL_ONLY) != 0 { 45668 cost = libc.Xatof(tls, tcl.XTcl_GetVar(tls, interp, ts+27610, TCL_GLOBAL_ONLY)) 45669 useCost = 1 45670 } else { 45671 *(*uintptr)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_mprintf(tls, ts+27627, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 45672 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 45673 return SQLITE_NOMEM 45674 } 45675 *(*int32)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_prepare(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb, *(*uintptr)(unsafe.Pointer(bp + 88)), -1, bp+80, uintptr(0)) 45676 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 45677 if *(*int32)(unsafe.Pointer(bp + 96)) != SQLITE_OK { 45678 return *(*int32)(unsafe.Pointer(bp + 96)) 45679 } 45680 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 45681 nRow = sqlite3.Xsqlite3_column_int(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), 0) 45682 *(*int32)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 80))) 45683 if *(*int32)(unsafe.Pointer(bp + 96)) != SQLITE_OK { 45684 return *(*int32)(unsafe.Pointer(bp + 96)) 45685 } 45686 } 45687 45688 zCol = echoSelectList(tls, pVtab, pIdxInfo) 45689 if !(zCol != 0) { 45690 return SQLITE_NOMEM 45691 } 45692 *(*uintptr)(unsafe.Pointer(bp + 88)) = sqlite3.Xsqlite3_mprintf(tls, ts+27651, libc.VaList(bp+8, zCol, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 45693 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 45694 return SQLITE_NOMEM 45695 } 45696 45697 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 45698 var pConstraint uintptr 45699 var pUsage uintptr 45700 var iCol int32 45701 45702 pConstraint = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 45703 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 45704 45705 if !(isIgnoreUsable != 0) && !(int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fusable) != 0) { 45706 continue 45707 } 45708 45709 iCol = (*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).FiColumn 45710 if iCol < 0 || *(*int32)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaIndex + uintptr(iCol)*4)) != 0 { 45711 var zNewCol uintptr 45712 if iCol >= 0 { 45713 zNewCol = *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(iCol)*8)) 45714 } else { 45715 zNewCol = ts + 6427 45716 } 45717 var zOp uintptr = uintptr(0) 45718 useIdx = 1 45719 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(pConstraint)).Fop) { 45720 case SQLITE_INDEX_CONSTRAINT_EQ: 45721 zOp = ts + 27674 45722 break 45723 fallthrough 45724 case SQLITE_INDEX_CONSTRAINT_LT: 45725 zOp = ts + 27676 45726 break 45727 fallthrough 45728 case SQLITE_INDEX_CONSTRAINT_GT: 45729 zOp = ts + 27678 45730 break 45731 fallthrough 45732 case SQLITE_INDEX_CONSTRAINT_LE: 45733 zOp = ts + 27680 45734 break 45735 fallthrough 45736 case SQLITE_INDEX_CONSTRAINT_GE: 45737 zOp = ts + 27683 45738 break 45739 fallthrough 45740 case SQLITE_INDEX_CONSTRAINT_MATCH: 45741 zOp = ts + 27686 45742 break 45743 fallthrough 45744 case SQLITE_INDEX_CONSTRAINT_LIKE: 45745 zOp = ts + 27691 45746 break 45747 fallthrough 45748 case SQLITE_INDEX_CONSTRAINT_GLOB: 45749 zOp = ts + 27696 45750 break 45751 fallthrough 45752 case SQLITE_INDEX_CONSTRAINT_REGEXP: 45753 zOp = ts + 6831 45754 break 45755 } 45756 if zOp != 0 { 45757 if int32(*(*int8)(unsafe.Pointer(zOp))) == 'L' { 45758 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27701, 45759 libc.VaList(bp+24, zSep, zNewCol)) 45760 } else { 45761 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27736, libc.VaList(bp+40, zSep, zNewCol, zOp)) 45762 } 45763 string_concat(tls, bp+88, zNew, 1, bp+96) 45764 zSep = ts + 9419 45765 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&nArg, 1) 45766 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 45767 } 45768 } 45769 } 45770 45771 if (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy == 1 && ((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn < 0 || *(*int32)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaIndex + uintptr((*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn)*4)) != 0) { 45772 var iCol int32 = (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).FiColumn 45773 var zNewCol uintptr 45774 if iCol >= 0 { 45775 zNewCol = *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(iCol)*8)) 45776 } else { 45777 zNewCol = ts + 6427 45778 } 45779 var zDir uintptr 45780 if (*sqlite3_index_orderby)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy)).Fdesc != 0 { 45781 zDir = ts + 27748 45782 } else { 45783 zDir = ts + 27753 45784 } 45785 zNew = sqlite3.Xsqlite3_mprintf(tls, ts+27757, libc.VaList(bp+64, zNewCol, zDir)) 45786 string_concat(tls, bp+88, zNew, 1, bp+96) 45787 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).ForderByConsumed = 1 45788 } 45789 45790 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, ts+27599) 45791 45792 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, *(*uintptr)(unsafe.Pointer(bp + 88))) 45793 45794 if !(*(*uintptr)(unsafe.Pointer(bp + 88)) != 0) { 45795 return *(*int32)(unsafe.Pointer(bp + 96)) 45796 } 45797 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = hashString(tls, *(*uintptr)(unsafe.Pointer(bp + 88))) 45798 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = *(*uintptr)(unsafe.Pointer(bp + 88)) 45799 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 45800 if useCost != 0 { 45801 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = cost 45802 } else if useIdx != 0 { 45803 for ii = 0; uint64(ii) < uint64(unsafe.Sizeof(int32(0)))*uint64(8)-uint64(1); ii++ { 45804 if nRow&(int32(1)<<ii) != 0 { 45805 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(ii) 45806 } 45807 } 45808 } else { 45809 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = float64(nRow) 45810 } 45811 return *(*int32)(unsafe.Pointer(bp + 96)) 45812 } 45813 45814 func echoUpdate(tls *libc.TLS, tab uintptr, nData int32, apData uintptr, pRowid uintptr) int32 { 45815 bp := tls.Alloc(136) 45816 defer tls.Free(136) 45817 45818 var pVtab uintptr = tab 45819 var db uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Fdb 45820 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_OK 45821 45822 *(*uintptr)(unsafe.Pointer(bp + 128)) = uintptr(0) 45823 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 45824 var bindArgZero int32 = 0 45825 var bindArgOne int32 = 0 45826 var i int32 45827 45828 if simulateVtabError(tls, pVtab, ts+27773) != 0 { 45829 return SQLITE_ERROR 45830 } 45831 45832 if nData > 1 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_INTEGER { 45833 var zSep uintptr = ts + 27781 45834 *(*uintptr)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_mprintf(tls, ts+27786, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 45835 if !(*(*uintptr)(unsafe.Pointer(bp + 96)) != 0) { 45836 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 45837 } 45838 45839 bindArgOne = libc.Bool32(*(*uintptr)(unsafe.Pointer(apData + 1*8)) != 0 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData + 1*8))) == SQLITE_INTEGER) 45840 bindArgZero = 1 45841 45842 if bindArgOne != 0 { 45843 string_concat(tls, bp+96, ts+27796, 0, bp+104) 45844 zSep = ts + 4758 45845 } 45846 for i = 2; i < nData; i++ { 45847 if *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8)) == uintptr(0) { 45848 continue 45849 } 45850 string_concat(tls, bp+96, sqlite3.Xsqlite3_mprintf(tls, 45851 ts+27811, libc.VaList(bp+8, zSep, *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(i-2)*8)), i)), 1, bp+104) 45852 zSep = ts + 4758 45853 } 45854 string_concat(tls, bp+96, sqlite3.Xsqlite3_mprintf(tls, ts+27821, libc.VaList(bp+32, nData)), 1, bp+104) 45855 } else if nData == 1 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_INTEGER { 45856 *(*uintptr)(unsafe.Pointer(bp + 96)) = sqlite3.Xsqlite3_mprintf(tls, ts+27838, libc.VaList(bp+40, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 45857 if !(*(*uintptr)(unsafe.Pointer(bp + 96)) != 0) { 45858 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 45859 } 45860 bindArgZero = 1 45861 } else if nData > 2 && sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData))) == SQLITE_NULL { 45862 var ii int32 45863 *(*uintptr)(unsafe.Pointer(bp + 112)) = uintptr(0) 45864 *(*uintptr)(unsafe.Pointer(bp + 120)) = uintptr(0) 45865 45866 *(*uintptr)(unsafe.Pointer(bp + 112)) = sqlite3.Xsqlite3_mprintf(tls, ts+27870, libc.VaList(bp+48, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 45867 if !(*(*uintptr)(unsafe.Pointer(bp + 112)) != 0) { 45868 *(*int32)(unsafe.Pointer(bp + 104)) = SQLITE_NOMEM 45869 } 45870 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apData + 1*8))) == SQLITE_INTEGER { 45871 bindArgOne = 1 45872 *(*uintptr)(unsafe.Pointer(bp + 120)) = sqlite3.Xsqlite3_mprintf(tls, ts+3405, 0) 45873 string_concat(tls, bp+112, ts+6427, 0, bp+104) 45874 } 45875 45876 for ii = 2; ii < nData; ii++ { 45877 string_concat(tls, bp+112, 45878 sqlite3.Xsqlite3_mprintf(tls, ts+27887, libc.VaList(bp+56, func() uintptr { 45879 if *(*uintptr)(unsafe.Pointer(bp + 120)) != 0 { 45880 return ts + 97 45881 } 45882 return ts + 584 45883 }(), *(*uintptr)(unsafe.Pointer((*echo_vtab)(unsafe.Pointer(pVtab)).FaCol + uintptr(ii-2)*8)))), 1, bp+104) 45884 string_concat(tls, bp+120, 45885 sqlite3.Xsqlite3_mprintf(tls, ts+27892, libc.VaList(bp+72, func() uintptr { 45886 if *(*uintptr)(unsafe.Pointer(bp + 120)) != 0 { 45887 return ts + 97 45888 } 45889 return ts + 584 45890 }(), ii)), 1, bp+104) 45891 } 45892 45893 string_concat(tls, bp+96, *(*uintptr)(unsafe.Pointer(bp + 112)), 1, bp+104) 45894 string_concat(tls, bp+96, ts+27898, 0, bp+104) 45895 string_concat(tls, bp+96, *(*uintptr)(unsafe.Pointer(bp + 120)), 1, bp+104) 45896 string_concat(tls, bp+96, ts+585, 0, bp+104) 45897 } else { 45898 return SQLITE_ERROR 45899 } 45900 45901 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 45902 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_prepare(tls, db, *(*uintptr)(unsafe.Pointer(bp + 96)), -1, bp+128, uintptr(0)) 45903 } 45904 45905 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 96))) 45906 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 45907 if bindArgZero != 0 { 45908 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), nData, *(*uintptr)(unsafe.Pointer(apData))) 45909 } 45910 if bindArgOne != 0 { 45911 sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), 1, *(*uintptr)(unsafe.Pointer(apData + 1*8))) 45912 } 45913 for i = 2; i < nData && *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK; i++ { 45914 if *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8)) != 0 { 45915 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_bind_value(tls, *(*uintptr)(unsafe.Pointer(bp + 128)), i, *(*uintptr)(unsafe.Pointer(apData + uintptr(i)*8))) 45916 } 45917 } 45918 if *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 45919 sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 45920 *(*int32)(unsafe.Pointer(bp + 104)) = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 45921 } else { 45922 sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 128))) 45923 } 45924 } 45925 45926 if pRowid != 0 && *(*int32)(unsafe.Pointer(bp + 104)) == SQLITE_OK { 45927 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_last_insert_rowid(tls, db) 45928 } 45929 if *(*int32)(unsafe.Pointer(bp + 104)) != SQLITE_OK { 45930 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+27287, libc.VaList(bp+88, sqlite3.Xsqlite3_errmsg(tls, db))) 45931 } 45932 45933 return *(*int32)(unsafe.Pointer(bp + 104)) 45934 } 45935 45936 func echoTransactionCall(tls *libc.TLS, tab uintptr, zCall uintptr) int32 { 45937 bp := tls.Alloc(8) 45938 defer tls.Free(8) 45939 45940 var z uintptr 45941 var pVtab uintptr = tab 45942 z = sqlite3.Xsqlite3_mprintf(tls, ts+27908, libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName)) 45943 if z == uintptr(0) { 45944 return SQLITE_NOMEM 45945 } 45946 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, zCall) 45947 appendToEchoModule(tls, (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp, z) 45948 sqlite3.Xsqlite3_free(tls, z) 45949 return SQLITE_OK 45950 } 45951 45952 func echoBegin(tls *libc.TLS, tab uintptr) int32 { 45953 var rc int32 45954 var pVtab uintptr = tab 45955 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 45956 var zVal uintptr 45957 45958 if simulateVtabError(tls, pVtab, ts+27917) != 0 { 45959 return SQLITE_ERROR 45960 } 45961 45962 rc = echoTransactionCall(tls, tab, ts+27917) 45963 45964 if rc == SQLITE_OK { 45965 zVal = tcl.XTcl_GetVar(tls, interp, ts+27924, TCL_GLOBAL_ONLY) 45966 if zVal != 0 && 0 == libc.Xstrcmp(tls, zVal, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) { 45967 rc = SQLITE_ERROR 45968 } 45969 } 45970 if rc == SQLITE_OK { 45971 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 1 45972 } 45973 return rc 45974 } 45975 45976 func echoSync(tls *libc.TLS, tab uintptr) int32 { 45977 var rc int32 45978 var pVtab uintptr = tab 45979 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 45980 var zVal uintptr 45981 45982 if simulateVtabError(tls, pVtab, ts+27947) != 0 { 45983 return SQLITE_ERROR 45984 } 45985 45986 rc = echoTransactionCall(tls, tab, ts+27947) 45987 45988 if rc == SQLITE_OK { 45989 zVal = tcl.XTcl_GetVar(tls, interp, ts+27953, TCL_GLOBAL_ONLY) 45990 if zVal != 0 && 0 == libc.Xstrcmp(tls, zVal, (*echo_vtab)(unsafe.Pointer(pVtab)).FzTableName) { 45991 rc = -1 45992 } 45993 } 45994 return rc 45995 } 45996 45997 func echoCommit(tls *libc.TLS, tab uintptr) int32 { 45998 var pVtab uintptr = tab 45999 var rc int32 46000 46001 if simulateVtabError(tls, pVtab, ts+27975) != 0 { 46002 return SQLITE_ERROR 46003 } 46004 46005 sqlite3.Xsqlite3BeginBenignMalloc(tls) 46006 rc = echoTransactionCall(tls, tab, ts+27975) 46007 sqlite3.Xsqlite3EndBenignMalloc(tls) 46008 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 0 46009 return rc 46010 } 46011 46012 func echoRollback(tls *libc.TLS, tab uintptr) int32 { 46013 var rc int32 46014 var pVtab uintptr = tab 46015 46016 rc = echoTransactionCall(tls, tab, ts+27983) 46017 (*echo_vtab)(unsafe.Pointer(pVtab)).FinTransaction = 0 46018 return rc 46019 } 46020 46021 func overloadedGlobFunction(tls *libc.TLS, pContext uintptr, nArg int32, apArg uintptr) { 46022 bp := tls.Alloc(216) 46023 defer tls.Free(216) 46024 46025 var interp uintptr = sqlite3.Xsqlite3_user_data(tls, pContext) 46026 46027 var i int32 46028 var rc int32 46029 tcl.XTcl_DStringInit(tls, bp) 46030 tcl.XTcl_DStringAppendElement(tls, bp, ts+27993) 46031 for i = 0; i < nArg; i++ { 46032 tcl.XTcl_DStringAppendElement(tls, bp, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)))) 46033 } 46034 rc = tcl.XTcl_Eval(tls, interp, (*Tcl_DString)(unsafe.Pointer(bp)).Fstring) 46035 tcl.XTcl_DStringFree(tls, bp) 46036 if rc != 0 { 46037 sqlite3.Xsqlite3_result_error(tls, pContext, tcl.XTcl_GetStringResult(tls, interp), -1) 46038 } else { 46039 sqlite3.Xsqlite3_result_text(tls, pContext, tcl.XTcl_GetStringResult(tls, interp), 46040 -1, libc.UintptrFromInt32(-1)) 46041 } 46042 tcl.XTcl_ResetResult(tls, interp) 46043 } 46044 46045 func echoFindFunction(tls *libc.TLS, vtab uintptr, nArg int32, zFuncName uintptr, pxFunc uintptr, ppArg uintptr) int32 { 46046 bp := tls.Alloc(64) 46047 defer tls.Free(64) 46048 46049 var pVtab uintptr = vtab 46050 var interp uintptr = (*echo_vtab)(unsafe.Pointer(pVtab)).Finterp 46051 46052 if libc.Xstrcmp(tls, zFuncName, ts+27696) != 0 { 46053 return 0 46054 } 46055 if tcl.XTcl_GetCommandInfo(tls, interp, ts+27993, bp) == 0 { 46056 return 0 46057 } 46058 *(*uintptr)(unsafe.Pointer(pxFunc)) = *(*uintptr)(unsafe.Pointer(&struct { 46059 f func(*libc.TLS, uintptr, int32, uintptr) 46060 }{overloadedGlobFunction})) 46061 *(*uintptr)(unsafe.Pointer(ppArg)) = interp 46062 return 1 46063 } 46064 46065 func echoRename(tls *libc.TLS, vtab uintptr, zNewName uintptr) int32 { 46066 bp := tls.Alloc(24) 46067 defer tls.Free(24) 46068 46069 var rc int32 = SQLITE_OK 46070 var p uintptr = vtab 46071 46072 if simulateVtabError(tls, p, ts+28014) != 0 { 46073 return SQLITE_ERROR 46074 } 46075 46076 if (*echo_vtab)(unsafe.Pointer(p)).FisPattern != 0 { 46077 var nThis int32 = int32(libc.Xstrlen(tls, (*echo_vtab)(unsafe.Pointer(p)).FzThis)) 46078 var zSql uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+28022, 46079 libc.VaList(bp, (*echo_vtab)(unsafe.Pointer(p)).FzTableName, zNewName, (*echo_vtab)(unsafe.Pointer(p)).FzTableName+uintptr(nThis))) 46080 rc = sqlite3.Xsqlite3_exec(tls, (*echo_vtab)(unsafe.Pointer(p)).Fdb, zSql, uintptr(0), uintptr(0), uintptr(0)) 46081 sqlite3.Xsqlite3_free(tls, zSql) 46082 } 46083 46084 return rc 46085 } 46086 46087 func echoSavepoint(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 46088 return SQLITE_OK 46089 } 46090 46091 func echoRelease(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 46092 return SQLITE_OK 46093 } 46094 46095 func echoRollbackTo(tls *libc.TLS, pVTab uintptr, iSavepoint int32) int32 { 46096 return SQLITE_OK 46097 } 46098 46099 var echoModule = sqlite3_module{ 46100 FiVersion: 1, 46101 FxCreate: 0, 46102 FxConnect: 0, 46103 FxBestIndex: 0, 46104 FxDisconnect: 0, 46105 FxDestroy: 0, 46106 FxOpen: 0, 46107 FxClose: 0, 46108 FxFilter: 0, 46109 FxNext: 0, 46110 FxEof: 0, 46111 FxColumn: 0, 46112 FxRowid: 0, 46113 FxUpdate: 0, 46114 FxBegin: 0, 46115 FxSync: 0, 46116 FxCommit: 0, 46117 FxRollback: 0, 46118 FxFindFunction: 0, 46119 FxRename: 0, 46120 } 46121 46122 var echoModuleV2 = sqlite3_module{ 46123 FiVersion: 2, 46124 FxCreate: 0, 46125 FxConnect: 0, 46126 FxBestIndex: 0, 46127 FxDisconnect: 0, 46128 FxDestroy: 0, 46129 FxOpen: 0, 46130 FxClose: 0, 46131 FxFilter: 0, 46132 FxNext: 0, 46133 FxEof: 0, 46134 FxColumn: 0, 46135 FxRowid: 0, 46136 FxUpdate: 0, 46137 FxBegin: 0, 46138 FxSync: 0, 46139 FxCommit: 0, 46140 FxRollback: 0, 46141 FxFindFunction: 0, 46142 FxRename: 0, 46143 FxSavepoint: 0, 46144 FxRelease: 0, 46145 FxRollbackTo: 0, 46146 } 46147 46148 func moduleDestroy(tls *libc.TLS, p uintptr) { 46149 var pMod uintptr = p 46150 sqlite3.Xsqlite3_create_function(tls, (*EchoModule)(unsafe.Pointer(pMod)).Fdb, ts+28052, 46151 SQLITE_ANY, 1, uintptr(0), uintptr(0), uintptr(0), uintptr(0)) 46152 sqlite3.Xsqlite3_free(tls, p) 46153 } 46154 46155 func register_echo_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 46156 bp := tls.Alloc(8) 46157 defer tls.Free(8) 46158 46159 var rc int32 46160 46161 var pMod uintptr 46162 if objc != 2 { 46163 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 46164 return TCL_ERROR 46165 } 46166 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 46167 return TCL_ERROR 46168 } 46169 46170 pMod = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(EchoModule{}))) 46171 (*EchoModule)(unsafe.Pointer(pMod)).Finterp = interp 46172 (*EchoModule)(unsafe.Pointer(pMod)).Fdb = *(*uintptr)(unsafe.Pointer(bp)) 46173 rc = sqlite3.Xsqlite3_create_module_v2(tls, 46174 *(*uintptr)(unsafe.Pointer(bp)), ts+28090, uintptr(unsafe.Pointer(&echoModule)), pMod, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{moduleDestroy}))) 46175 46176 if rc == SQLITE_OK { 46177 pMod = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(EchoModule{}))) 46178 (*EchoModule)(unsafe.Pointer(pMod)).Finterp = interp 46179 (*EchoModule)(unsafe.Pointer(pMod)).Fdb = *(*uintptr)(unsafe.Pointer(bp)) 46180 rc = sqlite3.Xsqlite3_create_module_v2(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+28095, 46181 uintptr(unsafe.Pointer(&echoModuleV2)), pMod, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{moduleDestroy}))) 46182 } 46183 46184 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 46185 return TCL_OK 46186 } 46187 46188 func declare_vtab(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 46189 bp := tls.Alloc(8) 46190 defer tls.Free(8) 46191 46192 var rc int32 46193 if objc != 3 { 46194 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10061) 46195 return TCL_ERROR 46196 } 46197 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 46198 return TCL_ERROR 46199 } 46200 rc = sqlite3.Xsqlite3_declare_vtab(tls, *(*uintptr)(unsafe.Pointer(bp)), tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 46201 if rc != SQLITE_OK { 46202 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp))), uintptr(1)) 46203 return TCL_ERROR 46204 } 46205 return TCL_OK 46206 } 46207 46208 func Sqlitetest8_Init(tls *libc.TLS, interp uintptr) int32 { 46209 var i int32 46210 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd2))/uint64(unsafe.Sizeof(struct { 46211 FzName uintptr 46212 FxProc uintptr 46213 FclientData uintptr 46214 }{})); i++ { 46215 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd2[i].FzName, 46216 aObjCmd2[i].FxProc, aObjCmd2[i].FclientData, uintptr(0)) 46217 } 46218 return TCL_OK 46219 } 46220 46221 var aObjCmd2 = [2]struct { 46222 FzName uintptr 46223 FxProc uintptr 46224 FclientData uintptr 46225 }{ 46226 {FzName: ts + 28103, FxProc: 0}, 46227 {FzName: ts + 28124, FxProc: 0}, 46228 } 46229 46230 func c_collation_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 46231 bp := tls.Alloc(32) 46232 defer tls.Free(32) 46233 46234 var zErrFunction uintptr 46235 46236 var rc int32 46237 zErrFunction = ts + 28145 46238 if !(objc != 1) { 46239 goto __1 46240 } 46241 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 46242 return TCL_ERROR 46243 __1: 46244 ; 46245 rc = sqlite3.Xsqlite3_open(tls, ts+1757, bp+24) 46246 if !(rc != SQLITE_OK) { 46247 goto __2 46248 } 46249 zErrFunction = ts + 21564 46250 goto error_out 46251 __2: 46252 ; 46253 rc = sqlite3.Xsqlite3_create_collation(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), ts+13402, 456, uintptr(0), uintptr(0)) 46254 if !(rc != SQLITE_MISUSE) { 46255 goto __3 46256 } 46257 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 46258 zErrFunction = ts + 28149 46259 goto error_out 46260 __3: 46261 ; 46262 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 46263 return TCL_OK 46264 46265 error_out: 46266 tcl.XTcl_ResetResult(tls, interp) 46267 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28174, zErrFunction, 0)) 46268 return TCL_ERROR 46269 } 46270 46271 func c_realloc_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 46272 bp := tls.Alloc(24) 46273 defer tls.Free(24) 46274 46275 var p uintptr 46276 var zErrFunction uintptr 46277 zErrFunction = ts + 28145 46278 46279 if !(objc != 1) { 46280 goto __1 46281 } 46282 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 46283 return TCL_ERROR 46284 __1: 46285 ; 46286 p = sqlite3.Xsqlite3_malloc(tls, 5) 46287 if !!(p != 0) { 46288 goto __2 46289 } 46290 zErrFunction = ts + 28199 46291 goto error_out 46292 __2: 46293 ; 46294 p = sqlite3.Xsqlite3_realloc(tls, p, -1) 46295 if !(p != 0) { 46296 goto __3 46297 } 46298 zErrFunction = ts + 28214 46299 goto error_out 46300 __3: 46301 ; 46302 return TCL_OK 46303 46304 error_out: 46305 tcl.XTcl_ResetResult(tls, interp) 46306 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28174, zErrFunction, 0)) 46307 return TCL_ERROR 46308 } 46309 46310 func c_misuse_test(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 46311 bp := tls.Alloc(40) 46312 defer tls.Free(40) 46313 46314 var zErrFunction uintptr 46315 46316 var rc int32 46317 zErrFunction = ts + 28145 46318 *(*uintptr)(unsafe.Pointer(bp + 24)) = uintptr(0) 46319 46320 if !(objc != 1) { 46321 goto __1 46322 } 46323 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 46324 return TCL_ERROR 46325 __1: 46326 ; 46327 rc = sqlite3.Xsqlite3_open(tls, ts+1757, bp+24) 46328 if !(rc != SQLITE_OK) { 46329 goto __2 46330 } 46331 zErrFunction = ts + 21564 46332 goto error_out 46333 __2: 46334 ; 46335 sqlite3.Xsqlite3_close(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 46336 46337 rc = sqlite3.Xsqlite3_errcode(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 46338 if !(rc != SQLITE_MISUSE) { 46339 goto __3 46340 } 46341 zErrFunction = ts + 21470 46342 goto error_out 46343 __3: 46344 ; 46345 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 46346 rc = sqlite3.Xsqlite3_prepare(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 46347 if !(rc != SQLITE_MISUSE) { 46348 goto __4 46349 } 46350 zErrFunction = ts + 21645 46351 goto error_out 46352 __4: 46353 ; 46354 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 46355 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 46356 if !(rc != SQLITE_MISUSE) { 46357 goto __5 46358 } 46359 zErrFunction = ts + 21679 46360 goto error_out 46361 __5: 46362 ; 46363 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 46364 rc = sqlite3.Xsqlite3_prepare16(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 46365 if !(rc != SQLITE_MISUSE) { 46366 goto __6 46367 } 46368 zErrFunction = ts + 21661 46369 goto error_out 46370 __6: 46371 ; 46372 *(*uintptr)(unsafe.Pointer(bp + 32)) = uintptr(1234) 46373 rc = sqlite3.Xsqlite3_prepare16_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 24)), uintptr(0), 0, bp+32, uintptr(0)) 46374 if !(rc != SQLITE_MISUSE) { 46375 goto __7 46376 } 46377 zErrFunction = ts + 21741 46378 goto error_out 46379 __7: 46380 ; 46381 return TCL_OK 46382 46383 error_out: 46384 tcl.XTcl_ResetResult(tls, interp) 46385 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28174, zErrFunction, 0)) 46386 return TCL_ERROR 46387 } 46388 46389 func Sqlitetest9_Init(tls *libc.TLS, interp uintptr) int32 { 46390 var i int32 46391 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd3))/uint64(unsafe.Sizeof(struct { 46392 FzName uintptr 46393 FxProc uintptr 46394 FclientData uintptr 46395 }{})); i++ { 46396 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd3[i].FzName, 46397 aObjCmd3[i].FxProc, aObjCmd3[i].FclientData, uintptr(0)) 46398 } 46399 return TCL_OK 46400 } 46401 46402 var aObjCmd3 = [3]struct { 46403 FzName uintptr 46404 FxProc uintptr 46405 FclientData uintptr 46406 }{ 46407 {FzName: ts + 28230, FxProc: 0}, 46408 {FzName: ts + 28244, FxProc: 0}, 46409 {FzName: ts + 28259, FxProc: 0}, 46410 } 46411 46412 func Sqlitetestasync_Init(tls *libc.TLS, interp uintptr) int32 { 46413 return TCL_OK 46414 } 46415 46416 func resetAutoExtObjCmd(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 46417 sqlite3.Xsqlite3_reset_auto_extension(tls) 46418 return SQLITE_OK 46419 } 46420 46421 func Sqlitetest_autoext_Init(tls *libc.TLS, interp uintptr) int32 { 46422 tcl.XTcl_CreateObjCommand(tls, interp, ts+28276, 46423 *(*uintptr)(unsafe.Pointer(&struct { 46424 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 46425 }{resetAutoExtObjCmd})), uintptr(0), uintptr(0)) 46426 return TCL_OK 46427 } 46428 46429 func backupTestCmd(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 46430 bp := tls.Alloc(196) 46431 defer tls.Free(196) 46432 46433 *(*[5]BackupSubCommand)(unsafe.Pointer(bp)) = [5]BackupSubCommand{ 46434 {FzCmd: ts + 9485, FnArg: 1, FzArg: ts + 28305}, 46435 {FzCmd: ts + 28311, FeCmd: uint32(1), FzArg: ts + 584}, 46436 {FzCmd: ts + 28318, FeCmd: uint32(2), FzArg: ts + 584}, 46437 {FzCmd: ts + 28328, FeCmd: uint32(3), FzArg: ts + 584}, 46438 {}, 46439 } 46440 46441 var p uintptr = clientData 46442 46443 var rc int32 46444 46445 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 46446 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(BackupSubCommand{})), ts+11691, 0, bp+120) 46447 if rc != TCL_OK { 46448 return rc 46449 } 46450 if objc != 2+(*BackupSubCommand)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FnArg { 46451 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*BackupSubCommand)(unsafe.Pointer(bp+uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FzArg) 46452 return TCL_ERROR 46453 } 46454 46455 switch (*BackupSubCommand)(unsafe.Pointer(bp + uintptr(*(*int32)(unsafe.Pointer(bp + 120)))*24)).FeCmd { 46456 case uint32(1): 46457 { 46458 var zCmdName uintptr 46459 46460 zCmdName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))) 46461 tcl.XTcl_GetCommandInfo(tls, interp, zCmdName, bp+128) 46462 (*Tcl_CmdInfo)(unsafe.Pointer(bp + 128)).FdeleteProc = uintptr(0) 46463 tcl.XTcl_SetCommandInfo(tls, interp, zCmdName, bp+128) 46464 tcl.XTcl_DeleteCommand(tls, interp, zCmdName) 46465 46466 rc = sqlite3.Xsqlite3_backup_finish(tls, p) 46467 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 46468 break 46469 46470 } 46471 46472 case uint32(0): 46473 { 46474 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+192) { 46475 return TCL_ERROR 46476 } 46477 rc = sqlite3.Xsqlite3_backup_step(tls, p, *(*int32)(unsafe.Pointer(bp + 192))) 46478 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 46479 break 46480 46481 } 46482 46483 case uint32(2): 46484 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_backup_remaining(tls, p))) 46485 break 46486 46487 case uint32(3): 46488 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_backup_pagecount(tls, p))) 46489 break 46490 } 46491 46492 return TCL_OK 46493 } 46494 46495 type BackupSubCommand = struct { 46496 FzCmd uintptr 46497 FeCmd uint32 46498 FnArg int32 46499 FzArg uintptr 46500 } 46501 46502 func backupTestFinish(tls *libc.TLS, clientData ClientData) { 46503 var pBackup uintptr = clientData 46504 sqlite3.Xsqlite3_backup_finish(tls, pBackup) 46505 } 46506 46507 func backupTestInit(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 46508 bp := tls.Alloc(32) 46509 defer tls.Free(32) 46510 46511 var pBackup uintptr 46512 46513 var zDestName uintptr 46514 var zSrcName uintptr 46515 var zCmd uintptr 46516 46517 if objc != 6 { 46518 tcl.XTcl_WrongNumArgs(tls, 46519 interp, 1, objv, ts+28338) 46520 return TCL_ERROR 46521 } 46522 46523 zCmd = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 46524 getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), bp+16) 46525 zDestName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 46526 getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))), bp+24) 46527 zSrcName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8))) 46528 46529 pBackup = sqlite3.Xsqlite3_backup_init(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDestName, *(*uintptr)(unsafe.Pointer(bp + 24)), zSrcName) 46530 if !(pBackup != 0) { 46531 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28384, 0)) 46532 return TCL_ERROR 46533 } 46534 46535 tcl.XTcl_CreateObjCommand(tls, interp, zCmd, *(*uintptr)(unsafe.Pointer(&struct { 46536 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 46537 }{backupTestCmd})), pBackup, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{backupTestFinish}))) 46538 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 46539 return TCL_OK 46540 } 46541 46542 func Sqlitetestbackup_Init(tls *libc.TLS, interp uintptr) int32 { 46543 tcl.XTcl_CreateObjCommand(tls, interp, ts+28413, *(*uintptr)(unsafe.Pointer(&struct { 46544 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 46545 }{backupTestInit})), uintptr(0), uintptr(0)) 46546 return TCL_OK 46547 } 46548 46549 type tcl_vtab1 = struct { 46550 Fbase sqlite3_vtab 46551 Finterp uintptr 46552 FpCmd uintptr 46553 Fdb uintptr 46554 } 46555 46556 type tcl_vtab = tcl_vtab1 46557 type tcl_cursor1 = struct { 46558 Fbase sqlite3_vtab_cursor 46559 FpStmt uintptr 46560 } 46561 46562 type tcl_cursor = tcl_cursor1 46563 46564 func tclDequote(tls *libc.TLS, z uintptr) { 46565 var q int8 = *(*int8)(unsafe.Pointer(z)) 46566 46567 if int32(q) == '[' || int32(q) == '\'' || int32(q) == '"' || int32(q) == '`' { 46568 var iIn int32 = 1 46569 var iOut int32 = 0 46570 if int32(q) == '[' { 46571 q = int8(']') 46572 } 46573 46574 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 46575 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(q) { 46576 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(q) { 46577 iIn++ 46578 break 46579 } else { 46580 iIn = iIn + 2 46581 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = q 46582 } 46583 } else { 46584 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 46585 } 46586 } 46587 46588 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 46589 } 46590 } 46591 46592 func tclConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 46593 bp := tls.Alloc(8) 46594 defer tls.Free(8) 46595 46596 var interp uintptr = pAux 46597 var pTab uintptr = uintptr(0) 46598 var zCmd uintptr = uintptr(0) 46599 var pScript uintptr = uintptr(0) 46600 var rc int32 = SQLITE_OK 46601 46602 if argc != 4 { 46603 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28428, 0) 46604 return SQLITE_ERROR 46605 } 46606 46607 zCmd = sqlite3.Xsqlite3_malloc64(tls, libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))+uint64(1)) 46608 pTab = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(tcl_vtab{}))) 46609 if zCmd != 0 && pTab != 0 { 46610 libc.X__builtin___memcpy_chk(tls, zCmd, *(*uintptr)(unsafe.Pointer(argv + 3*8)), libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8)))+uint64(1), libc.X__builtin_object_size(tls, zCmd, 0)) 46611 tclDequote(tls, zCmd) 46612 libc.X__builtin___memset_chk(tls, pTab, 0, uint64(unsafe.Sizeof(tcl_vtab{})), libc.X__builtin_object_size(tls, pTab, 0)) 46613 46614 (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd = tcl.XTcl_NewStringObj(tls, zCmd, -1) 46615 (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp = interp 46616 (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb = db 46617 (*Tcl_Obj)(unsafe.Pointer((*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd)).FrefCount++ 46618 46619 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 46620 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 46621 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27481, -1)) 46622 46623 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 46624 if rc != TCL_OK { 46625 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, tcl.XTcl_GetStringResult(tls, interp))) 46626 rc = SQLITE_ERROR 46627 } else { 46628 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, tcl.XTcl_GetStringResult(tls, interp)) 46629 } 46630 46631 if rc != SQLITE_OK { 46632 sqlite3.Xsqlite3_free(tls, pTab) 46633 pTab = uintptr(0) 46634 } 46635 } else { 46636 rc = SQLITE_NOMEM 46637 } 46638 46639 sqlite3.Xsqlite3_free(tls, zCmd) 46640 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 46641 return rc 46642 } 46643 46644 func tclDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 46645 var pTab uintptr = pVtab 46646 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 46647 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd)).FrefCount, 1) <= 0 { 46648 tcl.XTclFreeObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 46649 } 46650 } 46651 sqlite3.Xsqlite3_free(tls, pTab) 46652 return SQLITE_OK 46653 } 46654 46655 func tclOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 46656 var pCur uintptr 46657 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(tcl_cursor{}))) 46658 if pCur == uintptr(0) { 46659 return SQLITE_NOMEM 46660 } 46661 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(tcl_cursor{})), libc.X__builtin_object_size(tls, pCur, 0)) 46662 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 46663 return SQLITE_OK 46664 } 46665 46666 func tclClose(tls *libc.TLS, cur uintptr) int32 { 46667 var pCur uintptr = cur 46668 if pCur != 0 { 46669 sqlite3.Xsqlite3_finalize(tls, (*tcl_cursor)(unsafe.Pointer(pCur)).FpStmt) 46670 sqlite3.Xsqlite3_free(tls, pCur) 46671 } 46672 return SQLITE_OK 46673 } 46674 46675 func tclNext(tls *libc.TLS, pVtabCursor uintptr) int32 { 46676 bp := tls.Alloc(8) 46677 defer tls.Free(8) 46678 46679 var pCsr uintptr = pVtabCursor 46680 if (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt != 0 { 46681 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 46682 var rc int32 = sqlite3.Xsqlite3_step(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt) 46683 if rc != SQLITE_ROW { 46684 var zErr uintptr 46685 rc = sqlite3.Xsqlite3_finalize(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt) 46686 (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 46687 if rc != SQLITE_OK { 46688 zErr = sqlite3.Xsqlite3_errmsg(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb) 46689 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zErr)) 46690 } 46691 } 46692 } 46693 return SQLITE_OK 46694 } 46695 46696 func tclFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 46697 bp := tls.Alloc(56) 46698 defer tls.Free(56) 46699 46700 var pCsr uintptr = pVtabCursor 46701 var pTab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 46702 var interp uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp 46703 var pScript uintptr 46704 var pArg uintptr 46705 var ii int32 46706 var rc int32 46707 46708 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 46709 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 46710 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27545, -1)) 46711 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewIntObj(tls, idxNum)) 46712 if idxStr != 0 { 46713 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, idxStr, -1)) 46714 } else { 46715 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 46716 } 46717 46718 pArg = tcl.XTcl_NewObj(tls) 46719 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 46720 for ii = 0; ii < argc; ii++ { 46721 var zVal uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(ii)*8))) 46722 var pVal uintptr 46723 if zVal == uintptr(0) { 46724 pVal = tcl.XTcl_NewObj(tls) 46725 for rc = sqlite3.Xsqlite3_vtab_in_first(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(ii)*8)), bp+32); rc == SQLITE_OK && *(*uintptr)(unsafe.Pointer(bp + 32)) != 0; rc = sqlite3.Xsqlite3_vtab_in_next(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(ii)*8)), bp+32) { 46726 var pVal2 uintptr = uintptr(0) 46727 zVal = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 32))) 46728 if zVal != 0 { 46729 pVal2 = tcl.XTcl_NewStringObj(tls, zVal, -1) 46730 } else { 46731 pVal2 = tcl.XTcl_NewObj(tls) 46732 } 46733 tcl.XTcl_ListObjAppendElement(tls, interp, pVal, pVal2) 46734 } 46735 } else { 46736 pVal = tcl.XTcl_NewStringObj(tls, zVal, -1) 46737 } 46738 tcl.XTcl_ListObjAppendElement(tls, interp, pArg, pVal) 46739 } 46740 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, pArg) 46741 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 46742 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount, 1) <= 0 { 46743 tcl.XTclFreeObj(tls, pArg) 46744 } 46745 } 46746 46747 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 46748 if rc != TCL_OK { 46749 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 46750 rc = SQLITE_ERROR 46751 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, zErr)) 46752 } else { 46753 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 46754 *(*uintptr)(unsafe.Pointer(bp + 48)) = uintptr(0) 46755 46756 rc = tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+40, bp+48) 46757 if rc != TCL_OK { 46758 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 46759 rc = SQLITE_ERROR 46760 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zErr)) 46761 } else { 46762 for ii = 0; rc == SQLITE_OK && ii < *(*int32)(unsafe.Pointer(bp + 40)); ii = ii + 2 { 46763 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)) + uintptr(ii)*8))) 46764 var p uintptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 48)) + uintptr(ii+1)*8)) 46765 if sqlite3.Xsqlite3_stricmp(tls, ts+1947, zCmd) == 0 { 46766 var zSql uintptr = tcl.XTcl_GetString(tls, p) 46767 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb, zSql, -1, pCsr+8, uintptr(0)) 46768 if rc != SQLITE_OK { 46769 var zErr uintptr = sqlite3.Xsqlite3_errmsg(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).Fdb) 46770 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28454, libc.VaList(bp+16, zErr)) 46771 } 46772 } else { 46773 rc = SQLITE_ERROR 46774 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28454, libc.VaList(bp+24, zCmd)) 46775 } 46776 } 46777 } 46778 } 46779 46780 if rc == SQLITE_OK { 46781 rc = tclNext(tls, pVtabCursor) 46782 } 46783 return rc 46784 } 46785 46786 func tclColumn(tls *libc.TLS, pVtabCursor uintptr, ctx uintptr, i int32) int32 { 46787 var pCsr uintptr = pVtabCursor 46788 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt, i+1)) 46789 return SQLITE_OK 46790 } 46791 46792 func tclRowid(tls *libc.TLS, pVtabCursor uintptr, pRowid uintptr) int32 { 46793 var pCsr uintptr = pVtabCursor 46794 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt, 0) 46795 return SQLITE_OK 46796 } 46797 46798 func tclEof(tls *libc.TLS, pVtabCursor uintptr) int32 { 46799 var pCsr uintptr = pVtabCursor 46800 return libc.Bool32((*tcl_cursor)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 46801 } 46802 46803 func testBestIndexObjConstraints(tls *libc.TLS, interp uintptr, pIdxInfo uintptr) { 46804 var ii int32 46805 var pRes uintptr = tcl.XTcl_NewObj(tls) 46806 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 46807 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 46808 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 46809 var pElem uintptr = tcl.XTcl_NewObj(tls) 46810 var zOp uintptr = ts + 3405 46811 46812 (*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount++ 46813 46814 switch int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) { 46815 case SQLITE_INDEX_CONSTRAINT_EQ: 46816 zOp = ts + 28469 46817 break 46818 case SQLITE_INDEX_CONSTRAINT_GT: 46819 zOp = ts + 28472 46820 break 46821 case SQLITE_INDEX_CONSTRAINT_LE: 46822 zOp = ts + 28475 46823 break 46824 case SQLITE_INDEX_CONSTRAINT_LT: 46825 zOp = ts + 28478 46826 break 46827 case SQLITE_INDEX_CONSTRAINT_GE: 46828 zOp = ts + 28481 46829 break 46830 case SQLITE_INDEX_CONSTRAINT_MATCH: 46831 zOp = ts + 28484 46832 break 46833 case SQLITE_INDEX_CONSTRAINT_LIKE: 46834 zOp = ts + 27691 46835 break 46836 case SQLITE_INDEX_CONSTRAINT_GLOB: 46837 zOp = ts + 27696 46838 break 46839 case SQLITE_INDEX_CONSTRAINT_REGEXP: 46840 zOp = ts + 6831 46841 break 46842 case SQLITE_INDEX_CONSTRAINT_NE: 46843 zOp = ts + 28490 46844 break 46845 case SQLITE_INDEX_CONSTRAINT_ISNOT: 46846 zOp = ts + 28493 46847 break 46848 case SQLITE_INDEX_CONSTRAINT_ISNOTNULL: 46849 zOp = ts + 28499 46850 break 46851 case SQLITE_INDEX_CONSTRAINT_ISNULL: 46852 zOp = ts + 28509 46853 break 46854 case SQLITE_INDEX_CONSTRAINT_IS: 46855 zOp = ts + 5851 46856 break 46857 case SQLITE_INDEX_CONSTRAINT_LIMIT: 46858 zOp = ts + 28516 46859 break 46860 case SQLITE_INDEX_CONSTRAINT_OFFSET: 46861 zOp = ts + 28522 46862 break 46863 } 46864 46865 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+6194, -1)) 46866 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, zOp, -1)) 46867 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28529, -1)) 46868 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn)) 46869 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28536, -1)) 46870 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable))) 46871 46872 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, pElem) 46873 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 46874 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount, 1) <= 0 { 46875 tcl.XTclFreeObj(tls, pElem) 46876 } 46877 } 46878 } 46879 46880 tcl.XTcl_SetObjResult(tls, interp, pRes) 46881 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 46882 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount, 1) <= 0 { 46883 tcl.XTclFreeObj(tls, pRes) 46884 } 46885 } 46886 } 46887 46888 func testBestIndexObjOrderby(tls *libc.TLS, interp uintptr, pIdxInfo uintptr) { 46889 var ii int32 46890 var pRes uintptr = tcl.XTcl_NewObj(tls) 46891 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 46892 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnOrderBy; ii++ { 46893 var pOrder uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaOrderBy + uintptr(ii)*8 46894 var pElem uintptr = tcl.XTcl_NewObj(tls) 46895 (*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount++ 46896 46897 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28529, -1)) 46898 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, (*sqlite3_index_orderby)(unsafe.Pointer(pOrder)).FiColumn)) 46899 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewStringObj(tls, ts+28543, -1)) 46900 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pElem, tcl.XTcl_NewIntObj(tls, int32((*sqlite3_index_orderby)(unsafe.Pointer(pOrder)).Fdesc))) 46901 46902 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, pElem) 46903 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 46904 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pElem)).FrefCount, 1) <= 0 { 46905 tcl.XTclFreeObj(tls, pElem) 46906 } 46907 } 46908 } 46909 46910 tcl.XTcl_SetObjResult(tls, interp, pRes) 46911 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 46912 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount, 1) <= 0 { 46913 tcl.XTclFreeObj(tls, pRes) 46914 } 46915 } 46916 } 46917 46918 func testBestIndexObj(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 46919 bp := tls.Alloc(80) 46920 defer tls.Free(80) 46921 46922 *(*[7]uintptr)(unsafe.Pointer(bp)) = [7]uintptr{ 46923 ts + 28548, 46924 ts + 28560, 46925 ts + 28568, 46926 ts + 28573, 46927 ts + 28582, 46928 ts + 28585, 46929 uintptr(0), 46930 } 46931 46932 var pIdxInfo uintptr = clientData 46933 46934 if objc < 2 { 46935 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 46936 return TCL_ERROR 46937 } 46938 if tcl.XTcl_GetIndexFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, ts+2014, 0, bp+56) != 0 { 46939 return TCL_ERROR 46940 } 46941 46942 if *(*int32)(unsafe.Pointer(bp + 56)) < 4 && objc != 2 { 46943 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 46944 return TCL_ERROR 46945 } 46946 if *(*int32)(unsafe.Pointer(bp + 56)) == 4 && objc != 4 { 46947 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+28595) 46948 return TCL_ERROR 46949 } 46950 if *(*int32)(unsafe.Pointer(bp + 56)) == 5 && objc != 3 && objc != 4 { 46951 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+28609) 46952 return TCL_ERROR 46953 } 46954 46955 switch *(*int32)(unsafe.Pointer(bp + 56)) { 46956 case 0: 46957 testBestIndexObjConstraints(tls, interp, pIdxInfo) 46958 break 46959 46960 case 1: 46961 testBestIndexObjOrderby(tls, interp, pIdxInfo) 46962 break 46963 46964 case 2: 46965 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FcolUsed))) 46966 break 46967 46968 case 3: 46969 { 46970 var bDistinct int32 = sqlite3.Xsqlite3_vtab_distinct(tls, pIdxInfo) 46971 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, bDistinct)) 46972 break 46973 46974 } 46975 46976 case 4: 46977 { 46978 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+60) != 0 || 46979 tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+64) != 0 { 46980 return TCL_ERROR 46981 } 46982 tcl.XTcl_SetObjResult(tls, interp, 46983 tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_vtab_in(tls, pIdxInfo, *(*int32)(unsafe.Pointer(bp + 60)), *(*int32)(unsafe.Pointer(bp + 64))))) 46984 break 46985 46986 } 46987 46988 case 5: 46989 { 46990 *(*int32)(unsafe.Pointer(bp + 68)) = 0 46991 var rc int32 46992 *(*uintptr)(unsafe.Pointer(bp + 72)) = uintptr(0) 46993 var zVal uintptr = ts + 584 46994 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+68) != 0 { 46995 return TCL_ERROR 46996 } 46997 rc = sqlite3.Xsqlite3_vtab_rhs_value(tls, pIdxInfo, *(*int32)(unsafe.Pointer(bp + 68)), bp+72) 46998 if rc != SQLITE_OK && rc != SQLITE_NOTFOUND { 46999 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 47000 return TCL_ERROR 47001 } 47002 if *(*uintptr)(unsafe.Pointer(bp + 72)) != 0 { 47003 zVal = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(bp + 72))) 47004 } else if objc == 4 { 47005 zVal = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 47006 } 47007 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, zVal, -1)) 47008 break 47009 47010 } 47011 } 47012 47013 return TCL_OK 47014 } 47015 47016 func tclBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 47017 bp := tls.Alloc(108) 47018 defer tls.Free(108) 47019 47020 var pTab uintptr = tab 47021 var interp uintptr = (*tcl_vtab)(unsafe.Pointer(pTab)).Finterp 47022 var rc int32 = SQLITE_OK 47023 47024 var pScript uintptr 47025 47026 pScript = tcl.XTcl_DuplicateObj(tls, (*tcl_vtab)(unsafe.Pointer(pTab)).FpCmd) 47027 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 47028 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, ts+27599, -1)) 47029 47030 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([24]int8{})), bp+56, ts+28625, libc.VaList(bp, libc.PostIncInt32(&iNext, 1))) 47031 tcl.XTcl_CreateObjCommand(tls, interp, bp+56, *(*uintptr)(unsafe.Pointer(&struct { 47032 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 47033 }{testBestIndexObj})), pIdxInfo, uintptr(0)) 47034 tcl.XTcl_ListObjAppendElement(tls, interp, pScript, tcl.XTcl_NewStringObj(tls, bp+56, -1)) 47035 rc = tcl.XTcl_EvalObjEx(tls, interp, pScript, TCL_EVAL_GLOBAL) 47036 tcl.XTcl_DeleteCommand(tls, interp, bp+56) 47037 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 47038 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount, 1) <= 0 { 47039 tcl.XTclFreeObj(tls, pScript) 47040 } 47041 } 47042 47043 if rc != TCL_OK { 47044 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 47045 rc = SQLITE_ERROR 47046 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, zErr)) 47047 } else { 47048 var pRes uintptr = tcl.XTcl_GetObjResult(tls, interp) 47049 *(*uintptr)(unsafe.Pointer(bp + 88)) = uintptr(0) 47050 47051 rc = tcl.XTcl_ListObjGetElements(tls, interp, pRes, bp+80, bp+88) 47052 if rc != TCL_OK { 47053 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 47054 rc = SQLITE_ERROR 47055 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+16, zErr)) 47056 } else { 47057 var ii int32 47058 var iArgv int32 = 1 47059 for ii = 0; rc == SQLITE_OK && ii < *(*int32)(unsafe.Pointer(bp + 80)); ii = ii + 2 { 47060 var zCmd uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)) + uintptr(ii)*8))) 47061 var p uintptr = *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 88)) + uintptr(ii+1)*8)) 47062 if sqlite3.Xsqlite3_stricmp(tls, ts+28637, zCmd) == 0 { 47063 rc = tcl.XTcl_GetDoubleFromObj(tls, interp, p, pIdxInfo+64) 47064 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28560, zCmd) == 0 { 47065 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, pIdxInfo+60) 47066 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28642, zCmd) == 0 { 47067 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, pIdxInfo+40) 47068 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28649, zCmd) == 0 { 47069 sqlite3.Xsqlite3_free(tls, (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr) 47070 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+24, tcl.XTcl_GetString(tls, p))) 47071 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 47072 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28656, zCmd) == 0 { 47073 *(*Tcl_WideInt)(unsafe.Pointer(bp + 96)) = int64(0) 47074 rc = tcl.XTcl_GetWideIntFromObj(tls, interp, p, bp+96) 47075 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedRows = sqlite3_int64(tRowcnt(*(*Tcl_WideInt)(unsafe.Pointer(bp + 96)))) 47076 } else if sqlite3.Xsqlite3_stricmp(tls, ts+28661, zCmd) == 0 || 47077 sqlite3.Xsqlite3_stricmp(tls, ts+28665, zCmd) == 0 { 47078 rc = tcl.XTcl_GetIntFromObj(tls, interp, p, bp+104) 47079 if rc == SQLITE_OK { 47080 if *(*int32)(unsafe.Pointer(bp + 104)) < 0 || *(*int32)(unsafe.Pointer(bp + 104)) >= (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint { 47081 rc = SQLITE_ERROR 47082 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28670, libc.VaList(bp+32, *(*int32)(unsafe.Pointer(bp + 104)))) 47083 } else { 47084 var bOmit int32 = libc.Bool32(int32(*(*int8)(unsafe.Pointer(zCmd))) == 'o' || int32(*(*int8)(unsafe.Pointer(zCmd))) == 'O') 47085 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(*(*int32)(unsafe.Pointer(bp + 104)))*8)).FargvIndex = libc.PostIncInt32(&iArgv, 1) 47086 (*sqlite3_index_constraint_usage)(unsafe.Pointer((*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(*(*int32)(unsafe.Pointer(bp + 104)))*8)).Fomit = uint8(bOmit) 47087 } 47088 } 47089 } else { 47090 rc = SQLITE_ERROR 47091 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+28454, libc.VaList(bp+40, zCmd)) 47092 } 47093 if rc != SQLITE_OK && (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg == uintptr(0) { 47094 var zErr uintptr = tcl.XTcl_GetStringResult(tls, interp) 47095 (*tcl_vtab)(unsafe.Pointer(pTab)).Fbase.FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+48, zErr)) 47096 } 47097 } 47098 } 47099 } 47100 47101 return rc 47102 } 47103 47104 var iNext int32 = 43 47105 47106 var tclModule = sqlite3_module{ 47107 FxCreate: 0, 47108 FxConnect: 0, 47109 FxBestIndex: 0, 47110 FxDisconnect: 0, 47111 FxDestroy: 0, 47112 FxOpen: 0, 47113 FxClose: 0, 47114 FxFilter: 0, 47115 FxNext: 0, 47116 FxEof: 0, 47117 FxColumn: 0, 47118 FxRowid: 0, 47119 } 47120 47121 func register_tcl_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47122 bp := tls.Alloc(8) 47123 defer tls.Free(8) 47124 47125 if objc != 2 { 47126 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 47127 return TCL_ERROR 47128 } 47129 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 47130 return TCL_ERROR 47131 } 47132 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+28685, uintptr(unsafe.Pointer(&tclModule)), interp) 47133 return TCL_OK 47134 } 47135 47136 func Sqlitetesttcl_Init(tls *libc.TLS, interp uintptr) int32 { 47137 var i int32 47138 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd4))/uint64(unsafe.Sizeof(struct { 47139 FzName uintptr 47140 FxProc uintptr 47141 FclientData uintptr 47142 }{})); i++ { 47143 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd4[i].FzName, 47144 aObjCmd4[i].FxProc, aObjCmd4[i].FclientData, uintptr(0)) 47145 } 47146 return TCL_OK 47147 } 47148 47149 var aObjCmd4 = [1]struct { 47150 FzName uintptr 47151 FxProc uintptr 47152 FclientData uintptr 47153 }{ 47154 {FzName: ts + 28689, FxProc: 0}, 47155 } 47156 47157 func ptrToText(tls *libc.TLS, p uintptr) uintptr { 47158 bp := tls.Alloc(8) 47159 defer tls.Free(8) 47160 47161 sqlite3.Xsqlite3_snprintf(tls, int32(uint64(unsafe.Sizeof(buf))-uint64(1)), uintptr(unsafe.Pointer(&buf)), ts+9889, libc.VaList(bp, p)) 47162 return uintptr(unsafe.Pointer(&buf)) 47163 } 47164 47165 var buf [100]int8 47166 47167 func blobHandleFromObj1(tls *libc.TLS, interp uintptr, pObj uintptr, ppBlob uintptr) int32 { 47168 bp := tls.Alloc(8) 47169 defer tls.Free(8) 47170 47171 var z uintptr 47172 47173 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 47174 if *(*int32)(unsafe.Pointer(bp)) == 0 { 47175 *(*uintptr)(unsafe.Pointer(ppBlob)) = uintptr(0) 47176 } else if *(*int32)(unsafe.Pointer(bp)) > 9 && 0 == libc.Xmemcmp(tls, ts+28709, z, uint64(9)) { 47177 var channel Tcl_Channel 47178 var instanceData ClientData 47179 47180 channel = tcl.XTcl_GetChannel(tls, interp, z, bp+4) 47181 if !(channel != 0) { 47182 return TCL_ERROR 47183 } 47184 47185 tcl.XTcl_Flush(tls, channel) 47186 tcl.XTcl_Seek(tls, channel, int64(0), SEEK_SET) 47187 47188 instanceData = tcl.XTcl_GetChannelInstanceData(tls, channel) 47189 *(*uintptr)(unsafe.Pointer(ppBlob)) = *(*uintptr)(unsafe.Pointer(instanceData)) 47190 } else { 47191 *(*uintptr)(unsafe.Pointer(ppBlob)) = sqlite3TestTextToPtr(tls, z) 47192 } 47193 47194 return TCL_OK 47195 } 47196 47197 func blobStringFromObj(tls *libc.TLS, pObj uintptr) uintptr { 47198 bp := tls.Alloc(4) 47199 defer tls.Free(4) 47200 47201 var z uintptr 47202 z = tcl.XTcl_GetStringFromObj(tls, pObj, bp) 47203 return func() uintptr { 47204 if *(*int32)(unsafe.Pointer(bp)) != 0 { 47205 return z 47206 } 47207 return uintptr(0) 47208 }() 47209 } 47210 47211 func test_blob_open(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47212 bp := tls.Alloc(40) 47213 defer tls.Free(40) 47214 47215 var zDb uintptr 47216 var zTable uintptr 47217 var zColumn uintptr 47218 47219 var zVarname uintptr 47220 47221 *(*uintptr)(unsafe.Pointer(bp + 32)) = bp 47222 var rc int32 47223 47224 if objc != 8 { 47225 var zUsage uintptr = ts + 28719 47226 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, zUsage) 47227 return TCL_ERROR 47228 } 47229 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+8) != 0 { 47230 return TCL_ERROR 47231 } 47232 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 47233 zTable = blobStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 47234 zColumn = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 47235 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+16) != 0 { 47236 return TCL_ERROR 47237 } 47238 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 6*8)), bp) != 0 { 47239 return TCL_ERROR 47240 } 47241 zVarname = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 7*8)), bp+24) 47242 47243 if *(*int32)(unsafe.Pointer(bp + 24)) > 0 { 47244 rc = sqlite3.Xsqlite3_blob_open(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), zDb, zTable, zColumn, *(*Tcl_WideInt)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp)), bp+32) 47245 tcl.XTcl_SetVar(tls, interp, zVarname, ptrToText(tls, *(*uintptr)(unsafe.Pointer(bp + 32))), 0) 47246 } else { 47247 rc = sqlite3.Xsqlite3_blob_open(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), zDb, zTable, zColumn, *(*Tcl_WideInt)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp)), uintptr(0)) 47248 } 47249 47250 if rc == SQLITE_OK { 47251 tcl.XTcl_ResetResult(tls, interp) 47252 } else { 47253 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 47254 return TCL_ERROR 47255 } 47256 return TCL_OK 47257 } 47258 47259 func test_blob_close(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47260 bp := tls.Alloc(8) 47261 defer tls.Free(8) 47262 47263 var rc int32 47264 47265 if objc != 2 { 47266 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28764) 47267 return TCL_ERROR 47268 } 47269 47270 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 47271 return TCL_ERROR 47272 } 47273 rc = sqlite3.Xsqlite3_blob_close(tls, *(*uintptr)(unsafe.Pointer(bp))) 47274 47275 if rc != 0 { 47276 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 47277 } else { 47278 tcl.XTcl_ResetResult(tls, interp) 47279 } 47280 return TCL_OK 47281 } 47282 47283 func test_blob_bytes(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47284 bp := tls.Alloc(8) 47285 defer tls.Free(8) 47286 47287 var nByte int32 47288 47289 if objc != 2 { 47290 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28764) 47291 return TCL_ERROR 47292 } 47293 47294 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 47295 return TCL_ERROR 47296 } 47297 nByte = sqlite3.Xsqlite3_blob_bytes(tls, *(*uintptr)(unsafe.Pointer(bp))) 47298 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nByte)) 47299 47300 return TCL_OK 47301 } 47302 47303 func test_blob_read(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47304 bp := tls.Alloc(32) 47305 defer tls.Free(32) 47306 47307 var zBuf uintptr = uintptr(0) 47308 var rc int32 47309 47310 if objc != 4 { 47311 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28771) 47312 return TCL_ERROR 47313 } 47314 47315 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 47316 return TCL_ERROR 47317 } 47318 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) || 47319 TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+28) { 47320 return TCL_ERROR 47321 } 47322 47323 if *(*int32)(unsafe.Pointer(bp + 28)) > 0 { 47324 zBuf = tcl.XTcl_AttemptAlloc(tls, uint32(*(*int32)(unsafe.Pointer(bp + 28)))) 47325 if zBuf == uintptr(0) { 47326 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+28788, 0)) 47327 return TCL_ERROR 47328 } 47329 } 47330 rc = sqlite3.Xsqlite3_blob_read(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zBuf, *(*int32)(unsafe.Pointer(bp + 28)), *(*int32)(unsafe.Pointer(bp + 24))) 47331 if rc == SQLITE_OK { 47332 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, zBuf, *(*int32)(unsafe.Pointer(bp + 28)))) 47333 } else { 47334 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 47335 } 47336 tcl.XTcl_Free(tls, zBuf) 47337 47338 return func() int32 { 47339 if rc == SQLITE_OK { 47340 return TCL_OK 47341 } 47342 return TCL_ERROR 47343 }() 47344 } 47345 47346 func test_blob_write(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 47347 bp := tls.Alloc(16) 47348 defer tls.Free(16) 47349 47350 var rc int32 47351 var zBuf uintptr 47352 47353 if objc != 4 && objc != 5 { 47354 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28849) 47355 return TCL_ERROR 47356 } 47357 47358 if blobHandleFromObj1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 47359 return TCL_ERROR 47360 } 47361 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) { 47362 return TCL_ERROR 47363 } 47364 47365 zBuf = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) 47366 if objc == 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+12) != 0 { 47367 return TCL_ERROR 47368 } 47369 rc = sqlite3.Xsqlite3_blob_write(tls, *(*uintptr)(unsafe.Pointer(bp)), zBuf, *(*int32)(unsafe.Pointer(bp + 12)), *(*int32)(unsafe.Pointer(bp + 8))) 47370 if rc != SQLITE_OK { 47371 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 47372 } 47373 47374 return func() int32 { 47375 if rc == SQLITE_OK { 47376 return TCL_OK 47377 } 47378 return TCL_ERROR 47379 }() 47380 } 47381 47382 func Sqlitetest_blob_Init(tls *libc.TLS, interp uintptr) int32 { 47383 var i int32 47384 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd5))/uint64(unsafe.Sizeof(struct { 47385 FzName uintptr 47386 FxProc uintptr 47387 }{})); i++ { 47388 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd5[i].FzName, aObjCmd5[i].FxProc, uintptr(0), uintptr(0)) 47389 } 47390 return TCL_OK 47391 } 47392 47393 var aObjCmd5 = [5]struct { 47394 FzName uintptr 47395 FxProc uintptr 47396 }{ 47397 {FzName: ts + 28876, FxProc: 0}, 47398 {FzName: ts + 28894, FxProc: 0}, 47399 {FzName: ts + 28913, FxProc: 0}, 47400 {FzName: ts + 28932, FxProc: 0}, 47401 {FzName: ts + 28950, FxProc: 0}, 47402 } 47403 47404 func sqlite3BtreeSharedCacheReport(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 47405 var pBt uintptr 47406 var pRet uintptr = tcl.XTcl_NewObj(tls) 47407 for pBt = sqlite3.Xsqlite3SharedCacheList; pBt != 0; pBt = (*BtShared)(unsafe.Pointer(pBt)).FpNext { 47408 var zFile uintptr = sqlite3.Xsqlite3PagerFilename(tls, (*BtShared)(unsafe.Pointer(pBt)).FpPager, 1) 47409 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, zFile, -1)) 47410 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, (*BtShared)(unsafe.Pointer(pBt)).FnRef)) 47411 } 47412 tcl.XTcl_SetObjResult(tls, interp, pRet) 47413 return TCL_OK 47414 } 47415 47416 func sqlite3BtreeCursorList(tls *libc.TLS, p uintptr) { 47417 } 47418 47419 func set_options(tls *libc.TLS, interp uintptr) { 47420 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+28984, ts+14193, 47421 TCL_GLOBAL_ONLY) 47422 47423 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29003, ts+14193, TCL_GLOBAL_ONLY) 47424 47425 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29011, ts+14193, TCL_GLOBAL_ONLY) 47426 47427 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29029, ts+29042, TCL_GLOBAL_ONLY) 47428 47429 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29046, ts+29053, TCL_GLOBAL_ONLY) 47430 47431 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29055, ts+14193, TCL_GLOBAL_ONLY) 47432 47433 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29067, ts+14193, TCL_GLOBAL_ONLY) 47434 47435 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29073, ts+14193, TCL_GLOBAL_ONLY) 47436 47437 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29095, ts+14193, TCL_GLOBAL_ONLY) 47438 47439 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29107, ts+29053, TCL_GLOBAL_ONLY) 47440 47441 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29115, ts+29053, TCL_GLOBAL_ONLY) 47442 47443 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29119, ts+29053, TCL_GLOBAL_ONLY) 47444 47445 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29144, ts+29053, TCL_GLOBAL_ONLY) 47446 47447 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29149, 47448 ts+29164, TCL_GLOBAL_ONLY) 47449 47450 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29166, ts+14193, TCL_GLOBAL_ONLY) 47451 47452 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29175, ts+14193, TCL_GLOBAL_ONLY) 47453 47454 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29185, ts+14193, TCL_GLOBAL_ONLY) 47455 47456 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29197, ts+14193, TCL_GLOBAL_ONLY) 47457 47458 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+13460, ts+29053, TCL_GLOBAL_ONLY) 47459 47460 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29211, ts+29053, TCL_GLOBAL_ONLY) 47461 47462 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29219, ts+14193, TCL_GLOBAL_ONLY) 47463 47464 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29224, ts+14193, TCL_GLOBAL_ONLY) 47465 47466 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29229, ts+29053, TCL_GLOBAL_ONLY) 47467 47468 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+13580, ts+29053, TCL_GLOBAL_ONLY) 47469 47470 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29245, ts+29053, TCL_GLOBAL_ONLY) 47471 47472 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29254, ts+29053, TCL_GLOBAL_ONLY) 47473 47474 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29260, ts+29053, TCL_GLOBAL_ONLY) 47475 47476 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29271, ts+29053, TCL_GLOBAL_ONLY) 47477 47478 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+1957, ts+29053, TCL_GLOBAL_ONLY) 47479 47480 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29282, ts+14193, TCL_GLOBAL_ONLY) 47481 47482 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29292, ts+14193, TCL_GLOBAL_ONLY) 47483 47484 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29304, ts+29053, TCL_GLOBAL_ONLY) 47485 47486 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29312, ts+29053, TCL_GLOBAL_ONLY) 47487 47488 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29318, ts+14193, TCL_GLOBAL_ONLY) 47489 47490 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29328, ts+14193, TCL_GLOBAL_ONLY) 47491 47492 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+10121, ts+29053, TCL_GLOBAL_ONLY) 47493 47494 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29345, ts+29053, TCL_GLOBAL_ONLY) 47495 47496 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29350, ts+29053, TCL_GLOBAL_ONLY) 47497 47498 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+13044, ts+29053, TCL_GLOBAL_ONLY) 47499 47500 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29358, ts+29053, TCL_GLOBAL_ONLY) 47501 47502 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29368, ts+29053, TCL_GLOBAL_ONLY) 47503 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29379, 47504 ts+14193, TCL_GLOBAL_ONLY) 47505 47506 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29398, ts+29053, TCL_GLOBAL_ONLY) 47507 47508 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29410, ts+29053, TCL_GLOBAL_ONLY) 47509 47510 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29423, ts+29053, TCL_GLOBAL_ONLY) 47511 47512 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29431, ts+29053, TCL_GLOBAL_ONLY) 47513 47514 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29436, ts+29053, TCL_GLOBAL_ONLY) 47515 47516 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29442, ts+29053, TCL_GLOBAL_ONLY) 47517 47518 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29446, ts+29053, TCL_GLOBAL_ONLY) 47519 47520 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29461, ts+14193, 47521 TCL_GLOBAL_ONLY) 47522 47523 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29481, ts+29053, TCL_GLOBAL_ONLY) 47524 47525 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+13439, ts+29053, TCL_GLOBAL_ONLY) 47526 47527 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29501, ts+29053, TCL_GLOBAL_ONLY) 47528 47529 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29510, ts+29053, TCL_GLOBAL_ONLY) 47530 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29519, ts+29053, TCL_GLOBAL_ONLY) 47531 47532 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29529, ts+29053, TCL_GLOBAL_ONLY) 47533 47534 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29538, ts+29053, TCL_GLOBAL_ONLY) 47535 47536 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29547, ts+29053, TCL_GLOBAL_ONLY) 47537 47538 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29558, ts+29053, TCL_GLOBAL_ONLY) 47539 47540 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+4974, ts+29053, TCL_GLOBAL_ONLY) 47541 47542 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29565, ts+29053, TCL_GLOBAL_ONLY) 47543 47544 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29579, ts+29053, TCL_GLOBAL_ONLY) 47545 47546 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29590, ts+14193, TCL_GLOBAL_ONLY) 47547 47548 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29595, ts+14193, TCL_GLOBAL_ONLY) 47549 47550 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29600, ts+14193, TCL_GLOBAL_ONLY) 47551 47552 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29605, ts+29053, TCL_GLOBAL_ONLY) 47553 47554 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29610, ts+14193, TCL_GLOBAL_ONLY) 47555 47556 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29623, ts+29053, TCL_GLOBAL_ONLY) 47557 47558 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29637, ts+29053, TCL_GLOBAL_ONLY) 47559 47560 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29646, ts+14193, TCL_GLOBAL_ONLY) 47561 47562 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29650, ts+14193, TCL_GLOBAL_ONLY) 47563 47564 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+10868, ts+29053, TCL_GLOBAL_ONLY) 47565 47566 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29665, ts+29053, TCL_GLOBAL_ONLY) 47567 47568 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29677, ts+14193, TCL_GLOBAL_ONLY) 47569 47570 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29690, ts+29053, TCL_GLOBAL_ONLY) 47571 47572 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29699, ts+14193, TCL_GLOBAL_ONLY) 47573 47574 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29708, ts+29053, TCL_GLOBAL_ONLY) 47575 47576 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29718, ts+29053, TCL_GLOBAL_ONLY) 47577 47578 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29728, 47579 func() uintptr { 47580 if uint64(unsafe.Sizeof(float64(0))) > uint64(unsafe.Sizeof(float64(0))) { 47581 return ts + 29053 47582 } 47583 return ts + 14193 47584 }(), 47585 TCL_GLOBAL_ONLY) 47586 47587 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29740, ts+29053, TCL_GLOBAL_ONLY) 47588 47589 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29749, ts+29053, TCL_GLOBAL_ONLY) 47590 47591 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29762, ts+29053, TCL_GLOBAL_ONLY) 47592 47593 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29772, ts+14193, TCL_GLOBAL_ONLY) 47594 47595 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29782, ts+29053, TCL_GLOBAL_ONLY) 47596 47597 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29789, ts+29053, TCL_GLOBAL_ONLY) 47598 47599 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29793, ts+29053, TCL_GLOBAL_ONLY) 47600 47601 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29807, ts+29053, TCL_GLOBAL_ONLY) 47602 47603 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+9564, ts+29053, TCL_GLOBAL_ONLY) 47604 47605 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29814, ts+29053, TCL_GLOBAL_ONLY) 47606 47607 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29822, ts+29053, TCL_GLOBAL_ONLY) 47608 47609 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29828, ts+14193, TCL_GLOBAL_ONLY) 47610 47611 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29843, ts+29053, TCL_GLOBAL_ONLY) 47612 47613 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29858, ts+29053, TCL_GLOBAL_ONLY) 47614 47615 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29873, ts+29053, TCL_GLOBAL_ONLY) 47616 47617 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+18896, ts+29053, TCL_GLOBAL_ONLY) 47618 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29881, ts+29053, TCL_GLOBAL_ONLY) 47619 47620 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29890, ts+14193, TCL_GLOBAL_ONLY) 47621 47622 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29901, ts+29053, TCL_GLOBAL_ONLY) 47623 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29920, ts+14193, TCL_GLOBAL_ONLY) 47624 47625 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29941, ts+29053, TCL_GLOBAL_ONLY) 47626 47627 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29954, ts+29053, TCL_GLOBAL_ONLY) 47628 47629 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29963, ts+29053, TCL_GLOBAL_ONLY) 47630 47631 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29970, 47632 func() uintptr { 47633 if 1 != 0 { 47634 return ts + 29053 47635 } 47636 return ts + 14193 47637 }(), TCL_GLOBAL_ONLY) 47638 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29981, 47639 func() uintptr { 47640 if SQLITE_THREADSAFE == 1 { 47641 return ts + 29053 47642 } 47643 return ts + 14193 47644 }(), TCL_GLOBAL_ONLY) 47645 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+29993, 47646 func() uintptr { 47647 if SQLITE_THREADSAFE == 2 { 47648 return ts + 29053 47649 } 47650 return ts + 14193 47651 }(), TCL_GLOBAL_ONLY) 47652 47653 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30005, ts+29053, TCL_GLOBAL_ONLY) 47654 47655 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+13665, ts+29053, TCL_GLOBAL_ONLY) 47656 47657 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30012, ts+29053, TCL_GLOBAL_ONLY) 47658 47659 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30020, ts+29053, TCL_GLOBAL_ONLY) 47660 47661 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+15733, ts+29053, TCL_GLOBAL_ONLY) 47662 47663 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30033, ts+29053, TCL_GLOBAL_ONLY) 47664 47665 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30040, ts+29053, TCL_GLOBAL_ONLY) 47666 47667 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30045, ts+29053, TCL_GLOBAL_ONLY) 47668 47669 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30050, ts+29053, TCL_GLOBAL_ONLY) 47670 47671 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30054, ts+29053, TCL_GLOBAL_ONLY) 47672 47673 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30058, ts+14193, TCL_GLOBAL_ONLY) 47674 47675 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+13692, ts+29053, TCL_GLOBAL_ONLY) 47676 47677 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30078, ts+14193, TCL_GLOBAL_ONLY) 47678 47679 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30097, ts+14193, TCL_GLOBAL_ONLY) 47680 47681 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30111, ts+14193, TCL_GLOBAL_ONLY) 47682 47683 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30120, ts+14193, TCL_GLOBAL_ONLY) 47684 47685 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30144, ts+14193, TCL_GLOBAL_ONLY) 47686 47687 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30165, ts+14193, TCL_GLOBAL_ONLY) 47688 47689 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30172, ts+14193, TCL_GLOBAL_ONLY) 47690 47691 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30185, ts+14193, TCL_GLOBAL_ONLY) 47692 47693 tcl.XTcl_SetVar2(tls, interp, ts+28969, ts+30195, ts+29053, TCL_GLOBAL_ONLY) 47694 47695 { 47696 tcl.XTcl_LinkVar(tls, interp, ts+30206, uintptr(unsafe.Pointer(&cv_MAX_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47697 } 47698 47699 { 47700 tcl.XTcl_LinkVar(tls, interp, ts+30224, uintptr(unsafe.Pointer(&cv_MAX_COLUMN)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47701 } 47702 47703 { 47704 tcl.XTcl_LinkVar(tls, interp, ts+30242, uintptr(unsafe.Pointer(&cv_MAX_SQL_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47705 } 47706 47707 { 47708 tcl.XTcl_LinkVar(tls, interp, ts+30264, uintptr(unsafe.Pointer(&cv_MAX_EXPR_DEPTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47709 } 47710 47711 { 47712 tcl.XTcl_LinkVar(tls, interp, ts+30286, uintptr(unsafe.Pointer(&cv_MAX_COMPOUND_SELECT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47713 } 47714 47715 { 47716 tcl.XTcl_LinkVar(tls, interp, ts+30313, uintptr(unsafe.Pointer(&cv_MAX_VDBE_OP)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47717 } 47718 47719 { 47720 tcl.XTcl_LinkVar(tls, interp, ts+30332, uintptr(unsafe.Pointer(&cv_MAX_FUNCTION_ARG)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47721 } 47722 47723 { 47724 tcl.XTcl_LinkVar(tls, interp, ts+30356, uintptr(unsafe.Pointer(&cv_MAX_VARIABLE_NUMBER)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47725 } 47726 47727 { 47728 tcl.XTcl_LinkVar(tls, interp, ts+30383, uintptr(unsafe.Pointer(&cv_MAX_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47729 } 47730 47731 { 47732 tcl.XTcl_LinkVar(tls, interp, ts+30404, uintptr(unsafe.Pointer(&cv_MAX_PAGE_COUNT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47733 } 47734 47735 { 47736 tcl.XTcl_LinkVar(tls, interp, ts+30426, uintptr(unsafe.Pointer(&cv_MAX_LIKE_PATTERN_LENGTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47737 } 47738 47739 { 47740 tcl.XTcl_LinkVar(tls, interp, ts+30457, uintptr(unsafe.Pointer(&cv_MAX_TRIGGER_DEPTH)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47741 } 47742 47743 { 47744 tcl.XTcl_LinkVar(tls, interp, ts+30482, uintptr(unsafe.Pointer(&cv_DEFAULT_CACHE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47745 } 47746 47747 { 47748 tcl.XTcl_LinkVar(tls, interp, ts+30508, uintptr(unsafe.Pointer(&cv_DEFAULT_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47749 } 47750 47751 { 47752 tcl.XTcl_LinkVar(tls, interp, ts+30533, uintptr(unsafe.Pointer(&cv_DEFAULT_FILE_FORMAT)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47753 } 47754 47755 { 47756 tcl.XTcl_LinkVar(tls, interp, ts+30560, uintptr(unsafe.Pointer(&cv_DEFAULT_SYNCHRONOUS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47757 } 47758 47759 { 47760 tcl.XTcl_LinkVar(tls, interp, ts+30587, uintptr(unsafe.Pointer(&cv_DEFAULT_WAL_SYNCHRONOUS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47761 } 47762 47763 { 47764 tcl.XTcl_LinkVar(tls, interp, ts+30618, uintptr(unsafe.Pointer(&cv_MAX_ATTACHED)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47765 } 47766 47767 { 47768 tcl.XTcl_LinkVar(tls, interp, ts+30638, uintptr(unsafe.Pointer(&cv_MAX_DEFAULT_PAGE_SIZE)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47769 } 47770 47771 { 47772 tcl.XTcl_LinkVar(tls, interp, ts+30667, uintptr(unsafe.Pointer(&cv_MAX_WORKER_THREADS)), TCL_LINK_INT|TCL_LINK_READ_ONLY) 47773 } 47774 47775 { 47776 tcl.XTcl_LinkVar(tls, interp, ts+30693, uintptr(unsafe.Pointer(&cv_TEMP_STORE)), 47777 TCL_LINK_INT|TCL_LINK_READ_ONLY) 47778 47779 } 47780 47781 { 47782 tcl.XTcl_LinkVar(tls, interp, ts+30704, uintptr(unsafe.Pointer(&cv___GNUC__)), 47783 TCL_LINK_INT|TCL_LINK_READ_ONLY) 47784 47785 } 47786 } 47787 47788 var cv_MAX_LENGTH int32 = SQLITE_MAX_LENGTH 47789 var cv_MAX_COLUMN int32 = SQLITE_MAX_COLUMN 47790 var cv_MAX_SQL_LENGTH int32 = SQLITE_MAX_SQL_LENGTH 47791 var cv_MAX_EXPR_DEPTH int32 = SQLITE_MAX_EXPR_DEPTH 47792 var cv_MAX_COMPOUND_SELECT int32 = SQLITE_MAX_COMPOUND_SELECT 47793 var cv_MAX_VDBE_OP int32 = SQLITE_MAX_VDBE_OP 47794 var cv_MAX_FUNCTION_ARG int32 = SQLITE_MAX_FUNCTION_ARG 47795 var cv_MAX_VARIABLE_NUMBER int32 = SQLITE_MAX_VARIABLE_NUMBER 47796 var cv_MAX_PAGE_SIZE int32 = SQLITE_MAX_PAGE_SIZE 47797 var cv_MAX_PAGE_COUNT int32 = SQLITE_MAX_PAGE_COUNT 47798 var cv_MAX_LIKE_PATTERN_LENGTH int32 = SQLITE_MAX_LIKE_PATTERN_LENGTH 47799 var cv_MAX_TRIGGER_DEPTH int32 = SQLITE_MAX_TRIGGER_DEPTH 47800 var cv_DEFAULT_CACHE_SIZE int32 = -2000 47801 var cv_DEFAULT_PAGE_SIZE int32 = SQLITE_DEFAULT_PAGE_SIZE 47802 var cv_DEFAULT_FILE_FORMAT int32 = SQLITE_DEFAULT_FILE_FORMAT 47803 var cv_DEFAULT_SYNCHRONOUS int32 = SQLITE_DEFAULT_SYNCHRONOUS 47804 var cv_DEFAULT_WAL_SYNCHRONOUS int32 = SQLITE_DEFAULT_SYNCHRONOUS 47805 var cv_MAX_ATTACHED int32 = SQLITE_MAX_ATTACHED 47806 var cv_MAX_DEFAULT_PAGE_SIZE int32 = SQLITE_MAX_DEFAULT_PAGE_SIZE 47807 var cv_MAX_WORKER_THREADS int32 = SQLITE_MAX_WORKER_THREADS 47808 var cv_TEMP_STORE int32 = SQLITE_TEMP_STORE 47809 var cv___GNUC__ int32 = 1 47810 47811 func Sqliteconfig_Init(tls *libc.TLS, interp uintptr) int32 { 47812 set_options(tls, interp) 47813 return TCL_OK 47814 } 47815 47816 func sqlite3Delete83Name(tls *libc.TLS, z uintptr) { 47817 var i int32 47818 var sz int32 47819 sz = int32(libc.Xstrlen(tls, z)) 47820 for i = sz - 1; i > 0 && int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) != '/' && int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) != '.'; i-- { 47821 } 47822 if int32(*(*int8)(unsafe.Pointer(z + uintptr(i)))) == '.' && sz > i+4 { 47823 libc.X__builtin___memmove_chk(tls, z+uintptr(i+1), z+uintptr(sz-3), uint64(4), libc.X__builtin_object_size(tls, z+uintptr(i+1), 0)) 47824 } 47825 } 47826 47827 func sqlite3DeleteUnlinkIfExists(tls *libc.TLS, pVfs uintptr, zFile uintptr, pbExists uintptr) int32 { 47828 var rc int32 = SQLITE_ERROR 47829 47830 rc = libc.Xaccess(tls, zFile, F_OK) 47831 if rc != 0 { 47832 if *(*int32)(unsafe.Pointer(libc.X__error(tls))) == ENOENT { 47833 if pbExists != 0 { 47834 *(*int32)(unsafe.Pointer(pbExists)) = 0 47835 } 47836 rc = SQLITE_OK 47837 } 47838 } else { 47839 if pbExists != 0 { 47840 *(*int32)(unsafe.Pointer(pbExists)) = 1 47841 } 47842 rc = libc.Xunlink(tls, zFile) 47843 } 47844 return rc 47845 } 47846 47847 func sqlite3_delete_database(tls *libc.TLS, zFile uintptr) int32 { 47848 bp := tls.Alloc(156) 47849 defer tls.Free(156) 47850 47851 var zBuf uintptr 47852 var nBuf int32 47853 var rc int32 = 0 47854 var i int32 47855 47856 *(*[4]uintptr)(unsafe.Pointer(bp + 24)) = [4]uintptr{ts, ts + 30713, ts + 30724, ts + 30731} 47857 47858 *(*[6]MFile)(unsafe.Pointer(bp + 56)) = [6]MFile{ 47859 {FzFmt: ts + 30738}, 47860 {FzFmt: ts + 30745}, 47861 {FzFmt: ts + 30760}, 47862 {FzFmt: ts + 30738, Fb83: 1}, 47863 {FzFmt: ts + 30745, FiOffset: SQLITE_MULTIPLEX_JOURNAL_8_3_OFFSET, Fb83: 1}, 47864 {FzFmt: ts + 30760, FiOffset: SQLITE_MULTIPLEX_WAL_8_3_OFFSET, Fb83: 1}, 47865 } 47866 47867 var pVfs uintptr = uintptr(0) 47868 47869 nBuf = int32(libc.Xstrlen(tls, zFile)) + 100 47870 zBuf = sqlite3.Xsqlite3_malloc(tls, nBuf) 47871 if zBuf == uintptr(0) { 47872 return SQLITE_NOMEM 47873 } 47874 47875 for i = 0; rc == 0 && uint64(i) < uint64(unsafe.Sizeof([4]uintptr{}))/uint64(unsafe.Sizeof(uintptr(0))); i++ { 47876 sqlite3.Xsqlite3_snprintf(tls, nBuf, zBuf, *(*uintptr)(unsafe.Pointer(bp + 24 + uintptr(i)*8)), libc.VaList(bp, zFile)) 47877 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, uintptr(0)) 47878 if rc == 0 && i != 0 { 47879 sqlite3Delete83Name(tls, zBuf) 47880 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, uintptr(0)) 47881 } 47882 } 47883 47884 for i = 0; rc == 0 && uint64(i) < uint64(unsafe.Sizeof([6]MFile{}))/uint64(unsafe.Sizeof(MFile{})); i++ { 47885 var p uintptr = bp + 56 + uintptr(i)*16 47886 var iChunk int32 47887 for iChunk = 1; iChunk <= MX_CHUNK_NUMBER; iChunk++ { 47888 sqlite3.Xsqlite3_snprintf(tls, nBuf, zBuf, (*MFile)(unsafe.Pointer(p)).FzFmt, libc.VaList(bp+8, zFile, iChunk+(*MFile)(unsafe.Pointer(p)).FiOffset)) 47889 if (*MFile)(unsafe.Pointer(p)).Fb83 != 0 { 47890 sqlite3Delete83Name(tls, zBuf) 47891 } 47892 rc = sqlite3DeleteUnlinkIfExists(tls, pVfs, zBuf, bp+152) 47893 if *(*int32)(unsafe.Pointer(bp + 152)) == 0 || rc != 0 { 47894 break 47895 } 47896 } 47897 } 47898 47899 sqlite3.Xsqlite3_free(tls, zBuf) 47900 return func() int32 { 47901 if rc != 0 { 47902 return SQLITE_ERROR 47903 } 47904 return SQLITE_OK 47905 }() 47906 } 47907 47908 type MFile = struct { 47909 FzFmt uintptr 47910 FiOffset int32 47911 Fb83 int32 47912 } 47913 47914 type kauth_cred_t = uintptr 47915 type posix_cred_t = uintptr 47916 47917 type DemoFile1 = struct { 47918 Fbase sqlite3_file 47919 Ffd int32 47920 F__ccgo_pad1 [4]byte 47921 FaBuffer uintptr 47922 FnBuffer int32 47923 F__ccgo_pad2 [4]byte 47924 FiBufferOfst sqlite3_int64 47925 } 47926 47927 type DemoFile = DemoFile1 47928 47929 func demoDirectWrite(tls *libc.TLS, p uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 47930 var ofst off_t 47931 var nWrite size_t 47932 47933 ofst = libc.Xlseek(tls, (*DemoFile)(unsafe.Pointer(p)).Ffd, iOfst, SEEK_SET) 47934 if ofst != iOfst { 47935 return SQLITE_IOERR | int32(3)<<8 47936 } 47937 47938 nWrite = size_t(libc.Xwrite(tls, (*DemoFile)(unsafe.Pointer(p)).Ffd, zBuf, uint64(iAmt))) 47939 if nWrite != size_t(iAmt) { 47940 return SQLITE_IOERR | int32(3)<<8 47941 } 47942 47943 return SQLITE_OK 47944 } 47945 47946 func demoFlushBuffer(tls *libc.TLS, p uintptr) int32 { 47947 var rc int32 = SQLITE_OK 47948 if (*DemoFile)(unsafe.Pointer(p)).FnBuffer != 0 { 47949 rc = demoDirectWrite(tls, p, (*DemoFile)(unsafe.Pointer(p)).FaBuffer, (*DemoFile)(unsafe.Pointer(p)).FnBuffer, (*DemoFile)(unsafe.Pointer(p)).FiBufferOfst) 47950 (*DemoFile)(unsafe.Pointer(p)).FnBuffer = 0 47951 } 47952 return rc 47953 } 47954 47955 func demoClose(tls *libc.TLS, pFile uintptr) int32 { 47956 var rc int32 47957 var p uintptr = pFile 47958 rc = demoFlushBuffer(tls, p) 47959 sqlite3.Xsqlite3_free(tls, (*DemoFile)(unsafe.Pointer(p)).FaBuffer) 47960 libc.Xclose(tls, (*DemoFile)(unsafe.Pointer(p)).Ffd) 47961 return rc 47962 } 47963 47964 func demoRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 47965 var p uintptr = pFile 47966 var ofst off_t 47967 var nRead int32 47968 var rc int32 47969 47970 rc = demoFlushBuffer(tls, p) 47971 if rc != SQLITE_OK { 47972 return rc 47973 } 47974 47975 ofst = libc.Xlseek(tls, (*DemoFile)(unsafe.Pointer(p)).Ffd, iOfst, SEEK_SET) 47976 if ofst != iOfst { 47977 return SQLITE_IOERR | int32(1)<<8 47978 } 47979 nRead = int32(libc.Xread(tls, (*DemoFile)(unsafe.Pointer(p)).Ffd, zBuf, uint64(iAmt))) 47980 47981 if nRead == iAmt { 47982 return SQLITE_OK 47983 } else if nRead >= 0 { 47984 if nRead < iAmt { 47985 libc.X__builtin___memset_chk(tls, zBuf+uintptr(nRead), 0, uint64(iAmt-nRead), libc.X__builtin_object_size(tls, zBuf+uintptr(nRead), 0)) 47986 } 47987 return SQLITE_IOERR | int32(2)<<8 47988 } 47989 47990 return SQLITE_IOERR | int32(1)<<8 47991 } 47992 47993 func demoWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 47994 var p uintptr = pFile 47995 47996 if (*DemoFile)(unsafe.Pointer(p)).FaBuffer != 0 { 47997 var z uintptr = zBuf 47998 var n int32 = iAmt 47999 var i sqlite3_int64 = iOfst 48000 48001 for n > 0 { 48002 var nCopy int32 48003 48004 if (*DemoFile)(unsafe.Pointer(p)).FnBuffer == SQLITE_DEMOVFS_BUFFERSZ || (*DemoFile)(unsafe.Pointer(p)).FiBufferOfst+sqlite3_int64((*DemoFile)(unsafe.Pointer(p)).FnBuffer) != i { 48005 var rc int32 = demoFlushBuffer(tls, p) 48006 if rc != SQLITE_OK { 48007 return rc 48008 } 48009 } 48010 48011 (*DemoFile)(unsafe.Pointer(p)).FiBufferOfst = i - sqlite3_int64((*DemoFile)(unsafe.Pointer(p)).FnBuffer) 48012 48013 nCopy = SQLITE_DEMOVFS_BUFFERSZ - (*DemoFile)(unsafe.Pointer(p)).FnBuffer 48014 if nCopy > n { 48015 nCopy = n 48016 } 48017 libc.X__builtin___memcpy_chk(tls, (*DemoFile)(unsafe.Pointer(p)).FaBuffer+uintptr((*DemoFile)(unsafe.Pointer(p)).FnBuffer), z, uint64(nCopy), libc.X__builtin_object_size(tls, (*DemoFile)(unsafe.Pointer(p)).FaBuffer+uintptr((*DemoFile)(unsafe.Pointer(p)).FnBuffer), 0)) 48018 *(*int32)(unsafe.Pointer(p + 24)) += nCopy 48019 48020 n = n - nCopy 48021 i = i + sqlite3_int64(nCopy) 48022 z += uintptr(nCopy) 48023 } 48024 } else { 48025 return demoDirectWrite(tls, p, zBuf, iAmt, iOfst) 48026 } 48027 48028 return SQLITE_OK 48029 } 48030 48031 func demoTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 48032 return SQLITE_OK 48033 } 48034 48035 func demoSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 48036 var p uintptr = pFile 48037 var rc int32 48038 48039 rc = demoFlushBuffer(tls, p) 48040 if rc != SQLITE_OK { 48041 return rc 48042 } 48043 48044 rc = libc.Xfsync(tls, (*DemoFile)(unsafe.Pointer(p)).Ffd) 48045 return func() int32 { 48046 if rc == 0 { 48047 return SQLITE_OK 48048 } 48049 return SQLITE_IOERR | int32(4)<<8 48050 }() 48051 } 48052 48053 func demoFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 48054 bp := tls.Alloc(144) 48055 defer tls.Free(144) 48056 48057 var p uintptr = pFile 48058 var rc int32 48059 48060 rc = demoFlushBuffer(tls, p) 48061 if rc != SQLITE_OK { 48062 return rc 48063 } 48064 48065 rc = libc.Xfstat(tls, (*DemoFile)(unsafe.Pointer(p)).Ffd, bp) 48066 if rc != 0 { 48067 return SQLITE_IOERR | int32(7)<<8 48068 } 48069 *(*sqlite_int64)(unsafe.Pointer(pSize)) = (*stat)(unsafe.Pointer(bp)).Fst_size 48070 return SQLITE_OK 48071 } 48072 48073 func demoLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 48074 return SQLITE_OK 48075 } 48076 48077 func demoUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 48078 return SQLITE_OK 48079 } 48080 48081 func demoCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 48082 *(*int32)(unsafe.Pointer(pResOut)) = 0 48083 return SQLITE_OK 48084 } 48085 48086 func demoFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 48087 return SQLITE_NOTFOUND 48088 } 48089 48090 func demoSectorSize(tls *libc.TLS, pFile uintptr) int32 { 48091 return 0 48092 } 48093 48094 func demoDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 48095 return 0 48096 } 48097 48098 func demoOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 48099 bp := tls.Alloc(8) 48100 defer tls.Free(8) 48101 48102 var p uintptr = pFile 48103 var oflags int32 = 0 48104 var aBuf uintptr = uintptr(0) 48105 48106 if zName == uintptr(0) { 48107 return SQLITE_IOERR 48108 } 48109 48110 if flags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 48111 aBuf = sqlite3.Xsqlite3_malloc(tls, SQLITE_DEMOVFS_BUFFERSZ) 48112 if !(aBuf != 0) { 48113 return SQLITE_NOMEM 48114 } 48115 } 48116 48117 if flags&SQLITE_OPEN_EXCLUSIVE != 0 { 48118 oflags = oflags | O_EXCL 48119 } 48120 if flags&SQLITE_OPEN_CREATE != 0 { 48121 oflags = oflags | O_CREAT 48122 } 48123 if flags&SQLITE_OPEN_READONLY != 0 { 48124 oflags = oflags | O_RDONLY 48125 } 48126 if flags&SQLITE_OPEN_READWRITE != 0 { 48127 oflags = oflags | O_RDWR 48128 } 48129 48130 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(DemoFile{})), libc.X__builtin_object_size(tls, p, 0)) 48131 (*DemoFile)(unsafe.Pointer(p)).Ffd = libc.Xopen(tls, zName, oflags, libc.VaList(bp, 0600)) 48132 if (*DemoFile)(unsafe.Pointer(p)).Ffd < 0 { 48133 sqlite3.Xsqlite3_free(tls, aBuf) 48134 return SQLITE_CANTOPEN 48135 } 48136 (*DemoFile)(unsafe.Pointer(p)).FaBuffer = aBuf 48137 48138 if pOutFlags != 0 { 48139 *(*int32)(unsafe.Pointer(pOutFlags)) = flags 48140 } 48141 (*DemoFile)(unsafe.Pointer(p)).Fbase.FpMethods = uintptr(unsafe.Pointer(&demoio)) 48142 return SQLITE_OK 48143 } 48144 48145 var demoio = sqlite3_io_methods{ 48146 FiVersion: 1, 48147 FxClose: 0, 48148 FxRead: 0, 48149 FxWrite: 0, 48150 FxTruncate: 0, 48151 FxSync: 0, 48152 FxFileSize: 0, 48153 FxLock: 0, 48154 FxUnlock: 0, 48155 FxCheckReservedLock: 0, 48156 FxFileControl: 0, 48157 FxSectorSize: 0, 48158 FxDeviceCharacteristics: 0, 48159 } 48160 48161 func demoDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 48162 bp := tls.Alloc(529) 48163 defer tls.Free(529) 48164 48165 var rc int32 48166 48167 rc = libc.Xunlink(tls, zPath) 48168 if rc != 0 && *(*int32)(unsafe.Pointer(libc.X__error(tls))) == ENOENT { 48169 return SQLITE_OK 48170 } 48171 48172 if rc == 0 && dirSync != 0 { 48173 var dfd int32 48174 var i int32 48175 48176 sqlite3.Xsqlite3_snprintf(tls, MAXPATHNAME, bp+16, ts, libc.VaList(bp, zPath)) 48177 *(*int8)(unsafe.Pointer(bp + 16 + 512)) = int8(0) 48178 for i = int32(libc.Xstrlen(tls, bp+16)); i > 1 && int32(*(*int8)(unsafe.Pointer(bp + 16 + uintptr(i)))) != '/'; i++ { 48179 } 48180 *(*int8)(unsafe.Pointer(bp + 16 + uintptr(i))) = int8(0) 48181 48182 dfd = libc.Xopen(tls, bp+16, O_RDONLY, libc.VaList(bp+8, 0)) 48183 if dfd < 0 { 48184 rc = -1 48185 } else { 48186 rc = libc.Xfsync(tls, dfd) 48187 libc.Xclose(tls, dfd) 48188 } 48189 } 48190 return func() int32 { 48191 if rc == 0 { 48192 return SQLITE_OK 48193 } 48194 return SQLITE_IOERR | int32(10)<<8 48195 }() 48196 } 48197 48198 func demoAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 48199 var rc int32 48200 var eAccess int32 = F_OK 48201 48202 if flags == SQLITE_ACCESS_READWRITE { 48203 eAccess = int32(1)<<2 | int32(1)<<1 48204 } 48205 if flags == SQLITE_ACCESS_READ { 48206 eAccess = int32(1) << 2 48207 } 48208 48209 rc = libc.Xaccess(tls, zPath, eAccess) 48210 *(*int32)(unsafe.Pointer(pResOut)) = libc.Bool32(rc == 0) 48211 return SQLITE_OK 48212 } 48213 48214 func demoFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nPathOut int32, zPathOut uintptr) int32 { 48215 bp := tls.Alloc(529) 48216 defer tls.Free(529) 48217 48218 if int32(*(*int8)(unsafe.Pointer(zPath))) == '/' { 48219 *(*int8)(unsafe.Pointer(bp + 16)) = int8(0) 48220 } else { 48221 if libc.Xgetcwd(tls, bp+16, uint64(unsafe.Sizeof([513]int8{}))) == uintptr(0) { 48222 return SQLITE_IOERR 48223 } 48224 } 48225 *(*int8)(unsafe.Pointer(bp + 16 + 512)) = int8(0) 48226 48227 sqlite3.Xsqlite3_snprintf(tls, nPathOut, zPathOut, ts+5206, libc.VaList(bp, bp+16, zPath)) 48228 *(*int8)(unsafe.Pointer(zPathOut + uintptr(nPathOut-1))) = int8(0) 48229 48230 return SQLITE_OK 48231 } 48232 48233 func demoDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 48234 return uintptr(0) 48235 } 48236 48237 func demoDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 48238 sqlite3.Xsqlite3_snprintf(tls, nByte, zErrMsg, ts+30771, 0) 48239 *(*int8)(unsafe.Pointer(zErrMsg + uintptr(nByte-1))) = int8(0) 48240 } 48241 48242 func demoDlSym(tls *libc.TLS, pVfs uintptr, pH uintptr, z uintptr) uintptr { 48243 return uintptr(0) 48244 } 48245 48246 func demoDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 48247 return 48248 } 48249 48250 func demoRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zByte uintptr) int32 { 48251 return SQLITE_OK 48252 } 48253 48254 func demoSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 48255 libc.Xsleep(tls, uint32(nMicro/1000000)) 48256 libc.Xusleep(tls, uint32(nMicro%1000000)) 48257 return nMicro 48258 } 48259 48260 func demoCurrentTime(tls *libc.TLS, pVfs uintptr, pTime uintptr) int32 { 48261 var t time_t = libc.Xtime(tls, uintptr(0)) 48262 *(*float64)(unsafe.Pointer(pTime)) = float64(t)/86400.0 + 2440587.5 48263 return SQLITE_OK 48264 } 48265 48266 func sqlite3_demovfs(tls *libc.TLS) uintptr { 48267 return uintptr(unsafe.Pointer(&demovfs)) 48268 } 48269 48270 var demovfs = sqlite3_vfs{ 48271 FiVersion: 1, 48272 FszOsFile: int32(unsafe.Sizeof(DemoFile{})), 48273 FmxPathname: MAXPATHNAME, 48274 FzName: ts + 30809, 48275 FxOpen: 0, 48276 FxDelete: 0, 48277 FxAccess: 0, 48278 FxFullPathname: 0, 48279 FxDlOpen: 0, 48280 FxDlError: 0, 48281 FxDlSym: 0, 48282 FxDlClose: 0, 48283 FxRandomness: 0, 48284 FxSleep: 0, 48285 FxCurrentTime: 0, 48286 } 48287 48288 type Tcl_StatBuf = stat 48289 48290 func register_demovfs(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48291 sqlite3.Xsqlite3_vfs_register(tls, sqlite3_demovfs(tls), 1) 48292 return TCL_OK 48293 } 48294 48295 func unregister_demovfs(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 48296 sqlite3.Xsqlite3_vfs_unregister(tls, sqlite3_demovfs(tls)) 48297 return TCL_OK 48298 } 48299 48300 func Sqlitetest_demovfs_Init(tls *libc.TLS, interp uintptr) int32 { 48301 tcl.XTcl_CreateObjCommand(tls, interp, ts+30814, *(*uintptr)(unsafe.Pointer(&struct { 48302 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 48303 }{register_demovfs})), uintptr(0), uintptr(0)) 48304 tcl.XTcl_CreateObjCommand(tls, interp, ts+30831, *(*uintptr)(unsafe.Pointer(&struct { 48305 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 48306 }{unregister_demovfs})), uintptr(0), uintptr(0)) 48307 return TCL_OK 48308 } 48309 48310 type devsym_file1 = struct { 48311 Fbase sqlite3_file 48312 FpReal uintptr 48313 } 48314 48315 type devsym_file = devsym_file1 48316 48317 type DevsymGlobal = struct { 48318 FpVfs uintptr 48319 FiDeviceChar int32 48320 FiSectorSize int32 48321 FnWriteCrash int32 48322 F__ccgo_pad1 [4]byte 48323 } 48324 48325 var g1 = DevsymGlobal{FiSectorSize: 512} 48326 48327 func devsymClose(tls *libc.TLS, pFile uintptr) int32 { 48328 var p uintptr = pFile 48329 sqlite3.Xsqlite3OsClose(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 48330 return SQLITE_OK 48331 } 48332 48333 func devsymRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 48334 var p uintptr = pFile 48335 return sqlite3.Xsqlite3OsRead(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 48336 } 48337 48338 func devsymWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 48339 var p uintptr = pFile 48340 return sqlite3.Xsqlite3OsWrite(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 48341 } 48342 48343 func devsymTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 48344 var p uintptr = pFile 48345 return sqlite3.Xsqlite3OsTruncate(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, size) 48346 } 48347 48348 func devsymSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 48349 var p uintptr = pFile 48350 return sqlite3.Xsqlite3OsSync(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags) 48351 } 48352 48353 func devsymFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 48354 var p uintptr = pFile 48355 return sqlite3.Xsqlite3OsFileSize(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, pSize) 48356 } 48357 48358 func devsymLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 48359 var p uintptr = pFile 48360 return sqlite3.Xsqlite3OsLock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, eLock) 48361 } 48362 48363 func devsymUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 48364 var p uintptr = pFile 48365 return sqlite3.Xsqlite3OsUnlock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, eLock) 48366 } 48367 48368 func devsymCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 48369 var p uintptr = pFile 48370 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, pResOut) 48371 } 48372 48373 func devsymFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 48374 var p uintptr = pFile 48375 return sqlite3.Xsqlite3OsFileControl(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, op, pArg) 48376 } 48377 48378 func devsymSectorSize(tls *libc.TLS, pFile uintptr) int32 { 48379 return g1.FiSectorSize 48380 } 48381 48382 func devsymDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 48383 return g1.FiDeviceChar 48384 } 48385 48386 func devsymShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 48387 var p uintptr = pFile 48388 return (*struct { 48389 f func(*libc.TLS, uintptr, int32, int32, int32) int32 48390 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxShmLock})).f(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, ofst, n, flags) 48391 } 48392 48393 func devsymShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, szRegion int32, isWrite int32, pp uintptr) int32 { 48394 var p uintptr = pFile 48395 return (*struct { 48396 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 48397 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxShmMap})).f(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, iRegion, szRegion, isWrite, pp) 48398 } 48399 48400 func devsymShmBarrier(tls *libc.TLS, pFile uintptr) { 48401 var p uintptr = pFile 48402 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxShmBarrier})).f(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 48403 } 48404 48405 func devsymShmUnmap(tls *libc.TLS, pFile uintptr, delFlag int32) int32 { 48406 var p uintptr = pFile 48407 return (*struct { 48408 f func(*libc.TLS, uintptr, int32) int32 48409 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxShmUnmap})).f(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, delFlag) 48410 } 48411 48412 func devsymOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 48413 var rc int32 48414 var p uintptr = pFile 48415 (*devsym_file)(unsafe.Pointer(p)).FpReal = p + 1*16 48416 rc = sqlite3.Xsqlite3OsOpen(tls, g1.FpVfs, zName, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 48417 if (*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 48418 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&devsym_io_methods)) 48419 } 48420 return rc 48421 } 48422 48423 var devsym_io_methods = sqlite3_io_methods{ 48424 FiVersion: 2, 48425 FxClose: 0, 48426 FxRead: 0, 48427 FxWrite: 0, 48428 FxTruncate: 0, 48429 FxSync: 0, 48430 FxFileSize: 0, 48431 FxLock: 0, 48432 FxUnlock: 0, 48433 FxCheckReservedLock: 0, 48434 FxFileControl: 0, 48435 FxSectorSize: 0, 48436 FxDeviceCharacteristics: 0, 48437 FxShmMap: 0, 48438 FxShmLock: 0, 48439 FxShmBarrier: 0, 48440 FxShmUnmap: 0, 48441 } 48442 48443 func devsymDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 48444 return sqlite3.Xsqlite3OsDelete(tls, g1.FpVfs, zPath, dirSync) 48445 } 48446 48447 func devsymAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 48448 return sqlite3.Xsqlite3OsAccess(tls, g1.FpVfs, zPath, flags, pResOut) 48449 } 48450 48451 func devsymFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 48452 return sqlite3.Xsqlite3OsFullPathname(tls, g1.FpVfs, zPath, nOut, zOut) 48453 } 48454 48455 func devsymRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 48456 return sqlite3.Xsqlite3OsRandomness(tls, g1.FpVfs, nByte, zBufOut) 48457 } 48458 48459 func devsymSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 48460 return sqlite3.Xsqlite3OsSleep(tls, g1.FpVfs, nMicro) 48461 } 48462 48463 func devsymCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 48464 return (*struct { 48465 f func(*libc.TLS, uintptr, uintptr) int32 48466 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FxCurrentTime})).f(tls, g1.FpVfs, pTimeOut) 48467 } 48468 48469 func writecrashSectorSize(tls *libc.TLS, pFile uintptr) int32 { 48470 var p uintptr = pFile 48471 return sqlite3.Xsqlite3OsSectorSize(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 48472 } 48473 48474 func writecrashDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 48475 var p uintptr = pFile 48476 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal) 48477 } 48478 48479 func writecrashWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 48480 var p uintptr = pFile 48481 if g1.FnWriteCrash > 0 { 48482 g1.FnWriteCrash-- 48483 if g1.FnWriteCrash == 0 { 48484 libc.Xabort(tls) 48485 } 48486 } 48487 return sqlite3.Xsqlite3OsWrite(tls, (*devsym_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 48488 } 48489 48490 func writecrashOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 48491 var rc int32 48492 var p uintptr = pFile 48493 (*devsym_file)(unsafe.Pointer(p)).FpReal = p + 1*16 48494 rc = sqlite3.Xsqlite3OsOpen(tls, g1.FpVfs, zName, (*devsym_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 48495 if (*sqlite3_file)(unsafe.Pointer((*devsym_file)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 48496 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&writecrash_io_methods)) 48497 } 48498 return rc 48499 } 48500 48501 var writecrash_io_methods = sqlite3_io_methods{ 48502 FiVersion: 2, 48503 FxClose: 0, 48504 FxRead: 0, 48505 FxWrite: 0, 48506 FxTruncate: 0, 48507 FxSync: 0, 48508 FxFileSize: 0, 48509 FxLock: 0, 48510 FxUnlock: 0, 48511 FxCheckReservedLock: 0, 48512 FxFileControl: 0, 48513 FxSectorSize: 0, 48514 FxDeviceCharacteristics: 0, 48515 FxShmMap: 0, 48516 FxShmLock: 0, 48517 FxShmBarrier: 0, 48518 FxShmUnmap: 0, 48519 } 48520 48521 var devsym_vfs = sqlite3_vfs{ 48522 FiVersion: 2, 48523 FszOsFile: int32(unsafe.Sizeof(devsym_file{})), 48524 FmxPathname: DEVSYM_MAX_PATHNAME, 48525 FzName: ts + 30850, 48526 FxOpen: 0, 48527 FxDelete: 0, 48528 FxAccess: 0, 48529 FxFullPathname: 0, 48530 FxRandomness: 0, 48531 FxSleep: 0, 48532 FxCurrentTime: 0, 48533 } 48534 48535 var writecrash_vfs = sqlite3_vfs{ 48536 FiVersion: 2, 48537 FszOsFile: int32(unsafe.Sizeof(devsym_file{})), 48538 FmxPathname: DEVSYM_MAX_PATHNAME, 48539 FzName: ts + 30857, 48540 FxOpen: 0, 48541 FxDelete: 0, 48542 FxAccess: 0, 48543 FxFullPathname: 0, 48544 FxRandomness: 0, 48545 FxSleep: 0, 48546 FxCurrentTime: 0, 48547 } 48548 48549 func devsym_register(tls *libc.TLS, iDeviceChar int32, iSectorSize int32) { 48550 if g1.FpVfs == uintptr(0) { 48551 g1.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 48552 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 48553 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 48554 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&devsym_vfs)), 0) 48555 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&writecrash_vfs)), 0) 48556 } 48557 if iDeviceChar >= 0 { 48558 g1.FiDeviceChar = iDeviceChar 48559 } else { 48560 g1.FiDeviceChar = 0 48561 } 48562 if iSectorSize >= 0 { 48563 g1.FiSectorSize = iSectorSize 48564 } else { 48565 g1.FiSectorSize = 512 48566 } 48567 } 48568 48569 func devsym_unregister(tls *libc.TLS) { 48570 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&devsym_vfs))) 48571 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&writecrash_vfs))) 48572 g1.FpVfs = uintptr(0) 48573 g1.FiDeviceChar = 0 48574 g1.FiSectorSize = 0 48575 } 48576 48577 func devsym_crash_on_write(tls *libc.TLS, nWrite int32) { 48578 if g1.FpVfs == uintptr(0) { 48579 g1.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 48580 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 48581 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 4)) += (*sqlite3_vfs)(unsafe.Pointer(g1.FpVfs)).FszOsFile 48582 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&devsym_vfs)), 0) 48583 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&writecrash_vfs)), 0) 48584 } 48585 g1.FnWriteCrash = nWrite 48586 } 48587 48588 type fs_vtab1 = struct { 48589 Fbase sqlite3_vtab 48590 Fdb uintptr 48591 FzDb uintptr 48592 FzTbl uintptr 48593 } 48594 48595 type fs_vtab = fs_vtab1 48596 type fs_cursor1 = struct { 48597 Fbase sqlite3_vtab_cursor 48598 FpStmt uintptr 48599 FzBuf uintptr 48600 FnBuf int32 48601 FnAlloc int32 48602 } 48603 48604 type fs_cursor = fs_cursor1 48605 48606 type FsdirVtab1 = struct{ Fbase sqlite3_vtab } 48607 48608 type FsdirVtab = FsdirVtab1 48609 type FsdirCsr1 = struct { 48610 Fbase sqlite3_vtab_cursor 48611 FzDir uintptr 48612 FpDir uintptr 48613 FiRowid sqlite3_int64 48614 FpEntry uintptr 48615 } 48616 48617 type FsdirCsr = FsdirCsr1 48618 48619 func fsdirConnect1(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 48620 var pTab uintptr 48621 48622 if argc != 3 { 48623 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28428, 0) 48624 return SQLITE_ERROR 48625 } 48626 48627 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FsdirVtab{}))) 48628 if !(pTab != 0) { 48629 return SQLITE_NOMEM 48630 } 48631 libc.X__builtin___memset_chk(tls, pTab, 0, uint64(unsafe.Sizeof(FsdirVtab{})), libc.X__builtin_object_size(tls, pTab, 0)) 48632 48633 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 48634 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30868) 48635 48636 return SQLITE_OK 48637 } 48638 48639 func fsdirDisconnect1(tls *libc.TLS, pVtab uintptr) int32 { 48640 sqlite3.Xsqlite3_free(tls, pVtab) 48641 return SQLITE_OK 48642 } 48643 48644 func fsdirBestIndex1(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 48645 var ii int32 48646 48647 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000000.0 48648 48649 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 48650 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 48651 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn == 0 && (*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable != 0 && int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 48652 var pUsage uintptr 48653 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 48654 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 48655 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 48656 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 48657 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1.0 48658 break 48659 } 48660 } 48661 48662 return SQLITE_OK 48663 } 48664 48665 func fsdirOpen1(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 48666 var pCur uintptr 48667 48668 pCur = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(FsdirCsr{}))+uint64(256))) 48669 if pCur == uintptr(0) { 48670 return SQLITE_NOMEM 48671 } 48672 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(FsdirCsr{})), libc.X__builtin_object_size(tls, pCur, 0)) 48673 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 48674 return SQLITE_OK 48675 } 48676 48677 func fsdirClose1(tls *libc.TLS, cur uintptr) int32 { 48678 var pCur uintptr = cur 48679 if (*FsdirCsr)(unsafe.Pointer(pCur)).FpDir != 0 { 48680 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCur)).FpDir) 48681 } 48682 sqlite3.Xsqlite3_free(tls, (*FsdirCsr)(unsafe.Pointer(pCur)).FzDir) 48683 sqlite3.Xsqlite3_free(tls, pCur) 48684 return SQLITE_OK 48685 } 48686 48687 func fsdirNext1(tls *libc.TLS, cur uintptr) int32 { 48688 var pCsr uintptr = cur 48689 48690 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir != 0 { 48691 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry = libc.Xreaddir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 48692 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry == uintptr(0) { 48693 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 48694 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = uintptr(0) 48695 } 48696 (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid++ 48697 } 48698 48699 return SQLITE_OK 48700 } 48701 48702 func fsdirFilter1(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 48703 var pCsr uintptr = pVtabCursor 48704 var zDir uintptr 48705 var nDir int32 48706 48707 if idxNum != 1 || argc != 1 { 48708 return SQLITE_ERROR 48709 } 48710 48711 (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid = int64(0) 48712 sqlite3.Xsqlite3_free(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir) 48713 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir != 0 { 48714 libc.Xclosedir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir) 48715 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = uintptr(0) 48716 } 48717 48718 zDir = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 48719 nDir = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 48720 (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir = sqlite3.Xsqlite3_malloc(tls, nDir+1) 48721 if (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir == uintptr(0) { 48722 return SQLITE_NOMEM 48723 } 48724 libc.X__builtin___memcpy_chk(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, zDir, uint64(nDir+1), libc.X__builtin_object_size(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, 0)) 48725 48726 (*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir = libc.Xopendir(tls, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir) 48727 return fsdirNext1(tls, pVtabCursor) 48728 } 48729 48730 func fsdirEof1(tls *libc.TLS, cur uintptr) int32 { 48731 var pCsr uintptr = cur 48732 return libc.Bool32((*FsdirCsr)(unsafe.Pointer(pCsr)).FpDir == uintptr(0)) 48733 } 48734 48735 func fsdirColumn1(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 48736 var pCsr uintptr = cur 48737 switch i { 48738 case 0: 48739 sqlite3.Xsqlite3_result_text(tls, ctx, (*FsdirCsr)(unsafe.Pointer(pCsr)).FzDir, -1, uintptr(0)) 48740 break 48741 48742 case 1: 48743 sqlite3.Xsqlite3_result_text(tls, ctx, (*FsdirCsr)(unsafe.Pointer(pCsr)).FpEntry+21, -1, libc.UintptrFromInt32(-1)) 48744 break 48745 48746 default: 48747 } 48748 48749 return SQLITE_OK 48750 } 48751 48752 func fsdirRowid1(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 48753 var pCsr uintptr = cur 48754 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*FsdirCsr)(unsafe.Pointer(pCsr)).FiRowid 48755 return SQLITE_OK 48756 } 48757 48758 type FstreeVtab1 = struct { 48759 Fbase sqlite3_vtab 48760 Fdb uintptr 48761 } 48762 48763 type FstreeVtab = FstreeVtab1 48764 type FstreeCsr1 = struct { 48765 Fbase sqlite3_vtab_cursor 48766 FpStmt uintptr 48767 Ffd int32 48768 F__ccgo_pad1 [4]byte 48769 } 48770 48771 type FstreeCsr = FstreeCsr1 48772 48773 func fstreeConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 48774 var pTab uintptr 48775 48776 if argc != 3 { 48777 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28428, 0) 48778 return SQLITE_ERROR 48779 } 48780 48781 pTab = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FstreeVtab{}))) 48782 if !(pTab != 0) { 48783 return SQLITE_NOMEM 48784 } 48785 libc.X__builtin___memset_chk(tls, pTab, 0, uint64(unsafe.Sizeof(FstreeVtab{})), libc.X__builtin_object_size(tls, pTab, 0)) 48786 (*FstreeVtab)(unsafe.Pointer(pTab)).Fdb = db 48787 48788 *(*uintptr)(unsafe.Pointer(ppVtab)) = pTab 48789 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+30897) 48790 48791 return SQLITE_OK 48792 } 48793 48794 func fstreeDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 48795 sqlite3.Xsqlite3_free(tls, pVtab) 48796 return SQLITE_OK 48797 } 48798 48799 func fstreeBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 48800 var ii int32 48801 48802 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 48803 var p uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 48804 if (*sqlite3_index_constraint)(unsafe.Pointer(p)).FiColumn == 0 && (*sqlite3_index_constraint)(unsafe.Pointer(p)).Fusable != 0 && (int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_GLOB || 48805 int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_LIKE || 48806 int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ) { 48807 var pUsage uintptr 48808 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 48809 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = int32((*sqlite3_index_constraint)(unsafe.Pointer(p)).Fop) 48810 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 48811 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 100000.0 48812 return SQLITE_OK 48813 } 48814 } 48815 48816 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1000000000.0 48817 return SQLITE_OK 48818 } 48819 48820 func fstreeOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 48821 var pCur uintptr 48822 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(FstreeCsr{}))) 48823 if pCur == uintptr(0) { 48824 return SQLITE_NOMEM 48825 } 48826 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(FstreeCsr{})), libc.X__builtin_object_size(tls, pCur, 0)) 48827 (*FstreeCsr)(unsafe.Pointer(pCur)).Ffd = -1 48828 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 48829 return SQLITE_OK 48830 } 48831 48832 func fstreeCloseFd(tls *libc.TLS, pCsr uintptr) { 48833 if (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd >= 0 { 48834 libc.Xclose(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd) 48835 (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd = -1 48836 } 48837 } 48838 48839 func fstreeClose(tls *libc.TLS, cur uintptr) int32 { 48840 var pCsr uintptr = cur 48841 sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 48842 fstreeCloseFd(tls, pCsr) 48843 sqlite3.Xsqlite3_free(tls, pCsr) 48844 return SQLITE_OK 48845 } 48846 48847 func fstreeNext(tls *libc.TLS, cur uintptr) int32 { 48848 var pCsr uintptr = cur 48849 var rc int32 48850 48851 fstreeCloseFd(tls, pCsr) 48852 rc = sqlite3.Xsqlite3_step(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 48853 if rc != SQLITE_ROW { 48854 rc = sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 48855 (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 48856 } else { 48857 rc = SQLITE_OK 48858 (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd = libc.Xopen(tls, sqlite3.Xsqlite3_column_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 0), O_RDONLY, 0) 48859 } 48860 48861 return rc 48862 } 48863 48864 func fstreeFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 48865 bp := tls.Alloc(2) 48866 defer tls.Free(2) 48867 48868 var pCsr uintptr = pVtabCursor 48869 var pTab uintptr = (*FstreeCsr)(unsafe.Pointer(pCsr)).Fbase.FpVtab 48870 var rc int32 48871 var zSql uintptr = ts + 30933 48872 var zRoot uintptr 48873 var nRoot int32 48874 var zPrefix uintptr 48875 var nPrefix int32 48876 var zDir uintptr 48877 var nDir int32 48878 *(*[2]int8)(unsafe.Pointer(bp)) = [2]int8{int8(0), int8(0)} 48879 48880 zRoot = ts + 31165 48881 nRoot = 1 48882 zPrefix = ts + 584 48883 nPrefix = 0 48884 48885 zDir = zRoot 48886 nDir = nRoot 48887 48888 fstreeCloseFd(tls, pCsr) 48889 sqlite3.Xsqlite3_finalize(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt) 48890 (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt = uintptr(0) 48891 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*FstreeVtab)(unsafe.Pointer(pTab)).Fdb, zSql, -1, pCsr+8, uintptr(0)) 48892 if rc != SQLITE_OK { 48893 return rc 48894 } 48895 48896 if idxNum != 0 { 48897 var zQuery uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 48898 switch idxNum { 48899 case SQLITE_INDEX_CONSTRAINT_GLOB: 48900 *(*int8)(unsafe.Pointer(bp)) = int8('*') 48901 *(*int8)(unsafe.Pointer(bp + 1)) = int8('?') 48902 break 48903 fallthrough 48904 case SQLITE_INDEX_CONSTRAINT_LIKE: 48905 *(*int8)(unsafe.Pointer(bp)) = int8('_') 48906 *(*int8)(unsafe.Pointer(bp + 1)) = int8('%') 48907 break 48908 } 48909 48910 if sqlite3.Xsqlite3_strnicmp(tls, zQuery, zPrefix, nPrefix) == 0 { 48911 var i int32 48912 for i = nPrefix; *(*int8)(unsafe.Pointer(zQuery + uintptr(i))) != 0; i++ { 48913 if int32(*(*int8)(unsafe.Pointer(zQuery + uintptr(i)))) == int32(*(*int8)(unsafe.Pointer(bp))) || int32(*(*int8)(unsafe.Pointer(zQuery + uintptr(i)))) == int32(*(*int8)(unsafe.Pointer(bp + 1))) { 48914 break 48915 } 48916 if int32(*(*int8)(unsafe.Pointer(zQuery + uintptr(i)))) == '/' { 48917 nDir = i 48918 } 48919 } 48920 zDir = zQuery 48921 } 48922 } 48923 if nDir == 0 { 48924 nDir = 1 48925 } 48926 48927 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 1, zDir, nDir, libc.UintptrFromInt32(-1)) 48928 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 2, zRoot, nRoot, libc.UintptrFromInt32(-1)) 48929 sqlite3.Xsqlite3_bind_text(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 3, zPrefix, nPrefix, libc.UintptrFromInt32(-1)) 48930 48931 return fstreeNext(tls, pVtabCursor) 48932 } 48933 48934 func fstreeEof(tls *libc.TLS, cur uintptr) int32 { 48935 var pCsr uintptr = cur 48936 return libc.Bool32((*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt == uintptr(0)) 48937 } 48938 48939 func fstreeColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 48940 bp := tls.Alloc(144) 48941 defer tls.Free(144) 48942 48943 var pCsr uintptr = cur 48944 if i == 0 { 48945 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).FpStmt, 0)) 48946 } else { 48947 libc.Xfstat(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd, bp) 48948 48949 if int32((*stat)(unsafe.Pointer(bp)).Fst_mode)&S_IFMT == S_IFREG { 48950 if i == 1 { 48951 sqlite3.Xsqlite3_result_int64(tls, ctx, (*stat)(unsafe.Pointer(bp)).Fst_size) 48952 } else { 48953 var nRead int32 48954 var aBuf uintptr = sqlite3.Xsqlite3_malloc(tls, int32((*stat)(unsafe.Pointer(bp)).Fst_mode)+1) 48955 if !(aBuf != 0) { 48956 return SQLITE_NOMEM 48957 } 48958 nRead = int32(libc.Xread(tls, (*FstreeCsr)(unsafe.Pointer(pCsr)).Ffd, aBuf, uint64((*stat)(unsafe.Pointer(bp)).Fst_mode))) 48959 if nRead != int32((*stat)(unsafe.Pointer(bp)).Fst_mode) { 48960 return SQLITE_IOERR 48961 } 48962 sqlite3.Xsqlite3_result_blob(tls, ctx, aBuf, nRead, libc.UintptrFromInt32(-1)) 48963 sqlite3.Xsqlite3_free(tls, aBuf) 48964 } 48965 } 48966 } 48967 48968 return SQLITE_OK 48969 } 48970 48971 func fstreeRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 48972 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 48973 return SQLITE_OK 48974 } 48975 48976 func fsConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 48977 var pVtab uintptr 48978 var nByte int32 48979 var zTbl uintptr 48980 var zDb uintptr = *(*uintptr)(unsafe.Pointer(argv + 1*8)) 48981 48982 if argc != 4 { 48983 *(*uintptr)(unsafe.Pointer(pzErr)) = sqlite3.Xsqlite3_mprintf(tls, ts+28428, 0) 48984 return SQLITE_ERROR 48985 } 48986 zTbl = *(*uintptr)(unsafe.Pointer(argv + 3*8)) 48987 48988 nByte = int32(uint64(unsafe.Sizeof(fs_vtab{})) + uint64(int32(libc.Xstrlen(tls, zTbl))) + uint64(1) + uint64(int32(libc.Xstrlen(tls, zDb))) + uint64(1)) 48989 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(nByte)) 48990 if !(pVtab != 0) { 48991 return SQLITE_NOMEM 48992 } 48993 48994 (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl = pVtab + 1*48 48995 (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb = (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl + uintptr(libc.Xstrlen(tls, zTbl)+uint64(1)) 48996 (*fs_vtab)(unsafe.Pointer(pVtab)).Fdb = db 48997 libc.X__builtin___memcpy_chk(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl, zTbl, libc.Xstrlen(tls, zTbl), libc.X__builtin_object_size(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzTbl, 0)) 48998 libc.X__builtin___memcpy_chk(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb, zDb, libc.Xstrlen(tls, zDb), libc.X__builtin_object_size(tls, (*fs_vtab)(unsafe.Pointer(pVtab)).FzDb, 0)) 48999 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 49000 sqlite3.Xsqlite3_declare_vtab(tls, db, ts+31167) 49001 49002 return SQLITE_OK 49003 } 49004 49005 func fsDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 49006 sqlite3.Xsqlite3_free(tls, pVtab) 49007 return SQLITE_OK 49008 } 49009 49010 func fsOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 49011 var pCur uintptr 49012 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(fs_cursor{}))) 49013 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 49014 return SQLITE_OK 49015 } 49016 49017 func fsClose(tls *libc.TLS, cur uintptr) int32 { 49018 var pCur uintptr = cur 49019 sqlite3.Xsqlite3_finalize(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) 49020 sqlite3.Xsqlite3_free(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf) 49021 sqlite3.Xsqlite3_free(tls, pCur) 49022 return SQLITE_OK 49023 } 49024 49025 func fsNext(tls *libc.TLS, cur uintptr) int32 { 49026 var pCur uintptr = cur 49027 var rc int32 49028 49029 rc = sqlite3.Xsqlite3_step(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) 49030 if rc == SQLITE_ROW || rc == SQLITE_DONE { 49031 rc = SQLITE_OK 49032 } 49033 49034 return rc 49035 } 49036 49037 func fsFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 49038 bp := tls.Alloc(32) 49039 defer tls.Free(32) 49040 49041 var rc int32 49042 var pCur uintptr = pVtabCursor 49043 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 49044 49045 if idxNum == 1 { 49046 var zStmt uintptr = sqlite3.Xsqlite3_mprintf(tls, 49047 ts+31204, libc.VaList(bp, (*fs_vtab)(unsafe.Pointer(p)).FzDb, (*fs_vtab)(unsafe.Pointer(p)).FzTbl)) 49048 if !(zStmt != 0) { 49049 return SQLITE_NOMEM 49050 } 49051 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*fs_vtab)(unsafe.Pointer(p)).Fdb, zStmt, -1, pCur+8, uintptr(0)) 49052 sqlite3.Xsqlite3_free(tls, zStmt) 49053 if rc == SQLITE_OK { 49054 sqlite3.Xsqlite3_bind_value(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 1, *(*uintptr)(unsafe.Pointer(argv))) 49055 } 49056 } else { 49057 var zStmt uintptr = sqlite3.Xsqlite3_mprintf(tls, ts+3407, libc.VaList(bp+16, (*fs_vtab)(unsafe.Pointer(p)).FzDb, (*fs_vtab)(unsafe.Pointer(p)).FzTbl)) 49058 if !(zStmt != 0) { 49059 return SQLITE_NOMEM 49060 } 49061 rc = sqlite3.Xsqlite3_prepare_v2(tls, (*fs_vtab)(unsafe.Pointer(p)).Fdb, zStmt, -1, pCur+8, uintptr(0)) 49062 sqlite3.Xsqlite3_free(tls, zStmt) 49063 } 49064 49065 if rc == SQLITE_OK { 49066 rc = fsNext(tls, pVtabCursor) 49067 } 49068 return rc 49069 } 49070 49071 func fsColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 49072 bp := tls.Alloc(144) 49073 defer tls.Free(144) 49074 49075 var pCur uintptr = cur 49076 49077 if i == 0 { 49078 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 0)) 49079 } else { 49080 var zFile uintptr = sqlite3.Xsqlite3_column_text(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 1) 49081 49082 var fd int32 49083 var n int32 49084 fd = libc.Xopen(tls, zFile, O_RDONLY, 0) 49085 if fd < 0 { 49086 return SQLITE_IOERR 49087 } 49088 libc.Xfstat(tls, fd, bp) 49089 49090 if (*stat)(unsafe.Pointer(bp)).Fst_size >= off_t((*fs_cursor)(unsafe.Pointer(pCur)).FnAlloc) { 49091 var nNew sqlite3_int64 = (*stat)(unsafe.Pointer(bp)).Fst_size * int64(2) 49092 var zNew uintptr 49093 if nNew < int64(1024) { 49094 nNew = int64(1024) 49095 } 49096 49097 zNew = sqlite3.Xsqlite3Realloc(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, uint64(nNew)) 49098 if zNew == uintptr(0) { 49099 libc.Xclose(tls, fd) 49100 return SQLITE_NOMEM 49101 } 49102 (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf = zNew 49103 (*fs_cursor)(unsafe.Pointer(pCur)).FnAlloc = int32(nNew) 49104 } 49105 49106 n = int32(libc.Xread(tls, fd, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, uint64((*stat)(unsafe.Pointer(bp)).Fst_size))) 49107 libc.Xclose(tls, fd) 49108 if off_t(n) != (*stat)(unsafe.Pointer(bp)).Fst_size { 49109 return SQLITE_ERROR 49110 } 49111 (*fs_cursor)(unsafe.Pointer(pCur)).FnBuf = int32((*stat)(unsafe.Pointer(bp)).Fst_size) 49112 *(*int8)(unsafe.Pointer((*fs_cursor)(unsafe.Pointer(pCur)).FzBuf + uintptr((*fs_cursor)(unsafe.Pointer(pCur)).FnBuf))) = int8(0) 49113 49114 sqlite3.Xsqlite3_result_text(tls, ctx, (*fs_cursor)(unsafe.Pointer(pCur)).FzBuf, -1, libc.UintptrFromInt32(-1)) 49115 } 49116 return SQLITE_OK 49117 } 49118 49119 func fsRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 49120 var pCur uintptr = cur 49121 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite3.Xsqlite3_column_int64(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt, 0) 49122 return SQLITE_OK 49123 } 49124 49125 func fsEof(tls *libc.TLS, cur uintptr) int32 { 49126 var pCur uintptr = cur 49127 return libc.Bool32(sqlite3.Xsqlite3_data_count(tls, (*fs_cursor)(unsafe.Pointer(pCur)).FpStmt) == 0) 49128 } 49129 49130 func fsBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 49131 var ii int32 49132 49133 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 49134 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 49135 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn < 0 && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 && 49136 int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ { 49137 var pUsage uintptr 49138 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 49139 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(0) 49140 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = 1 49141 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxNum = 1 49142 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 1.0 49143 break 49144 } 49145 } 49146 49147 return SQLITE_OK 49148 } 49149 49150 var fsModule = sqlite3_module{ 49151 FxCreate: 0, 49152 FxConnect: 0, 49153 FxBestIndex: 0, 49154 FxDisconnect: 0, 49155 FxDestroy: 0, 49156 FxOpen: 0, 49157 FxClose: 0, 49158 FxFilter: 0, 49159 FxNext: 0, 49160 FxEof: 0, 49161 FxColumn: 0, 49162 FxRowid: 0, 49163 } 49164 49165 var fsdirModule = sqlite3_module{ 49166 FxCreate: 0, 49167 FxConnect: 0, 49168 FxBestIndex: 0, 49169 FxDisconnect: 0, 49170 FxDestroy: 0, 49171 FxOpen: 0, 49172 FxClose: 0, 49173 FxFilter: 0, 49174 FxNext: 0, 49175 FxEof: 0, 49176 FxColumn: 0, 49177 FxRowid: 0, 49178 } 49179 49180 var fstreeModule = sqlite3_module{ 49181 FxCreate: 0, 49182 FxConnect: 0, 49183 FxBestIndex: 0, 49184 FxDisconnect: 0, 49185 FxDestroy: 0, 49186 FxOpen: 0, 49187 FxClose: 0, 49188 FxFilter: 0, 49189 FxNext: 0, 49190 FxEof: 0, 49191 FxColumn: 0, 49192 FxRowid: 0, 49193 } 49194 49195 func register_fs_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 49196 bp := tls.Alloc(8) 49197 defer tls.Free(8) 49198 49199 if objc != 2 { 49200 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 49201 return TCL_ERROR 49202 } 49203 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 49204 return TCL_ERROR 49205 } 49206 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+31238, uintptr(unsafe.Pointer(&fsModule)), interp) 49207 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+5325, uintptr(unsafe.Pointer(&fsdirModule)), uintptr(0)) 49208 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+31241, uintptr(unsafe.Pointer(&fstreeModule)), uintptr(0)) 49209 return TCL_OK 49210 } 49211 49212 func Sqlitetestfs_Init(tls *libc.TLS, interp uintptr) int32 { 49213 var i int32 49214 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd6))/uint64(unsafe.Sizeof(struct { 49215 FzName uintptr 49216 FxProc uintptr 49217 FclientData uintptr 49218 }{})); i++ { 49219 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd6[i].FzName, 49220 aObjCmd6[i].FxProc, aObjCmd6[i].FclientData, uintptr(0)) 49221 } 49222 return TCL_OK 49223 } 49224 49225 var aObjCmd6 = [1]struct { 49226 FzName uintptr 49227 FxProc uintptr 49228 FclientData uintptr 49229 }{ 49230 {FzName: ts + 31248, FxProc: 0}, 49231 } 49232 49233 func testContextMalloc(tls *libc.TLS, context uintptr, nByte int32) uintptr { 49234 var z uintptr = sqlite3.Xsqlite3_malloc(tls, nByte) 49235 if !(z != 0) && nByte > 0 { 49236 sqlite3.Xsqlite3_result_error_nomem(tls, context) 49237 } 49238 return z 49239 } 49240 49241 func randStr(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 49242 bp := tls.Alloc(1004) 49243 defer tls.Free(1004) 49244 49245 var iMin int32 49246 var iMax int32 49247 var n int32 49248 49249 var i int32 49250 49251 iMin = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 49252 if iMin < 0 { 49253 iMin = 0 49254 } 49255 if uint64(iMin) >= uint64(unsafe.Sizeof([1000]uint8{})) { 49256 iMin = int32(uint64(unsafe.Sizeof([1000]uint8{})) - uint64(1)) 49257 } 49258 iMax = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 49259 if iMax < iMin { 49260 iMax = iMin 49261 } 49262 if uint64(iMax) >= uint64(unsafe.Sizeof([1000]uint8{})) { 49263 iMax = int32(uint64(unsafe.Sizeof([1000]uint8{})) - uint64(1)) 49264 } 49265 n = iMin 49266 if iMax > iMin { 49267 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(int32(0))), bp) 49268 *(*int32)(unsafe.Pointer(bp)) &= 0x7fffffff 49269 n = n + *(*int32)(unsafe.Pointer(bp))%(iMax+1-iMin) 49270 } 49271 49272 sqlite3.Xsqlite3_randomness(tls, n, bp+4) 49273 for i = 0; i < n; i++ { 49274 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr(i))) = zSrc[uint64(*(*uint8)(unsafe.Pointer(bp + 4 + uintptr(i))))%(uint64(unsafe.Sizeof(zSrc))-uint64(1))] 49275 } 49276 *(*uint8)(unsafe.Pointer(bp + 4 + uintptr(n))) = uint8(0) 49277 sqlite3.Xsqlite3_result_text(tls, context, bp+4, n, libc.UintptrFromInt32(-1)) 49278 } 49279 49280 var zSrc = *(*[79]uint8)(unsafe.Pointer(ts + 31267)) 49281 49282 var test_destructor_count_var int32 = 0 49283 49284 func destructor(tls *libc.TLS, p uintptr) { 49285 var zVal uintptr = p 49286 49287 zVal-- 49288 sqlite3.Xsqlite3_free(tls, zVal) 49289 test_destructor_count_var-- 49290 } 49291 49292 func test_destructor(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 49293 var zVal uintptr 49294 var len int32 49295 49296 test_destructor_count_var++ 49297 49298 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 49299 return 49300 } 49301 len = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 49302 zVal = testContextMalloc(tls, pCtx, len+3) 49303 if !(zVal != 0) { 49304 return 49305 } 49306 *(*int8)(unsafe.Pointer(zVal + uintptr(len+1))) = int8(0) 49307 *(*int8)(unsafe.Pointer(zVal + uintptr(len+2))) = int8(0) 49308 zVal++ 49309 libc.X__builtin___memcpy_chk(tls, zVal, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), uint64(len), libc.X__builtin_object_size(tls, zVal, 0)) 49310 sqlite3.Xsqlite3_result_text(tls, pCtx, zVal, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{destructor}))) 49311 } 49312 49313 func test_destructor16(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 49314 var zVal uintptr 49315 var len int32 49316 49317 test_destructor_count_var++ 49318 49319 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 49320 return 49321 } 49322 len = sqlite3.Xsqlite3_value_bytes16(tls, *(*uintptr)(unsafe.Pointer(argv))) 49323 zVal = testContextMalloc(tls, pCtx, len+3) 49324 if !(zVal != 0) { 49325 return 49326 } 49327 *(*int8)(unsafe.Pointer(zVal + uintptr(len+1))) = int8(0) 49328 *(*int8)(unsafe.Pointer(zVal + uintptr(len+2))) = int8(0) 49329 zVal++ 49330 libc.X__builtin___memcpy_chk(tls, zVal, sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))), uint64(len), libc.X__builtin_object_size(tls, zVal, 0)) 49331 sqlite3.Xsqlite3_result_text16(tls, pCtx, zVal, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{destructor}))) 49332 } 49333 49334 func test_destructor_count(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 49335 sqlite3.Xsqlite3_result_int(tls, pCtx, test_destructor_count_var) 49336 } 49337 49338 func test_agg_errmsg16_step(tls *libc.TLS, a uintptr, b int32, c uintptr) { 49339 } 49340 49341 func test_agg_errmsg16_final(tls *libc.TLS, ctx uintptr) { 49342 var z uintptr 49343 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, ctx) 49344 sqlite3.Xsqlite3_aggregate_context(tls, ctx, 2048) 49345 z = sqlite3.Xsqlite3_errmsg16(tls, db) 49346 sqlite3.Xsqlite3_result_text16(tls, ctx, z, -1, libc.UintptrFromInt32(-1)) 49347 } 49348 49349 func free_test_auxdata(tls *libc.TLS, p uintptr) { 49350 sqlite3.Xsqlite3_free(tls, p) 49351 } 49352 49353 func test_auxdata(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 49354 var i int32 49355 var zRet uintptr = testContextMalloc(tls, pCtx, nArg*2) 49356 if !(zRet != 0) { 49357 return 49358 } 49359 libc.X__builtin___memset_chk(tls, zRet, 0, uint64(nArg*2), libc.X__builtin_object_size(tls, zRet, 0)) 49360 for i = 0; i < nArg; i++ { 49361 var z uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 49362 if z != 0 { 49363 var n int32 49364 var zAux uintptr = sqlite3.Xsqlite3_get_auxdata(tls, pCtx, i) 49365 if zAux != 0 { 49366 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2))) = int8('1') 49367 49368 } else { 49369 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2))) = int8('0') 49370 } 49371 n = int32(libc.Xstrlen(tls, z)) + 1 49372 zAux = testContextMalloc(tls, pCtx, n) 49373 if zAux != 0 { 49374 libc.X__builtin___memcpy_chk(tls, zAux, z, uint64(n), libc.X__builtin_object_size(tls, zAux, 0)) 49375 sqlite3.Xsqlite3_set_auxdata(tls, pCtx, i, zAux, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{free_test_auxdata}))) 49376 } 49377 *(*int8)(unsafe.Pointer(zRet + uintptr(i*2+1))) = int8(' ') 49378 } 49379 } 49380 sqlite3.Xsqlite3_result_text(tls, pCtx, zRet, 2*nArg-1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{free_test_auxdata}))) 49381 } 49382 49383 func test_error(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 49384 sqlite3.Xsqlite3_result_error(tls, pCtx, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))), -1) 49385 if nArg == 2 { 49386 sqlite3.Xsqlite3_result_error_code(tls, pCtx, sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)))) 49387 } 49388 } 49389 49390 func counterFunc(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 49391 var pCounter uintptr = sqlite3.Xsqlite3_get_auxdata(tls, pCtx, 0) 49392 if pCounter == uintptr(0) { 49393 pCounter = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(int32(0)))) 49394 if pCounter == uintptr(0) { 49395 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 49396 return 49397 } 49398 *(*int32)(unsafe.Pointer(pCounter)) = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 49399 sqlite3.Xsqlite3_set_auxdata(tls, pCtx, 0, pCounter, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 49400 } else { 49401 *(*int32)(unsafe.Pointer(pCounter))++ 49402 } 49403 sqlite3.Xsqlite3_result_int(tls, pCtx, *(*int32)(unsafe.Pointer(pCounter))) 49404 } 49405 49406 func test_isolation(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 49407 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 49408 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 49409 sqlite3.Xsqlite3_value_text16(tls, *(*uintptr)(unsafe.Pointer(argv))) 49410 sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 49411 sqlite3.Xsqlite3_result_value(tls, pCtx, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 49412 } 49413 49414 func test_eval(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 49415 bp := tls.Alloc(16) 49416 defer tls.Free(16) 49417 49418 var rc int32 49419 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, pCtx) 49420 var zSql uintptr 49421 49422 zSql = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 49423 rc = sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, -1, bp+8, uintptr(0)) 49424 if rc == SQLITE_OK { 49425 rc = sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 49426 if rc == SQLITE_ROW { 49427 sqlite3.Xsqlite3_result_value(tls, pCtx, sqlite3.Xsqlite3_column_value(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0)) 49428 } 49429 rc = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp + 8))) 49430 } 49431 if rc != 0 { 49432 var zErr uintptr 49433 49434 zErr = sqlite3.Xsqlite3_mprintf(tls, ts+31346, libc.VaList(bp, sqlite3.Xsqlite3_errmsg(tls, db))) 49435 sqlite3.Xsqlite3_result_text(tls, pCtx, zErr, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 49436 sqlite3.Xsqlite3_result_error_code(tls, pCtx, rc) 49437 } 49438 } 49439 49440 func testHexChar(tls *libc.TLS, c int8) int32 { 49441 if int32(c) >= '0' && int32(c) <= '9' { 49442 return int32(c) - '0' 49443 } else if int32(c) >= 'a' && int32(c) <= 'f' { 49444 return int32(c) - 'a' + 10 49445 } else if int32(c) >= 'A' && int32(c) <= 'F' { 49446 return int32(c) - 'A' + 10 49447 } 49448 return 0 49449 } 49450 49451 func testHexToBin(tls *libc.TLS, zIn uintptr, zOut uintptr) { 49452 for *(*int8)(unsafe.Pointer(zIn)) != 0 && *(*int8)(unsafe.Pointer(zIn + 1)) != 0 { 49453 *(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zOut, 1))) = int8(testHexChar(tls, *(*int8)(unsafe.Pointer(zIn)))<<4 + testHexChar(tls, *(*int8)(unsafe.Pointer(zIn + 1)))) 49454 zIn += uintptr(2) 49455 } 49456 } 49457 49458 func testHexToUtf16be(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 49459 var n int32 49460 var zIn uintptr 49461 var zOut uintptr 49462 49463 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 49464 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 49465 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 49466 if zOut == uintptr(0) { 49467 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 49468 } else { 49469 testHexToBin(tls, zIn, zOut) 49470 sqlite3.Xsqlite3_result_text16be(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 49471 } 49472 } 49473 49474 func testHexToUtf8(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 49475 var n int32 49476 var zIn uintptr 49477 var zOut uintptr 49478 49479 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 49480 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 49481 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 49482 if zOut == uintptr(0) { 49483 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 49484 } else { 49485 testHexToBin(tls, zIn, zOut) 49486 sqlite3.Xsqlite3_result_text(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 49487 } 49488 } 49489 49490 func testHexToUtf16le(tls *libc.TLS, pCtx uintptr, nArg int32, argv uintptr) { 49491 var n int32 49492 var zIn uintptr 49493 var zOut uintptr 49494 49495 n = sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(argv))) 49496 zIn = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 49497 zOut = sqlite3.Xsqlite3_malloc(tls, n/2) 49498 if zOut == uintptr(0) { 49499 sqlite3.Xsqlite3_result_error_nomem(tls, pCtx) 49500 } else { 49501 testHexToBin(tls, zIn, zOut) 49502 sqlite3.Xsqlite3_result_text16le(tls, pCtx, zOut, n/2, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 49503 } 49504 } 49505 49506 func real2hex(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 49507 bp := tls.Alloc(28) 49508 defer tls.Free(28) 49509 49510 var i int32 49511 var bigEndian int32 49512 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = uint64(1) 49513 bigEndian = libc.Bool32(int32(*(*uint8)(unsafe.Pointer(bp))) == 0) 49514 *(*float64)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(argv))) 49515 for i = 0; i < 8; i++ { 49516 if bigEndian != 0 { 49517 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2))) = *(*int8)(unsafe.Pointer(ts + 31377 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))>>4))) 49518 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i*2+1))) = *(*int8)(unsafe.Pointer(ts + 31377 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))&0xf))) 49519 } else { 49520 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(14-i*2))) = *(*int8)(unsafe.Pointer(ts + 31377 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))>>4))) 49521 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(14-i*2+1))) = *(*int8)(unsafe.Pointer(ts + 31377 + uintptr(int32(*(*uint8)(unsafe.Pointer(bp + uintptr(i))))&0xf))) 49522 } 49523 } 49524 *(*int8)(unsafe.Pointer(bp + 8 + 16)) = int8(0) 49525 sqlite3.Xsqlite3_result_text(tls, context, bp+8, -1, libc.UintptrFromInt32(-1)) 49526 } 49527 49528 func test_extract(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 49529 bp := tls.Alloc(72) 49530 defer tls.Free(72) 49531 49532 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 49533 var pRec uintptr 49534 var pEndHdr uintptr 49535 var pHdr uintptr 49536 var pBody uintptr 49537 49538 var iIdx int32 49539 var iCurrent int32 = 0 49540 49541 pRec = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 49542 iIdx = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 49543 49544 pHdr = pRec + uintptr(sqlite3.Xsqlite3GetVarint(tls, pRec, bp)) 49545 pBody = libc.AssignUintptr(&pEndHdr, pRec+uintptr(*(*u64)(unsafe.Pointer(bp)))) 49546 49547 for iCurrent = 0; pHdr < pEndHdr && iCurrent <= iIdx; iCurrent++ { 49548 libc.X__builtin___memset_chk(tls, bp+8, 0, uint64(unsafe.Sizeof(Mem{})), libc.X__builtin_object_size(tls, bp+8, 0)) 49549 (*Mem)(unsafe.Pointer(bp + 8)).Fdb = db 49550 (*Mem)(unsafe.Pointer(bp + 8)).Fenc = (*sqlite31)(unsafe.Pointer(db)).Fenc 49551 pHdr += uintptr(sqlite3.Xsqlite3GetVarint(tls, pHdr, bp+64)) 49552 sqlite3.Xsqlite3VdbeSerialGet(tls, pBody, u32(*(*u64)(unsafe.Pointer(bp + 64))), bp+8) 49553 pBody += uintptr(sqlite3.Xsqlite3VdbeSerialTypeLen(tls, u32(*(*u64)(unsafe.Pointer(bp + 64))))) 49554 49555 if iCurrent == iIdx { 49556 sqlite3.Xsqlite3_result_value(tls, context, bp+8) 49557 } 49558 49559 if (*Mem)(unsafe.Pointer(bp+8)).FszMalloc != 0 { 49560 sqlite3.Xsqlite3DbFree(tls, db, (*Mem)(unsafe.Pointer(bp+8)).FzMalloc) 49561 } 49562 } 49563 } 49564 49565 func test_decode(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 49566 bp := tls.Alloc(123) 49567 defer tls.Free(123) 49568 49569 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 49570 var pRec uintptr 49571 var pEndHdr uintptr 49572 var pHdr uintptr 49573 var pBody uintptr 49574 49575 var pRet uintptr 49576 49577 pRet = tcl.XTcl_NewObj(tls) 49578 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 49579 49580 pRec = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(argv))) 49581 49582 pHdr = pRec + uintptr(sqlite3.Xsqlite3GetVarint(tls, pRec, bp+32)) 49583 pBody = libc.AssignUintptr(&pEndHdr, pRec+uintptr(*(*u64)(unsafe.Pointer(bp + 32)))) 49584 for pHdr < pEndHdr { 49585 var pVal uintptr = uintptr(0) 49586 49587 libc.X__builtin___memset_chk(tls, bp+40, 0, uint64(unsafe.Sizeof(Mem{})), libc.X__builtin_object_size(tls, bp+40, 0)) 49588 (*Mem)(unsafe.Pointer(bp + 40)).Fdb = db 49589 (*Mem)(unsafe.Pointer(bp + 40)).Fenc = (*sqlite31)(unsafe.Pointer(db)).Fenc 49590 pHdr += uintptr(sqlite3.Xsqlite3GetVarint(tls, pHdr, bp+96)) 49591 sqlite3.Xsqlite3VdbeSerialGet(tls, pBody, u32(*(*u64)(unsafe.Pointer(bp + 96))), bp+40) 49592 pBody += uintptr(sqlite3.Xsqlite3VdbeSerialTypeLen(tls, u32(*(*u64)(unsafe.Pointer(bp + 96))))) 49593 49594 switch sqlite3.Xsqlite3_value_type(tls, bp+40) { 49595 case SQLITE_TEXT: 49596 pVal = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, bp+40), -1) 49597 break 49598 49599 case SQLITE_BLOB: 49600 { 49601 *(*[16]int8)(unsafe.Pointer(bp + 107)) = [16]int8{ 49602 int8('0'), int8('1'), int8('2'), int8('3'), int8('4'), int8('5'), int8('6'), int8('7'), 49603 int8('8'), int8('9'), int8('a'), int8('b'), int8('c'), int8('d'), int8('e'), int8('f'), 49604 } 49605 var n int32 = sqlite3.Xsqlite3_value_bytes(tls, bp+40) 49606 var z uintptr = sqlite3.Xsqlite3_value_blob(tls, bp+40) 49607 var i int32 49608 pVal = tcl.XTcl_NewStringObj(tls, ts+6334, -1) 49609 for i = 0; i < n; i++ { 49610 *(*int8)(unsafe.Pointer(bp + 104)) = *(*int8)(unsafe.Pointer(bp + 107 + uintptr(int32(*(*u8)(unsafe.Pointer(z + uintptr(i))))>>4&0x0F))) 49611 *(*int8)(unsafe.Pointer(bp + 104 + 1)) = *(*int8)(unsafe.Pointer(bp + 107 + uintptr(int32(*(*u8)(unsafe.Pointer(z + uintptr(i))))&0x0F))) 49612 *(*int8)(unsafe.Pointer(bp + 104 + 2)) = int8(0) 49613 tcl.XTcl_AppendStringsToObj(tls, pVal, libc.VaList(bp, bp+104, 0)) 49614 } 49615 tcl.XTcl_AppendStringsToObj(tls, pVal, libc.VaList(bp+16, ts+5624, 0)) 49616 break 49617 49618 } 49619 49620 case SQLITE_FLOAT: 49621 pVal = tcl.XTcl_NewDoubleObj(tls, sqlite3.Xsqlite3_value_double(tls, bp+40)) 49622 break 49623 49624 case SQLITE_INTEGER: 49625 pVal = tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_value_int64(tls, bp+40)) 49626 break 49627 49628 case SQLITE_NULL: 49629 pVal = tcl.XTcl_NewStringObj(tls, ts+5846, -1) 49630 break 49631 49632 default: 49633 } 49634 49635 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRet, pVal) 49636 49637 if (*Mem)(unsafe.Pointer(bp+40)).FszMalloc != 0 { 49638 sqlite3.Xsqlite3DbFree(tls, db, (*Mem)(unsafe.Pointer(bp+40)).FzMalloc) 49639 } 49640 } 49641 49642 sqlite3.Xsqlite3_result_text(tls, context, tcl.XTcl_GetString(tls, pRet), -1, libc.UintptrFromInt32(-1)) 49643 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 49644 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount, 1) <= 0 { 49645 tcl.XTclFreeObj(tls, pRet) 49646 } 49647 } 49648 } 49649 49650 func test_zeroblob(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 49651 var nZero int32 = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 49652 sqlite3.Xsqlite3_result_zeroblob(tls, context, nZero) 49653 } 49654 49655 func test_getsubtype(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 49656 sqlite3.Xsqlite3_result_int(tls, context, int32(sqlite3.Xsqlite3_value_subtype(tls, *(*uintptr)(unsafe.Pointer(argv))))) 49657 } 49658 49659 func test_frombind(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 49660 var m sqlite3_uint64 = uint64(0) 49661 var i int32 49662 for i = 0; i < argc && i < 63; i++ { 49663 if sqlite3.Xsqlite3_value_frombind(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) != 0 { 49664 m = m | uint64(1)<<i 49665 } 49666 } 49667 sqlite3.Xsqlite3_result_int64(tls, context, sqlite3_int64(m)) 49668 } 49669 49670 func test_setsubtype(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 49671 sqlite3.Xsqlite3_result_value(tls, context, *(*uintptr)(unsafe.Pointer(argv))) 49672 sqlite3.Xsqlite3_result_subtype(tls, context, uint32(sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))) 49673 } 49674 49675 func registerTestFunctions(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pThunk uintptr) int32 { 49676 var i int32 49677 49678 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aFuncs))/uint64(unsafe.Sizeof(struct { 49679 FzName uintptr 49680 FnArg int8 49681 F__ccgo_pad1 [3]byte 49682 FeTextRep uint32 49683 FxFunc uintptr 49684 }{})); i++ { 49685 sqlite3.Xsqlite3_create_function(tls, db, aFuncs[i].FzName, int32(aFuncs[i].FnArg), 49686 int32(aFuncs[i].FeTextRep), uintptr(0), aFuncs[i].FxFunc, uintptr(0), uintptr(0)) 49687 } 49688 49689 sqlite3.Xsqlite3_create_function(tls, db, ts+31394, 0, SQLITE_ANY, uintptr(0), uintptr(0), 49690 *(*uintptr)(unsafe.Pointer(&struct { 49691 f func(*libc.TLS, uintptr, int32, uintptr) 49692 }{test_agg_errmsg16_step})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{test_agg_errmsg16_final}))) 49693 49694 return SQLITE_OK 49695 } 49696 49697 var aFuncs = [20]struct { 49698 FzName uintptr 49699 FnArg int8 49700 F__ccgo_pad1 [3]byte 49701 FeTextRep uint32 49702 FxFunc uintptr 49703 }{ 49704 {FzName: ts + 31412, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49705 {FzName: ts + 31420, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49706 {FzName: ts + 31436, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49707 {FzName: ts + 31454, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49708 {FzName: ts + 31469, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49709 {FzName: ts + 31484, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49710 {FzName: ts + 31496, FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49711 {FzName: ts + 31518, FnArg: int8(-1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49712 {FzName: ts + 31531, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49713 {FzName: ts + 31531, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49714 {FzName: ts + 31542, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49715 {FzName: ts + 31552, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49716 {FzName: ts + 31567, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49717 {FzName: ts + 31580, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49718 {FzName: ts + 31589, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49719 {FzName: ts + 31601, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49720 {FzName: ts + 31614, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8 | SQLITE_DETERMINISTIC), FxFunc: 0}, 49721 {FzName: ts + 31628, FnArg: int8(1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49722 {FzName: ts + 31644, FnArg: int8(2), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49723 {FzName: ts + 31660, FnArg: int8(-1), FeTextRep: uint32(SQLITE_UTF8), FxFunc: 0}, 49724 } 49725 49726 func autoinstall_test_funcs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49727 var rc int32 = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 49728 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 49729 }{registerTestFunctions}))) 49730 if rc == SQLITE_OK { 49731 rc = sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 49732 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 49733 }{Md5_Register}))) 49734 } 49735 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 49736 return TCL_OK 49737 } 49738 49739 func tStep(tls *libc.TLS, a uintptr, b int32, c uintptr) { 49740 } 49741 49742 func tFinal(tls *libc.TLS, a uintptr) { 49743 } 49744 49745 func abuse_create_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49746 bp := tls.Alloc(24) 49747 defer tls.Free(24) 49748 49749 var rc int32 49750 var mxArg int32 49751 49752 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0) { 49753 goto __1 49754 } 49755 return TCL_ERROR 49756 __1: 49757 ; 49758 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31674, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 49759 f func(*libc.TLS, uintptr, int32, uintptr) 49760 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct { 49761 f func(*libc.TLS, uintptr, int32, uintptr) 49762 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 49763 if !(rc != SQLITE_MISUSE) { 49764 goto __2 49765 } 49766 goto abuse_err 49767 __2: 49768 ; 49769 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31674, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 49770 f func(*libc.TLS, uintptr, int32, uintptr) 49771 }{tStep})), *(*uintptr)(unsafe.Pointer(&struct { 49772 f func(*libc.TLS, uintptr, int32, uintptr) 49773 }{tStep})), uintptr(0)) 49774 if !(rc != SQLITE_MISUSE) { 49775 goto __3 49776 } 49777 goto abuse_err 49778 __3: 49779 ; 49780 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31674, 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 49781 f func(*libc.TLS, uintptr, int32, uintptr) 49782 }{tStep})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 49783 if !(rc != SQLITE_MISUSE) { 49784 goto __4 49785 } 49786 goto abuse_err 49787 __4: 49788 ; 49789 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31674, 1, SQLITE_UTF8, uintptr(0), uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tFinal}))) 49790 if !(rc != SQLITE_MISUSE) { 49791 goto __5 49792 } 49793 goto abuse_err 49794 __5: 49795 ; 49796 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31674, 1, SQLITE_UTF8, uintptr(0), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 49797 f func(*libc.TLS, uintptr, int32, uintptr) 49798 }{tStep})), uintptr(0)) 49799 if !(rc != SQLITE_MISUSE) { 49800 goto __6 49801 } 49802 goto abuse_err 49803 __6: 49804 ; 49805 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31674, -2, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 49806 f func(*libc.TLS, uintptr, int32, uintptr) 49807 }{tStep})), uintptr(0), uintptr(0)) 49808 if !(rc != SQLITE_MISUSE) { 49809 goto __7 49810 } 49811 goto abuse_err 49812 __7: 49813 ; 49814 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), ts+31674, 128, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 49815 f func(*libc.TLS, uintptr, int32, uintptr) 49816 }{tStep})), uintptr(0), uintptr(0)) 49817 if !(rc != SQLITE_MISUSE) { 49818 goto __8 49819 } 49820 goto abuse_err 49821 __8: 49822 ; 49823 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 49824 ts+31677, 49825 1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 49826 f func(*libc.TLS, uintptr, int32, uintptr) 49827 }{tStep})), uintptr(0), uintptr(0)) 49828 if !(rc != SQLITE_MISUSE) { 49829 goto __9 49830 } 49831 goto abuse_err 49832 __9: 49833 ; 49834 sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), SQLITE_LIMIT_FUNCTION_ARG, 10000) 49835 mxArg = sqlite3.Xsqlite3_limit(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), SQLITE_LIMIT_FUNCTION_ARG, -1) 49836 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), 49837 ts+31934, 49838 mxArg, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 49839 f func(*libc.TLS, uintptr, int32, uintptr) 49840 }{tStep})), uintptr(0), uintptr(0)) 49841 if !(rc != SQLITE_OK) { 49842 goto __10 49843 } 49844 goto abuse_err 49845 __10: 49846 ; 49847 return TCL_OK 49848 49849 abuse_err: 49850 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32190, 49851 uintptr(0))) 49852 return TCL_ERROR 49853 } 49854 49855 func rankfunc(tls *libc.TLS, pCtx uintptr, nVal int32, apVal uintptr) { 49856 var aMatchinfo uintptr 49857 var nMatchinfo int32 49858 var nCol int32 49859 var nPhrase int32 49860 var iPhrase int32 49861 var score float64 49862 var nHitCount int32 49863 var nGlobalHitCount int32 49864 var weight float64 49865 var iCol int32 49866 49867 var aPhraseinfo uintptr 49868 nCol = 0 49869 nPhrase = 0 49870 score = 0.0 49871 49872 if !(nVal < 1) { 49873 goto __1 49874 } 49875 goto wrong_number_args 49876 __1: 49877 ; 49878 aMatchinfo = sqlite3.Xsqlite3_value_blob(tls, *(*uintptr)(unsafe.Pointer(apVal))) 49879 nMatchinfo = int32(uint64(sqlite3.Xsqlite3_value_bytes(tls, *(*uintptr)(unsafe.Pointer(apVal)))) / uint64(unsafe.Sizeof(int32(0)))) 49880 if !(nMatchinfo >= 2) { 49881 goto __2 49882 } 49883 nPhrase = *(*int32)(unsafe.Pointer(aMatchinfo)) 49884 nCol = *(*int32)(unsafe.Pointer(aMatchinfo + 1*4)) 49885 __2: 49886 ; 49887 if !(nMatchinfo != 2+3*nCol*nPhrase) { 49888 goto __3 49889 } 49890 sqlite3.Xsqlite3_result_error(tls, pCtx, 49891 ts+32233, -1) 49892 return 49893 __3: 49894 ; 49895 if !(nVal != 1+nCol) { 49896 goto __4 49897 } 49898 goto wrong_number_args 49899 __4: 49900 ; 49901 iPhrase = 0 49902 __5: 49903 if !(iPhrase < nPhrase) { 49904 goto __7 49905 } 49906 49907 aPhraseinfo = aMatchinfo + uintptr(2+iPhrase*nCol*3)*4 49908 iCol = 0 49909 __8: 49910 if !(iCol < nCol) { 49911 goto __10 49912 } 49913 nHitCount = *(*int32)(unsafe.Pointer(aPhraseinfo + uintptr(3*iCol)*4)) 49914 nGlobalHitCount = *(*int32)(unsafe.Pointer(aPhraseinfo + uintptr(3*iCol+1)*4)) 49915 weight = sqlite3.Xsqlite3_value_double(tls, *(*uintptr)(unsafe.Pointer(apVal + uintptr(iCol+1)*8))) 49916 if !(nHitCount > 0) { 49917 goto __11 49918 } 49919 score = score + float64(nHitCount)/float64(nGlobalHitCount)*weight 49920 __11: 49921 ; 49922 goto __9 49923 __9: 49924 iCol++ 49925 goto __8 49926 goto __10 49927 __10: 49928 ; 49929 goto __6 49930 __6: 49931 iPhrase++ 49932 goto __5 49933 goto __7 49934 __7: 49935 ; 49936 sqlite3.Xsqlite3_result_double(tls, pCtx, score) 49937 return 49938 49939 wrong_number_args: 49940 sqlite3.Xsqlite3_result_error(tls, pCtx, ts+32282, -1) 49941 } 49942 49943 func install_fts3_rank_function(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 49944 bp := tls.Alloc(8) 49945 defer tls.Free(8) 49946 49947 if objc != 2 { 49948 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 49949 return TCL_ERROR 49950 } 49951 49952 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 49953 return TCL_ERROR 49954 } 49955 sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+32327, -1, SQLITE_UTF8, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 49956 f func(*libc.TLS, uintptr, int32, uintptr) 49957 }{rankfunc})), uintptr(0), uintptr(0)) 49958 return TCL_OK 49959 } 49960 49961 func Sqlitetest_func_Init(tls *libc.TLS, interp uintptr) int32 { 49962 var i int32 49963 49964 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd7))/uint64(unsafe.Sizeof(struct { 49965 FzName uintptr 49966 FxProc uintptr 49967 }{})); i++ { 49968 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd7[i].FzName, aObjCmd7[i].FxProc, uintptr(0), uintptr(0)) 49969 } 49970 sqlite3.Xsqlite3_initialize(tls) 49971 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 49972 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 49973 }{registerTestFunctions}))) 49974 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 49975 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 49976 }{Md5_Register}))) 49977 return TCL_OK 49978 } 49979 49980 var aObjCmd7 = [3]struct { 49981 FzName uintptr 49982 FxProc uintptr 49983 }{ 49984 {FzName: ts + 32332, FxProc: 0}, 49985 {FzName: ts + 32359, FxProc: 0}, 49986 {FzName: ts + 32381, FxProc: 0}, 49987 } 49988 49989 func sqlite3TestBinToHex(tls *libc.TLS, zBuf uintptr, N int32) { 49990 bp := tls.Alloc(17) 49991 defer tls.Free(17) 49992 49993 *(*[17]uint8)(unsafe.Pointer(bp)) = *(*[17]uint8)(unsafe.Pointer(ts + 32408)) 49994 var i int32 49995 var j int32 49996 var c uint8 49997 i = N * 2 49998 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = uint8(0) 49999 for j = N - 1; j >= 0; j-- { 50000 c = *(*uint8)(unsafe.Pointer(zBuf + uintptr(j))) 50001 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = *(*uint8)(unsafe.Pointer(bp + uintptr(int32(c)&0xf))) 50002 *(*uint8)(unsafe.Pointer(zBuf + uintptr(libc.PostDecInt32(&i, 1)))) = *(*uint8)(unsafe.Pointer(bp + uintptr(int32(c)>>4))) 50003 } 50004 50005 } 50006 50007 func sqlite3TestHexToBin(tls *libc.TLS, zIn uintptr, N int32, aOut uintptr) int32 { 50008 bp := tls.Alloc(256) 50009 defer tls.Free(256) 50010 50011 *(*[256]uint8)(unsafe.Pointer(bp)) = [256]uint8{ 50012 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50013 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50014 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50015 uint8(1), uint8(2), uint8(3), uint8(4), uint8(5), uint8(6), uint8(7), uint8(8), uint8(9), uint8(10), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50016 uint8(0), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50017 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50018 uint8(0), uint8(11), uint8(12), uint8(13), uint8(14), uint8(15), uint8(16), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50019 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50020 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50021 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50022 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50023 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50024 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50025 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50026 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50027 uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), uint8(0), 50028 } 50029 var i int32 50030 var j int32 50031 var hi int32 = 1 50032 var c uint8 50033 50034 for i = libc.AssignInt32(&j, 0); i < N; i++ { 50035 c = *(*uint8)(unsafe.Pointer(bp + uintptr(*(*uint8)(unsafe.Pointer(zIn + uintptr(i)))))) 50036 if int32(c) == 0 { 50037 continue 50038 } 50039 if hi != 0 { 50040 *(*uint8)(unsafe.Pointer(aOut + uintptr(j))) = uint8((int32(c) - 1) << 4) 50041 hi = 0 50042 } else { 50043 *(*uint8)(unsafe.Pointer(aOut + uintptr(libc.PostIncInt32(&j, 1)))) |= uint8(int32(c) - 1) 50044 hi = 1 50045 } 50046 } 50047 return j 50048 } 50049 50050 func hexio_read(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50051 bp := tls.Alloc(48) 50052 defer tls.Free(48) 50053 50054 var got int32 50055 var zFile uintptr 50056 var zBuf uintptr 50057 var in uintptr 50058 50059 if objc != 4 { 50060 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32425) 50061 return TCL_ERROR 50062 } 50063 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 50064 return TCL_ERROR 50065 } 50066 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+44) != 0 { 50067 return TCL_ERROR 50068 } 50069 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 50070 zBuf = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp + 44))*2+1) 50071 if zBuf == uintptr(0) { 50072 return TCL_ERROR 50073 } 50074 in = libc.Xfopen(tls, zFile, ts+4402) 50075 if in == uintptr(0) { 50076 in = libc.Xfopen(tls, zFile, ts+32445) 50077 } 50078 if in == uintptr(0) { 50079 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32447, zFile, 0)) 50080 return TCL_ERROR 50081 } 50082 libc.Xfseek(tls, in, int64(*(*int32)(unsafe.Pointer(bp + 40))), SEEK_SET) 50083 got = int32(libc.Xfread(tls, zBuf, uint64(1), uint64(*(*int32)(unsafe.Pointer(bp + 44))), in)) 50084 libc.Xfclose(tls, in) 50085 if got < 0 { 50086 got = 0 50087 } 50088 sqlite3TestBinToHex(tls, zBuf, got) 50089 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, zBuf, 0)) 50090 sqlite3.Xsqlite3_free(tls, zBuf) 50091 return TCL_OK 50092 } 50093 50094 func hexio_write(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50095 bp := tls.Alloc(32) 50096 defer tls.Free(32) 50097 50098 var nOut int32 50099 var written int32 50100 var zFile uintptr 50101 var zIn uintptr 50102 var aOut uintptr 50103 var out uintptr 50104 50105 if objc != 4 { 50106 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32471) 50107 return TCL_ERROR 50108 } 50109 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+24) != 0 { 50110 return TCL_ERROR 50111 } 50112 zFile = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 50113 zIn = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+28) 50114 aOut = sqlite3.Xsqlite3_malloc(tls, 1+*(*int32)(unsafe.Pointer(bp + 28))/2) 50115 if aOut == uintptr(0) { 50116 return TCL_ERROR 50117 } 50118 nOut = sqlite3TestHexToBin(tls, zIn, *(*int32)(unsafe.Pointer(bp + 28)), aOut) 50119 out = libc.Xfopen(tls, zFile, ts+32495) 50120 if out == uintptr(0) { 50121 out = libc.Xfopen(tls, zFile, ts+32499) 50122 } 50123 if out == uintptr(0) { 50124 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32502, zFile, 0)) 50125 return TCL_ERROR 50126 } 50127 libc.Xfseek(tls, out, int64(*(*int32)(unsafe.Pointer(bp + 24))), SEEK_SET) 50128 written = int32(libc.Xfwrite(tls, aOut, uint64(1), uint64(nOut), out)) 50129 sqlite3.Xsqlite3_free(tls, aOut) 50130 libc.Xfclose(tls, out) 50131 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, written)) 50132 return TCL_OK 50133 } 50134 50135 func hexio_get_int(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50136 bp := tls.Alloc(8) 50137 defer tls.Free(8) 50138 50139 var val int32 50140 50141 var nOut int32 50142 var zIn uintptr 50143 var aOut uintptr 50144 50145 if objc != 2 { 50146 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32527) 50147 return TCL_ERROR 50148 } 50149 zIn = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 50150 aOut = sqlite3.Xsqlite3_malloc(tls, 1+*(*int32)(unsafe.Pointer(bp))/2) 50151 if aOut == uintptr(0) { 50152 return TCL_ERROR 50153 } 50154 nOut = sqlite3TestHexToBin(tls, zIn, *(*int32)(unsafe.Pointer(bp)), aOut) 50155 if nOut >= 4 { 50156 libc.X__builtin___memcpy_chk(tls, bp+4, aOut, uint64(4), libc.X__builtin_object_size(tls, bp+4, 0)) 50157 } else { 50158 libc.X__builtin___memset_chk(tls, bp+4, 0, uint64(unsafe.Sizeof([4]uint8{})), libc.X__builtin_object_size(tls, bp+4, 0)) 50159 libc.X__builtin___memcpy_chk(tls, bp+4+uintptr(4-nOut), aOut, uint64(nOut), libc.X__builtin_object_size(tls, bp+4+uintptr(4-nOut), 0)) 50160 } 50161 sqlite3.Xsqlite3_free(tls, aOut) 50162 val = int32(*(*uint8)(unsafe.Pointer(bp + 4)))<<24 | int32(*(*uint8)(unsafe.Pointer(bp + 4 + 1)))<<16 | int32(*(*uint8)(unsafe.Pointer(bp + 4 + 2)))<<8 | int32(*(*uint8)(unsafe.Pointer(bp + 4 + 3))) 50163 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, val)) 50164 return TCL_OK 50165 } 50166 50167 func hexio_render_int16(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50168 bp := tls.Alloc(14) 50169 defer tls.Free(14) 50170 50171 if objc != 2 { 50172 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2413) 50173 return TCL_ERROR 50174 } 50175 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 50176 return TCL_ERROR 50177 } 50178 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 8) 50179 *(*uint8)(unsafe.Pointer(bp + 4 + 1)) = uint8(*(*int32)(unsafe.Pointer(bp))) 50180 sqlite3TestBinToHex(tls, bp+4, 2) 50181 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+4, 4)) 50182 return TCL_OK 50183 } 50184 50185 func hexio_render_int32(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50186 bp := tls.Alloc(14) 50187 defer tls.Free(14) 50188 50189 if objc != 2 { 50190 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2413) 50191 return TCL_ERROR 50192 } 50193 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 50194 return TCL_ERROR 50195 } 50196 *(*uint8)(unsafe.Pointer(bp + 4)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 24) 50197 *(*uint8)(unsafe.Pointer(bp + 4 + 1)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 16) 50198 *(*uint8)(unsafe.Pointer(bp + 4 + 2)) = uint8(*(*int32)(unsafe.Pointer(bp)) >> 8) 50199 *(*uint8)(unsafe.Pointer(bp + 4 + 3)) = uint8(*(*int32)(unsafe.Pointer(bp))) 50200 sqlite3TestBinToHex(tls, bp+4, 4) 50201 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, bp+4, 8)) 50202 return TCL_OK 50203 } 50204 50205 func utf8_to_utf8(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50206 bp := tls.Alloc(16) 50207 defer tls.Free(16) 50208 50209 tcl.XTcl_AppendResult(tls, interp, 50210 libc.VaList(bp, ts+32535, 0)) 50211 return TCL_ERROR 50212 } 50213 50214 func getFts3Varint(tls *libc.TLS, p uintptr, v uintptr) int32 { 50215 var q uintptr = p 50216 var x sqlite_uint64 = uint64(0) 50217 var y sqlite_uint64 = uint64(1) 50218 for int32(*(*uint8)(unsafe.Pointer(q)))&0x80 == 0x80 { 50219 x = x + y*sqlite_uint64(int32(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1))))&0x7f) 50220 y <<= 7 50221 } 50222 x = x + y*sqlite_uint64(*(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1)))) 50223 *(*sqlite_int64)(unsafe.Pointer(v)) = sqlite_int64(x) 50224 return int32((int64(q) - int64(p)) / 1) 50225 } 50226 50227 func putFts3Varint(tls *libc.TLS, p uintptr, v sqlite_int64) int32 { 50228 var q uintptr = p 50229 var vu sqlite_uint64 = sqlite_uint64(v) 50230 for __ccgo := true; __ccgo; __ccgo = vu != uint64(0) { 50231 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&q, 1))) = uint8(vu&uint64(0x7f) | uint64(0x80)) 50232 vu >>= 7 50233 } 50234 *(*uint8)(unsafe.Pointer(q + libc.UintptrFromInt32(-1))) &= uint8(0x7f) 50235 50236 return int32((int64(q) - int64(p)) / 1) 50237 } 50238 50239 func read_fts3varint(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50240 bp := tls.Alloc(16) 50241 defer tls.Free(16) 50242 50243 var zBlob uintptr 50244 50245 var nVal int32 50246 50247 if objc != 3 { 50248 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32589) 50249 return TCL_ERROR 50250 } 50251 zBlob = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) 50252 50253 nVal = getFts3Varint(tls, zBlob, bp+8) 50254 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(0), tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(bp + 8))), 0) 50255 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nVal)) 50256 return TCL_OK 50257 } 50258 50259 func make_fts3record(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 50260 bp := tls.Alloc(28) 50261 defer tls.Free(28) 50262 50263 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 50264 *(*int32)(unsafe.Pointer(bp)) = 0 50265 var aOut uintptr = uintptr(0) 50266 var nOut int32 = 0 50267 var nAlloc int32 = 0 50268 var i int32 50269 50270 if objc != 2 { 50271 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32602) 50272 return TCL_ERROR 50273 } 50274 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, bp+8) != 0 { 50275 return TCL_ERROR 50276 } 50277 50278 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 50279 if TCL_OK == tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), bp+16) { 50280 if nOut+10 > nAlloc { 50281 var nNew int32 50282 if nAlloc != 0 { 50283 nNew = nAlloc * 2 50284 } else { 50285 nNew = 128 50286 } 50287 var aNew uintptr = sqlite3.Xsqlite3_realloc(tls, aOut, nNew) 50288 if aNew == uintptr(0) { 50289 sqlite3.Xsqlite3_free(tls, aOut) 50290 return TCL_ERROR 50291 } 50292 aOut = aNew 50293 nAlloc = nNew 50294 } 50295 nOut = nOut + putFts3Varint(tls, aOut+uintptr(nOut), *(*sqlite3_int64)(unsafe.Pointer(bp + 16))) 50296 } else { 50297 *(*int32)(unsafe.Pointer(bp + 24)) = 0 50298 var zVal uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), bp+24) 50299 for nOut+*(*int32)(unsafe.Pointer(bp + 24)) > nAlloc { 50300 var nNew int32 50301 if nAlloc != 0 { 50302 nNew = nAlloc * 2 50303 } else { 50304 nNew = 128 50305 } 50306 var aNew uintptr = sqlite3.Xsqlite3_realloc(tls, aOut, nNew) 50307 if aNew == uintptr(0) { 50308 sqlite3.Xsqlite3_free(tls, aOut) 50309 return TCL_ERROR 50310 } 50311 aOut = aNew 50312 nAlloc = nNew 50313 } 50314 libc.X__builtin___memcpy_chk(tls, aOut+uintptr(nOut), zVal, uint64(*(*int32)(unsafe.Pointer(bp + 24))), libc.X__builtin_object_size(tls, aOut+uintptr(nOut), 0)) 50315 nOut = nOut + *(*int32)(unsafe.Pointer(bp + 24)) 50316 } 50317 } 50318 50319 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewByteArrayObj(tls, aOut, nOut)) 50320 sqlite3.Xsqlite3_free(tls, aOut) 50321 return TCL_OK 50322 } 50323 50324 func Sqlitetest_hexio_Init(tls *libc.TLS, interp uintptr) int32 { 50325 var i int32 50326 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd8))/uint64(unsafe.Sizeof(struct { 50327 FzName uintptr 50328 FxProc uintptr 50329 }{})); i++ { 50330 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd8[i].FzName, aObjCmd8[i].FxProc, uintptr(0), uintptr(0)) 50331 } 50332 return TCL_OK 50333 } 50334 50335 var aObjCmd8 = [8]struct { 50336 FzName uintptr 50337 FxProc uintptr 50338 }{ 50339 {FzName: ts + 32607, FxProc: 0}, 50340 {FzName: ts + 32618, FxProc: 0}, 50341 {FzName: ts + 32630, FxProc: 0}, 50342 {FzName: ts + 32644, FxProc: 0}, 50343 {FzName: ts + 32663, FxProc: 0}, 50344 {FzName: ts + 32682, FxProc: 0}, 50345 {FzName: ts + 32695, FxProc: 0}, 50346 {FzName: ts + 32711, FxProc: 0}, 50347 } 50348 50349 type Wrapped = struct { 50350 Fpcache sqlite3_pcache_methods2 50351 Fmem sqlite3_mem_methods 50352 Fmutex sqlite3_mutex_methods 50353 Fmem_init int32 50354 Fmem_fail int32 50355 Fmutex_init int32 50356 Fmutex_fail int32 50357 Fpcache_init int32 50358 Fpcache_fail int32 50359 } 50360 50361 var wrapped Wrapped 50362 50363 func wrMemInit(tls *libc.TLS, pAppData uintptr) int32 { 50364 var rc int32 50365 if wrapped.Fmem_fail != 0 { 50366 rc = SQLITE_ERROR 50367 } else { 50368 rc = (*struct { 50369 f func(*libc.TLS, uintptr) int32 50370 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxInit})).f(tls, wrapped.Fmem.FpAppData) 50371 } 50372 if rc == SQLITE_OK { 50373 wrapped.Fmem_init = 1 50374 } 50375 return rc 50376 } 50377 50378 func wrMemShutdown(tls *libc.TLS, pAppData uintptr) { 50379 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxShutdown})).f(tls, wrapped.Fmem.FpAppData) 50380 wrapped.Fmem_init = 0 50381 } 50382 50383 func wrMemMalloc(tls *libc.TLS, n int32) uintptr { 50384 return (*struct { 50385 f func(*libc.TLS, int32) uintptr 50386 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxMalloc})).f(tls, n) 50387 } 50388 50389 func wrMemFree(tls *libc.TLS, p uintptr) { 50390 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxFree})).f(tls, p) 50391 } 50392 50393 func wrMemRealloc(tls *libc.TLS, p uintptr, n int32) uintptr { 50394 return (*struct { 50395 f func(*libc.TLS, uintptr, int32) uintptr 50396 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxRealloc})).f(tls, p, n) 50397 } 50398 50399 func wrMemSize(tls *libc.TLS, p uintptr) int32 { 50400 return (*struct { 50401 f func(*libc.TLS, uintptr) int32 50402 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxSize})).f(tls, p) 50403 } 50404 50405 func wrMemRoundup(tls *libc.TLS, n int32) int32 { 50406 return (*struct{ f func(*libc.TLS, int32) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmem.FxRoundup})).f(tls, n) 50407 } 50408 50409 func wrMutexInit(tls *libc.TLS) int32 { 50410 var rc int32 50411 if wrapped.Fmutex_fail != 0 { 50412 rc = SQLITE_ERROR 50413 } else { 50414 rc = (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexInit})).f(tls) 50415 } 50416 if rc == SQLITE_OK { 50417 wrapped.Fmutex_init = 1 50418 } 50419 return rc 50420 } 50421 50422 func wrMutexEnd(tls *libc.TLS) int32 { 50423 (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexEnd})).f(tls) 50424 wrapped.Fmutex_init = 0 50425 return SQLITE_OK 50426 } 50427 50428 func wrMutexAlloc(tls *libc.TLS, e int32) uintptr { 50429 return (*struct { 50430 f func(*libc.TLS, int32) uintptr 50431 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexAlloc})).f(tls, e) 50432 } 50433 50434 func wrMutexFree(tls *libc.TLS, p uintptr) { 50435 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexFree})).f(tls, p) 50436 } 50437 50438 func wrMutexEnter(tls *libc.TLS, p uintptr) { 50439 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexEnter})).f(tls, p) 50440 } 50441 50442 func wrMutexTry(tls *libc.TLS, p uintptr) int32 { 50443 return (*struct { 50444 f func(*libc.TLS, uintptr) int32 50445 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexTry})).f(tls, p) 50446 } 50447 50448 func wrMutexLeave(tls *libc.TLS, p uintptr) { 50449 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexLeave})).f(tls, p) 50450 } 50451 50452 func wrMutexHeld(tls *libc.TLS, p uintptr) int32 { 50453 return (*struct { 50454 f func(*libc.TLS, uintptr) int32 50455 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexHeld})).f(tls, p) 50456 } 50457 50458 func wrMutexNotheld(tls *libc.TLS, p uintptr) int32 { 50459 return (*struct { 50460 f func(*libc.TLS, uintptr) int32 50461 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fmutex.FxMutexNotheld})).f(tls, p) 50462 } 50463 50464 func wrPCacheInit(tls *libc.TLS, pArg uintptr) int32 { 50465 var rc int32 50466 if wrapped.Fpcache_fail != 0 { 50467 rc = SQLITE_ERROR 50468 } else { 50469 rc = (*struct { 50470 f func(*libc.TLS, uintptr) int32 50471 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxInit})).f(tls, wrapped.Fpcache.FpArg) 50472 } 50473 if rc == SQLITE_OK { 50474 wrapped.Fpcache_init = 1 50475 } 50476 return rc 50477 } 50478 50479 func wrPCacheShutdown(tls *libc.TLS, pArg uintptr) { 50480 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxShutdown})).f(tls, wrapped.Fpcache.FpArg) 50481 wrapped.Fpcache_init = 0 50482 } 50483 50484 func wrPCacheCreate(tls *libc.TLS, a int32, b int32, c int32) uintptr { 50485 return (*struct { 50486 f func(*libc.TLS, int32, int32, int32) uintptr 50487 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxCreate})).f(tls, a, b, c) 50488 } 50489 50490 func wrPCacheCachesize(tls *libc.TLS, p uintptr, n int32) { 50491 (*struct { 50492 f func(*libc.TLS, uintptr, int32) 50493 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxCachesize})).f(tls, p, n) 50494 } 50495 50496 func wrPCachePagecount(tls *libc.TLS, p uintptr) int32 { 50497 return (*struct { 50498 f func(*libc.TLS, uintptr) int32 50499 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxPagecount})).f(tls, p) 50500 } 50501 50502 func wrPCacheFetch(tls *libc.TLS, p uintptr, a uint32, b int32) uintptr { 50503 return (*struct { 50504 f func(*libc.TLS, uintptr, uint32, int32) uintptr 50505 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxFetch})).f(tls, p, a, b) 50506 } 50507 50508 func wrPCacheUnpin(tls *libc.TLS, p uintptr, a uintptr, b int32) { 50509 (*struct { 50510 f func(*libc.TLS, uintptr, uintptr, int32) 50511 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxUnpin})).f(tls, p, a, b) 50512 } 50513 50514 func wrPCacheRekey(tls *libc.TLS, p uintptr, a uintptr, b uint32, c uint32) { 50515 (*struct { 50516 f func(*libc.TLS, uintptr, uintptr, uint32, uint32) 50517 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxRekey})).f(tls, p, a, b, c) 50518 } 50519 50520 func wrPCacheTruncate(tls *libc.TLS, p uintptr, a uint32) { 50521 (*struct { 50522 f func(*libc.TLS, uintptr, uint32) 50523 })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxTruncate})).f(tls, p, a) 50524 } 50525 50526 func wrPCacheDestroy(tls *libc.TLS, p uintptr) { 50527 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{wrapped.Fpcache.FxDestroy})).f(tls, p) 50528 } 50529 50530 func installInitWrappers(tls *libc.TLS) { 50531 bp := tls.Alloc(288) 50532 defer tls.Free(288) 50533 50534 *(*sqlite3_mutex_methods)(unsafe.Pointer(bp + 48)) = sqlite3_mutex_methods{ 50535 FxMutexInit: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{wrMutexInit})), FxMutexEnd: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{wrMutexEnd})), FxMutexAlloc: *(*uintptr)(unsafe.Pointer(&struct { 50536 f func(*libc.TLS, int32) uintptr 50537 }{wrMutexAlloc})), 50538 FxMutexFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMutexFree})), FxMutexEnter: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMutexEnter})), FxMutexTry: *(*uintptr)(unsafe.Pointer(&struct { 50539 f func(*libc.TLS, uintptr) int32 50540 }{wrMutexTry})), 50541 FxMutexLeave: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMutexLeave})), FxMutexHeld: *(*uintptr)(unsafe.Pointer(&struct { 50542 f func(*libc.TLS, uintptr) int32 50543 }{wrMutexHeld})), FxMutexNotheld: *(*uintptr)(unsafe.Pointer(&struct { 50544 f func(*libc.TLS, uintptr) int32 50545 }{wrMutexNotheld})), 50546 } 50547 *(*sqlite3_pcache_methods2)(unsafe.Pointer(bp + 184)) = sqlite3_pcache_methods2{ 50548 FiVersion: 1, 50549 FxInit: *(*uintptr)(unsafe.Pointer(&struct { 50550 f func(*libc.TLS, uintptr) int32 50551 }{wrPCacheInit})), FxShutdown: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrPCacheShutdown})), FxCreate: *(*uintptr)(unsafe.Pointer(&struct { 50552 f func(*libc.TLS, int32, int32, int32) uintptr 50553 }{wrPCacheCreate})), 50554 FxCachesize: *(*uintptr)(unsafe.Pointer(&struct { 50555 f func(*libc.TLS, uintptr, int32) 50556 }{wrPCacheCachesize})), FxPagecount: *(*uintptr)(unsafe.Pointer(&struct { 50557 f func(*libc.TLS, uintptr) int32 50558 }{wrPCachePagecount})), FxFetch: *(*uintptr)(unsafe.Pointer(&struct { 50559 f func(*libc.TLS, uintptr, uint32, int32) uintptr 50560 }{wrPCacheFetch})), 50561 FxUnpin: *(*uintptr)(unsafe.Pointer(&struct { 50562 f func(*libc.TLS, uintptr, uintptr, int32) 50563 }{wrPCacheUnpin})), FxRekey: *(*uintptr)(unsafe.Pointer(&struct { 50564 f func(*libc.TLS, uintptr, uintptr, uint32, uint32) 50565 }{wrPCacheRekey})), FxTruncate: *(*uintptr)(unsafe.Pointer(&struct { 50566 f func(*libc.TLS, uintptr, uint32) 50567 }{wrPCacheTruncate})), 50568 FxDestroy: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrPCacheDestroy})), 50569 } 50570 *(*sqlite3_mem_methods)(unsafe.Pointer(bp + 120)) = sqlite3_mem_methods{ 50571 FxMalloc: *(*uintptr)(unsafe.Pointer(&struct { 50572 f func(*libc.TLS, int32) uintptr 50573 }{wrMemMalloc})), FxFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMemFree})), FxRealloc: *(*uintptr)(unsafe.Pointer(&struct { 50574 f func(*libc.TLS, uintptr, int32) uintptr 50575 }{wrMemRealloc})), 50576 FxSize: *(*uintptr)(unsafe.Pointer(&struct { 50577 f func(*libc.TLS, uintptr) int32 50578 }{wrMemSize})), FxRoundup: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{wrMemRoundup})), FxInit: *(*uintptr)(unsafe.Pointer(&struct { 50579 f func(*libc.TLS, uintptr) int32 50580 }{wrMemInit})), 50581 FxShutdown: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{wrMemShutdown})), 50582 } 50583 50584 libc.X__builtin___memset_chk(tls, uintptr(unsafe.Pointer(&wrapped)), 0, uint64(unsafe.Sizeof(wrapped)), libc.X__builtin_object_size(tls, uintptr(unsafe.Pointer(&wrapped)), 0)) 50585 50586 sqlite3.Xsqlite3_shutdown(tls) 50587 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMUTEX, libc.VaList(bp, uintptr(unsafe.Pointer(&wrapped))+168)) 50588 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp+8, uintptr(unsafe.Pointer(&wrapped))+104)) 50589 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETPCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&wrapped)))) 50590 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+24, bp+48)) 50591 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+32, bp+120)) 50592 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+40, bp+184)) 50593 } 50594 50595 func init_wrapper_install(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 50596 bp := tls.Alloc(24) 50597 defer tls.Free(24) 50598 50599 var i int32 50600 installInitWrappers(tls) 50601 for i = 1; i < objc; i++ { 50602 var z uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8))) 50603 if libc.Xstrcmp(tls, z, ts+32727) == 0 { 50604 wrapped.Fmem_fail = 1 50605 } else if libc.Xstrcmp(tls, z, ts+29254) == 0 { 50606 wrapped.Fmutex_fail = 1 50607 } else if libc.Xstrcmp(tls, z, ts+32731) == 0 { 50608 wrapped.Fpcache_fail = 1 50609 } else { 50610 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32738, z, ts+11945)) 50611 return TCL_ERROR 50612 } 50613 } 50614 return TCL_OK 50615 } 50616 50617 func init_wrapper_uninstall(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 50618 bp := tls.Alloc(24) 50619 defer tls.Free(24) 50620 50621 if objc != 1 { 50622 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 50623 return TCL_ERROR 50624 } 50625 50626 sqlite3.Xsqlite3_shutdown(tls) 50627 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp, uintptr(unsafe.Pointer(&wrapped))+168)) 50628 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+8, uintptr(unsafe.Pointer(&wrapped))+104)) 50629 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&wrapped)))) 50630 return TCL_OK 50631 } 50632 50633 func init_wrapper_clear(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 50634 if objc != 1 { 50635 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 50636 return TCL_ERROR 50637 } 50638 50639 wrapped.Fmem_fail = 0 50640 wrapped.Fmutex_fail = 0 50641 wrapped.Fpcache_fail = 0 50642 return TCL_OK 50643 } 50644 50645 func init_wrapper_query(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 50646 var pRet uintptr 50647 50648 if objc != 1 { 50649 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 50650 return TCL_ERROR 50651 } 50652 50653 pRet = tcl.XTcl_NewObj(tls) 50654 if wrapped.Fmutex_init != 0 { 50655 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+29254, -1)) 50656 } 50657 if wrapped.Fmem_init != 0 { 50658 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+32727, -1)) 50659 } 50660 if wrapped.Fpcache_init != 0 { 50661 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, ts+32731, -1)) 50662 } 50663 50664 tcl.XTcl_SetObjResult(tls, interp, pRet) 50665 return TCL_OK 50666 } 50667 50668 func Sqlitetest_init_Init(tls *libc.TLS, interp uintptr) int32 { 50669 var i int32 50670 50671 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd9))/uint64(unsafe.Sizeof(struct { 50672 FzName uintptr 50673 FxProc uintptr 50674 }{})); i++ { 50675 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd9[i].FzName, aObjCmd9[i].FxProc, uintptr(0), uintptr(0)) 50676 } 50677 50678 return TCL_OK 50679 } 50680 50681 var aObjCmd9 = [4]struct { 50682 FzName uintptr 50683 FxProc uintptr 50684 }{ 50685 {FzName: ts + 32758, FxProc: 0}, 50686 {FzName: ts + 32779, FxProc: 0}, 50687 {FzName: ts + 32798, FxProc: 0}, 50688 {FzName: ts + 32821, FxProc: 0}, 50689 } 50690 50691 type sqlite3_intarray1 = struct { 50692 Fn int32 50693 F__ccgo_pad1 [4]byte 50694 Fa uintptr 50695 FxFree uintptr 50696 } 50697 50698 type sqlite3_intarray = sqlite3_intarray1 50699 50700 type intarray_vtab1 = struct { 50701 Fbase sqlite3_vtab 50702 FpContent uintptr 50703 } 50704 50705 type intarray_vtab = intarray_vtab1 50706 type intarray_cursor1 = struct { 50707 Fbase sqlite3_vtab_cursor 50708 Fi int32 50709 F__ccgo_pad1 [4]byte 50710 } 50711 50712 type intarray_cursor = intarray_cursor1 50713 50714 func intarrayFree(tls *libc.TLS, p uintptr) { 50715 if (*sqlite3_intarray)(unsafe.Pointer(p)).FxFree != 0 { 50716 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_intarray)(unsafe.Pointer(p)).FxFree})).f(tls, (*sqlite3_intarray)(unsafe.Pointer(p)).Fa) 50717 } 50718 sqlite3.Xsqlite3_free(tls, p) 50719 } 50720 50721 func intarrayDestroy(tls *libc.TLS, p uintptr) int32 { 50722 var pVtab uintptr = p 50723 sqlite3.Xsqlite3_free(tls, pVtab) 50724 return 0 50725 } 50726 50727 func intarrayCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 50728 var rc int32 = SQLITE_NOMEM 50729 var pVtab uintptr = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(intarray_vtab{}))) 50730 50731 if pVtab != 0 { 50732 libc.X__builtin___memset_chk(tls, pVtab, 0, uint64(unsafe.Sizeof(intarray_vtab{})), libc.X__builtin_object_size(tls, pVtab, 0)) 50733 (*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent = pAux 50734 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+32840) 50735 } 50736 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 50737 return rc 50738 } 50739 50740 func intarrayOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 50741 var rc int32 = SQLITE_NOMEM 50742 var pCur uintptr 50743 pCur = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(intarray_cursor{}))) 50744 if pCur != 0 { 50745 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(intarray_cursor{})), libc.X__builtin_object_size(tls, pCur, 0)) 50746 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 50747 rc = SQLITE_OK 50748 } 50749 return rc 50750 } 50751 50752 func intarrayClose(tls *libc.TLS, cur uintptr) int32 { 50753 var pCur uintptr = cur 50754 sqlite3.Xsqlite3_free(tls, pCur) 50755 return SQLITE_OK 50756 } 50757 50758 func intarrayColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 50759 var pCur uintptr = cur 50760 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 50761 if (*intarray_cursor)(unsafe.Pointer(pCur)).Fi >= 0 && (*intarray_cursor)(unsafe.Pointer(pCur)).Fi < (*sqlite3_intarray)(unsafe.Pointer((*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent)).Fn { 50762 sqlite3.Xsqlite3_result_int64(tls, ctx, *(*sqlite3_int64)(unsafe.Pointer((*sqlite3_intarray)(unsafe.Pointer((*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent)).Fa + uintptr((*intarray_cursor)(unsafe.Pointer(pCur)).Fi)*8))) 50763 } 50764 return SQLITE_OK 50765 } 50766 50767 func intarrayRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 50768 var pCur uintptr = cur 50769 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite_int64((*intarray_cursor)(unsafe.Pointer(pCur)).Fi) 50770 return SQLITE_OK 50771 } 50772 50773 func intarrayEof(tls *libc.TLS, cur uintptr) int32 { 50774 var pCur uintptr = cur 50775 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 50776 return libc.Bool32((*intarray_cursor)(unsafe.Pointer(pCur)).Fi >= (*sqlite3_intarray)(unsafe.Pointer((*intarray_vtab)(unsafe.Pointer(pVtab)).FpContent)).Fn) 50777 } 50778 50779 func intarrayNext(tls *libc.TLS, cur uintptr) int32 { 50780 var pCur uintptr = cur 50781 (*intarray_cursor)(unsafe.Pointer(pCur)).Fi++ 50782 return SQLITE_OK 50783 } 50784 50785 func intarrayFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 50786 var pCur uintptr = pVtabCursor 50787 (*intarray_cursor)(unsafe.Pointer(pCur)).Fi = 0 50788 return SQLITE_OK 50789 } 50790 50791 func intarrayBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 50792 return SQLITE_OK 50793 } 50794 50795 var intarrayModule = sqlite3_module{ 50796 FxCreate: 0, 50797 FxConnect: 0, 50798 FxBestIndex: 0, 50799 FxDisconnect: 0, 50800 FxDestroy: 0, 50801 FxOpen: 0, 50802 FxClose: 0, 50803 FxFilter: 0, 50804 FxNext: 0, 50805 FxEof: 0, 50806 FxColumn: 0, 50807 FxRowid: 0, 50808 } 50809 50810 func sqlite3_intarray_create(tls *libc.TLS, db uintptr, zName uintptr, ppReturn uintptr) int32 { 50811 bp := tls.Alloc(16) 50812 defer tls.Free(16) 50813 50814 var rc int32 = SQLITE_OK 50815 var p uintptr 50816 50817 *(*uintptr)(unsafe.Pointer(ppReturn)) = libc.AssignUintptr(&p, sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(sqlite3_intarray{})))) 50818 if p == uintptr(0) { 50819 return SQLITE_NOMEM 50820 } 50821 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(sqlite3_intarray{})), libc.X__builtin_object_size(tls, p, 0)) 50822 rc = sqlite3.Xsqlite3_create_module_v2(tls, db, zName, uintptr(unsafe.Pointer(&intarrayModule)), p, 50823 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{intarrayFree}))) 50824 if rc == SQLITE_OK { 50825 var zSql uintptr 50826 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+32882, 50827 libc.VaList(bp, zName, zName)) 50828 rc = sqlite3.Xsqlite3_exec(tls, db, zSql, uintptr(0), uintptr(0), uintptr(0)) 50829 sqlite3.Xsqlite3_free(tls, zSql) 50830 } 50831 return rc 50832 } 50833 50834 func sqlite3_intarray_bind(tls *libc.TLS, pIntArray uintptr, nElements int32, aElements uintptr, xFree uintptr) int32 { 50835 if (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree != 0 { 50836 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree})).f(tls, (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fa) 50837 } 50838 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fn = nElements 50839 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).Fa = aElements 50840 (*sqlite3_intarray)(unsafe.Pointer(pIntArray)).FxFree = xFree 50841 return SQLITE_OK 50842 } 50843 50844 func test_intarray_create(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 50845 bp := tls.Alloc(148) 50846 defer tls.Free(148) 50847 50848 var zName uintptr 50849 50850 var rc int32 = SQLITE_OK 50851 50852 if objc != 3 { 50853 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 50854 return TCL_ERROR 50855 } 50856 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 50857 return TCL_ERROR 50858 } 50859 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 50860 rc = sqlite3_intarray_create(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), zName, bp+40) 50861 if rc != SQLITE_OK { 50862 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 50863 return TCL_ERROR 50864 } 50865 sqlite3TestMakePointerStr(tls, interp, bp+48, *(*uintptr)(unsafe.Pointer(bp + 40))) 50866 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, bp+48, uintptr(0))) 50867 return TCL_OK 50868 } 50869 50870 func test_intarray_bind(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 50871 bp := tls.Alloc(40) 50872 defer tls.Free(40) 50873 50874 var pArray uintptr 50875 var rc int32 = SQLITE_OK 50876 var i int32 50877 var n int32 50878 var a uintptr 50879 50880 if objc < 2 { 50881 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+32920) 50882 return TCL_ERROR 50883 } 50884 pArray = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 50885 n = objc - 2 50886 a = sqlite3.Xsqlite3_malloc64(tls, uint64(unsafe.Sizeof(sqlite3_int64(0)))*uint64(n)) 50887 if a == uintptr(0) { 50888 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+32929, uintptr(0))) 50889 return TCL_ERROR 50890 } 50891 for i = 0; i < n; i++ { 50892 *(*Tcl_WideInt)(unsafe.Pointer(bp + 32)) = int64(0) 50893 tcl.XTcl_GetWideIntFromObj(tls, uintptr(0), *(*uintptr)(unsafe.Pointer(objv + uintptr(i+2)*8)), bp+32) 50894 *(*sqlite3_int64)(unsafe.Pointer(a + uintptr(i)*8)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 32)) 50895 } 50896 rc = sqlite3_intarray_bind(tls, pArray, n, a, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 50897 if rc != SQLITE_OK { 50898 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0))) 50899 return TCL_ERROR 50900 } 50901 return TCL_OK 50902 } 50903 50904 func Sqlitetestintarray_Init(tls *libc.TLS, interp uintptr) int32 { 50905 var i int32 50906 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd10))/uint64(unsafe.Sizeof(struct { 50907 FzName uintptr 50908 FxProc uintptr 50909 FclientData uintptr 50910 }{})); i++ { 50911 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd10[i].FzName, 50912 aObjCmd10[i].FxProc, aObjCmd10[i].FclientData, uintptr(0)) 50913 } 50914 return TCL_OK 50915 } 50916 50917 var aObjCmd10 = [2]struct { 50918 FzName uintptr 50919 FxProc uintptr 50920 FclientData uintptr 50921 }{ 50922 {FzName: ts + 32942, FxProc: 0}, 50923 {FzName: ts + 32966, FxProc: 0}, 50924 } 50925 50926 type jt_file1 = struct { 50927 Fbase sqlite3_file 50928 FzName uintptr 50929 Fflags int32 50930 FeLock int32 50931 FnPage u32 50932 FnPagesize u32 50933 FpWritable uintptr 50934 FaCksum uintptr 50935 FnSync int32 50936 F__ccgo_pad1 [4]byte 50937 FiMaxOff sqlite3_int64 50938 FpNext uintptr 50939 FpReal uintptr 50940 } 50941 50942 type jt_file = jt_file1 50943 50944 var jt_vfs = sqlite3_vfs{ 50945 FiVersion: 2, 50946 FszOsFile: int32(unsafe.Sizeof(jt_file{})), 50947 FmxPathname: JT_MAX_PATHNAME, 50948 FzName: ts + 32988, 50949 FxOpen: 0, 50950 FxDelete: 0, 50951 FxAccess: 0, 50952 FxFullPathname: 0, 50953 FxDlOpen: 0, 50954 FxDlError: 0, 50955 FxDlSym: 0, 50956 FxDlClose: 0, 50957 FxRandomness: 0, 50958 FxSleep: 0, 50959 FxCurrentTime: 0, 50960 FxGetLastError: 0, 50961 FxCurrentTimeInt64: 0, 50962 } 50963 50964 var jt_io_methods = sqlite3_io_methods{ 50965 FiVersion: 1, 50966 FxClose: 0, 50967 FxRead: 0, 50968 FxWrite: 0, 50969 FxTruncate: 0, 50970 FxSync: 0, 50971 FxFileSize: 0, 50972 FxLock: 0, 50973 FxUnlock: 0, 50974 FxCheckReservedLock: 0, 50975 FxFileControl: 0, 50976 FxSectorSize: 0, 50977 FxDeviceCharacteristics: 0, 50978 } 50979 50980 type JtGlobal = struct { 50981 FpVfs uintptr 50982 FpList uintptr 50983 } 50984 50985 var g2 = JtGlobal{} 50986 50987 func enterJtMutex(tls *libc.TLS) { 50988 sqlite3.Xsqlite3_mutex_enter(tls, sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_PRNG)) 50989 } 50990 50991 func leaveJtMutex(tls *libc.TLS) { 50992 sqlite3.Xsqlite3_mutex_leave(tls, sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_STATIC_PRNG)) 50993 } 50994 50995 func stop_ioerr_simulation(tls *libc.TLS, piSave uintptr, piSave2 uintptr) { 50996 *(*int32)(unsafe.Pointer(piSave)) = libc.AtomicLoadInt32(&sqlite3.Xsqlite3_io_error_pending) 50997 *(*int32)(unsafe.Pointer(piSave2)) = sqlite3.Xsqlite3_io_error_hit 50998 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, int32(-1)) 50999 sqlite3.Xsqlite3_io_error_hit = 0 51000 } 51001 51002 func start_ioerr_simulation(tls *libc.TLS, iSave int32, iSave2 int32) { 51003 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, iSave) 51004 sqlite3.Xsqlite3_io_error_hit = iSave2 51005 } 51006 51007 func closeTransaction(tls *libc.TLS, p uintptr) { 51008 sqlite3.Xsqlite3BitvecDestroy(tls, (*jt_file)(unsafe.Pointer(p)).FpWritable) 51009 sqlite3.Xsqlite3_free(tls, (*jt_file)(unsafe.Pointer(p)).FaCksum) 51010 (*jt_file)(unsafe.Pointer(p)).FpWritable = uintptr(0) 51011 (*jt_file)(unsafe.Pointer(p)).FaCksum = uintptr(0) 51012 (*jt_file)(unsafe.Pointer(p)).FnSync = 0 51013 } 51014 51015 func jtClose(tls *libc.TLS, pFile uintptr) int32 { 51016 var pp uintptr 51017 var p uintptr = pFile 51018 51019 closeTransaction(tls, p) 51020 enterJtMutex(tls) 51021 if (*jt_file)(unsafe.Pointer(p)).FzName != 0 { 51022 for pp = uintptr(unsafe.Pointer(&g2)) + 8; *(*uintptr)(unsafe.Pointer(pp)) != p; pp = *(*uintptr)(unsafe.Pointer(pp)) + 64 { 51023 } 51024 *(*uintptr)(unsafe.Pointer(pp)) = (*jt_file)(unsafe.Pointer(p)).FpNext 51025 } 51026 leaveJtMutex(tls) 51027 sqlite3.Xsqlite3OsClose(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 51028 return SQLITE_OK 51029 } 51030 51031 func jtRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 51032 var p uintptr = pFile 51033 return sqlite3.Xsqlite3OsRead(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 51034 } 51035 51036 func locateDatabaseHandle(tls *libc.TLS, zJournal uintptr, noLock int32) uintptr { 51037 var pMain uintptr = uintptr(0) 51038 enterJtMutex(tls) 51039 for pMain = g2.FpList; pMain != 0; pMain = (*jt_file)(unsafe.Pointer(pMain)).FpNext { 51040 var nName int32 = int32(libc.Xstrlen(tls, zJournal) - libc.Xstrlen(tls, ts+32991)) 51041 if (*jt_file)(unsafe.Pointer(pMain)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && 51042 int32(libc.Xstrlen(tls, (*jt_file)(unsafe.Pointer(pMain)).FzName)) == nName && 51043 0 == libc.Xmemcmp(tls, (*jt_file)(unsafe.Pointer(pMain)).FzName, zJournal, uint64(nName)) && 51044 ((*jt_file)(unsafe.Pointer(pMain)).FeLock >= SQLITE_LOCK_RESERVED || noLock != 0) { 51045 break 51046 } 51047 } 51048 leaveJtMutex(tls) 51049 return pMain 51050 } 51051 51052 func decodeUint32(tls *libc.TLS, z uintptr) u32 { 51053 return u32(int32(*(*uint8)(unsafe.Pointer(z)))<<24 + int32(*(*uint8)(unsafe.Pointer(z + 1)))<<16 + int32(*(*uint8)(unsafe.Pointer(z + 2)))<<8 + int32(*(*uint8)(unsafe.Pointer(z + 3)))) 51054 } 51055 51056 func genCksum(tls *libc.TLS, z uintptr, n int32) u32 { 51057 var i int32 51058 var cksum u32 = u32(0) 51059 for i = 0; i < n; i++ { 51060 cksum = cksum + u32(*(*uint8)(unsafe.Pointer(z + uintptr(i)))) + cksum<<3 51061 } 51062 return cksum 51063 } 51064 51065 func decodeJournalHdr(tls *libc.TLS, zBuf uintptr, pnRec uintptr, pnPage uintptr, pnSector uintptr, pnPagesize uintptr) int32 { 51066 bp := tls.Alloc(8) 51067 defer tls.Free(8) 51068 51069 *(*[8]uint8)(unsafe.Pointer(bp)) = [8]uint8{uint8(0xd9), uint8(0xd5), uint8(0x05), uint8(0xf9), uint8(0x20), uint8(0xa1), uint8(0x63), uint8(0xd7)} 51070 if libc.Xmemcmp(tls, bp, zBuf, uint64(8)) != 0 { 51071 return SQLITE_ERROR 51072 } 51073 if pnRec != 0 { 51074 *(*u32)(unsafe.Pointer(pnRec)) = decodeUint32(tls, zBuf+8) 51075 } 51076 if pnPage != 0 { 51077 *(*u32)(unsafe.Pointer(pnPage)) = decodeUint32(tls, zBuf+16) 51078 } 51079 if pnSector != 0 { 51080 *(*u32)(unsafe.Pointer(pnSector)) = decodeUint32(tls, zBuf+20) 51081 } 51082 if pnPagesize != 0 { 51083 *(*u32)(unsafe.Pointer(pnPagesize)) = decodeUint32(tls, zBuf+24) 51084 } 51085 return SQLITE_OK 51086 } 51087 51088 func openTransaction(tls *libc.TLS, pMain uintptr, pJournal uintptr) int32 { 51089 bp := tls.Alloc(8) 51090 defer tls.Free(8) 51091 51092 var aData uintptr 51093 var p uintptr = (*jt_file)(unsafe.Pointer(pMain)).FpReal 51094 var rc int32 = SQLITE_OK 51095 51096 closeTransaction(tls, pMain) 51097 aData = sqlite3.Xsqlite3_malloc(tls, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 51098 (*jt_file)(unsafe.Pointer(pMain)).FpWritable = sqlite3.Xsqlite3BitvecCreate(tls, (*jt_file)(unsafe.Pointer(pMain)).FnPage) 51099 (*jt_file)(unsafe.Pointer(pMain)).FaCksum = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(u32(0)))*uint64((*jt_file)(unsafe.Pointer(pMain)).FnPage+u32(1)))) 51100 (*jt_file)(unsafe.Pointer(pJournal)).FiMaxOff = int64(0) 51101 51102 if !(int32((*jt_file)(unsafe.Pointer(pMain)).FpWritable) != 0) || !(int32((*jt_file)(unsafe.Pointer(pMain)).FaCksum) != 0) || !(aData != 0) { 51103 rc = SQLITE_IOERR | int32(12)<<8 51104 } else if (*jt_file)(unsafe.Pointer(pMain)).FnPage > u32(0) { 51105 var iTrunk u32 51106 51107 stop_ioerr_simulation(tls, bp, bp+4) 51108 51109 rc = sqlite3.Xsqlite3OsRead(tls, p, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), int64(0)) 51110 if rc == SQLITE_OK { 51111 var nDbsize u32 = decodeUint32(tls, aData+28) 51112 if nDbsize > u32(0) && libc.Xmemcmp(tls, aData+24, aData+92, uint64(4)) == 0 { 51113 var iPg u32 51114 for iPg = nDbsize + u32(1); iPg <= (*jt_file)(unsafe.Pointer(pMain)).FnPage; iPg++ { 51115 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, iPg) 51116 } 51117 } 51118 } 51119 iTrunk = decodeUint32(tls, aData+32) 51120 for rc == SQLITE_OK && iTrunk > u32(0) { 51121 var nLeaf u32 51122 var iLeaf u32 51123 var iOff sqlite3_int64 = i64(iTrunk-u32(1)) * i64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize) 51124 rc = sqlite3.Xsqlite3OsRead(tls, p, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff) 51125 nLeaf = decodeUint32(tls, aData+4) 51126 for iLeaf = u32(0); rc == SQLITE_OK && iLeaf < nLeaf; iLeaf++ { 51127 var pgno u32 = decodeUint32(tls, aData+uintptr(u32(8)+u32(4)*iLeaf)) 51128 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno) 51129 } 51130 iTrunk = decodeUint32(tls, aData) 51131 } 51132 51133 if rc == SQLITE_OK { 51134 var ii int32 51135 for ii = 0; rc == SQLITE_OK && ii < int32((*jt_file)(unsafe.Pointer(pMain)).FnPage); ii++ { 51136 var iOff i64 = i64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize) * i64(ii) 51137 if iOff == i64(sqlite3.Xsqlite3PendingByte) { 51138 continue 51139 } 51140 rc = sqlite3.Xsqlite3OsRead(tls, (*jt_file)(unsafe.Pointer(pMain)).FpReal, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff) 51141 *(*u32)(unsafe.Pointer((*jt_file)(unsafe.Pointer(pMain)).FaCksum + uintptr(ii)*4)) = genCksum(tls, aData, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 51142 if ii+1 == int32((*jt_file)(unsafe.Pointer(pMain)).FnPage) && rc == SQLITE_IOERR|int32(2)<<8 { 51143 rc = SQLITE_OK 51144 } 51145 } 51146 } 51147 51148 start_ioerr_simulation(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 51149 } 51150 51151 sqlite3.Xsqlite3_free(tls, aData) 51152 return rc 51153 } 51154 51155 func readJournalFile(tls *libc.TLS, p uintptr, pMain uintptr) int32 { 51156 bp := tls.Alloc(52) 51157 defer tls.Free(52) 51158 51159 var rc int32 51160 51161 var pReal uintptr 51162 var iOff sqlite3_int64 51163 var iSize sqlite3_int64 51164 var aPage uintptr 51165 51166 var cksum u32 51167 _ = cksum 51168 var pgno u32 51169 51170 var ii u32 51171 rc = SQLITE_OK 51172 pReal = (*jt_file)(unsafe.Pointer(p)).FpReal 51173 iOff = int64(0) 51174 iSize = (*jt_file)(unsafe.Pointer(p)).FiMaxOff 51175 51176 aPage = sqlite3.Xsqlite3_malloc(tls, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 51177 if !!(aPage != 0) { 51178 goto __1 51179 } 51180 return SQLITE_IOERR | int32(12)<<8 51181 __1: 51182 ; 51183 stop_ioerr_simulation(tls, bp, bp+4) 51184 51185 __2: 51186 if !(rc == SQLITE_OK && iOff < iSize) { 51187 goto __3 51188 } 51189 51190 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 28, iOff) 51191 if !(rc != SQLITE_OK || 51192 decodeJournalHdr(tls, bp+8, bp+36, bp+40, bp+44, bp+48) != 0) { 51193 goto __4 51194 } 51195 goto finish_rjf 51196 __4: 51197 ; 51198 iOff = iOff + sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44))) 51199 51200 if !(*(*u32)(unsafe.Pointer(bp + 36)) == u32(0)) { 51201 goto __5 51202 } 51203 51204 if !(iSize >= iOff+sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44)))) { 51205 goto __6 51206 } 51207 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 28, iOff) 51208 if !(rc != SQLITE_OK || 0 == decodeJournalHdr(tls, bp+8, uintptr(0), uintptr(0), uintptr(0), uintptr(0))) { 51209 goto __7 51210 } 51211 goto __2 51212 __7: 51213 ; 51214 __6: 51215 ; 51216 *(*u32)(unsafe.Pointer(bp + 36)) = u32((iSize - iOff) / sqlite3_int64((*jt_file)(unsafe.Pointer(pMain)).FnPagesize+u32(8))) 51217 __5: 51218 ; 51219 ii = u32(0) 51220 __8: 51221 if !(rc == SQLITE_OK && ii < *(*u32)(unsafe.Pointer(bp + 36)) && iOff < iSize) { 51222 goto __10 51223 } 51224 rc = sqlite3.Xsqlite3OsRead(tls, pReal, bp+8, 4, iOff) 51225 if !(rc == SQLITE_OK) { 51226 goto __11 51227 } 51228 pgno = decodeUint32(tls, bp+8) 51229 if !(pgno > u32(0) && pgno <= (*jt_file)(unsafe.Pointer(pMain)).FnPage) { 51230 goto __12 51231 } 51232 if !(0 == sqlite3.Xsqlite3BitvecTest(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno)) { 51233 goto __13 51234 } 51235 rc = sqlite3.Xsqlite3OsRead(tls, pReal, aPage, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize), iOff+int64(4)) 51236 if !(rc == SQLITE_OK) { 51237 goto __14 51238 } 51239 cksum = genCksum(tls, aPage, int32((*jt_file)(unsafe.Pointer(pMain)).FnPagesize)) 51240 51241 __14: 51242 ; 51243 __13: 51244 ; 51245 sqlite3.Xsqlite3BitvecSet(tls, (*jt_file)(unsafe.Pointer(pMain)).FpWritable, pgno) 51246 __12: 51247 ; 51248 iOff = iOff + sqlite3_int64(u32(8)+(*jt_file)(unsafe.Pointer(pMain)).FnPagesize) 51249 __11: 51250 ; 51251 goto __9 51252 __9: 51253 ii++ 51254 goto __8 51255 goto __10 51256 __10: 51257 ; 51258 iOff = (iOff + sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44))-u32(1))) / sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44))) * sqlite3_int64(*(*u32)(unsafe.Pointer(bp + 44))) 51259 goto __2 51260 __3: 51261 ; 51262 finish_rjf: 51263 start_ioerr_simulation(tls, *(*int32)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 4))) 51264 sqlite3.Xsqlite3_free(tls, aPage) 51265 if !(rc == SQLITE_IOERR|int32(2)<<8) { 51266 goto __15 51267 } 51268 rc = SQLITE_OK 51269 __15: 51270 ; 51271 return rc 51272 } 51273 51274 func jtWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 51275 var rc int32 51276 var p uintptr = pFile 51277 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 51278 if iOfst == int64(0) { 51279 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 51280 51281 if iAmt == 28 { 51282 closeTransaction(tls, pMain) 51283 } else if iAmt != 12 { 51284 var z uintptr = zBuf 51285 (*jt_file)(unsafe.Pointer(pMain)).FnPage = decodeUint32(tls, z+16) 51286 (*jt_file)(unsafe.Pointer(pMain)).FnPagesize = decodeUint32(tls, z+24) 51287 if SQLITE_OK != libc.AssignInt32(&rc, openTransaction(tls, pMain, p)) { 51288 return rc 51289 } 51290 } 51291 } 51292 if (*jt_file)(unsafe.Pointer(p)).FiMaxOff < iOfst+sqlite_int64(iAmt) { 51293 (*jt_file)(unsafe.Pointer(p)).FiMaxOff = iOfst + sqlite_int64(iAmt) 51294 } 51295 } 51296 51297 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && (*jt_file)(unsafe.Pointer(p)).FpWritable != 0 { 51298 if iAmt < int32((*jt_file)(unsafe.Pointer(p)).FnPagesize) && 51299 (*jt_file)(unsafe.Pointer(p)).FnPagesize%u32(iAmt) == u32(0) && 51300 iOfst >= sqlite_int64(sqlite3.Xsqlite3PendingByte+512) && 51301 iOfst+sqlite_int64(iAmt) <= sqlite_int64(u32(sqlite3.Xsqlite3PendingByte)+(*jt_file)(unsafe.Pointer(p)).FnPagesize) { 51302 } else { 51303 var pgno u32 = u32(iOfst/sqlite_int64((*jt_file)(unsafe.Pointer(p)).FnPagesize) + int64(1)) 51304 _ = pgno 51305 51306 } 51307 } 51308 51309 rc = sqlite3.Xsqlite3OsWrite(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 51310 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 && iAmt == 12 { 51311 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 51312 var rc2 int32 = readJournalFile(tls, p, pMain) 51313 if rc == SQLITE_OK { 51314 rc = rc2 51315 } 51316 } 51317 return rc 51318 } 51319 51320 func jtTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 51321 var p uintptr = pFile 51322 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 && size == int64(0) { 51323 var pMain uintptr = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 51324 closeTransaction(tls, pMain) 51325 } 51326 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_DB != 0 && (*jt_file)(unsafe.Pointer(p)).FpWritable != 0 { 51327 var pgno u32 51328 var locking_page u32 = u32(sqlite3.Xsqlite3PendingByte)/(*jt_file)(unsafe.Pointer(p)).FnPagesize + u32(1) 51329 _ = locking_page 51330 for pgno = u32(size/sqlite_int64((*jt_file)(unsafe.Pointer(p)).FnPagesize) + int64(1)); pgno <= (*jt_file)(unsafe.Pointer(p)).FnPage; pgno++ { 51331 } 51332 } 51333 return sqlite3.Xsqlite3OsTruncate(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, size) 51334 } 51335 51336 func jtSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 51337 var p uintptr = pFile 51338 51339 if (*jt_file)(unsafe.Pointer(p)).Fflags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 51340 var rc int32 51341 var pMain uintptr 51342 51343 pMain = locateDatabaseHandle(tls, (*jt_file)(unsafe.Pointer(p)).FzName, 0) 51344 51345 if pMain != 0 && (*jt_file)(unsafe.Pointer(pMain)).FpWritable != 0 { 51346 (*jt_file)(unsafe.Pointer(pMain)).FnSync++ 51347 rc = readJournalFile(tls, p, pMain) 51348 if rc != SQLITE_OK { 51349 return rc 51350 } 51351 } 51352 } 51353 51354 return sqlite3.Xsqlite3OsSync(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, flags) 51355 } 51356 51357 func jtFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 51358 var p uintptr = pFile 51359 return sqlite3.Xsqlite3OsFileSize(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, pSize) 51360 } 51361 51362 func jtLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 51363 var rc int32 51364 var p uintptr = pFile 51365 rc = sqlite3.Xsqlite3OsLock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, eLock) 51366 if rc == SQLITE_OK && eLock > (*jt_file)(unsafe.Pointer(p)).FeLock { 51367 (*jt_file)(unsafe.Pointer(p)).FeLock = eLock 51368 } 51369 return rc 51370 } 51371 51372 func jtUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 51373 var rc int32 51374 var p uintptr = pFile 51375 rc = sqlite3.Xsqlite3OsUnlock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, eLock) 51376 if rc == SQLITE_OK && eLock < (*jt_file)(unsafe.Pointer(p)).FeLock { 51377 (*jt_file)(unsafe.Pointer(p)).FeLock = eLock 51378 } 51379 return rc 51380 } 51381 51382 func jtCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 51383 var p uintptr = pFile 51384 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, pResOut) 51385 } 51386 51387 func jtFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 51388 var p uintptr = pFile 51389 return (*struct { 51390 f func(*libc.TLS, uintptr, int32, uintptr) int32 51391 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*jt_file)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxFileControl})).f(tls, (*jt_file)(unsafe.Pointer(p)).FpReal, op, pArg) 51392 } 51393 51394 func jtSectorSize(tls *libc.TLS, pFile uintptr) int32 { 51395 var p uintptr = pFile 51396 return sqlite3.Xsqlite3OsSectorSize(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 51397 } 51398 51399 func jtDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 51400 var p uintptr = pFile 51401 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*jt_file)(unsafe.Pointer(p)).FpReal) 51402 } 51403 51404 func jtOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 51405 var rc int32 51406 var p uintptr = pFile 51407 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(0) 51408 (*jt_file)(unsafe.Pointer(p)).FpReal = p + 1*80 51409 (*sqlite3_file)(unsafe.Pointer((*jt_file)(unsafe.Pointer(p)).FpReal)).FpMethods = uintptr(0) 51410 rc = sqlite3.Xsqlite3OsOpen(tls, g2.FpVfs, zName, (*jt_file)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 51411 51412 if rc == SQLITE_OK { 51413 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&jt_io_methods)) 51414 (*jt_file)(unsafe.Pointer(p)).FeLock = 0 51415 (*jt_file)(unsafe.Pointer(p)).FzName = zName 51416 (*jt_file)(unsafe.Pointer(p)).Fflags = flags 51417 (*jt_file)(unsafe.Pointer(p)).FpNext = uintptr(0) 51418 (*jt_file)(unsafe.Pointer(p)).FpWritable = uintptr(0) 51419 (*jt_file)(unsafe.Pointer(p)).FaCksum = uintptr(0) 51420 enterJtMutex(tls) 51421 if zName != 0 { 51422 (*jt_file)(unsafe.Pointer(p)).FpNext = g2.FpList 51423 g2.FpList = p 51424 } 51425 leaveJtMutex(tls) 51426 } 51427 return rc 51428 } 51429 51430 func jtDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 51431 var nPath int32 = int32(libc.Xstrlen(tls, zPath)) 51432 if nPath > 8 && 0 == libc.Xstrcmp(tls, ts+32991, zPath+uintptr(nPath-8)) { 51433 var pMain uintptr = locateDatabaseHandle(tls, zPath, 0) 51434 if pMain != 0 { 51435 closeTransaction(tls, pMain) 51436 } 51437 } 51438 51439 return sqlite3.Xsqlite3OsDelete(tls, g2.FpVfs, zPath, dirSync) 51440 } 51441 51442 func jtAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 51443 return sqlite3.Xsqlite3OsAccess(tls, g2.FpVfs, zPath, flags, pResOut) 51444 } 51445 51446 func jtFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 51447 return sqlite3.Xsqlite3OsFullPathname(tls, g2.FpVfs, zPath, nOut, zOut) 51448 } 51449 51450 func jtDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 51451 return (*struct { 51452 f func(*libc.TLS, uintptr, uintptr) uintptr 51453 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlOpen})).f(tls, g2.FpVfs, zPath) 51454 } 51455 51456 func jtDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 51457 (*struct { 51458 f func(*libc.TLS, uintptr, int32, uintptr) 51459 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlError})).f(tls, g2.FpVfs, nByte, zErrMsg) 51460 } 51461 51462 func jtDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 51463 return (*struct { 51464 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 51465 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlSym})).f(tls, g2.FpVfs, p, zSym) 51466 } 51467 51468 func jtDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 51469 (*struct { 51470 f func(*libc.TLS, uintptr, uintptr) 51471 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxDlClose})).f(tls, g2.FpVfs, pHandle) 51472 } 51473 51474 func jtRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 51475 return sqlite3.Xsqlite3OsRandomness(tls, g2.FpVfs, nByte, zBufOut) 51476 } 51477 51478 func jtSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 51479 return sqlite3.Xsqlite3OsSleep(tls, g2.FpVfs, nMicro) 51480 } 51481 51482 func jtCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 51483 return (*struct { 51484 f func(*libc.TLS, uintptr, uintptr) int32 51485 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTime})).f(tls, g2.FpVfs, pTimeOut) 51486 } 51487 51488 func jtCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 51489 return (*struct { 51490 f func(*libc.TLS, uintptr, uintptr) int32 51491 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTimeInt64})).f(tls, g2.FpVfs, pTimeOut) 51492 } 51493 51494 func jtGetLastError(tls *libc.TLS, pVfs uintptr, n int32, z uintptr) int32 { 51495 return (*struct { 51496 f func(*libc.TLS, uintptr, int32, uintptr) int32 51497 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxGetLastError})).f(tls, g2.FpVfs, n, z) 51498 } 51499 51500 func jt_register(tls *libc.TLS, zWrap uintptr, isDefault int32) int32 { 51501 g2.FpVfs = sqlite3.Xsqlite3_vfs_find(tls, zWrap) 51502 if g2.FpVfs == uintptr(0) { 51503 return SQLITE_ERROR 51504 } 51505 jt_vfs.FszOsFile = int32(uint64(unsafe.Sizeof(jt_file{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FszOsFile)) 51506 if (*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FiVersion == 1 { 51507 jt_vfs.FiVersion = 1 51508 } else if (*sqlite3_vfs)(unsafe.Pointer(g2.FpVfs)).FxCurrentTimeInt64 == uintptr(0) { 51509 jt_vfs.FxCurrentTimeInt64 = uintptr(0) 51510 } 51511 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&jt_vfs)), isDefault) 51512 return SQLITE_OK 51513 } 51514 51515 func jt_unregister(tls *libc.TLS) { 51516 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&jt_vfs))) 51517 } 51518 51519 type MemFault = struct { 51520 FiCountdown int32 51521 FnRepeat int32 51522 FnBenign int32 51523 FnFail int32 51524 FnOkBefore int32 51525 FnOkAfter int32 51526 Fenable u8 51527 F__ccgo_pad1 [3]byte 51528 FisInstalled int32 51529 FisBenignMode int32 51530 F__ccgo_pad2 [4]byte 51531 Fm sqlite3_mem_methods 51532 } 51533 51534 var memfault MemFault 51535 51536 func sqlite3Fault(tls *libc.TLS) { 51537 cnt1++ 51538 } 51539 51540 var cnt1 int32 = 0 51541 51542 func sqlite3FirstFault(tls *libc.TLS) { 51543 cnt2++ 51544 } 51545 51546 var cnt2 int32 = 0 51547 51548 func faultsimStep(tls *libc.TLS) int32 { 51549 if !(int32(memfault.Fenable) != 0) { 51550 memfault.FnOkAfter++ 51551 return 0 51552 } 51553 if memfault.FiCountdown > 0 { 51554 memfault.FiCountdown-- 51555 memfault.FnOkBefore++ 51556 return 0 51557 } 51558 if memfault.FnFail == 0 { 51559 sqlite3FirstFault(tls) 51560 } 51561 sqlite3Fault(tls) 51562 memfault.FnFail++ 51563 if memfault.FisBenignMode > 0 { 51564 memfault.FnBenign++ 51565 } 51566 memfault.FnRepeat-- 51567 if memfault.FnRepeat <= 0 { 51568 memfault.Fenable = u8(0) 51569 } 51570 return 1 51571 } 51572 51573 func faultsimMalloc(tls *libc.TLS, n int32) uintptr { 51574 var p uintptr = uintptr(0) 51575 if !(faultsimStep(tls) != 0) { 51576 p = (*struct { 51577 f func(*libc.TLS, int32) uintptr 51578 })(unsafe.Pointer(&struct{ uintptr }{memfault.Fm.FxMalloc})).f(tls, n) 51579 } 51580 return p 51581 } 51582 51583 func faultsimRealloc(tls *libc.TLS, pOld uintptr, n int32) uintptr { 51584 var p uintptr = uintptr(0) 51585 if !(faultsimStep(tls) != 0) { 51586 p = (*struct { 51587 f func(*libc.TLS, uintptr, int32) uintptr 51588 })(unsafe.Pointer(&struct{ uintptr }{memfault.Fm.FxRealloc})).f(tls, pOld, n) 51589 } 51590 return p 51591 } 51592 51593 func faultsimConfig(tls *libc.TLS, nDelay int32, nRepeat int32) { 51594 memfault.FiCountdown = nDelay 51595 memfault.FnRepeat = nRepeat 51596 memfault.FnBenign = 0 51597 memfault.FnFail = 0 51598 memfault.FnOkBefore = 0 51599 memfault.FnOkAfter = 0 51600 memfault.Fenable = u8(libc.Bool32(nDelay >= 0)) 51601 51602 memfault.FisBenignMode = 0 51603 } 51604 51605 func faultsimFailures(tls *libc.TLS) int32 { 51606 return memfault.FnFail 51607 } 51608 51609 func faultsimBenignFailures(tls *libc.TLS) int32 { 51610 return memfault.FnBenign 51611 } 51612 51613 func faultsimPending(tls *libc.TLS) int32 { 51614 if memfault.Fenable != 0 { 51615 return memfault.FiCountdown 51616 } else { 51617 return -1 51618 } 51619 return int32(0) 51620 } 51621 51622 func faultsimBeginBenign(tls *libc.TLS) { 51623 memfault.FisBenignMode++ 51624 } 51625 51626 func faultsimEndBenign(tls *libc.TLS) { 51627 memfault.FisBenignMode-- 51628 } 51629 51630 func faultsimInstall(tls *libc.TLS, install int32) int32 { 51631 bp := tls.Alloc(200) 51632 defer tls.Free(200) 51633 51634 var rc int32 51635 51636 install = func() int32 { 51637 if install != 0 { 51638 return 1 51639 } 51640 return 0 51641 }() 51642 51643 if install == memfault.FisInstalled { 51644 return SQLITE_ERROR 51645 } 51646 51647 if install != 0 { 51648 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp, uintptr(unsafe.Pointer(&memfault))+40)) 51649 51650 if rc == SQLITE_OK { 51651 *(*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)) = memfault.Fm 51652 (*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)).FxMalloc = *(*uintptr)(unsafe.Pointer(&struct { 51653 f func(*libc.TLS, int32) uintptr 51654 }{faultsimMalloc})) 51655 (*sqlite3_mem_methods)(unsafe.Pointer(bp + 72)).FxRealloc = *(*uintptr)(unsafe.Pointer(&struct { 51656 f func(*libc.TLS, uintptr, int32) uintptr 51657 }{faultsimRealloc})) 51658 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+8, bp+72)) 51659 } 51660 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, 51661 libc.VaList(bp+16, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) }{faultsimBeginBenign})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) }{faultsimEndBenign})))) 51662 } else { 51663 libc.X__builtin___memset_chk(tls, bp+136, 0, uint64(unsafe.Sizeof(sqlite3_mem_methods{})), libc.X__builtin_object_size(tls, bp+136, 0)) 51664 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+32, bp+136)) 51665 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMALLOC, libc.VaList(bp+40, bp+136)) 51666 51667 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MALLOC, libc.VaList(bp+48, uintptr(unsafe.Pointer(&memfault))+40)) 51668 sqlite3.Xsqlite3_test_control(tls, SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, 51669 libc.VaList(bp+56, uintptr(0), uintptr(0))) 51670 } 51671 51672 if rc == SQLITE_OK { 51673 memfault.FisInstalled = 1 51674 } 51675 return rc 51676 } 51677 51678 func pointerToText(tls *libc.TLS, p uintptr, z uintptr) { 51679 bp := tls.Alloc(20) 51680 defer tls.Free(20) 51681 *(*uintptr)(unsafe.Pointer(bp + 8)) = p 51682 51683 var i int32 51684 var k int32 51685 51686 if *(*uintptr)(unsafe.Pointer(bp + 8)) == uintptr(0) { 51687 libc.X__builtin___strcpy_chk(tls, z, ts+14193, libc.X__builtin_object_size(tls, z, func() int32 { 51688 if X_USE_FORTIFY_LEVEL > 1 { 51689 return 1 51690 } 51691 return 0 51692 }())) 51693 return 51694 } 51695 if uint64(unsafe.Sizeof(sqlite3_uint64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 51696 libc.X__builtin___memcpy_chk(tls, bp, bp+8, uint64(unsafe.Sizeof(uintptr(0))), libc.X__builtin_object_size(tls, bp, 0)) 51697 } else if uint64(unsafe.Sizeof(uint32(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 51698 libc.X__builtin___memcpy_chk(tls, bp+16, bp+8, uint64(unsafe.Sizeof(uint32(0))), libc.X__builtin_object_size(tls, bp+16, 0)) 51699 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = sqlite3_uint64(*(*uint32)(unsafe.Pointer(bp + 16))) 51700 } else { 51701 } 51702 i = 0 51703 k = int32(uint64(unsafe.Sizeof(uintptr(0)))*uint64(2) - uint64(1)) 51704 __1: 51705 if !(uint64(i) < uint64(unsafe.Sizeof(uintptr(0)))*uint64(2)) { 51706 goto __3 51707 } 51708 { 51709 *(*int8)(unsafe.Pointer(z + uintptr(k))) = zHex[*(*sqlite3_uint64)(unsafe.Pointer(bp))&uint64(0xf)] 51710 *(*sqlite3_uint64)(unsafe.Pointer(bp)) >>= 4 51711 51712 } 51713 goto __2 51714 __2: 51715 i++ 51716 k-- 51717 goto __1 51718 goto __3 51719 __3: 51720 ; 51721 *(*int8)(unsafe.Pointer(z + 16)) = int8(0) 51722 } 51723 51724 var zHex = *(*[17]int8)(unsafe.Pointer(ts + 31377)) 51725 51726 func hexToInt(tls *libc.TLS, h int32) int32 { 51727 if h >= '0' && h <= '9' { 51728 return h - '0' 51729 } else if h >= 'a' && h <= 'f' { 51730 return h - 'a' + 10 51731 } else { 51732 return -1 51733 } 51734 return int32(0) 51735 } 51736 51737 func textToPointer(tls *libc.TLS, z uintptr, pp uintptr) int32 { 51738 bp := tls.Alloc(12) 51739 defer tls.Free(12) 51740 51741 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = uint64(0) 51742 var i int32 51743 51744 for i = 0; uint64(i) < uint64(unsafe.Sizeof(uintptr(0)))*uint64(2) && *(*int8)(unsafe.Pointer(z)) != 0; i++ { 51745 var v int32 51746 v = hexToInt(tls, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) 51747 if v < 0 { 51748 return TCL_ERROR 51749 } 51750 *(*sqlite3_uint64)(unsafe.Pointer(bp)) = *(*sqlite3_uint64)(unsafe.Pointer(bp))*uint64(16) + sqlite3_uint64(v) 51751 } 51752 if int32(*(*int8)(unsafe.Pointer(z))) != 0 { 51753 return TCL_ERROR 51754 } 51755 if uint64(unsafe.Sizeof(sqlite3_uint64(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 51756 libc.X__builtin___memcpy_chk(tls, pp, bp, uint64(unsafe.Sizeof(sqlite3_uint64(0))), libc.X__builtin_object_size(tls, pp, 0)) 51757 } else if uint64(unsafe.Sizeof(uint32(0))) == uint64(unsafe.Sizeof(uintptr(0))) { 51758 *(*uint32)(unsafe.Pointer(bp + 8)) = uint32(*(*sqlite3_uint64)(unsafe.Pointer(bp))) 51759 libc.X__builtin___memcpy_chk(tls, pp, bp+8, uint64(unsafe.Sizeof(uint32(0))), libc.X__builtin_object_size(tls, pp, 0)) 51760 } else { 51761 } 51762 return TCL_OK 51763 } 51764 51765 func test_malloc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51766 bp := tls.Alloc(120) 51767 defer tls.Free(120) 51768 51769 var p uintptr 51770 51771 if objc != 2 { 51772 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33000) 51773 return TCL_ERROR 51774 } 51775 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 51776 return TCL_ERROR 51777 } 51778 p = sqlite3.Xsqlite3_malloc(tls, int32(uint32(*(*int32)(unsafe.Pointer(bp + 16))))) 51779 pointerToText(tls, p, bp+20) 51780 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+20, uintptr(0))) 51781 return TCL_OK 51782 } 51783 51784 func test_realloc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51785 bp := tls.Alloc(156) 51786 defer tls.Free(156) 51787 51788 var p uintptr 51789 51790 if objc != 3 { 51791 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33007) 51792 return TCL_ERROR 51793 } 51794 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+40) != 0 { 51795 return TCL_ERROR 51796 } 51797 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+48) != 0 { 51798 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+33020, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 51799 return TCL_ERROR 51800 } 51801 p = sqlite3.Xsqlite3_realloc(tls, *(*uintptr)(unsafe.Pointer(bp + 48)), int32(uint32(*(*int32)(unsafe.Pointer(bp + 40))))) 51802 pointerToText(tls, p, bp+56) 51803 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, bp+56, uintptr(0))) 51804 return TCL_OK 51805 } 51806 51807 func test_free(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51808 bp := tls.Alloc(32) 51809 defer tls.Free(32) 51810 51811 if objc != 2 { 51812 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33034) 51813 return TCL_ERROR 51814 } 51815 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+24) != 0 { 51816 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+33020, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 51817 return TCL_ERROR 51818 } 51819 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 51820 return TCL_OK 51821 } 51822 51823 func test_memset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51824 bp := tls.Alloc(172) 51825 defer tls.Free(172) 51826 51827 var i int32 51828 var zHex uintptr 51829 var zOut uintptr 51830 51831 if objc != 4 { 51832 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33040) 51833 return TCL_ERROR 51834 } 51835 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 51836 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+33020, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 51837 return TCL_ERROR 51838 } 51839 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 51840 return TCL_ERROR 51841 } 51842 if *(*int32)(unsafe.Pointer(bp + 64)) <= 0 { 51843 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+33057, uintptr(0))) 51844 return TCL_ERROR 51845 } 51846 zHex = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+68) 51847 if uint64(*(*int32)(unsafe.Pointer(bp + 68))) > uint64(unsafe.Sizeof([100]int8{}))*uint64(2) { 51848 *(*int32)(unsafe.Pointer(bp + 68)) = int32(uint64(unsafe.Sizeof([100]int8{})) * uint64(2)) 51849 } 51850 *(*int32)(unsafe.Pointer(bp + 68)) = sqlite3TestHexToBin(tls, zHex, *(*int32)(unsafe.Pointer(bp + 68)), bp+72) 51851 if *(*int32)(unsafe.Pointer(bp + 68)) == 0 { 51852 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, ts+33079, uintptr(0))) 51853 return TCL_ERROR 51854 } 51855 zOut = *(*uintptr)(unsafe.Pointer(bp + 56)) 51856 for i = 0; i < *(*int32)(unsafe.Pointer(bp + 64)); i++ { 51857 *(*int8)(unsafe.Pointer(zOut + uintptr(i))) = *(*int8)(unsafe.Pointer(bp + 72 + uintptr(i%*(*int32)(unsafe.Pointer(bp + 68))))) 51858 } 51859 return TCL_OK 51860 } 51861 51862 func test_memget(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51863 bp := tls.Alloc(168) 51864 defer tls.Free(168) 51865 51866 var n int32 51867 var zBin uintptr 51868 51869 if objc != 3 { 51870 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33087) 51871 return TCL_ERROR 51872 } 51873 if textToPointer(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+56) != 0 { 51874 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+33020, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), uintptr(0))) 51875 return TCL_ERROR 51876 } 51877 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+64) != 0 { 51878 return TCL_ERROR 51879 } 51880 if *(*int32)(unsafe.Pointer(bp + 64)) <= 0 { 51881 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+33057, uintptr(0))) 51882 return TCL_ERROR 51883 } 51884 zBin = *(*uintptr)(unsafe.Pointer(bp + 56)) 51885 for *(*int32)(unsafe.Pointer(bp + 64)) > 0 { 51886 if uint64(*(*int32)(unsafe.Pointer(bp + 64))) > (uint64(unsafe.Sizeof([100]int8{}))-uint64(1))/uint64(2) { 51887 n = int32((uint64(unsafe.Sizeof([100]int8{})) - uint64(1)) / uint64(2)) 51888 } else { 51889 n = *(*int32)(unsafe.Pointer(bp + 64)) 51890 } 51891 libc.X__builtin___memcpy_chk(tls, bp+68, zBin, uint64(n), libc.X__builtin_object_size(tls, bp+68, 0)) 51892 zBin += uintptr(n) 51893 *(*int32)(unsafe.Pointer(bp + 64)) -= n 51894 sqlite3TestBinToHex(tls, bp+68, n) 51895 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+68, uintptr(0))) 51896 } 51897 return TCL_OK 51898 } 51899 51900 func test_memory_used(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51901 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_memory_used(tls))) 51902 return TCL_OK 51903 } 51904 51905 func test_memory_highwater(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51906 bp := tls.Alloc(4) 51907 defer tls.Free(4) 51908 51909 *(*int32)(unsafe.Pointer(bp)) = 0 51910 if objc != 1 && objc != 2 { 51911 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33100) 51912 return TCL_ERROR 51913 } 51914 if objc == 2 { 51915 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 51916 return TCL_ERROR 51917 } 51918 } 51919 tcl.XTcl_SetObjResult(tls, interp, 51920 tcl.XTcl_NewWideIntObj(tls, sqlite3.Xsqlite3_memory_highwater(tls, *(*int32)(unsafe.Pointer(bp))))) 51921 return TCL_OK 51922 } 51923 51924 func test_memdebug_backtrace(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51925 bp := tls.Alloc(4) 51926 defer tls.Free(4) 51927 51928 if objc != 2 { 51929 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33108) 51930 return TCL_ERROR 51931 } 51932 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 51933 return TCL_ERROR 51934 } 51935 return TCL_OK 51936 } 51937 51938 func test_memdebug_dump(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51939 if objc != 2 { 51940 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33113) 51941 return TCL_ERROR 51942 } 51943 return TCL_OK 51944 } 51945 51946 func test_memdebug_malloc_count(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51947 var nMalloc int32 = -1 51948 if objc != 1 { 51949 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 51950 return TCL_ERROR 51951 } 51952 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nMalloc)) 51953 return TCL_OK 51954 } 51955 51956 func test_memdebug_fail(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 51957 bp := tls.Alloc(36) 51958 defer tls.Free(36) 51959 51960 var ii int32 51961 51962 *(*int32)(unsafe.Pointer(bp + 32)) = 1 51963 var pBenignCnt uintptr = uintptr(0) 51964 var nBenign int32 51965 var nFail int32 = 0 51966 51967 if objc < 2 { 51968 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33122) 51969 return TCL_ERROR 51970 } 51971 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+24) != 0 { 51972 return TCL_ERROR 51973 } 51974 51975 for ii = 2; ii < objc; ii = ii + 2 { 51976 var zOption uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(ii)*8)), bp+28) 51977 var zErr uintptr = uintptr(0) 51978 51979 if *(*int32)(unsafe.Pointer(bp + 28)) > 1 && libc.Xstrncmp(tls, zOption, ts+33140, uint64(*(*int32)(unsafe.Pointer(bp + 28)))) == 0 { 51980 if ii == objc-1 { 51981 zErr = ts + 12638 51982 } else { 51983 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(ii+1)*8)), bp+32) != 0 { 51984 return TCL_ERROR 51985 } 51986 } 51987 } else if *(*int32)(unsafe.Pointer(bp + 28)) > 1 && libc.Xstrncmp(tls, zOption, ts+33148, uint64(*(*int32)(unsafe.Pointer(bp + 28)))) == 0 { 51988 if ii == objc-1 { 51989 zErr = ts + 12638 51990 } else { 51991 pBenignCnt = *(*uintptr)(unsafe.Pointer(objv + uintptr(ii+1)*8)) 51992 } 51993 } else { 51994 zErr = ts + 12444 51995 } 51996 51997 if zErr != 0 { 51998 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, zErr, zOption, 0)) 51999 return TCL_ERROR 52000 } 52001 } 52002 52003 nBenign = faultsimBenignFailures(tls) 52004 nFail = faultsimFailures(tls) 52005 faultsimConfig(tls, *(*int32)(unsafe.Pointer(bp + 24)), *(*int32)(unsafe.Pointer(bp + 32))) 52006 52007 if pBenignCnt != 0 { 52008 tcl.XTcl_ObjSetVar2(tls, interp, pBenignCnt, uintptr(0), tcl.XTcl_NewIntObj(tls, nBenign), 0) 52009 } 52010 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nFail)) 52011 return TCL_OK 52012 } 52013 52014 func test_memdebug_pending(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52015 var nPending int32 52016 if objc != 1 { 52017 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 52018 return TCL_ERROR 52019 } 52020 nPending = faultsimPending(tls) 52021 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, nPending)) 52022 return TCL_OK 52023 } 52024 52025 var sqlite3_memdebug_title_count int32 = 0 52026 52027 func test_memdebug_settitle(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52028 sqlite3_memdebug_title_count++ 52029 if objc != 2 { 52030 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33159) 52031 return TCL_ERROR 52032 } 52033 return TCL_OK 52034 } 52035 52036 var aMallocLog Tcl_HashTable 52037 var mallocLogEnabled int32 = 0 52038 52039 type MallocLog1 = struct { 52040 FnCall int32 52041 FnByte int32 52042 } 52043 52044 type MallocLog = MallocLog1 52045 52046 func test_memdebug_log_clear(tls *libc.TLS) { 52047 bp := tls.Alloc(24) 52048 defer tls.Free(24) 52049 52050 var pEntry uintptr 52051 for pEntry = tcl.XTcl_FirstHashEntry(tls, uintptr(unsafe.Pointer(&aMallocLog)), bp); pEntry != 0; pEntry = tcl.XTcl_NextHashEntry(tls, bp) { 52052 var pLog uintptr = (*Tcl_HashEntry)(unsafe.Pointer(pEntry)).FclientData 52053 tcl.XTcl_Free(tls, pLog) 52054 } 52055 tcl.XTcl_DeleteHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog))) 52056 tcl.XTcl_InitHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog)), int32(uint64(10)*func() uint64 { 52057 if uint64(unsafe.Sizeof(int32(0))) >= uint64(unsafe.Sizeof(uintptr(0))) { 52058 return uint64(1) 52059 } 52060 return uint64(unsafe.Sizeof(uintptr(0))) / uint64(unsafe.Sizeof(int32(0))) 52061 }())) 52062 } 52063 52064 func test_memdebug_log(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52065 bp := tls.Alloc(128) 52066 defer tls.Free(128) 52067 52068 if !(isInit != 0) { 52069 tcl.XTcl_InitHashTable(tls, uintptr(unsafe.Pointer(&aMallocLog)), int32(uint64(10)*func() uint64 { 52070 if uint64(unsafe.Sizeof(int32(0))) >= uint64(unsafe.Sizeof(uintptr(0))) { 52071 return uint64(1) 52072 } 52073 return uint64(unsafe.Sizeof(uintptr(0))) / uint64(unsafe.Sizeof(int32(0))) 52074 }())) 52075 isInit = 1 52076 } 52077 52078 if objc < 2 { 52079 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33165) 52080 } 52081 if tcl.XTcl_GetIndexFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&MB_strs)), ts+2014, 0, bp) != 0 { 52082 return TCL_ERROR 52083 } 52084 52085 switch uint32(*(*int32)(unsafe.Pointer(bp))) { 52086 case uint32(0): 52087 mallocLogEnabled = 1 52088 break 52089 case uint32(1): 52090 mallocLogEnabled = 0 52091 break 52092 case uint32(2): 52093 { 52094 var pEntry uintptr 52095 var pRet uintptr = tcl.XTcl_NewObj(tls) 52096 52097 for pEntry = tcl.XTcl_FirstHashEntry(tls, uintptr(unsafe.Pointer(&aMallocLog)), bp+8); pEntry != 0; pEntry = tcl.XTcl_NextHashEntry(tls, bp+8) { 52098 var pLog uintptr = (*Tcl_HashEntry)(unsafe.Pointer(pEntry)).FclientData 52099 var aKey uintptr = func() uintptr { 52100 if (*Tcl_HashTable)(unsafe.Pointer(uintptr(unsafe.Pointer(&aMallocLog)))).FkeyType == TCL_ONE_WORD_KEYS || (*Tcl_HashTable)(unsafe.Pointer(uintptr(unsafe.Pointer(&aMallocLog)))).FkeyType == -1 { 52101 return *(*uintptr)(unsafe.Pointer(pEntry + 32)) 52102 } 52103 return pEntry + 32 52104 }() 52105 var ii int32 52106 52107 *(*uintptr)(unsafe.Pointer(bp + 32)) = tcl.XTcl_NewIntObj(tls, (*MallocLog)(unsafe.Pointer(pLog)).FnCall) 52108 *(*uintptr)(unsafe.Pointer(bp + 32 + 1*8)) = tcl.XTcl_NewIntObj(tls, (*MallocLog)(unsafe.Pointer(pLog)).FnByte) 52109 for ii = 0; ii < MALLOC_LOG_FRAMES; ii++ { 52110 *(*uintptr)(unsafe.Pointer(bp + 32 + uintptr(ii+2)*8)) = tcl.XTcl_NewWideIntObj(tls, *(*Tcl_WideInt)(unsafe.Pointer(aKey + uintptr(ii)*8))) 52111 } 52112 52113 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, 52114 tcl.XTcl_NewListObj(tls, MALLOC_LOG_FRAMES+2, bp+32)) 52115 } 52116 52117 tcl.XTcl_SetObjResult(tls, interp, pRet) 52118 break 52119 52120 } 52121 case uint32(3): 52122 { 52123 test_memdebug_log_clear(tls) 52124 break 52125 52126 } 52127 52128 case uint32(4): 52129 { 52130 break 52131 52132 } 52133 } 52134 52135 return TCL_OK 52136 } 52137 52138 var isInit int32 = 0 52139 var MB_strs = [5]uintptr{ts + 33181, ts + 33187, ts + 33192, ts + 33197, ts + 33203} 52140 52141 func test_config_pagecache(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52142 bp := tls.Alloc(56) 52143 defer tls.Free(56) 52144 52145 var pRes uintptr 52146 if objc != 3 { 52147 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33208) 52148 return TCL_ERROR 52149 } 52150 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+48) != 0 { 52151 return TCL_ERROR 52152 } 52153 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+52) != 0 { 52154 return TCL_ERROR 52155 } 52156 libc.Xfree(tls, buf1) 52157 buf1 = uintptr(0) 52158 52159 pRes = tcl.XTcl_NewObj(tls) 52160 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FszPage)) 52161 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pRes, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FnPage)) 52162 tcl.XTcl_SetObjResult(tls, interp, pRes) 52163 52164 if *(*int32)(unsafe.Pointer(bp + 48)) < 0 { 52165 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PAGECACHE, libc.VaList(bp, uintptr(0), 0, 0)) 52166 } else { 52167 buf1 = libc.Xmalloc(tls, uint64(*(*int32)(unsafe.Pointer(bp + 48))**(*int32)(unsafe.Pointer(bp + 52)))) 52168 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PAGECACHE, libc.VaList(bp+24, buf1, *(*int32)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)))) 52169 } 52170 return TCL_OK 52171 } 52172 52173 var buf1 uintptr = uintptr(0) 52174 52175 func test_alt_pcache(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52176 bp := tls.Alloc(32) 52177 defer tls.Free(32) 52178 52179 *(*int32)(unsafe.Pointer(bp + 20)) = 0 52180 *(*int32)(unsafe.Pointer(bp + 24)) = 0 52181 *(*int32)(unsafe.Pointer(bp + 28)) = 0 52182 if objc < 2 || objc > 5 { 52183 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 52184 ts+33215) 52185 return TCL_ERROR 52186 } 52187 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 52188 return TCL_ERROR 52189 } 52190 if objc >= 3 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) != 0 { 52191 return TCL_ERROR 52192 } 52193 if objc >= 4 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 { 52194 return TCL_ERROR 52195 } 52196 if objc >= 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+28) != 0 { 52197 return TCL_ERROR 52198 } 52199 if *(*int32)(unsafe.Pointer(bp + 20)) < 0 || *(*int32)(unsafe.Pointer(bp + 20)) > 100 { 52200 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+33262, 52201 uintptr(0))) 52202 return TCL_ERROR 52203 } 52204 installTestPCache(tls, *(*int32)(unsafe.Pointer(bp + 16)), uint32(*(*int32)(unsafe.Pointer(bp + 20))), uint32(*(*int32)(unsafe.Pointer(bp + 24))), 52205 uint32(*(*int32)(unsafe.Pointer(bp + 28)))) 52206 return TCL_OK 52207 } 52208 52209 func test_config_memstatus(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52210 bp := tls.Alloc(12) 52211 defer tls.Free(12) 52212 52213 var rc int32 52214 if objc != 2 { 52215 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18324) 52216 return TCL_ERROR 52217 } 52218 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 52219 return TCL_ERROR 52220 } 52221 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MEMSTATUS, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 52222 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 52223 return TCL_OK 52224 } 52225 52226 func test_config_lookaside(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52227 bp := tls.Alloc(24) 52228 defer tls.Free(24) 52229 52230 var pRet uintptr 52231 if objc != 3 { 52232 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33305) 52233 return TCL_ERROR 52234 } 52235 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16) != 0 { 52236 return TCL_ERROR 52237 } 52238 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+20) != 0 { 52239 return TCL_ERROR 52240 } 52241 pRet = tcl.XTcl_NewObj(tls) 52242 tcl.XTcl_ListObjAppendElement(tls, 52243 interp, pRet, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FszLookaside)) 52244 tcl.XTcl_ListObjAppendElement(tls, 52245 interp, pRet, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3Config.FnLookaside)) 52246 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_LOOKASIDE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 16)), *(*int32)(unsafe.Pointer(bp + 20)))) 52247 tcl.XTcl_SetObjResult(tls, interp, pRet) 52248 return TCL_OK 52249 } 52250 52251 func test_db_config_lookaside(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52252 bp := tls.Alloc(84) 52253 defer tls.Free(84) 52254 52255 var rc int32 52256 52257 if objc != 5 { 52258 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33316) 52259 return TCL_ERROR 52260 } 52261 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+64) != 0 { 52262 return TCL_ERROR 52263 } 52264 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+72) != 0 { 52265 return TCL_ERROR 52266 } 52267 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+76) != 0 { 52268 return TCL_ERROR 52269 } 52270 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+80) != 0 { 52271 return TCL_ERROR 52272 } 52273 if *(*int32)(unsafe.Pointer(bp + 72)) == 0 { 52274 rc = sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), SQLITE_DBCONFIG_LOOKASIDE, libc.VaList(bp, uintptr(0), *(*int32)(unsafe.Pointer(bp + 76)), *(*int32)(unsafe.Pointer(bp + 80)))) 52275 } else if *(*int32)(unsafe.Pointer(bp + 72)) >= 1 && *(*int32)(unsafe.Pointer(bp + 72)) <= 2 && uint64(*(*int32)(unsafe.Pointer(bp + 76))**(*int32)(unsafe.Pointer(bp + 80))) <= uint64(unsafe.Sizeof([10000]int8{})) { 52276 rc = sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 64)), SQLITE_DBCONFIG_LOOKASIDE, libc.VaList(bp+24, uintptr(unsafe.Pointer(&azBuf))+uintptr(*(*int32)(unsafe.Pointer(bp + 72)))*10000, *(*int32)(unsafe.Pointer(bp + 76)), *(*int32)(unsafe.Pointer(bp + 80)))) 52277 } else { 52278 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+33333, uintptr(0))) 52279 return TCL_ERROR 52280 } 52281 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 52282 return TCL_OK 52283 } 52284 52285 var azBuf [2][10000]int8 52286 52287 func test_config_heap(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52288 bp := tls.Alloc(56) 52289 defer tls.Free(56) 52290 52291 var rc int32 52292 52293 var aArg uintptr = objv + 1*8 52294 var nArg int32 = objc - 1 52295 52296 if nArg != 2 { 52297 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33371) 52298 return TCL_ERROR 52299 } 52300 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg)), bp+48) != 0 { 52301 return TCL_ERROR 52302 } 52303 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg + 1*8)), bp+52) != 0 { 52304 return TCL_ERROR 52305 } 52306 52307 if *(*int32)(unsafe.Pointer(bp + 48)) == 0 { 52308 libc.Xfree(tls, zBuf) 52309 zBuf = uintptr(0) 52310 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_HEAP, libc.VaList(bp, uintptr(0), 0, 0)) 52311 } else { 52312 zBuf = libc.Xrealloc(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp + 48)))) 52313 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_HEAP, libc.VaList(bp+24, zBuf, *(*int32)(unsafe.Pointer(bp + 48)), *(*int32)(unsafe.Pointer(bp + 52)))) 52314 } 52315 52316 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52317 return TCL_OK 52318 } 52319 52320 var zBuf uintptr 52321 52322 func test_config_heap_size(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52323 bp := tls.Alloc(12) 52324 defer tls.Free(12) 52325 52326 var rc int32 52327 52328 var aArg uintptr = objv + 1*8 52329 var nArg int32 = objc - 1 52330 52331 if nArg != 1 { 52332 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+16219) 52333 return TCL_ERROR 52334 } 52335 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(aArg)), bp+8) != 0 { 52336 return TCL_ERROR 52337 } 52338 52339 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_WIN32_HEAPSIZE, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 52340 52341 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52342 return TCL_OK 52343 } 52344 52345 func test_config_error(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52346 bp := tls.Alloc(40) 52347 defer tls.Free(40) 52348 52349 if objc != 2 && objc != 1 { 52350 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33387) 52351 return TCL_ERROR 52352 } 52353 if objc == 2 { 52354 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+32) != 0 { 52355 return TCL_ERROR 52356 } 52357 if sqlite3.Xsqlite3_db_config(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), 99999, 0) != SQLITE_ERROR { 52358 tcl.XTcl_AppendResult(tls, interp, 52359 libc.VaList(bp, ts+33392, 52360 uintptr(0))) 52361 return TCL_ERROR 52362 } 52363 } else { 52364 if sqlite3.Xsqlite3_config(tls, 99999, 0) != SQLITE_ERROR { 52365 tcl.XTcl_AppendResult(tls, interp, 52366 libc.VaList(bp+16, ts+33450, 52367 uintptr(0))) 52368 return TCL_ERROR 52369 } 52370 } 52371 return TCL_OK 52372 } 52373 52374 func test_config_uri(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52375 bp := tls.Alloc(12) 52376 defer tls.Free(12) 52377 52378 var rc int32 52379 52380 if objc != 2 { 52381 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 52382 return TCL_ERROR 52383 } 52384 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 52385 return TCL_ERROR 52386 } 52387 52388 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_URI, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 52389 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52390 52391 return TCL_OK 52392 } 52393 52394 func test_config_cis(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52395 bp := tls.Alloc(12) 52396 defer tls.Free(12) 52397 52398 var rc int32 52399 52400 if objc != 2 { 52401 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 52402 return TCL_ERROR 52403 } 52404 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 52405 return TCL_ERROR 52406 } 52407 52408 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_COVERING_INDEX_SCAN, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 52409 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52410 52411 return TCL_OK 52412 } 52413 52414 func test_config_pmasz(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52415 bp := tls.Alloc(12) 52416 defer tls.Free(12) 52417 52418 var rc int32 52419 52420 if objc != 2 { 52421 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+10152) 52422 return TCL_ERROR 52423 } 52424 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+8) != 0 { 52425 return TCL_ERROR 52426 } 52427 52428 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PMASZ, libc.VaList(bp, *(*int32)(unsafe.Pointer(bp + 8)))) 52429 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52430 52431 return TCL_OK 52432 } 52433 52434 func test_dump_memsys3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52435 if objc != 2 { 52436 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33113) 52437 return TCL_ERROR 52438 } 52439 52440 switch int32(clientData) { 52441 case 3: 52442 { 52443 } 52444 fallthrough 52445 case 5: 52446 { 52447 } 52448 } 52449 return TCL_OK 52450 } 52451 52452 func test_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52453 bp := tls.Alloc(16) 52454 defer tls.Free(16) 52455 52456 var rc int32 52457 52458 var i int32 52459 *(*int32)(unsafe.Pointer(bp)) = 0 52460 52461 var zOpName uintptr 52462 var pResult uintptr 52463 if objc != 3 { 52464 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33501) 52465 return TCL_ERROR 52466 } 52467 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 52468 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp1))/uint64(unsafe.Sizeof(struct { 52469 FzName uintptr 52470 Fop int32 52471 F__ccgo_pad1 [4]byte 52472 }{}))); i++ { 52473 if libc.Xstrcmp(tls, aOp1[i].FzName, zOpName) == 0 { 52474 *(*int32)(unsafe.Pointer(bp)) = aOp1[i].Fop 52475 break 52476 } 52477 } 52478 if i >= int32(uint64(unsafe.Sizeof(aOp1))/uint64(unsafe.Sizeof(struct { 52479 FzName uintptr 52480 Fop int32 52481 F__ccgo_pad1 [4]byte 52482 }{}))) { 52483 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 52484 return TCL_ERROR 52485 } 52486 } 52487 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+4) != 0 { 52488 return TCL_ERROR 52489 } 52490 *(*int32)(unsafe.Pointer(bp + 8)) = 0 52491 *(*int32)(unsafe.Pointer(bp + 12)) = 0 52492 rc = sqlite3.Xsqlite3_status(tls, *(*int32)(unsafe.Pointer(bp)), bp+8, bp+12, *(*int32)(unsafe.Pointer(bp + 4))) 52493 pResult = tcl.XTcl_NewObj(tls) 52494 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, rc)) 52495 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 8)))) 52496 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 12)))) 52497 tcl.XTcl_SetObjResult(tls, interp, pResult) 52498 return TCL_OK 52499 } 52500 52501 var aOp1 = [10]struct { 52502 FzName uintptr 52503 Fop int32 52504 F__ccgo_pad1 [4]byte 52505 }{ 52506 {FzName: ts + 33521}, 52507 {FzName: ts + 33547, Fop: SQLITE_STATUS_MALLOC_SIZE}, 52508 {FzName: ts + 33573, Fop: SQLITE_STATUS_PAGECACHE_USED}, 52509 {FzName: ts + 33602, Fop: SQLITE_STATUS_PAGECACHE_OVERFLOW}, 52510 {FzName: ts + 33635, Fop: SQLITE_STATUS_PAGECACHE_SIZE}, 52511 {FzName: ts + 33664, Fop: SQLITE_STATUS_SCRATCH_USED}, 52512 {FzName: ts + 33691, Fop: SQLITE_STATUS_SCRATCH_OVERFLOW}, 52513 {FzName: ts + 33722, Fop: SQLITE_STATUS_SCRATCH_SIZE}, 52514 {FzName: ts + 33749, Fop: SQLITE_STATUS_PARSER_STACK}, 52515 {FzName: ts + 33776, Fop: SQLITE_STATUS_MALLOC_COUNT}, 52516 } 52517 52518 func test_db_status(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52519 bp := tls.Alloc(24) 52520 defer tls.Free(24) 52521 52522 var rc int32 52523 52524 var i int32 52525 *(*int32)(unsafe.Pointer(bp + 8)) = 0 52526 52527 var zOpName uintptr 52528 52529 var pResult uintptr 52530 if objc != 4 { 52531 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33803) 52532 return TCL_ERROR 52533 } 52534 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 52535 return TCL_ERROR 52536 } 52537 zOpName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 52538 if libc.Xmemcmp(tls, zOpName, ts+33826, uint64(7)) == 0 { 52539 zOpName += uintptr(7) 52540 } 52541 if libc.Xmemcmp(tls, zOpName, ts+33834, uint64(9)) == 0 { 52542 zOpName += uintptr(9) 52543 } 52544 for i = 0; i < int32(uint64(unsafe.Sizeof(aOp2))/uint64(unsafe.Sizeof(struct { 52545 FzName uintptr 52546 Fop int32 52547 F__ccgo_pad1 [4]byte 52548 }{}))); i++ { 52549 if libc.Xstrcmp(tls, aOp2[i].FzName, zOpName) == 0 { 52550 *(*int32)(unsafe.Pointer(bp + 8)) = aOp2[i].Fop 52551 break 52552 } 52553 } 52554 if i >= int32(uint64(unsafe.Sizeof(aOp2))/uint64(unsafe.Sizeof(struct { 52555 FzName uintptr 52556 Fop int32 52557 F__ccgo_pad1 [4]byte 52558 }{}))) { 52559 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+8) != 0 { 52560 return TCL_ERROR 52561 } 52562 } 52563 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+12) != 0 { 52564 return TCL_ERROR 52565 } 52566 *(*int32)(unsafe.Pointer(bp + 16)) = 0 52567 *(*int32)(unsafe.Pointer(bp + 20)) = 0 52568 rc = sqlite3.Xsqlite3_db_status(tls, *(*uintptr)(unsafe.Pointer(bp)), *(*int32)(unsafe.Pointer(bp + 8)), bp+16, bp+20, *(*int32)(unsafe.Pointer(bp + 12))) 52569 pResult = tcl.XTcl_NewObj(tls) 52570 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, rc)) 52571 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 16)))) 52572 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pResult, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(bp + 20)))) 52573 tcl.XTcl_SetObjResult(tls, interp, pResult) 52574 return TCL_OK 52575 } 52576 52577 var aOp2 = [13]struct { 52578 FzName uintptr 52579 Fop int32 52580 F__ccgo_pad1 [4]byte 52581 }{ 52582 {FzName: ts + 33844}, 52583 {FzName: ts + 33859, Fop: SQLITE_DBSTATUS_CACHE_USED}, 52584 {FzName: ts + 33870, Fop: SQLITE_DBSTATUS_SCHEMA_USED}, 52585 {FzName: ts + 33882, Fop: SQLITE_DBSTATUS_STMT_USED}, 52586 {FzName: ts + 33892, Fop: SQLITE_DBSTATUS_LOOKASIDE_HIT}, 52587 {FzName: ts + 33906, Fop: SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE}, 52588 {FzName: ts + 33926, Fop: SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL}, 52589 {FzName: ts + 33946, Fop: SQLITE_DBSTATUS_CACHE_HIT}, 52590 {FzName: ts + 33956, Fop: SQLITE_DBSTATUS_CACHE_MISS}, 52591 {FzName: ts + 33967, Fop: SQLITE_DBSTATUS_CACHE_WRITE}, 52592 {FzName: ts + 33979, Fop: SQLITE_DBSTATUS_DEFERRED_FKS}, 52593 {FzName: ts + 33992, Fop: SQLITE_DBSTATUS_CACHE_USED_SHARED}, 52594 {FzName: ts + 34010, Fop: SQLITE_DBSTATUS_CACHE_SPILL}, 52595 } 52596 52597 func test_install_malloc_faultsim(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52598 bp := tls.Alloc(4) 52599 defer tls.Free(4) 52600 52601 var rc int32 52602 52603 if objc != 2 { 52604 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18324) 52605 return TCL_ERROR 52606 } 52607 if TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) { 52608 return TCL_ERROR 52609 } 52610 rc = faultsimInstall(tls, *(*int32)(unsafe.Pointer(bp))) 52611 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52612 return TCL_OK 52613 } 52614 52615 func test_install_memsys3(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52616 var rc int32 = SQLITE_MISUSE 52617 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 52618 return TCL_OK 52619 } 52620 52621 func test_vfs_oom_test(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 52622 bp := tls.Alloc(4) 52623 defer tls.Free(4) 52624 52625 if objc > 2 { 52626 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+34022) 52627 return TCL_ERROR 52628 } else if objc == 2 { 52629 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp) != 0 { 52630 return TCL_ERROR 52631 } 52632 sqlite3.Xsqlite3_memdebug_vfs_oom_test = *(*int32)(unsafe.Pointer(bp)) 52633 } 52634 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, sqlite3.Xsqlite3_memdebug_vfs_oom_test)) 52635 return TCL_OK 52636 } 52637 52638 func Sqlitetest_malloc_Init(tls *libc.TLS, interp uintptr) int32 { 52639 var i int32 52640 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd11))/uint64(unsafe.Sizeof(struct { 52641 FzName uintptr 52642 FxProc uintptr 52643 FclientData int32 52644 F__ccgo_pad1 [4]byte 52645 }{})); i++ { 52646 var c ClientData = uintptr(intptr_t(aObjCmd11[i].FclientData)) 52647 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd11[i].FzName, aObjCmd11[i].FxProc, c, uintptr(0)) 52648 } 52649 return TCL_OK 52650 } 52651 52652 var aObjCmd11 = [32]struct { 52653 FzName uintptr 52654 FxProc uintptr 52655 FclientData int32 52656 F__ccgo_pad1 [4]byte 52657 }{ 52658 {FzName: ts + 28199, FxProc: 0}, 52659 {FzName: ts + 28214, FxProc: 0}, 52660 {FzName: ts + 34032, FxProc: 0}, 52661 {FzName: ts + 34045, FxProc: 0}, 52662 {FzName: ts + 34052, FxProc: 0}, 52663 {FzName: ts + 34059, FxProc: 0}, 52664 {FzName: ts + 34079, FxProc: 0}, 52665 {FzName: ts + 34104, FxProc: 0}, 52666 {FzName: ts + 34131, FxProc: 0}, 52667 {FzName: ts + 34153, FxProc: 0}, 52668 {FzName: ts + 34175, FxProc: 0}, 52669 {FzName: ts + 34200, FxProc: 0}, 52670 {FzName: ts + 34226, FxProc: 0}, 52671 {FzName: ts + 34256, FxProc: 0}, 52672 {FzName: ts + 34277, FxProc: 0}, 52673 {FzName: ts + 34302, FxProc: 0}, 52674 {FzName: ts + 34328, FxProc: 0}, 52675 {FzName: ts + 34343, FxProc: 0}, 52676 {FzName: ts + 34361, FxProc: 0}, 52677 {FzName: ts + 34385, FxProc: 0}, 52678 {FzName: ts + 34405, FxProc: 0}, 52679 {FzName: ts + 34430, FxProc: 0}, 52680 {FzName: ts + 34455, FxProc: 0}, 52681 {FzName: ts + 34480, FxProc: 0}, 52682 {FzName: ts + 34501, FxProc: 0}, 52683 {FzName: ts + 34520, FxProc: 0}, 52684 {FzName: ts + 34539, FxProc: 0}, 52685 {FzName: ts + 34560, FxProc: 0}, 52686 {FzName: ts + 34588, FxProc: 0, FclientData: 3}, 52687 {FzName: ts + 34609, FxProc: 0, FclientData: 5}, 52688 {FzName: ts + 34630, FxProc: 0}, 52689 {FzName: ts + 34654, FxProc: 0}, 52690 } 52691 52692 type MD5Context1 = struct { 52693 FisInit int32 52694 Fbuf [4]uint32 52695 Fbits [2]uint32 52696 Fin [64]uint8 52697 } 52698 52699 type MD5Context = MD5Context1 52700 52701 func byteReverse(tls *libc.TLS, buf uintptr, longs uint32) { 52702 var t uint32 52703 for __ccgo := true; __ccgo; __ccgo = libc.PreDecUint32(&longs, 1) != 0 { 52704 t = (uint32(*(*uint8)(unsafe.Pointer(buf + 3)))<<8|uint32(*(*uint8)(unsafe.Pointer(buf + 2))))<<16 | (uint32(*(*uint8)(unsafe.Pointer(buf + 1)))<<8 | uint32(*(*uint8)(unsafe.Pointer(buf)))) 52705 *(*uint32)(unsafe.Pointer(buf)) = t 52706 buf += uintptr(4) 52707 } 52708 } 52709 52710 func MD5Transform(tls *libc.TLS, buf uintptr, in uintptr) { 52711 var a uint32 52712 var b uint32 52713 var c uint32 52714 var d uint32 52715 52716 a = *(*uint32)(unsafe.Pointer(buf)) 52717 b = *(*uint32)(unsafe.Pointer(buf + 1*4)) 52718 c = *(*uint32)(unsafe.Pointer(buf + 2*4)) 52719 d = *(*uint32)(unsafe.Pointer(buf + 3*4)) 52720 52721 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in)) + 0xd76aa478) 52722 a = a<<7 | a>>(32-7) 52723 a = a + b 52724 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xe8c7b756) 52725 d = d<<12 | d>>(32-12) 52726 d = d + a 52727 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + uint32(0x242070db)) 52728 c = c<<17 | c>>(32-17) 52729 c = c + d 52730 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xc1bdceee) 52731 b = b<<22 | b>>(32-22) 52732 b = b + c 52733 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xf57c0faf) 52734 a = a<<7 | a>>(32-7) 52735 a = a + b 52736 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 5*4)) + uint32(0x4787c62a)) 52737 d = d<<12 | d>>(32-12) 52738 d = d + a 52739 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xa8304613) 52740 c = c<<17 | c>>(32-17) 52741 c = c + d 52742 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 7*4)) + 0xfd469501) 52743 b = b<<22 | b>>(32-22) 52744 b = b + c 52745 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x698098d8)) 52746 a = a<<7 | a>>(32-7) 52747 a = a + b 52748 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0x8b44f7af) 52749 d = d<<12 | d>>(32-12) 52750 d = d + a 52751 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xffff5bb1) 52752 c = c<<17 | c>>(32-17) 52753 c = c + d 52754 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 11*4)) + 0x895cd7be) 52755 b = b<<22 | b>>(32-22) 52756 b = b + c 52757 a = a + (d ^ b&(c^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + uint32(0x6b901122)) 52758 a = a<<7 | a>>(32-7) 52759 a = a + b 52760 d = d + (c ^ a&(b^c) + *(*uint32)(unsafe.Pointer(in + 13*4)) + 0xfd987193) 52761 d = d<<12 | d>>(32-12) 52762 d = d + a 52763 c = c + (b ^ d&(a^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xa679438e) 52764 c = c<<17 | c>>(32-17) 52765 c = c + d 52766 b = b + (a ^ c&(d^a) + *(*uint32)(unsafe.Pointer(in + 15*4)) + uint32(0x49b40821)) 52767 b = b<<22 | b>>(32-22) 52768 b = b + c 52769 52770 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xf61e2562) 52771 a = a<<5 | a>>(32-5) 52772 a = a + b 52773 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xc040b340) 52774 d = d<<9 | d>>(32-9) 52775 d = d + a 52776 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 11*4)) + uint32(0x265e5a51)) 52777 c = c<<14 | c>>(32-14) 52778 c = c + d 52779 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in)) + 0xe9b6c7aa) 52780 b = b<<20 | b>>(32-20) 52781 b = b + c 52782 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xd62f105d) 52783 a = a<<5 | a>>(32-5) 52784 a = a + b 52785 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + uint32(0x02441453)) 52786 d = d<<9 | d>>(32-9) 52787 d = d + a 52788 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 15*4)) + 0xd8a1e681) 52789 c = c<<14 | c>>(32-14) 52790 c = c + d 52791 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xe7d3fbc8) 52792 b = b<<20 | b>>(32-20) 52793 b = b + c 52794 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 9*4)) + uint32(0x21e1cde6)) 52795 a = a<<5 | a>>(32-5) 52796 a = a + b 52797 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xc33707d6) 52798 d = d<<9 | d>>(32-9) 52799 d = d + a 52800 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xf4d50d87) 52801 c = c<<14 | c>>(32-14) 52802 c = c + d 52803 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x455a14ed)) 52804 b = b<<20 | b>>(32-20) 52805 b = b + c 52806 a = a + (c ^ d&(b^c) + *(*uint32)(unsafe.Pointer(in + 13*4)) + 0xa9e3e905) 52807 a = a<<5 | a>>(32-5) 52808 a = a + b 52809 d = d + (b ^ c&(a^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + 0xfcefa3f8) 52810 d = d<<9 | d>>(32-9) 52811 d = d + a 52812 c = c + (a ^ b&(d^a) + *(*uint32)(unsafe.Pointer(in + 7*4)) + uint32(0x676f02d9)) 52813 c = c<<14 | c>>(32-14) 52814 c = c + d 52815 b = b + (d ^ a&(c^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + 0x8d2a4c8a) 52816 b = b<<20 | b>>(32-20) 52817 b = b + c 52818 52819 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xfffa3942) 52820 a = a<<4 | a>>(32-4) 52821 a = a + b 52822 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 8*4)) + 0x8771f681) 52823 d = d<<11 | d>>(32-11) 52824 d = d + a 52825 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 11*4)) + uint32(0x6d9d6122)) 52826 c = c<<16 | c>>(32-16) 52827 c = c + d 52828 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xfde5380c) 52829 b = b<<23 | b>>(32-23) 52830 b = b + c 52831 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0xa4beea44) 52832 a = a<<4 | a>>(32-4) 52833 a = a + b 52834 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 4*4)) + uint32(0x4bdecfa9)) 52835 d = d<<11 | d>>(32-11) 52836 d = d + a 52837 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 7*4)) + 0xf6bb4b60) 52838 c = c<<16 | c>>(32-16) 52839 c = c + d 52840 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xbebfbc70) 52841 b = b<<23 | b>>(32-23) 52842 b = b + c 52843 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 13*4)) + uint32(0x289b7ec6)) 52844 a = a<<4 | a>>(32-4) 52845 a = a + b 52846 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in)) + 0xeaa127fa) 52847 d = d<<11 | d>>(32-11) 52848 d = d + a 52849 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0xd4ef3085) 52850 c = c<<16 | c>>(32-16) 52851 c = c + d 52852 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 6*4)) + uint32(0x04881d05)) 52853 b = b<<23 | b>>(32-23) 52854 b = b + c 52855 a = a + (b ^ c ^ d + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0xd9d4d039) 52856 a = a<<4 | a>>(32-4) 52857 a = a + b 52858 d = d + (a ^ b ^ c + *(*uint32)(unsafe.Pointer(in + 12*4)) + 0xe6db99e5) 52859 d = d<<11 | d>>(32-11) 52860 d = d + a 52861 c = c + (d ^ a ^ b + *(*uint32)(unsafe.Pointer(in + 15*4)) + uint32(0x1fa27cf8)) 52862 c = c<<16 | c>>(32-16) 52863 c = c + d 52864 b = b + (c ^ d ^ a + *(*uint32)(unsafe.Pointer(in + 2*4)) + 0xc4ac5665) 52865 b = b<<23 | b>>(32-23) 52866 b = b + c 52867 52868 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in)) + 0xf4292244) 52869 a = a<<6 | a>>(32-6) 52870 a = a + b 52871 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 7*4)) + uint32(0x432aff97)) 52872 d = d<<10 | d>>(32-10) 52873 d = d + a 52874 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 14*4)) + 0xab9423a7) 52875 c = c<<15 | c>>(32-15) 52876 c = c + d 52877 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 5*4)) + 0xfc93a039) 52878 b = b<<21 | b>>(32-21) 52879 b = b + c 52880 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 12*4)) + uint32(0x655b59c3)) 52881 a = a<<6 | a>>(32-6) 52882 a = a + b 52883 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 3*4)) + 0x8f0ccc92) 52884 d = d<<10 | d>>(32-10) 52885 d = d + a 52886 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 10*4)) + 0xffeff47d) 52887 c = c<<15 | c>>(32-15) 52888 c = c + d 52889 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 1*4)) + 0x85845dd1) 52890 b = b<<21 | b>>(32-21) 52891 b = b + c 52892 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 8*4)) + uint32(0x6fa87e4f)) 52893 a = a<<6 | a>>(32-6) 52894 a = a + b 52895 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 15*4)) + 0xfe2ce6e0) 52896 d = d<<10 | d>>(32-10) 52897 d = d + a 52898 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 6*4)) + 0xa3014314) 52899 c = c<<15 | c>>(32-15) 52900 c = c + d 52901 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 13*4)) + uint32(0x4e0811a1)) 52902 b = b<<21 | b>>(32-21) 52903 b = b + c 52904 a = a + (c ^ (b | ^d) + *(*uint32)(unsafe.Pointer(in + 4*4)) + 0xf7537e82) 52905 a = a<<6 | a>>(32-6) 52906 a = a + b 52907 d = d + (b ^ (a | ^c) + *(*uint32)(unsafe.Pointer(in + 11*4)) + 0xbd3af235) 52908 d = d<<10 | d>>(32-10) 52909 d = d + a 52910 c = c + (a ^ (d | ^b) + *(*uint32)(unsafe.Pointer(in + 2*4)) + uint32(0x2ad7d2bb)) 52911 c = c<<15 | c>>(32-15) 52912 c = c + d 52913 b = b + (d ^ (c | ^a) + *(*uint32)(unsafe.Pointer(in + 9*4)) + 0xeb86d391) 52914 b = b<<21 | b>>(32-21) 52915 b = b + c 52916 52917 *(*uint32)(unsafe.Pointer(buf)) += a 52918 *(*uint32)(unsafe.Pointer(buf + 1*4)) += b 52919 *(*uint32)(unsafe.Pointer(buf + 2*4)) += c 52920 *(*uint32)(unsafe.Pointer(buf + 3*4)) += d 52921 } 52922 52923 func MD5Init(tls *libc.TLS, ctx uintptr) { 52924 (*MD5Context)(unsafe.Pointer(ctx)).FisInit = 1 52925 *(*uint32)(unsafe.Pointer(ctx + 4)) = uint32(0x67452301) 52926 *(*uint32)(unsafe.Pointer(ctx + 4 + 1*4)) = 0xefcdab89 52927 *(*uint32)(unsafe.Pointer(ctx + 4 + 2*4)) = 0x98badcfe 52928 *(*uint32)(unsafe.Pointer(ctx + 4 + 3*4)) = uint32(0x10325476) 52929 *(*uint32)(unsafe.Pointer(ctx + 20)) = uint32(0) 52930 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4)) = uint32(0) 52931 } 52932 52933 func MD5Update(tls *libc.TLS, ctx uintptr, buf uintptr, len uint32) { 52934 var t uint32 52935 52936 t = *(*uint32)(unsafe.Pointer(ctx + 20)) 52937 if libc.AssignPtrUint32(ctx+20, t+len<<3) < t { 52938 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4))++ 52939 } 52940 *(*uint32)(unsafe.Pointer(ctx + 20 + 1*4)) += len >> 29 52941 52942 t = t >> 3 & uint32(0x3f) 52943 52944 if t != 0 { 52945 var p uintptr = ctx + 28 + uintptr(t) 52946 52947 t = uint32(64) - t 52948 if len < t { 52949 libc.X__builtin___memcpy_chk(tls, p, buf, uint64(len), libc.X__builtin_object_size(tls, p, 0)) 52950 return 52951 } 52952 libc.X__builtin___memcpy_chk(tls, p, buf, uint64(t), libc.X__builtin_object_size(tls, p, 0)) 52953 byteReverse(tls, ctx+28, uint32(16)) 52954 MD5Transform(tls, ctx+4, ctx+28) 52955 buf += uintptr(t) 52956 len = len - t 52957 } 52958 52959 for len >= uint32(64) { 52960 libc.X__builtin___memcpy_chk(tls, ctx+28, buf, uint64(64), libc.X__builtin_object_size(tls, ctx+28, 0)) 52961 byteReverse(tls, ctx+28, uint32(16)) 52962 MD5Transform(tls, ctx+4, ctx+28) 52963 buf += uintptr(64) 52964 len = len - uint32(64) 52965 } 52966 52967 libc.X__builtin___memcpy_chk(tls, ctx+28, buf, uint64(len), libc.X__builtin_object_size(tls, ctx+28, 0)) 52968 } 52969 52970 func MD5Final(tls *libc.TLS, digest uintptr, ctx uintptr) { 52971 var count uint32 52972 var p uintptr 52973 52974 count = *(*uint32)(unsafe.Pointer(ctx + 20)) >> 3 & uint32(0x3F) 52975 52976 p = ctx + 28 + uintptr(count) 52977 *(*uint8)(unsafe.Pointer(libc.PostIncUintptr(&p, 1))) = uint8(0x80) 52978 52979 count = uint32(64-1) - count 52980 52981 if count < uint32(8) { 52982 libc.X__builtin___memset_chk(tls, p, 0, uint64(count), libc.X__builtin_object_size(tls, p, 0)) 52983 byteReverse(tls, ctx+28, uint32(16)) 52984 MD5Transform(tls, ctx+4, ctx+28) 52985 52986 libc.X__builtin___memset_chk(tls, ctx+28, 0, uint64(56), libc.X__builtin_object_size(tls, ctx+28, 0)) 52987 } else { 52988 libc.X__builtin___memset_chk(tls, p, 0, uint64(count-uint32(8)), libc.X__builtin_object_size(tls, p, 0)) 52989 } 52990 byteReverse(tls, ctx+28, uint32(14)) 52991 52992 libc.X__builtin___memcpy_chk(tls, ctx+28+uintptr(14*4), ctx+20, uint64(8), libc.X__builtin_object_size(tls, ctx+28+uintptr(14*4), 0)) 52993 52994 MD5Transform(tls, ctx+4, ctx+28) 52995 byteReverse(tls, ctx+4, uint32(4)) 52996 libc.X__builtin___memcpy_chk(tls, digest, ctx+4, uint64(16), libc.X__builtin_object_size(tls, digest, 0)) 52997 } 52998 52999 func MD5DigestToBase16(tls *libc.TLS, digest uintptr, zBuf uintptr) { 53000 var i int32 53001 var j int32 53002 53003 for j = libc.AssignInt32(&i, 0); i < 16; i++ { 53004 var a int32 = int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i)))) 53005 *(*int8)(unsafe.Pointer(zBuf + uintptr(libc.PostIncInt32(&j, 1)))) = zEncode[a>>4&0xf] 53006 *(*int8)(unsafe.Pointer(zBuf + uintptr(libc.PostIncInt32(&j, 1)))) = zEncode[a&0xf] 53007 } 53008 *(*int8)(unsafe.Pointer(zBuf + uintptr(j))) = int8(0) 53009 } 53010 53011 var zEncode = *(*[17]int8)(unsafe.Pointer(ts + 31377)) 53012 53013 func MD5DigestToBase10x8(tls *libc.TLS, digest uintptr, zDigest uintptr) { 53014 bp := tls.Alloc(8) 53015 defer tls.Free(8) 53016 53017 var i int32 53018 var j int32 53019 var x uint32 53020 for i = libc.AssignInt32(&j, 0); i < 16; i = i + 2 { 53021 x = uint32(int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i))))*256 + int32(*(*uint8)(unsafe.Pointer(digest + uintptr(i+1))))) 53022 if i > 0 { 53023 *(*int8)(unsafe.Pointer(zDigest + uintptr(libc.PostIncInt32(&j, 1)))) = int8('-') 53024 } 53025 sqlite3.Xsqlite3_snprintf(tls, 50-j, zDigest+uintptr(j), ts+34684, libc.VaList(bp, x)) 53026 j = j + 5 53027 } 53028 *(*int8)(unsafe.Pointer(zDigest + uintptr(j))) = int8(0) 53029 } 53030 53031 func md5_cmd(tls *libc.TLS, cd uintptr, interp uintptr, argc int32, argv uintptr) int32 { 53032 bp := tls.Alloc(206) 53033 defer tls.Free(206) 53034 53035 var converter uintptr 53036 53037 if argc != 2 { 53038 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 53039 ts+15307, uintptr(0))) 53040 return TCL_ERROR 53041 } 53042 MD5Init(tls, bp+48) 53043 MD5Update(tls, bp+48, *(*uintptr)(unsafe.Pointer(argv + 1*8)), uint32(libc.Xstrlen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))))) 53044 MD5Final(tls, bp+140, bp+48) 53045 converter = cd 53046 (*struct { 53047 f func(*libc.TLS, uintptr, uintptr) 53048 })(unsafe.Pointer(&struct{ uintptr }{converter})).f(tls, bp+140, bp+156) 53049 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, bp+156, uintptr(0))) 53050 return TCL_OK 53051 } 53052 53053 func md5file_cmd(tls *libc.TLS, cd uintptr, interp uintptr, argc int32, argv uintptr) int32 { 53054 bp := tls.Alloc(10428) 53055 defer tls.Free(10428) 53056 53057 var in uintptr 53058 var ofst int32 53059 var amt int32 53060 53061 var converter uintptr 53062 53063 if argc != 2 && argc != 4 { 53064 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, *(*uintptr)(unsafe.Pointer(argv)), 53065 ts+34689, uintptr(0))) 53066 return TCL_ERROR 53067 } 53068 if argc == 4 { 53069 ofst = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 2*8))) 53070 amt = libc.Xatoi(tls, *(*uintptr)(unsafe.Pointer(argv + 3*8))) 53071 } else { 53072 ofst = 0 53073 amt = 2147483647 53074 } 53075 in = libc.Xfopen(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4402) 53076 if in == uintptr(0) { 53077 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+34713, *(*uintptr)(unsafe.Pointer(argv + 1*8)), 53078 ts+34735, uintptr(0))) 53079 return TCL_ERROR 53080 } 53081 libc.Xfseek(tls, in, int64(ofst), SEEK_SET) 53082 MD5Init(tls, bp+80) 53083 for amt > 0 { 53084 var n int32 53085 n = int32(libc.Xfread(tls, bp+172, uint64(1), func() uint64 { 53086 if uint64(unsafe.Sizeof([10240]int8{})) <= uint64(amt) { 53087 return uint64(unsafe.Sizeof([10240]int8{})) 53088 } 53089 return uint64(amt) 53090 }(), in)) 53091 if n <= 0 { 53092 break 53093 } 53094 MD5Update(tls, bp+80, bp+172, uint32(n)) 53095 amt = amt - n 53096 } 53097 libc.Xfclose(tls, in) 53098 MD5Final(tls, bp+10412, bp+80) 53099 converter = cd 53100 (*struct { 53101 f func(*libc.TLS, uintptr, uintptr) 53102 })(unsafe.Pointer(&struct{ uintptr }{converter})).f(tls, bp+10412, bp+172) 53103 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+172, uintptr(0))) 53104 return TCL_OK 53105 } 53106 53107 func Md5_Init(tls *libc.TLS, interp uintptr) int32 { 53108 tcl.XTcl_CreateCommand(tls, interp, ts+34749, *(*uintptr)(unsafe.Pointer(&struct { 53109 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53110 }{md5_cmd})), 53111 *(*uintptr)(unsafe.Pointer(&struct { 53112 f func(*libc.TLS, uintptr, uintptr) 53113 }{MD5DigestToBase16})), uintptr(0)) 53114 tcl.XTcl_CreateCommand(tls, interp, ts+34753, *(*uintptr)(unsafe.Pointer(&struct { 53115 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53116 }{md5_cmd})), 53117 *(*uintptr)(unsafe.Pointer(&struct { 53118 f func(*libc.TLS, uintptr, uintptr) 53119 }{MD5DigestToBase10x8})), uintptr(0)) 53120 tcl.XTcl_CreateCommand(tls, interp, ts+34762, *(*uintptr)(unsafe.Pointer(&struct { 53121 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53122 }{md5file_cmd})), 53123 *(*uintptr)(unsafe.Pointer(&struct { 53124 f func(*libc.TLS, uintptr, uintptr) 53125 }{MD5DigestToBase16})), uintptr(0)) 53126 tcl.XTcl_CreateCommand(tls, interp, ts+34770, *(*uintptr)(unsafe.Pointer(&struct { 53127 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53128 }{md5file_cmd})), 53129 *(*uintptr)(unsafe.Pointer(&struct { 53130 f func(*libc.TLS, uintptr, uintptr) 53131 }{MD5DigestToBase10x8})), uintptr(0)) 53132 return TCL_OK 53133 } 53134 53135 func md5step(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 53136 var p uintptr 53137 var i int32 53138 if argc < 1 { 53139 return 53140 } 53141 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(MD5Context{}))) 53142 if p == uintptr(0) { 53143 return 53144 } 53145 if !((*MD5Context)(unsafe.Pointer(p)).FisInit != 0) { 53146 MD5Init(tls, p) 53147 } 53148 for i = 0; i < argc; i++ { 53149 var zData uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 53150 if zData != 0 { 53151 MD5Update(tls, p, zData, uint32(int32(libc.Xstrlen(tls, zData)))) 53152 } 53153 } 53154 } 53155 53156 func md5finalize(tls *libc.TLS, context uintptr) { 53157 bp := tls.Alloc(49) 53158 defer tls.Free(49) 53159 53160 var p uintptr 53161 53162 p = sqlite3.Xsqlite3_aggregate_context(tls, context, int32(unsafe.Sizeof(MD5Context{}))) 53163 MD5Final(tls, bp, p) 53164 MD5DigestToBase16(tls, bp, bp+16) 53165 sqlite3.Xsqlite3_result_text(tls, context, bp+16, -1, libc.UintptrFromInt32(-1)) 53166 } 53167 53168 func Md5_Register(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pThunk uintptr) int32 { 53169 var rc int32 = sqlite3.Xsqlite3_create_function(tls, db, ts+34783, -1, SQLITE_UTF8, uintptr(0), uintptr(0), 53170 *(*uintptr)(unsafe.Pointer(&struct { 53171 f func(*libc.TLS, uintptr, int32, uintptr) 53172 }{md5step})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{md5finalize}))) 53173 sqlite3.Xsqlite3_overload_function(tls, db, ts+34783, -1) 53174 return rc 53175 } 53176 53177 type multiplexGroup1 = struct { 53178 FaReal uintptr 53179 FnReal int32 53180 F__ccgo_pad1 [4]byte 53181 FzName uintptr 53182 FnName int32 53183 Fflags int32 53184 FszChunk uint32 53185 FbEnabled uint8 53186 FbTruncate uint8 53187 F__ccgo_pad2 [2]byte 53188 } 53189 53190 type multiplexGroup = multiplexGroup1 53191 type multiplexConn1 = struct { 53192 Fbase sqlite3_file 53193 FpGroup uintptr 53194 } 53195 53196 type multiplexConn = multiplexConn1 53197 53198 type multiplexReal = struct { 53199 Fp uintptr 53200 Fz uintptr 53201 } 53202 53203 var gMultiplex struct { 53204 FpOrigVfs uintptr 53205 FsThisVfs sqlite3_vfs 53206 FsIoMethodsV1 sqlite3_io_methods 53207 FsIoMethodsV2 sqlite3_io_methods 53208 FisInitialized int32 53209 F__ccgo_pad1 [4]byte 53210 } 53211 53212 func multiplexStrlen30(tls *libc.TLS, z uintptr) int32 { 53213 var z2 uintptr = z 53214 if z == uintptr(0) { 53215 return 0 53216 } 53217 for *(*int8)(unsafe.Pointer(z2)) != 0 { 53218 z2++ 53219 } 53220 return 0x3fffffff & int32((int64(z2)-int64(z))/1) 53221 } 53222 53223 func multiplexFilename(tls *libc.TLS, zBase uintptr, nBase int32, flags int32, iChunk int32, zOut uintptr) { 53224 bp := tls.Alloc(8) 53225 defer tls.Free(8) 53226 53227 var n int32 = nBase 53228 libc.X__builtin___memcpy_chk(tls, zOut, zBase, uint64(n+1), libc.X__builtin_object_size(tls, zOut, 0)) 53229 if iChunk != 0 && iChunk <= MX_CHUNK_NUMBER { 53230 sqlite3.Xsqlite3_snprintf(tls, 4, zOut+uintptr(n), ts+34790, libc.VaList(bp, iChunk)) 53231 n = n + 3 53232 } 53233 53234 *(*int8)(unsafe.Pointer(zOut + uintptr(n+1))) = int8(0) 53235 } 53236 53237 func multiplexSubFilename(tls *libc.TLS, pGroup uintptr, iChunk int32) int32 { 53238 if iChunk >= (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal { 53239 var p uintptr 53240 p = sqlite3.Xsqlite3_realloc64(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal, uint64(iChunk+1)*uint64(unsafe.Sizeof(multiplexReal{}))) 53241 if p == uintptr(0) { 53242 return SQLITE_NOMEM 53243 } 53244 libc.X__builtin___memset_chk(tls, p+uintptr((*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal)*16, 0, uint64(unsafe.Sizeof(multiplexReal{}))*uint64(iChunk+1-(*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal), libc.X__builtin_object_size(tls, p+uintptr((*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal)*16, 0)) 53245 (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal = p 53246 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal = iChunk + 1 53247 } 53248 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName != 0 && (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 53249 var z uintptr 53250 var n int32 = (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName 53251 z = sqlite3.Xsqlite3_malloc64(tls, uint64(n+5)) 53252 if z == uintptr(0) { 53253 return SQLITE_NOMEM 53254 } 53255 multiplexFilename(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName, (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags, iChunk, z) 53256 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fz = sqlite3.Xsqlite3_create_filename(tls, z, ts+584, ts+584, 0, uintptr(0)) 53257 sqlite3.Xsqlite3_free(tls, z) 53258 if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 53259 return SQLITE_NOMEM 53260 } 53261 } 53262 return SQLITE_OK 53263 } 53264 53265 func multiplexSubOpen(tls *libc.TLS, pGroup uintptr, iChunk int32, rc uintptr, pOutFlags uintptr, createFlag int32) uintptr { 53266 bp := tls.Alloc(20) 53267 defer tls.Free(20) 53268 53269 var pSubOpen uintptr = uintptr(0) 53270 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 53271 53272 *(*int32)(unsafe.Pointer(rc)) = multiplexSubFilename(tls, pGroup, iChunk) 53273 if *(*int32)(unsafe.Pointer(rc)) == SQLITE_OK && libc.AssignUintptr(&pSubOpen, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fp) == uintptr(0) { 53274 var flags int32 53275 53276 flags = (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags 53277 if createFlag != 0 { 53278 flags = flags | SQLITE_OPEN_CREATE 53279 } else if iChunk == 0 { 53280 } else if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz == uintptr(0) { 53281 return uintptr(0) 53282 } else { 53283 *(*int32)(unsafe.Pointer(rc)) = (*struct { 53284 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53285 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz, 53286 SQLITE_ACCESS_EXISTS, bp+16) 53287 if *(*int32)(unsafe.Pointer(rc)) != 0 || !(*(*int32)(unsafe.Pointer(bp + 16)) != 0) { 53288 if *(*int32)(unsafe.Pointer(rc)) != 0 { 53289 sqlite3.Xsqlite3_log(tls, *(*int32)(unsafe.Pointer(rc)), ts+34795, 53290 libc.VaList(bp, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz)) 53291 } 53292 return uintptr(0) 53293 } 53294 flags = flags & libc.CplInt32(SQLITE_OPEN_CREATE) 53295 } 53296 pSubOpen = sqlite3.Xsqlite3_malloc64(tls, uint64((*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FszOsFile)) 53297 if pSubOpen == uintptr(0) { 53298 *(*int32)(unsafe.Pointer(rc)) = SQLITE_IOERR | int32(12)<<8 53299 return uintptr(0) 53300 } 53301 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp = pSubOpen 53302 *(*int32)(unsafe.Pointer(rc)) = (*struct { 53303 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 53304 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz, pSubOpen, 53305 flags, pOutFlags) 53306 if *(*int32)(unsafe.Pointer(rc)) != SQLITE_OK { 53307 sqlite3.Xsqlite3_log(tls, *(*int32)(unsafe.Pointer(rc)), ts+34829, 53308 libc.VaList(bp+8, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz)) 53309 sqlite3.Xsqlite3_free(tls, pSubOpen) 53310 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp = uintptr(0) 53311 return uintptr(0) 53312 } 53313 } 53314 return pSubOpen 53315 } 53316 53317 func multiplexSubSize(tls *libc.TLS, pGroup uintptr, iChunk int32, rc uintptr) sqlite3_int64 { 53318 bp := tls.Alloc(8) 53319 defer tls.Free(8) 53320 53321 var pSub uintptr 53322 *(*sqlite3_int64)(unsafe.Pointer(bp)) = int64(0) 53323 53324 if *(*int32)(unsafe.Pointer(rc)) != 0 { 53325 return int64(0) 53326 } 53327 pSub = multiplexSubOpen(tls, pGroup, iChunk, rc, uintptr(0), 0) 53328 if pSub == uintptr(0) { 53329 return int64(0) 53330 } 53331 *(*int32)(unsafe.Pointer(rc)) = (*struct { 53332 f func(*libc.TLS, uintptr, uintptr) int32 53333 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSub)).FpMethods)).FxFileSize})).f(tls, pSub, bp) 53334 return *(*sqlite3_int64)(unsafe.Pointer(bp)) 53335 } 53336 53337 func multiplexControlFunc(tls *libc.TLS, context uintptr, argc int32, argv uintptr) { 53338 bp := tls.Alloc(4) 53339 defer tls.Free(4) 53340 53341 var rc int32 = SQLITE_OK 53342 var db uintptr = sqlite3.Xsqlite3_context_db_handle(tls, context) 53343 var op int32 = 0 53344 53345 if !(db != 0) || argc != 2 { 53346 rc = SQLITE_ERROR 53347 } else { 53348 op = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv))) 53349 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3_value_int(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 53350 53351 switch op { 53352 case 1: 53353 op = MULTIPLEX_CTRL_ENABLE 53354 break 53355 fallthrough 53356 case 2: 53357 op = MULTIPLEX_CTRL_SET_CHUNK_SIZE 53358 break 53359 fallthrough 53360 case 3: 53361 op = MULTIPLEX_CTRL_SET_MAX_CHUNKS 53362 break 53363 fallthrough 53364 default: 53365 rc = SQLITE_NOTFOUND 53366 break 53367 } 53368 } 53369 if rc == SQLITE_OK { 53370 rc = sqlite3.Xsqlite3_file_control(tls, db, uintptr(0), op, bp) 53371 } 53372 sqlite3.Xsqlite3_result_error_code(tls, context, rc) 53373 } 53374 53375 func multiplexFuncInit(tls *libc.TLS, db uintptr, pzErrMsg uintptr, pApi uintptr) int32 { 53376 var rc int32 53377 rc = sqlite3.Xsqlite3_create_function(tls, db, ts+34861, 2, SQLITE_ANY, 53378 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 53379 f func(*libc.TLS, uintptr, int32, uintptr) 53380 }{multiplexControlFunc})), uintptr(0), uintptr(0)) 53381 return rc 53382 } 53383 53384 func multiplexSubClose(tls *libc.TLS, pGroup uintptr, iChunk int32, pOrigVfs uintptr) { 53385 var pSubOpen uintptr = (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(iChunk)*16)).Fp 53386 if pSubOpen != 0 { 53387 (*struct { 53388 f func(*libc.TLS, uintptr) int32 53389 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 53390 if pOrigVfs != 0 && (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz != 0 { 53391 (*struct { 53392 f func(*libc.TLS, uintptr, uintptr, int32) int32 53393 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz, 0) 53394 } 53395 sqlite3.Xsqlite3_free(tls, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fp) 53396 } 53397 sqlite3.Xsqlite3_free_filename(tls, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz) 53398 libc.X__builtin___memset_chk(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16, 0, uint64(unsafe.Sizeof(multiplexReal{})), libc.X__builtin_object_size(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16, 0)) 53399 } 53400 53401 func multiplexFreeComponents(tls *libc.TLS, pGroup uintptr) { 53402 var i int32 53403 for i = 0; i < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; i++ { 53404 multiplexSubClose(tls, pGroup, i, uintptr(0)) 53405 } 53406 sqlite3.Xsqlite3_free(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal) 53407 (*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal = uintptr(0) 53408 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal = 0 53409 } 53410 53411 func multiplexOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pConn uintptr, flags int32, pOutFlags uintptr) int32 { 53412 bp := tls.Alloc(20) 53413 defer tls.Free(20) 53414 53415 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 53416 var pMultiplexOpen uintptr 53417 var pGroup uintptr = uintptr(0) 53418 var pSubOpen uintptr = uintptr(0) 53419 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 53420 var nName int32 = 0 53421 var sz int32 = 0 53422 var zToFree uintptr = uintptr(0) 53423 53424 _ = pVfs 53425 libc.X__builtin___memset_chk(tls, pConn, 0, uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile), libc.X__builtin_object_size(tls, pConn, 0)) 53426 53427 pMultiplexOpen = pConn 53428 53429 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 53430 if zName != 0 { 53431 nName = multiplexStrlen30(tls, zName) 53432 } else { 53433 nName = 0 53434 } 53435 sz = int32(uint64(unsafe.Sizeof(multiplexGroup{})) + 53436 uint64(nName) + uint64(1)) 53437 pGroup = sqlite3.Xsqlite3_malloc64(tls, uint64(sz)) 53438 if pGroup == uintptr(0) { 53439 *(*int32)(unsafe.Pointer(bp)) = SQLITE_NOMEM 53440 } 53441 } 53442 53443 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 53444 var zUri uintptr 53445 if flags&SQLITE_OPEN_URI != 0 { 53446 zUri = zName 53447 } else { 53448 zUri = uintptr(0) 53449 } 53450 53451 libc.X__builtin___memset_chk(tls, pGroup, 0, uint64(sz), libc.X__builtin_object_size(tls, pGroup, 0)) 53452 (*multiplexConn)(unsafe.Pointer(pMultiplexOpen)).FpGroup = pGroup 53453 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = libc.Uint8(libc.Uint8FromInt32(-1)) 53454 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(sqlite3.Xsqlite3_uri_boolean(tls, zUri, ts+18390, 53455 libc.Bool32(flags&SQLITE_OPEN_MAIN_DB == 0))) 53456 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = uint32(int32(sqlite3.Xsqlite3_uri_int64(tls, zUri, ts+34879, 53457 int64(SQLITE_MULTIPLEX_CHUNK_SIZE)))) 53458 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = ((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk + uint32(0xffff)) & libc.Uint32FromInt32(libc.CplInt32(0xffff)) 53459 if zName != 0 { 53460 var p uintptr = pGroup + 1*40 53461 (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName = p 53462 libc.X__builtin___memcpy_chk(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, zName, uint64(nName+1), libc.X__builtin_object_size(tls, (*multiplexGroup)(unsafe.Pointer(pGroup)).FzName, 0)) 53463 (*multiplexGroup)(unsafe.Pointer(pGroup)).FnName = nName 53464 } 53465 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled != 0 { 53466 for uint32(sqlite3.Xsqlite3PendingByte)%(*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk >= (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk-uint32(65536) { 53467 *(*uint32)(unsafe.Pointer(pGroup + 32)) += uint32(65536) 53468 } 53469 } 53470 (*multiplexGroup)(unsafe.Pointer(pGroup)).Fflags = flags & libc.CplInt32(SQLITE_OPEN_URI) 53471 *(*int32)(unsafe.Pointer(bp)) = multiplexSubFilename(tls, pGroup, 1) 53472 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 53473 pSubOpen = multiplexSubOpen(tls, pGroup, 0, bp, pOutFlags, 0) 53474 if pSubOpen == uintptr(0) && *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 53475 *(*int32)(unsafe.Pointer(bp)) = SQLITE_CANTOPEN 53476 } 53477 } 53478 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 53479 *(*int32)(unsafe.Pointer(bp)) = (*struct { 53480 f func(*libc.TLS, uintptr, uintptr) int32 53481 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, bp+8) 53482 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && zName != 0 { 53483 if flags&SQLITE_OPEN_SUPER_JOURNAL != 0 { 53484 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(0) 53485 } else if *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == int64(0) { 53486 if flags&SQLITE_OPEN_MAIN_JOURNAL != 0 { 53487 var iChunk int32 = 1 53488 for __ccgo := true; __ccgo; __ccgo = *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 16)) != 0 { 53489 *(*int32)(unsafe.Pointer(bp)) = (*struct { 53490 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53491 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, 53492 (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz, SQLITE_ACCESS_EXISTS, bp+16) 53493 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 16)) != 0 { 53494 *(*int32)(unsafe.Pointer(bp)) = (*struct { 53495 f func(*libc.TLS, uintptr, uintptr, int32) int32 53496 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(iChunk)*16)).Fz, 0) 53497 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 53498 *(*int32)(unsafe.Pointer(bp)) = multiplexSubFilename(tls, pGroup, libc.PreIncInt32(&iChunk, 1)) 53499 } 53500 } 53501 } 53502 } 53503 } else { 53504 *(*int32)(unsafe.Pointer(bp)) = (*struct { 53505 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53506 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+1*16)).Fz, 53507 SQLITE_ACCESS_EXISTS, bp+16) 53508 *(*int32)(unsafe.Pointer(bp + 16)) = libc.Bool32(multiplexSubSize(tls, pGroup, 1, bp) > int64(0)) 53509 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && *(*int32)(unsafe.Pointer(bp + 16)) != 0 && *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) == *(*sqlite3_int64)(unsafe.Pointer(bp + 8))&int64(0xffff0000) && *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) > int64(0) && 53510 *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) != sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) { 53511 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = uint32(int32(*(*sqlite3_int64)(unsafe.Pointer(bp + 8)))) 53512 } else if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && !(*(*int32)(unsafe.Pointer(bp + 16)) != 0) && *(*sqlite3_int64)(unsafe.Pointer(bp + 8)) > sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) { 53513 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(0) 53514 } 53515 } 53516 } 53517 } 53518 53519 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 53520 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FiVersion == 1 { 53521 (*sqlite3_file)(unsafe.Pointer(pConn)).FpMethods = uintptr(unsafe.Pointer(&gMultiplex)) + 176 53522 } else { 53523 (*sqlite3_file)(unsafe.Pointer(pConn)).FpMethods = uintptr(unsafe.Pointer(&gMultiplex)) + 328 53524 } 53525 } else { 53526 multiplexFreeComponents(tls, pGroup) 53527 sqlite3.Xsqlite3_free(tls, pGroup) 53528 } 53529 } 53530 sqlite3.Xsqlite3_free(tls, zToFree) 53531 return *(*int32)(unsafe.Pointer(bp)) 53532 } 53533 53534 func multiplexDelete(tls *libc.TLS, pVfs uintptr, zName uintptr, syncDir int32) int32 { 53535 bp := tls.Alloc(4) 53536 defer tls.Free(4) 53537 53538 var rc int32 53539 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 53540 rc = (*struct { 53541 f func(*libc.TLS, uintptr, uintptr, int32) int32 53542 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, zName, syncDir) 53543 if rc == SQLITE_OK { 53544 var nName int32 = int32(libc.Xstrlen(tls, zName)) 53545 var z uintptr 53546 z = sqlite3.Xsqlite3_malloc64(tls, uint64(nName+5)) 53547 if z == uintptr(0) { 53548 rc = SQLITE_IOERR | int32(12)<<8 53549 } else { 53550 var iChunk int32 = 0 53551 53552 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_OK && *(*int32)(unsafe.Pointer(bp)) != 0 { 53553 multiplexFilename(tls, zName, nName, SQLITE_OPEN_MAIN_JOURNAL, libc.PreIncInt32(&iChunk, 1), z) 53554 rc = (*struct { 53555 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53556 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, z, SQLITE_ACCESS_EXISTS, bp) 53557 } 53558 for rc == SQLITE_OK && iChunk > 1 { 53559 multiplexFilename(tls, zName, nName, SQLITE_OPEN_MAIN_JOURNAL, libc.PreDecInt32(&iChunk, 1), z) 53560 rc = (*struct { 53561 f func(*libc.TLS, uintptr, uintptr, int32) int32 53562 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, z, syncDir) 53563 } 53564 if rc == SQLITE_OK { 53565 iChunk = 0 53566 for __ccgo1 := true; __ccgo1; __ccgo1 = rc == SQLITE_OK && *(*int32)(unsafe.Pointer(bp)) != 0 { 53567 multiplexFilename(tls, zName, nName, SQLITE_OPEN_WAL, libc.PreIncInt32(&iChunk, 1), z) 53568 rc = (*struct { 53569 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53570 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxAccess})).f(tls, pOrigVfs, z, SQLITE_ACCESS_EXISTS, bp) 53571 } 53572 for rc == SQLITE_OK && iChunk > 1 { 53573 multiplexFilename(tls, zName, nName, SQLITE_OPEN_WAL, libc.PreDecInt32(&iChunk, 1), z) 53574 rc = (*struct { 53575 f func(*libc.TLS, uintptr, uintptr, int32) int32 53576 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, z, syncDir) 53577 } 53578 } 53579 } 53580 sqlite3.Xsqlite3_free(tls, z) 53581 } 53582 return rc 53583 } 53584 53585 func multiplexAccess(tls *libc.TLS, a uintptr, b uintptr, c int32, d uintptr) int32 { 53586 return (*struct { 53587 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53588 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxAccess})).f(tls, gMultiplex.FpOrigVfs, b, c, d) 53589 } 53590 53591 func multiplexFullPathname(tls *libc.TLS, a uintptr, b uintptr, c int32, d uintptr) int32 { 53592 return (*struct { 53593 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 53594 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxFullPathname})).f(tls, gMultiplex.FpOrigVfs, b, c, d) 53595 } 53596 53597 func multiplexDlOpen(tls *libc.TLS, a uintptr, b uintptr) uintptr { 53598 return (*struct { 53599 f func(*libc.TLS, uintptr, uintptr) uintptr 53600 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlOpen})).f(tls, gMultiplex.FpOrigVfs, b) 53601 } 53602 53603 func multiplexDlError(tls *libc.TLS, a uintptr, b int32, c uintptr) { 53604 (*struct { 53605 f func(*libc.TLS, uintptr, int32, uintptr) 53606 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlError})).f(tls, gMultiplex.FpOrigVfs, b, c) 53607 } 53608 53609 func multiplexDlSym(tls *libc.TLS, a uintptr, b uintptr, c uintptr) uintptr { 53610 return (*struct { 53611 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 53612 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlSym})).f(tls, gMultiplex.FpOrigVfs, b, c) 53613 } 53614 53615 func multiplexDlClose(tls *libc.TLS, a uintptr, b uintptr) { 53616 (*struct { 53617 f func(*libc.TLS, uintptr, uintptr) 53618 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxDlClose})).f(tls, gMultiplex.FpOrigVfs, b) 53619 } 53620 53621 func multiplexRandomness(tls *libc.TLS, a uintptr, b int32, c uintptr) int32 { 53622 return (*struct { 53623 f func(*libc.TLS, uintptr, int32, uintptr) int32 53624 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxRandomness})).f(tls, gMultiplex.FpOrigVfs, b, c) 53625 } 53626 53627 func multiplexSleep(tls *libc.TLS, a uintptr, b int32) int32 { 53628 return (*struct { 53629 f func(*libc.TLS, uintptr, int32) int32 53630 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxSleep})).f(tls, gMultiplex.FpOrigVfs, b) 53631 } 53632 53633 func multiplexCurrentTime(tls *libc.TLS, a uintptr, b uintptr) int32 { 53634 return (*struct { 53635 f func(*libc.TLS, uintptr, uintptr) int32 53636 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxCurrentTime})).f(tls, gMultiplex.FpOrigVfs, b) 53637 } 53638 53639 func multiplexGetLastError(tls *libc.TLS, a uintptr, b int32, c uintptr) int32 { 53640 if (*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxGetLastError != 0 { 53641 return (*struct { 53642 f func(*libc.TLS, uintptr, int32, uintptr) int32 53643 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxGetLastError})).f(tls, gMultiplex.FpOrigVfs, b, c) 53644 } else { 53645 return 0 53646 } 53647 return int32(0) 53648 } 53649 53650 func multiplexCurrentTimeInt64(tls *libc.TLS, a uintptr, b uintptr) int32 { 53651 return (*struct { 53652 f func(*libc.TLS, uintptr, uintptr) int32 53653 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gMultiplex.FpOrigVfs)).FxCurrentTimeInt64})).f(tls, gMultiplex.FpOrigVfs, b) 53654 } 53655 53656 func multiplexClose(tls *libc.TLS, pConn uintptr) int32 { 53657 var p uintptr = pConn 53658 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 53659 var rc int32 = SQLITE_OK 53660 multiplexFreeComponents(tls, pGroup) 53661 sqlite3.Xsqlite3_free(tls, pGroup) 53662 return rc 53663 } 53664 53665 func multiplexRead(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 53666 bp := tls.Alloc(4) 53667 defer tls.Free(4) 53668 53669 var p uintptr = pConn 53670 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 53671 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 53672 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 53673 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 53674 if pSubOpen == uintptr(0) { 53675 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(1)<<8 53676 } else { 53677 *(*int32)(unsafe.Pointer(bp)) = (*struct { 53678 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53679 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 53680 } 53681 } else { 53682 for iAmt > 0 { 53683 var i int32 = int32(iOfst / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 53684 var pSubOpen uintptr 53685 pSubOpen = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 1) 53686 if pSubOpen != 0 { 53687 var extra int32 = int32(uint32(int32(iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk))+iAmt) - (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) 53688 if extra < 0 { 53689 extra = 0 53690 } 53691 iAmt = iAmt - extra 53692 *(*int32)(unsafe.Pointer(bp)) = (*struct { 53693 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53694 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, 53695 iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 53696 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 53697 break 53698 } 53699 pBuf = pBuf + uintptr(iAmt) 53700 iOfst = iOfst + sqlite3_int64(iAmt) 53701 iAmt = extra 53702 } else { 53703 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(1)<<8 53704 break 53705 } 53706 } 53707 } 53708 53709 return *(*int32)(unsafe.Pointer(bp)) 53710 } 53711 53712 func multiplexWrite(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 53713 bp := tls.Alloc(4) 53714 defer tls.Free(4) 53715 53716 var p uintptr = pConn 53717 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 53718 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 53719 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 53720 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 53721 if pSubOpen == uintptr(0) { 53722 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(3)<<8 53723 } else { 53724 *(*int32)(unsafe.Pointer(bp)) = (*struct { 53725 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53726 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 53727 } 53728 } else { 53729 for *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && iAmt > 0 { 53730 var i int32 = int32(iOfst / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 53731 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 1) 53732 if pSubOpen != 0 { 53733 var extra int32 = int32(uint32(int32(iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk))+iAmt) - (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) 53734 if extra < 0 { 53735 extra = 0 53736 } 53737 iAmt = iAmt - extra 53738 *(*int32)(unsafe.Pointer(bp)) = (*struct { 53739 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 53740 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, 53741 iOfst%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 53742 pBuf = pBuf + uintptr(iAmt) 53743 iOfst = iOfst + sqlite3_int64(iAmt) 53744 iAmt = extra 53745 } 53746 } 53747 } 53748 return *(*int32)(unsafe.Pointer(bp)) 53749 } 53750 53751 func multiplexTruncate(tls *libc.TLS, pConn uintptr, size sqlite3_int64) int32 { 53752 bp := tls.Alloc(4) 53753 defer tls.Free(4) 53754 53755 var p uintptr = pConn 53756 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 53757 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 53758 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 53759 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 53760 if pSubOpen == uintptr(0) { 53761 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(6)<<8 53762 } else { 53763 *(*int32)(unsafe.Pointer(bp)) = (*struct { 53764 f func(*libc.TLS, uintptr, sqlite3_int64) int32 53765 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size) 53766 } 53767 } else { 53768 var i int32 53769 var iBaseGroup int32 = int32(size / sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 53770 var pSubOpen uintptr 53771 var pOrigVfs uintptr = gMultiplex.FpOrigVfs 53772 53773 for i = (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal - 1; i > iBaseGroup && *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK; i-- { 53774 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate != 0 { 53775 multiplexSubClose(tls, pGroup, i, pOrigVfs) 53776 } else { 53777 pSubOpen = multiplexSubOpen(tls, pGroup, i, bp, uintptr(0), 0) 53778 if pSubOpen != 0 { 53779 *(*int32)(unsafe.Pointer(bp)) = (*struct { 53780 f func(*libc.TLS, uintptr, sqlite3_int64) int32 53781 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, int64(0)) 53782 } 53783 } 53784 } 53785 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 53786 pSubOpen = multiplexSubOpen(tls, pGroup, iBaseGroup, bp, uintptr(0), 0) 53787 if pSubOpen != 0 { 53788 *(*int32)(unsafe.Pointer(bp)) = (*struct { 53789 f func(*libc.TLS, uintptr, sqlite3_int64) int32 53790 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size%sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 53791 } 53792 } 53793 if *(*int32)(unsafe.Pointer(bp)) != 0 { 53794 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(6)<<8 53795 } 53796 } 53797 return *(*int32)(unsafe.Pointer(bp)) 53798 } 53799 53800 func multiplexSync(tls *libc.TLS, pConn uintptr, flags int32) int32 { 53801 var p uintptr = pConn 53802 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 53803 var rc int32 = SQLITE_OK 53804 var i int32 53805 for i = 0; i < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; i++ { 53806 var pSubOpen uintptr = (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal + uintptr(i)*16)).Fp 53807 if pSubOpen != 0 { 53808 var rc2 int32 = (*struct { 53809 f func(*libc.TLS, uintptr, int32) int32 53810 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSync})).f(tls, pSubOpen, flags) 53811 if rc2 != SQLITE_OK { 53812 rc = rc2 53813 } 53814 } 53815 } 53816 return rc 53817 } 53818 53819 func multiplexFileSize(tls *libc.TLS, pConn uintptr, pSize uintptr) int32 { 53820 bp := tls.Alloc(4) 53821 defer tls.Free(4) 53822 53823 var p uintptr = pConn 53824 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 53825 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 53826 var i int32 53827 if !(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0) { 53828 var pSubOpen uintptr = multiplexSubOpen(tls, pGroup, 0, bp, uintptr(0), 0) 53829 if pSubOpen == uintptr(0) { 53830 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR | int32(7)<<8 53831 } else { 53832 *(*int32)(unsafe.Pointer(bp)) = (*struct { 53833 f func(*libc.TLS, uintptr, uintptr) int32 53834 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, pSize) 53835 } 53836 } else { 53837 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = int64(0) 53838 for i = 0; *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK; i++ { 53839 var sz sqlite3_int64 = multiplexSubSize(tls, pGroup, i, bp) 53840 if sz == int64(0) { 53841 break 53842 } 53843 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = sqlite3_int64(i)*sqlite3_int64((*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk) + sz 53844 } 53845 } 53846 return *(*int32)(unsafe.Pointer(bp)) 53847 } 53848 53849 func multiplexLock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 53850 bp := tls.Alloc(4) 53851 defer tls.Free(4) 53852 53853 var p uintptr = pConn 53854 53855 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 53856 if pSubOpen != 0 { 53857 return (*struct { 53858 f func(*libc.TLS, uintptr, int32) int32 53859 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxLock})).f(tls, pSubOpen, lock) 53860 } 53861 return SQLITE_BUSY 53862 } 53863 53864 func multiplexUnlock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 53865 bp := tls.Alloc(4) 53866 defer tls.Free(4) 53867 53868 var p uintptr = pConn 53869 53870 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 53871 if pSubOpen != 0 { 53872 return (*struct { 53873 f func(*libc.TLS, uintptr, int32) int32 53874 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxUnlock})).f(tls, pSubOpen, lock) 53875 } 53876 return SQLITE_IOERR | int32(8)<<8 53877 } 53878 53879 func multiplexCheckReservedLock(tls *libc.TLS, pConn uintptr, pResOut uintptr) int32 { 53880 bp := tls.Alloc(4) 53881 defer tls.Free(4) 53882 53883 var p uintptr = pConn 53884 53885 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 53886 if pSubOpen != 0 { 53887 return (*struct { 53888 f func(*libc.TLS, uintptr, uintptr) int32 53889 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxCheckReservedLock})).f(tls, pSubOpen, pResOut) 53890 } 53891 return SQLITE_IOERR | int32(14)<<8 53892 } 53893 53894 func multiplexFileControl(tls *libc.TLS, pConn uintptr, op int32, pArg uintptr) int32 { 53895 bp := tls.Alloc(44) 53896 defer tls.Free(44) 53897 53898 var p uintptr = pConn 53899 var pGroup uintptr = (*multiplexConn)(unsafe.Pointer(p)).FpGroup 53900 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_ERROR 53901 var pSubOpen uintptr 53902 53903 if !(gMultiplex.FisInitialized != 0) { 53904 return SQLITE_MISUSE 53905 } 53906 switch op { 53907 case MULTIPLEX_CTRL_ENABLE: 53908 if pArg != 0 { 53909 var bEnabled int32 = *(*int32)(unsafe.Pointer(pArg)) 53910 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled = uint8(bEnabled) 53911 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 53912 } 53913 break 53914 case MULTIPLEX_CTRL_SET_CHUNK_SIZE: 53915 if pArg != 0 { 53916 var szChunk uint32 = *(*uint32)(unsafe.Pointer(pArg)) 53917 if szChunk < uint32(1) { 53918 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_MISUSE 53919 } else { 53920 szChunk = szChunk + uint32(MAX_PAGE_SIZE-1) 53921 szChunk = szChunk & libc.Uint32FromInt32(libc.CplInt32(MAX_PAGE_SIZE-1)) 53922 (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk = szChunk 53923 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 53924 } 53925 } 53926 break 53927 case MULTIPLEX_CTRL_SET_MAX_CHUNKS: 53928 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 53929 break 53930 case SQLITE_FCNTL_SIZE_HINT: 53931 fallthrough 53932 case SQLITE_FCNTL_CHUNK_SIZE: 53933 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 53934 break 53935 case SQLITE_FCNTL_PRAGMA: 53936 { 53937 var aFcntl uintptr = pArg 53938 53939 if *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)) != 0 && sqlite3.Xsqlite3_strnicmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34889, 10) == 0 { 53940 *(*sqlite3_int64)(unsafe.Pointer(bp + 32)) = int64(0) 53941 multiplexFileSize(tls, pConn, bp+32) 53942 53943 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34900) == 0 { 53944 if *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)) != 0 && *(*int8)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(aFcntl + 2*8)))) != 0 { 53945 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+4178) == 0 || 53946 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+29053) == 0 { 53947 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(1) 53948 } else if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+4542) == 0 || 53949 sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 2*8)), ts+14193) == 0 { 53950 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate = uint8(0) 53951 } 53952 } 53953 53954 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, func() uintptr { 53955 if (*multiplexGroup)(unsafe.Pointer(pGroup)).FbTruncate != 0 { 53956 return ts + 4178 53957 } 53958 return ts + 4542 53959 }(), 0) 53960 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 53961 break 53962 } 53963 53964 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34919) == 0 { 53965 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp, libc.Bool32(int32((*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled) != 0))) 53966 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 53967 break 53968 } 53969 53970 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34937) == 0 && 53971 (*multiplexGroup)(unsafe.Pointer(pGroup)).FbEnabled != 0 { 53972 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+17791, libc.VaList(bp+8, (*multiplexGroup)(unsafe.Pointer(pGroup)).FszChunk)) 53973 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 53974 break 53975 } 53976 53977 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(aFcntl + 1*8)), ts+34957) == 0 { 53978 var n int32 = 0 53979 var ii int32 53980 for ii = 0; ii < (*multiplexGroup)(unsafe.Pointer(pGroup)).FnReal; ii++ { 53981 if (*multiplexReal)(unsafe.Pointer((*multiplexGroup)(unsafe.Pointer(pGroup)).FaReal+uintptr(ii)*16)).Fp != uintptr(0) { 53982 n++ 53983 } 53984 } 53985 *(*uintptr)(unsafe.Pointer(aFcntl)) = sqlite3.Xsqlite3_mprintf(tls, ts+1333, libc.VaList(bp+16, n)) 53986 *(*int32)(unsafe.Pointer(bp + 40)) = SQLITE_OK 53987 break 53988 } 53989 } 53990 53991 } 53992 fallthrough 53993 default: 53994 pSubOpen = multiplexSubOpen(tls, pGroup, 0, bp+40, uintptr(0), 0) 53995 if pSubOpen != 0 { 53996 *(*int32)(unsafe.Pointer(bp + 40)) = (*struct { 53997 f func(*libc.TLS, uintptr, int32, uintptr) int32 53998 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileControl})).f(tls, pSubOpen, op, pArg) 53999 if op == SQLITE_FCNTL_VFSNAME && *(*int32)(unsafe.Pointer(bp + 40)) == SQLITE_OK { 54000 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+34977, libc.VaList(bp+24, *(*uintptr)(unsafe.Pointer(pArg)))) 54001 } 54002 } 54003 break 54004 } 54005 return *(*int32)(unsafe.Pointer(bp + 40)) 54006 } 54007 54008 func multiplexSectorSize(tls *libc.TLS, pConn uintptr) int32 { 54009 bp := tls.Alloc(4) 54010 defer tls.Free(4) 54011 54012 var p uintptr = pConn 54013 54014 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 54015 if pSubOpen != 0 && (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize != 0 { 54016 return (*struct { 54017 f func(*libc.TLS, uintptr) int32 54018 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize})).f(tls, pSubOpen) 54019 } 54020 return DEFAULT_SECTOR_SIZE 54021 } 54022 54023 func multiplexDeviceCharacteristics(tls *libc.TLS, pConn uintptr) int32 { 54024 bp := tls.Alloc(4) 54025 defer tls.Free(4) 54026 54027 var p uintptr = pConn 54028 54029 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 54030 if pSubOpen != 0 { 54031 return (*struct { 54032 f func(*libc.TLS, uintptr) int32 54033 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxDeviceCharacteristics})).f(tls, pSubOpen) 54034 } 54035 return 0 54036 } 54037 54038 func multiplexShmMap(tls *libc.TLS, pConn uintptr, iRegion int32, szRegion int32, bExtend int32, pp uintptr) int32 { 54039 bp := tls.Alloc(4) 54040 defer tls.Free(4) 54041 54042 var p uintptr = pConn 54043 54044 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 54045 if pSubOpen != 0 { 54046 return (*struct { 54047 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 54048 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmMap})).f(tls, pSubOpen, iRegion, szRegion, bExtend, pp) 54049 } 54050 return SQLITE_IOERR 54051 } 54052 54053 func multiplexShmLock(tls *libc.TLS, pConn uintptr, ofst int32, n int32, flags int32) int32 { 54054 bp := tls.Alloc(4) 54055 defer tls.Free(4) 54056 54057 var p uintptr = pConn 54058 54059 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 54060 if pSubOpen != 0 { 54061 return (*struct { 54062 f func(*libc.TLS, uintptr, int32, int32, int32) int32 54063 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmLock})).f(tls, pSubOpen, ofst, n, flags) 54064 } 54065 return SQLITE_BUSY 54066 } 54067 54068 func multiplexShmBarrier(tls *libc.TLS, pConn uintptr) { 54069 bp := tls.Alloc(4) 54070 defer tls.Free(4) 54071 54072 var p uintptr = pConn 54073 54074 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 54075 if pSubOpen != 0 { 54076 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmBarrier})).f(tls, pSubOpen) 54077 } 54078 } 54079 54080 func multiplexShmUnmap(tls *libc.TLS, pConn uintptr, deleteFlag int32) int32 { 54081 bp := tls.Alloc(4) 54082 defer tls.Free(4) 54083 54084 var p uintptr = pConn 54085 54086 var pSubOpen uintptr = multiplexSubOpen(tls, (*multiplexConn)(unsafe.Pointer(p)).FpGroup, 0, bp, uintptr(0), 0) 54087 if pSubOpen != 0 { 54088 return (*struct { 54089 f func(*libc.TLS, uintptr, int32) int32 54090 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmUnmap})).f(tls, pSubOpen, deleteFlag) 54091 } 54092 return SQLITE_OK 54093 } 54094 54095 func sqlite3_multiplex_initialize(tls *libc.TLS, zOrigVfsName uintptr, makeDefault int32) int32 { 54096 var pOrigVfs uintptr 54097 if gMultiplex.FisInitialized != 0 { 54098 return SQLITE_MISUSE 54099 } 54100 pOrigVfs = sqlite3.Xsqlite3_vfs_find(tls, zOrigVfsName) 54101 if pOrigVfs == uintptr(0) { 54102 return SQLITE_ERROR 54103 } 54104 54105 gMultiplex.FisInitialized = 1 54106 gMultiplex.FpOrigVfs = pOrigVfs 54107 gMultiplex.FsThisVfs = *(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)) 54108 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&gMultiplex)) + 8 + 4)) += int32(uint64(unsafe.Sizeof(multiplexConn{}))) 54109 gMultiplex.FsThisVfs.FzName = ts + 34990 54110 gMultiplex.FsThisVfs.FxOpen = *(*uintptr)(unsafe.Pointer(&struct { 54111 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 54112 }{multiplexOpen})) 54113 gMultiplex.FsThisVfs.FxDelete = *(*uintptr)(unsafe.Pointer(&struct { 54114 f func(*libc.TLS, uintptr, uintptr, int32) int32 54115 }{multiplexDelete})) 54116 gMultiplex.FsThisVfs.FxAccess = *(*uintptr)(unsafe.Pointer(&struct { 54117 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54118 }{multiplexAccess})) 54119 gMultiplex.FsThisVfs.FxFullPathname = *(*uintptr)(unsafe.Pointer(&struct { 54120 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 54121 }{multiplexFullPathname})) 54122 gMultiplex.FsThisVfs.FxDlOpen = *(*uintptr)(unsafe.Pointer(&struct { 54123 f func(*libc.TLS, uintptr, uintptr) uintptr 54124 }{multiplexDlOpen})) 54125 gMultiplex.FsThisVfs.FxDlError = *(*uintptr)(unsafe.Pointer(&struct { 54126 f func(*libc.TLS, uintptr, int32, uintptr) 54127 }{multiplexDlError})) 54128 gMultiplex.FsThisVfs.FxDlSym = *(*uintptr)(unsafe.Pointer(&struct { 54129 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 54130 }{multiplexDlSym})) 54131 gMultiplex.FsThisVfs.FxDlClose = *(*uintptr)(unsafe.Pointer(&struct { 54132 f func(*libc.TLS, uintptr, uintptr) 54133 }{multiplexDlClose})) 54134 gMultiplex.FsThisVfs.FxRandomness = *(*uintptr)(unsafe.Pointer(&struct { 54135 f func(*libc.TLS, uintptr, int32, uintptr) int32 54136 }{multiplexRandomness})) 54137 gMultiplex.FsThisVfs.FxSleep = *(*uintptr)(unsafe.Pointer(&struct { 54138 f func(*libc.TLS, uintptr, int32) int32 54139 }{multiplexSleep})) 54140 gMultiplex.FsThisVfs.FxCurrentTime = *(*uintptr)(unsafe.Pointer(&struct { 54141 f func(*libc.TLS, uintptr, uintptr) int32 54142 }{multiplexCurrentTime})) 54143 gMultiplex.FsThisVfs.FxGetLastError = *(*uintptr)(unsafe.Pointer(&struct { 54144 f func(*libc.TLS, uintptr, int32, uintptr) int32 54145 }{multiplexGetLastError})) 54146 gMultiplex.FsThisVfs.FxCurrentTimeInt64 = *(*uintptr)(unsafe.Pointer(&struct { 54147 f func(*libc.TLS, uintptr, uintptr) int32 54148 }{multiplexCurrentTimeInt64})) 54149 54150 gMultiplex.FsIoMethodsV1.FiVersion = 1 54151 gMultiplex.FsIoMethodsV1.FxClose = *(*uintptr)(unsafe.Pointer(&struct { 54152 f func(*libc.TLS, uintptr) int32 54153 }{multiplexClose})) 54154 gMultiplex.FsIoMethodsV1.FxRead = *(*uintptr)(unsafe.Pointer(&struct { 54155 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54156 }{multiplexRead})) 54157 gMultiplex.FsIoMethodsV1.FxWrite = *(*uintptr)(unsafe.Pointer(&struct { 54158 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54159 }{multiplexWrite})) 54160 gMultiplex.FsIoMethodsV1.FxTruncate = *(*uintptr)(unsafe.Pointer(&struct { 54161 f func(*libc.TLS, uintptr, sqlite3_int64) int32 54162 }{multiplexTruncate})) 54163 gMultiplex.FsIoMethodsV1.FxSync = *(*uintptr)(unsafe.Pointer(&struct { 54164 f func(*libc.TLS, uintptr, int32) int32 54165 }{multiplexSync})) 54166 gMultiplex.FsIoMethodsV1.FxFileSize = *(*uintptr)(unsafe.Pointer(&struct { 54167 f func(*libc.TLS, uintptr, uintptr) int32 54168 }{multiplexFileSize})) 54169 gMultiplex.FsIoMethodsV1.FxLock = *(*uintptr)(unsafe.Pointer(&struct { 54170 f func(*libc.TLS, uintptr, int32) int32 54171 }{multiplexLock})) 54172 gMultiplex.FsIoMethodsV1.FxUnlock = *(*uintptr)(unsafe.Pointer(&struct { 54173 f func(*libc.TLS, uintptr, int32) int32 54174 }{multiplexUnlock})) 54175 gMultiplex.FsIoMethodsV1.FxCheckReservedLock = *(*uintptr)(unsafe.Pointer(&struct { 54176 f func(*libc.TLS, uintptr, uintptr) int32 54177 }{multiplexCheckReservedLock})) 54178 gMultiplex.FsIoMethodsV1.FxFileControl = *(*uintptr)(unsafe.Pointer(&struct { 54179 f func(*libc.TLS, uintptr, int32, uintptr) int32 54180 }{multiplexFileControl})) 54181 gMultiplex.FsIoMethodsV1.FxSectorSize = *(*uintptr)(unsafe.Pointer(&struct { 54182 f func(*libc.TLS, uintptr) int32 54183 }{multiplexSectorSize})) 54184 gMultiplex.FsIoMethodsV1.FxDeviceCharacteristics = *(*uintptr)(unsafe.Pointer(&struct { 54185 f func(*libc.TLS, uintptr) int32 54186 }{multiplexDeviceCharacteristics})) 54187 gMultiplex.FsIoMethodsV2 = gMultiplex.FsIoMethodsV1 54188 gMultiplex.FsIoMethodsV2.FiVersion = 2 54189 gMultiplex.FsIoMethodsV2.FxShmMap = *(*uintptr)(unsafe.Pointer(&struct { 54190 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 54191 }{multiplexShmMap})) 54192 gMultiplex.FsIoMethodsV2.FxShmLock = *(*uintptr)(unsafe.Pointer(&struct { 54193 f func(*libc.TLS, uintptr, int32, int32, int32) int32 54194 }{multiplexShmLock})) 54195 gMultiplex.FsIoMethodsV2.FxShmBarrier = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{multiplexShmBarrier})) 54196 gMultiplex.FsIoMethodsV2.FxShmUnmap = *(*uintptr)(unsafe.Pointer(&struct { 54197 f func(*libc.TLS, uintptr, int32) int32 54198 }{multiplexShmUnmap})) 54199 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&gMultiplex))+8, makeDefault) 54200 54201 sqlite3.Xsqlite3_auto_extension(tls, *(*uintptr)(unsafe.Pointer(&struct { 54202 f func(*libc.TLS, uintptr, uintptr, uintptr) int32 54203 }{multiplexFuncInit}))) 54204 54205 return SQLITE_OK 54206 } 54207 54208 func sqlite3_multiplex_shutdown(tls *libc.TLS, eForce int32) int32 { 54209 var rc int32 = SQLITE_OK 54210 if gMultiplex.FisInitialized == 0 { 54211 return SQLITE_MISUSE 54212 } 54213 gMultiplex.FisInitialized = 0 54214 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&gMultiplex))+8) 54215 libc.X__builtin___memset_chk(tls, uintptr(unsafe.Pointer(&gMultiplex)), 0, uint64(unsafe.Sizeof(gMultiplex)), libc.X__builtin_object_size(tls, uintptr(unsafe.Pointer(&gMultiplex)), 0)) 54216 return rc 54217 } 54218 54219 func test_multiplex_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54220 bp := tls.Alloc(4) 54221 defer tls.Free(4) 54222 54223 var zName uintptr 54224 54225 var rc int32 54226 54227 _ = clientData 54228 54229 if objc != 3 { 54230 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35000) 54231 return TCL_ERROR 54232 } 54233 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54234 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 54235 return TCL_ERROR 54236 } 54237 if int32(*(*int8)(unsafe.Pointer(zName))) == 0 { 54238 zName = uintptr(0) 54239 } 54240 54241 rc = sqlite3_multiplex_initialize(tls, zName, *(*int32)(unsafe.Pointer(bp))) 54242 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 54243 54244 return TCL_OK 54245 } 54246 54247 func test_multiplex_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54248 var rc int32 54249 54250 _ = clientData 54251 54252 if objc == 2 && libc.Xstrcmp(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), ts+35017) != 0 { 54253 objc = 3 54254 } 54255 if objc != 1 && objc != 2 { 54256 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35024) 54257 return TCL_ERROR 54258 } 54259 54260 rc = sqlite3_multiplex_shutdown(tls, libc.Bool32(objc == 2)) 54261 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 54262 54263 return TCL_OK 54264 } 54265 54266 func test_multiplex_control(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 54267 bp := tls.Alloc(176) 54268 defer tls.Free(176) 54269 54270 var rc int32 54271 54272 var db uintptr 54273 *(*int32)(unsafe.Pointer(bp + 172)) = 0 54274 var pArg uintptr = uintptr(0) 54275 54276 *(*[4]struct { 54277 FzName uintptr 54278 Fop int32 54279 Fargtype int32 54280 })(unsafe.Pointer(bp + 104)) = [4]struct { 54281 FzName uintptr 54282 Fop int32 54283 Fargtype int32 54284 }{ 54285 {FzName: ts + 10145, Fop: MULTIPLEX_CTRL_ENABLE, Fargtype: 1}, 54286 {FzName: ts + 35033, Fop: MULTIPLEX_CTRL_SET_CHUNK_SIZE, Fargtype: 1}, 54287 {FzName: ts + 35044, Fop: MULTIPLEX_CTRL_SET_MAX_CHUNKS, Fargtype: 1}, 54288 {}, 54289 } 54290 54291 if objc != 5 { 54292 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35055) 54293 return TCL_ERROR 54294 } 54295 54296 if 0 == tcl.XTcl_GetCommandInfo(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+40) { 54297 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+35091, 0)) 54298 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), ts+11945, 0)) 54299 return TCL_ERROR 54300 } else { 54301 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 40)).FobjClientData)) 54302 } 54303 54304 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 54305 interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+104, int32(unsafe.Sizeof(struct { 54306 FzName uintptr 54307 Fop int32 54308 Fargtype int32 54309 }{})), ts+2014, 0, bp+168) 54310 if rc != TCL_OK { 54311 return rc 54312 } 54313 54314 switch (*struct { 54315 FzName uintptr 54316 Fop int32 54317 Fargtype int32 54318 })(unsafe.Pointer(bp + 104 + uintptr(*(*int32)(unsafe.Pointer(bp + 168)))*16)).Fargtype { 54319 case 1: 54320 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+172) != 0 { 54321 return TCL_ERROR 54322 } 54323 pArg = bp + 172 54324 break 54325 default: 54326 tcl.XTcl_WrongNumArgs(tls, interp, 4, objv, ts+2523) 54327 return TCL_ERROR 54328 } 54329 54330 rc = sqlite3.Xsqlite3_file_control(tls, db, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), (*struct { 54331 FzName uintptr 54332 Fop int32 54333 Fargtype int32 54334 })(unsafe.Pointer(bp+104+uintptr(*(*int32)(unsafe.Pointer(bp + 168)))*16)).Fop, pArg) 54335 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 54336 if rc == SQLITE_OK { 54337 return TCL_OK 54338 } 54339 return TCL_ERROR 54340 } 54341 54342 func Sqlitemultiplex_Init(tls *libc.TLS, interp uintptr) int32 { 54343 var i int32 54344 54345 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd7))/uint64(unsafe.Sizeof(struct { 54346 FzName uintptr 54347 FxProc uintptr 54348 }{})); i++ { 54349 tcl.XTcl_CreateObjCommand(tls, interp, aCmd7[i].FzName, aCmd7[i].FxProc, uintptr(0), uintptr(0)) 54350 } 54351 54352 return TCL_OK 54353 } 54354 54355 var aCmd7 = [3]struct { 54356 FzName uintptr 54357 FxProc uintptr 54358 }{ 54359 {FzName: ts + 35123, FxProc: 0}, 54360 {FzName: ts + 35152, FxProc: 0}, 54361 {FzName: ts + 35179, FxProc: 0}, 54362 } 54363 54364 type sqlite3_mutex = sqlite3_mutex1 54365 54366 var aName = [15]uintptr{ 54367 ts + 35205, ts + 35210, ts + 35220, ts + 35232, 54368 ts + 35243, ts + 35255, ts + 35267, ts + 35278, 54369 ts + 35290, ts + 35302, ts + 35314, ts + 35326, 54370 ts + 35338, ts + 35350, uintptr(0), 54371 } 54372 54373 type test_mutex_globals = struct { 54374 FisInstalled int32 54375 FdisableInit int32 54376 FdisableTry int32 54377 FisInit int32 54378 Fm sqlite3_mutex_methods 54379 FaCounter [14]int32 54380 FaStatic [12]sqlite3_mutex 54381 } 54382 54383 var g3 = test_mutex_globals{} 54384 54385 func counterMutexHeld(tls *libc.TLS, p uintptr) int32 { 54386 return (*struct { 54387 f func(*libc.TLS, uintptr) int32 54388 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexHeld})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 54389 } 54390 54391 func counterMutexNotheld(tls *libc.TLS, p uintptr) int32 { 54392 return (*struct { 54393 f func(*libc.TLS, uintptr) int32 54394 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexNotheld})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 54395 } 54396 54397 func counterMutexInit(tls *libc.TLS) int32 { 54398 var rc int32 54399 if g3.FdisableInit != 0 { 54400 return g3.FdisableInit 54401 } 54402 rc = (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexInit})).f(tls) 54403 g3.FisInit = 1 54404 return rc 54405 } 54406 54407 func counterMutexEnd(tls *libc.TLS) int32 { 54408 g3.FisInit = 0 54409 return (*struct{ f func(*libc.TLS) int32 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexEnd})).f(tls) 54410 } 54411 54412 func counterMutexAlloc(tls *libc.TLS, eType int32) uintptr { 54413 var pReal uintptr 54414 var pRet uintptr = uintptr(0) 54415 54416 pReal = (*struct { 54417 f func(*libc.TLS, int32) uintptr 54418 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexAlloc})).f(tls, eType) 54419 if !(pReal != 0) { 54420 return uintptr(0) 54421 } 54422 54423 if eType == SQLITE_MUTEX_FAST || eType == SQLITE_MUTEX_RECURSIVE { 54424 pRet = libc.Xmalloc(tls, uint64(unsafe.Sizeof(sqlite3_mutex{}))) 54425 } else { 54426 var eStaticType int32 = eType - (SQLITE_MUTEX_STATIC_VFS3 + 1 - (SQLITE_MUTEX_STATIC_VFS3 + 1 - (SQLITE_MUTEX_RECURSIVE + 1))) 54427 54428 pRet = uintptr(unsafe.Pointer(&g3)) + 144 + uintptr(eStaticType)*16 54429 } 54430 54431 (*sqlite3_mutex)(unsafe.Pointer(pRet)).FeType = eType 54432 (*sqlite3_mutex)(unsafe.Pointer(pRet)).FpReal = pReal 54433 return pRet 54434 } 54435 54436 func counterMutexFree(tls *libc.TLS, p uintptr) { 54437 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexFree})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 54438 if (*sqlite3_mutex)(unsafe.Pointer(p)).FeType == SQLITE_MUTEX_FAST || (*sqlite3_mutex)(unsafe.Pointer(p)).FeType == SQLITE_MUTEX_RECURSIVE { 54439 libc.Xfree(tls, p) 54440 } 54441 } 54442 54443 func counterMutexEnter(tls *libc.TLS, p uintptr) { 54444 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr((*sqlite3_mutex)(unsafe.Pointer(p)).FeType)*4))++ 54445 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexEnter})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 54446 } 54447 54448 func counterMutexTry(tls *libc.TLS, p uintptr) int32 { 54449 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr((*sqlite3_mutex)(unsafe.Pointer(p)).FeType)*4))++ 54450 if g3.FdisableTry != 0 { 54451 return SQLITE_BUSY 54452 } 54453 return (*struct { 54454 f func(*libc.TLS, uintptr) int32 54455 })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexTry})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 54456 } 54457 54458 func counterMutexLeave(tls *libc.TLS, p uintptr) { 54459 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{g3.Fm.FxMutexLeave})).f(tls, (*sqlite3_mutex)(unsafe.Pointer(p)).FpReal) 54460 } 54461 54462 func test_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54463 var rc int32 54464 54465 if objc != 1 { 54466 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 54467 return TCL_ERROR 54468 } 54469 54470 rc = sqlite3.Xsqlite3_shutdown(tls) 54471 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 54472 return TCL_OK 54473 } 54474 54475 func test_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54476 var rc int32 54477 54478 if objc != 1 { 54479 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 54480 return TCL_ERROR 54481 } 54482 54483 rc = sqlite3.Xsqlite3_initialize(tls) 54484 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 54485 return TCL_OK 54486 } 54487 54488 func test_install_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54489 bp := tls.Alloc(136) 54490 defer tls.Free(136) 54491 54492 var rc int32 = SQLITE_OK 54493 54494 *(*sqlite3_mutex_methods)(unsafe.Pointer(bp + 64)) = sqlite3_mutex_methods{ 54495 FxMutexInit: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{counterMutexInit})), 54496 FxMutexEnd: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{counterMutexEnd})), 54497 FxMutexAlloc: *(*uintptr)(unsafe.Pointer(&struct { 54498 f func(*libc.TLS, int32) uintptr 54499 }{counterMutexAlloc})), 54500 FxMutexFree: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexFree})), 54501 FxMutexEnter: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexEnter})), 54502 FxMutexTry: *(*uintptr)(unsafe.Pointer(&struct { 54503 f func(*libc.TLS, uintptr) int32 54504 }{counterMutexTry})), 54505 FxMutexLeave: *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{counterMutexLeave})), 54506 FxMutexHeld: *(*uintptr)(unsafe.Pointer(&struct { 54507 f func(*libc.TLS, uintptr) int32 54508 }{counterMutexHeld})), 54509 FxMutexNotheld: *(*uintptr)(unsafe.Pointer(&struct { 54510 f func(*libc.TLS, uintptr) int32 54511 }{counterMutexNotheld})), 54512 } 54513 54514 if objc != 2 { 54515 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+18324) 54516 return TCL_ERROR 54517 } 54518 if TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+56) { 54519 return TCL_ERROR 54520 } 54521 54522 if *(*int32)(unsafe.Pointer(bp + 56)) == g3.FisInstalled { 54523 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+35362, 0)) 54524 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, func() uintptr { 54525 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 54526 return ts + 35382 54527 } 54528 return ts + 35400 54529 }(), 0)) 54530 return TCL_ERROR 54531 } 54532 54533 if *(*int32)(unsafe.Pointer(bp + 56)) != 0 { 54534 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETMUTEX, libc.VaList(bp+32, uintptr(unsafe.Pointer(&g3))+16)) 54535 if rc == SQLITE_OK { 54536 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+40, bp+64)) 54537 } 54538 g3.FdisableTry = 0 54539 } else { 54540 rc = sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_MUTEX, libc.VaList(bp+48, uintptr(unsafe.Pointer(&g3))+16)) 54541 libc.X__builtin___memset_chk(tls, uintptr(unsafe.Pointer(&g3))+16, 0, uint64(unsafe.Sizeof(sqlite3_mutex_methods{})), libc.X__builtin_object_size(tls, uintptr(unsafe.Pointer(&g3))+16, 0)) 54542 } 54543 54544 if rc == SQLITE_OK { 54545 g3.FisInstalled = *(*int32)(unsafe.Pointer(bp + 56)) 54546 } 54547 54548 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 54549 return TCL_OK 54550 } 54551 54552 func test_read_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54553 var pRet uintptr 54554 var ii int32 54555 54556 if objc != 1 { 54557 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 54558 return TCL_ERROR 54559 } 54560 54561 pRet = tcl.XTcl_NewObj(tls) 54562 (*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount++ 54563 for ii = 0; ii < SQLITE_MUTEX_STATIC_VFS3+1; ii++ { 54564 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewStringObj(tls, aName[ii], -1)) 54565 tcl.XTcl_ListObjAppendElement(tls, interp, pRet, tcl.XTcl_NewIntObj(tls, *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr(ii)*4)))) 54566 } 54567 tcl.XTcl_SetObjResult(tls, interp, pRet) 54568 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 54569 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pRet)).FrefCount, 1) <= 0 { 54570 tcl.XTclFreeObj(tls, pRet) 54571 } 54572 } 54573 54574 return TCL_OK 54575 } 54576 54577 func test_clear_mutex_counters(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54578 var ii int32 54579 54580 if objc != 1 { 54581 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 54582 return TCL_ERROR 54583 } 54584 54585 for ii = 0; ii < SQLITE_MUTEX_STATIC_VFS3+1; ii++ { 54586 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&g3)) + 88 + uintptr(ii)*4)) = 0 54587 } 54588 return TCL_OK 54589 } 54590 54591 func test_alloc_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54592 bp := tls.Alloc(124) 54593 defer tls.Free(124) 54594 54595 var p uintptr = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_FAST) 54596 54597 sqlite3.Xsqlite3_mutex_free(tls, p) 54598 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([100]int8{})), bp+24, ts+9889, libc.VaList(bp, p)) 54599 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+8, bp+24, uintptr(0))) 54600 return TCL_OK 54601 } 54602 54603 func test_config(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54604 bp := tls.Alloc(68) 54605 defer tls.Free(68) 54606 54607 *(*[4]ConfigOption)(unsafe.Pointer(bp)) = [4]ConfigOption{ 54608 {FzName: ts + 35414, FiValue: SQLITE_CONFIG_SINGLETHREAD}, 54609 {FzName: ts + 35427, FiValue: SQLITE_CONFIG_MULTITHREAD}, 54610 {FzName: ts + 35439, FiValue: SQLITE_CONFIG_SERIALIZED}, 54611 {}, 54612 } 54613 var s int32 = int32(unsafe.Sizeof(ConfigOption{})) 54614 54615 var rc int32 54616 54617 if objc != 2 { 54618 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 54619 return TCL_ERROR 54620 } 54621 54622 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, s, ts+17631, 0, bp+64) != 0 { 54623 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+64) != 0 { 54624 return TCL_ERROR 54625 } 54626 } else { 54627 *(*int32)(unsafe.Pointer(bp + 64)) = (*ConfigOption)(unsafe.Pointer(bp + uintptr(*(*int32)(unsafe.Pointer(bp + 64)))*16)).FiValue 54628 } 54629 54630 rc = sqlite3.Xsqlite3_config(tls, *(*int32)(unsafe.Pointer(bp + 64)), 0) 54631 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(1)) 54632 return TCL_OK 54633 } 54634 54635 type ConfigOption = struct { 54636 FzName uintptr 54637 FiValue int32 54638 F__ccgo_pad1 [4]byte 54639 } 54640 54641 func getDbPointer1(tls *libc.TLS, pInterp uintptr, pObj uintptr) uintptr { 54642 bp := tls.Alloc(64) 54643 defer tls.Free(64) 54644 54645 var db uintptr 54646 54647 var zCmd uintptr = tcl.XTcl_GetString(tls, pObj) 54648 if tcl.XTcl_GetCommandInfo(tls, pInterp, zCmd, bp) != 0 { 54649 db = *(*uintptr)(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp)).FobjClientData)) 54650 } else { 54651 db = sqlite3TestTextToPtr(tls, zCmd) 54652 } 54653 54654 return db 54655 } 54656 54657 func getStaticMutexPointer(tls *libc.TLS, pInterp uintptr, pObj uintptr) uintptr { 54658 bp := tls.Alloc(4) 54659 defer tls.Free(4) 54660 54661 if tcl.XTcl_GetIndexFromObj(tls, pInterp, pObj, uintptr(unsafe.Pointer(&aName)), ts+35450, 0, bp) != 0 { 54662 return uintptr(0) 54663 } 54664 54665 return counterMutexAlloc(tls, *(*int32)(unsafe.Pointer(bp))) 54666 } 54667 54668 func test_enter_static_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54669 var pMutex uintptr 54670 if objc != 2 { 54671 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 54672 return TCL_ERROR 54673 } 54674 pMutex = getStaticMutexPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54675 if !(pMutex != 0) { 54676 return TCL_ERROR 54677 } 54678 sqlite3.Xsqlite3_mutex_enter(tls, pMutex) 54679 return TCL_OK 54680 } 54681 54682 func test_leave_static_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54683 var pMutex uintptr 54684 if objc != 2 { 54685 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+9762) 54686 return TCL_ERROR 54687 } 54688 pMutex = getStaticMutexPointer(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54689 if !(pMutex != 0) { 54690 return TCL_ERROR 54691 } 54692 sqlite3.Xsqlite3_mutex_leave(tls, pMutex) 54693 return TCL_OK 54694 } 54695 54696 func test_enter_db_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54697 var db uintptr 54698 if objc != 2 { 54699 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 54700 return TCL_ERROR 54701 } 54702 db = getDbPointer1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54703 if !(db != 0) { 54704 return TCL_ERROR 54705 } 54706 sqlite3.Xsqlite3_mutex_enter(tls, sqlite3.Xsqlite3_db_mutex(tls, db)) 54707 return TCL_OK 54708 } 54709 54710 func test_leave_db_mutex(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 54711 var db uintptr 54712 if objc != 2 { 54713 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 54714 return TCL_ERROR 54715 } 54716 db = getDbPointer1(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 54717 if !(db != 0) { 54718 return TCL_ERROR 54719 } 54720 sqlite3.Xsqlite3_mutex_leave(tls, sqlite3.Xsqlite3_db_mutex(tls, db)) 54721 return TCL_OK 54722 } 54723 54724 func Sqlitetest_mutex_Init(tls *libc.TLS, interp uintptr) int32 { 54725 var i int32 54726 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd8))/uint64(unsafe.Sizeof(struct { 54727 FzName uintptr 54728 FxProc uintptr 54729 }{})); i++ { 54730 tcl.XTcl_CreateObjCommand(tls, interp, aCmd8[i].FzName, aCmd8[i].FxProc, uintptr(0), uintptr(0)) 54731 } 54732 54733 tcl.XTcl_LinkVar(tls, interp, ts+35461, 54734 uintptr(unsafe.Pointer(&g3))+4, TCL_LINK_INT) 54735 tcl.XTcl_LinkVar(tls, interp, ts+35480, 54736 uintptr(unsafe.Pointer(&g3))+8, TCL_LINK_INT) 54737 return SQLITE_OK 54738 } 54739 54740 var aCmd8 = [11]struct { 54741 FzName uintptr 54742 FxProc uintptr 54743 }{ 54744 {FzName: ts + 35498, FxProc: 0}, 54745 {FzName: ts + 35515, FxProc: 0}, 54746 {FzName: ts + 35534, FxProc: 0}, 54747 {FzName: ts + 35549, FxProc: 0}, 54748 {FzName: ts + 35568, FxProc: 0}, 54749 {FzName: ts + 35587, FxProc: 0}, 54750 {FzName: ts + 35602, FxProc: 0}, 54751 {FzName: ts + 35617, FxProc: 0}, 54752 {FzName: ts + 35637, FxProc: 0}, 54753 {FzName: ts + 35660, FxProc: 0}, 54754 {FzName: ts + 35680, FxProc: 0}, 54755 } 54756 54757 type fs_real_file1 = struct { 54758 FpFile uintptr 54759 FzName uintptr 54760 FnDatabase int32 54761 FnJournal int32 54762 FnBlob int32 54763 FnRef int32 54764 FpNext uintptr 54765 FppThis uintptr 54766 } 54767 54768 type fs_real_file = fs_real_file1 54769 54770 type fs_file1 = struct { 54771 Fbase sqlite3_file 54772 FeType int32 54773 F__ccgo_pad1 [4]byte 54774 FpReal uintptr 54775 } 54776 54777 type fs_file = fs_file1 54778 54779 type tmp_file1 = struct { 54780 Fbase sqlite3_file 54781 FnSize int32 54782 FnAlloc int32 54783 FzAlloc uintptr 54784 } 54785 54786 type tmp_file = tmp_file1 54787 54788 type fs_vfs_t1 = struct { 54789 Fbase sqlite3_vfs 54790 FpFileList uintptr 54791 FpParent uintptr 54792 } 54793 54794 type fs_vfs_t = fs_vfs_t1 54795 54796 var fs_vfs = fs_vfs_t{ 54797 Fbase: sqlite3_vfs{ 54798 FiVersion: 1, 54799 FzName: ts + 31238, 54800 FxOpen: 0, 54801 FxDelete: 0, 54802 FxAccess: 0, 54803 FxFullPathname: 0, 54804 FxDlOpen: 0, 54805 FxDlError: 0, 54806 FxDlSym: 0, 54807 FxDlClose: 0, 54808 FxRandomness: 0, 54809 FxSleep: 0, 54810 FxCurrentTime: 0, 54811 }, 54812 } 54813 54814 var fs_io_methods = sqlite3_io_methods{ 54815 FiVersion: 1, 54816 FxClose: 0, 54817 FxRead: 0, 54818 FxWrite: 0, 54819 FxTruncate: 0, 54820 FxSync: 0, 54821 FxFileSize: 0, 54822 FxLock: 0, 54823 FxUnlock: 0, 54824 FxCheckReservedLock: 0, 54825 FxFileControl: 0, 54826 FxSectorSize: 0, 54827 FxDeviceCharacteristics: 0, 54828 } 54829 54830 var tmp_io_methods = sqlite3_io_methods{ 54831 FiVersion: 1, 54832 FxClose: 0, 54833 FxRead: 0, 54834 FxWrite: 0, 54835 FxTruncate: 0, 54836 FxSync: 0, 54837 FxFileSize: 0, 54838 FxLock: 0, 54839 FxUnlock: 0, 54840 FxCheckReservedLock: 0, 54841 FxFileControl: 0, 54842 FxSectorSize: 0, 54843 FxDeviceCharacteristics: 0, 54844 } 54845 54846 func tmpClose(tls *libc.TLS, pFile uintptr) int32 { 54847 var pTmp uintptr = pFile 54848 sqlite3.Xsqlite3_free(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc) 54849 return SQLITE_OK 54850 } 54851 54852 func tmpRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 54853 var pTmp uintptr = pFile 54854 if sqlite_int64(iAmt)+iOfst > sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) { 54855 return SQLITE_IOERR | int32(2)<<8 54856 } 54857 libc.X__builtin___memcpy_chk(tls, zBuf, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), uint64(iAmt), libc.X__builtin_object_size(tls, zBuf, 0)) 54858 return SQLITE_OK 54859 } 54860 54861 func tmpWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 54862 var pTmp uintptr = pFile 54863 if sqlite_int64(iAmt)+iOfst > sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc) { 54864 var nNew int32 = int32(int64(2) * (sqlite_int64(iAmt) + iOfst + sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc))) 54865 var zNew uintptr = sqlite3.Xsqlite3_realloc(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc, nNew) 54866 if !(zNew != 0) { 54867 return SQLITE_NOMEM 54868 } 54869 (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc = zNew 54870 (*tmp_file)(unsafe.Pointer(pTmp)).FnAlloc = nNew 54871 } 54872 libc.X__builtin___memcpy_chk(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), zBuf, uint64(iAmt), libc.X__builtin_object_size(tls, (*tmp_file)(unsafe.Pointer(pTmp)).FzAlloc+uintptr(iOfst), 0)) 54873 (*tmp_file)(unsafe.Pointer(pTmp)).FnSize = func() int32 { 54874 if sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) > iOfst+sqlite_int64(iAmt) { 54875 return (*tmp_file)(unsafe.Pointer(pTmp)).FnSize 54876 } 54877 return int32(iOfst + sqlite_int64(iAmt)) 54878 }() 54879 return SQLITE_OK 54880 } 54881 54882 func tmpTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 54883 var pTmp uintptr = pFile 54884 (*tmp_file)(unsafe.Pointer(pTmp)).FnSize = func() int32 { 54885 if sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) < size { 54886 return (*tmp_file)(unsafe.Pointer(pTmp)).FnSize 54887 } 54888 return int32(size) 54889 }() 54890 return SQLITE_OK 54891 } 54892 54893 func tmpSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 54894 return SQLITE_OK 54895 } 54896 54897 func tmpFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 54898 var pTmp uintptr = pFile 54899 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*tmp_file)(unsafe.Pointer(pTmp)).FnSize) 54900 return SQLITE_OK 54901 } 54902 54903 func tmpLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 54904 return SQLITE_OK 54905 } 54906 54907 func tmpUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 54908 return SQLITE_OK 54909 } 54910 54911 func tmpCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 54912 *(*int32)(unsafe.Pointer(pResOut)) = 0 54913 return SQLITE_OK 54914 } 54915 54916 func tmpFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 54917 return SQLITE_OK 54918 } 54919 54920 func tmpSectorSize(tls *libc.TLS, pFile uintptr) int32 { 54921 return 0 54922 } 54923 54924 func tmpDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 54925 return 0 54926 } 54927 54928 func fsClose1(tls *libc.TLS, pFile uintptr) int32 { 54929 var rc int32 = SQLITE_OK 54930 var p uintptr = pFile 54931 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 54932 54933 (*fs_real_file)(unsafe.Pointer(pReal)).FnRef-- 54934 54935 if (*fs_real_file)(unsafe.Pointer(pReal)).FnRef == 0 { 54936 *(*uintptr)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FppThis)) = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext 54937 if (*fs_real_file)(unsafe.Pointer(pReal)).FpNext != 0 { 54938 (*fs_real_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpNext)).FppThis = (*fs_real_file)(unsafe.Pointer(pReal)).FppThis 54939 } 54940 rc = (*struct { 54941 f func(*libc.TLS, uintptr) int32 54942 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpFile)).FpMethods)).FxClose})).f(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FpFile) 54943 sqlite3.Xsqlite3_free(tls, pReal) 54944 } 54945 54946 return rc 54947 } 54948 54949 func fsRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 54950 var rc int32 = SQLITE_OK 54951 var p uintptr = pFile 54952 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 54953 var pF uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 54954 54955 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE && sqlite_int64(iAmt)+iOfst > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) || 54956 (*fs_file)(unsafe.Pointer(p)).FeType == JOURNAL_FILE && sqlite_int64(iAmt)+iOfst > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) { 54957 rc = SQLITE_IOERR | int32(2)<<8 54958 } else if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 54959 rc = (*struct { 54960 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54961 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxRead})).f(tls, pF, zBuf, iAmt, iOfst+int64(BLOCKSIZE)) 54962 } else { 54963 var iRem int32 = iAmt 54964 var iBuf int32 = 0 54965 var ii int32 = int32(iOfst) 54966 for iRem > 0 && rc == SQLITE_OK { 54967 var iRealOff int32 = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob - BLOCKSIZE*(ii/BLOCKSIZE+1) + ii%BLOCKSIZE 54968 var iRealAmt int32 = func() int32 { 54969 if iRem < BLOCKSIZE-iRealOff%BLOCKSIZE { 54970 return iRem 54971 } 54972 return BLOCKSIZE - iRealOff%BLOCKSIZE 54973 }() 54974 54975 rc = (*struct { 54976 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54977 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxRead})).f(tls, pF, zBuf+uintptr(iBuf), iRealAmt, int64(iRealOff)) 54978 ii = ii + iRealAmt 54979 iBuf = iBuf + iRealAmt 54980 iRem = iRem - iRealAmt 54981 } 54982 } 54983 54984 return rc 54985 } 54986 54987 func fsWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 54988 var rc int32 = SQLITE_OK 54989 var p uintptr = pFile 54990 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 54991 var pF uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 54992 54993 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 54994 if sqlite_int64(iAmt)+iOfst+int64(BLOCKSIZE) > sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnBlob-(*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) { 54995 rc = SQLITE_FULL 54996 } else { 54997 rc = (*struct { 54998 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 54999 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxWrite})).f(tls, pF, zBuf, iAmt, iOfst+int64(BLOCKSIZE)) 55000 if rc == SQLITE_OK { 55001 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = func() int32 { 55002 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) > sqlite_int64(iAmt)+iOfst { 55003 return (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase 55004 } 55005 return int32(sqlite_int64(iAmt) + iOfst) 55006 }() 55007 } 55008 } 55009 } else { 55010 var iRem int32 = iAmt 55011 var iBuf int32 = 0 55012 var ii int32 = int32(iOfst) 55013 for iRem > 0 && rc == SQLITE_OK { 55014 var iRealOff int32 = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob - BLOCKSIZE*(ii/BLOCKSIZE+1) + ii%BLOCKSIZE 55015 var iRealAmt int32 = func() int32 { 55016 if iRem < BLOCKSIZE-iRealOff%BLOCKSIZE { 55017 return iRem 55018 } 55019 return BLOCKSIZE - iRealOff%BLOCKSIZE 55020 }() 55021 55022 if iRealOff < (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase+BLOCKSIZE { 55023 rc = SQLITE_FULL 55024 } else { 55025 rc = (*struct { 55026 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 55027 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxWrite})).f(tls, pF, zBuf+uintptr(iBuf), iRealAmt, int64(iRealOff)) 55028 ii = ii + iRealAmt 55029 iBuf = iBuf + iRealAmt 55030 iRem = iRem - iRealAmt 55031 } 55032 } 55033 if rc == SQLITE_OK { 55034 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = func() int32 { 55035 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) > sqlite_int64(iAmt)+iOfst { 55036 return (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal 55037 } 55038 return int32(sqlite_int64(iAmt) + iOfst) 55039 }() 55040 } 55041 } 55042 55043 return rc 55044 } 55045 55046 func fsTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 55047 var p uintptr = pFile 55048 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 55049 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 55050 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = func() int32 { 55051 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) < size { 55052 return (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase 55053 } 55054 return int32(size) 55055 }() 55056 } else { 55057 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = func() int32 { 55058 if sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) < size { 55059 return (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal 55060 } 55061 return int32(size) 55062 }() 55063 } 55064 return SQLITE_OK 55065 } 55066 55067 func fsSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 55068 bp := tls.Alloc(4) 55069 defer tls.Free(4) 55070 55071 var p uintptr = pFile 55072 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 55073 var pRealFile uintptr = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 55074 var rc int32 = SQLITE_OK 55075 55076 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 55077 *(*uint8)(unsafe.Pointer(bp)) = uint8(uint32((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) & 0xFF000000 >> 24) 55078 *(*uint8)(unsafe.Pointer(bp + 1)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x00FF0000 >> 16) 55079 *(*uint8)(unsafe.Pointer(bp + 2)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x0000FF00 >> 8) 55080 *(*uint8)(unsafe.Pointer(bp + 3)) = uint8((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase & 0x000000FF) 55081 rc = (*struct { 55082 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 55083 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxWrite})).f(tls, pRealFile, bp, 4, int64(0)) 55084 } 55085 if rc == SQLITE_OK { 55086 rc = (*struct { 55087 f func(*libc.TLS, uintptr, int32) int32 55088 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxSync})).f(tls, pRealFile, flags&libc.CplInt32(SQLITE_SYNC_DATAONLY)) 55089 } 55090 55091 return rc 55092 } 55093 55094 func fsFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 55095 var p uintptr = pFile 55096 var pReal uintptr = (*fs_file)(unsafe.Pointer(p)).FpReal 55097 if (*fs_file)(unsafe.Pointer(p)).FeType == DATABASE_FILE { 55098 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase) 55099 } else { 55100 *(*sqlite_int64)(unsafe.Pointer(pSize)) = sqlite_int64((*fs_real_file)(unsafe.Pointer(pReal)).FnJournal) 55101 } 55102 return SQLITE_OK 55103 } 55104 55105 func fsLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 55106 return SQLITE_OK 55107 } 55108 55109 func fsUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 55110 return SQLITE_OK 55111 } 55112 55113 func fsCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 55114 *(*int32)(unsafe.Pointer(pResOut)) = 0 55115 return SQLITE_OK 55116 } 55117 55118 func fsFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 55119 if op == SQLITE_FCNTL_PRAGMA { 55120 return SQLITE_NOTFOUND 55121 } 55122 return SQLITE_OK 55123 } 55124 55125 func fsSectorSize(tls *libc.TLS, pFile uintptr) int32 { 55126 return BLOCKSIZE 55127 } 55128 55129 func fsDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 55130 return 0 55131 } 55132 55133 func fsOpen1(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 55134 bp := tls.Alloc(12) 55135 defer tls.Free(12) 55136 55137 var pFsVfs uintptr 55138 var p uintptr 55139 var pReal uintptr 55140 var eType int32 55141 var nName int32 55142 var rc int32 55143 var p2 uintptr 55144 55145 var real_flags int32 55146 55147 var pRealFile uintptr 55148 var pParent uintptr 55149 pFsVfs = pVfs 55150 p = pFile 55151 pReal = uintptr(0) 55152 rc = SQLITE_OK 55153 55154 if !(0 == flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_MAIN_JOURNAL)) { 55155 goto __1 55156 } 55157 p2 = pFile 55158 libc.X__builtin___memset_chk(tls, p2, 0, uint64(unsafe.Sizeof(tmp_file{})), libc.X__builtin_object_size(tls, p2, 0)) 55159 (*tmp_file)(unsafe.Pointer(p2)).Fbase.FpMethods = uintptr(unsafe.Pointer(&tmp_io_methods)) 55160 return SQLITE_OK 55161 __1: 55162 ; 55163 eType = func() int32 { 55164 if flags&SQLITE_OPEN_MAIN_DB != 0 { 55165 return DATABASE_FILE 55166 } 55167 return JOURNAL_FILE 55168 }() 55169 (*fs_file)(unsafe.Pointer(p)).Fbase.FpMethods = uintptr(unsafe.Pointer(&fs_io_methods)) 55170 (*fs_file)(unsafe.Pointer(p)).FeType = eType 55171 55172 nName = int32(libc.Xstrlen(tls, zName)) - func() int32 { 55173 if eType == JOURNAL_FILE { 55174 return 8 55175 } 55176 return 0 55177 }() 55178 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 55179 __2: 55180 if !(pReal != 0 && libc.Xstrncmp(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FzName, zName, uint64(nName)) != 0) { 55181 goto __4 55182 } 55183 goto __3 55184 __3: 55185 pReal = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext 55186 goto __2 55187 goto __4 55188 __4: 55189 ; 55190 if !!(pReal != 0) { 55191 goto __5 55192 } 55193 real_flags = flags&libc.CplInt32(SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB 55194 pParent = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpParent 55195 55196 pReal = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(fs_real_file{}))+uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile))) 55197 if !!(pReal != 0) { 55198 goto __6 55199 } 55200 rc = SQLITE_NOMEM 55201 goto open_out 55202 __6: 55203 ; 55204 libc.X__builtin___memset_chk(tls, pReal, 0, uint64(unsafe.Sizeof(fs_real_file{}))+uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile), libc.X__builtin_object_size(tls, pReal, 0)) 55205 (*fs_real_file)(unsafe.Pointer(pReal)).FzName = zName 55206 (*fs_real_file)(unsafe.Pointer(pReal)).FpFile = pReal + 1*48 55207 55208 rc = (*struct { 55209 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 55210 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxOpen})).f(tls, pParent, zName, (*fs_real_file)(unsafe.Pointer(pReal)).FpFile, real_flags, pOutFlags) 55211 if !(rc != SQLITE_OK) { 55212 goto __7 55213 } 55214 goto open_out 55215 __7: 55216 ; 55217 pRealFile = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 55218 55219 rc = (*struct { 55220 f func(*libc.TLS, uintptr, uintptr) int32 55221 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxFileSize})).f(tls, pRealFile, bp) 55222 if !(rc != SQLITE_OK) { 55223 goto __8 55224 } 55225 goto open_out 55226 __8: 55227 ; 55228 if !(*(*sqlite3_int64)(unsafe.Pointer(bp)) == int64(0)) { 55229 goto __9 55230 } 55231 rc = (*struct { 55232 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 55233 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxWrite})).f(tls, pRealFile, ts+35701, 1, int64(BLOBSIZE-1)) 55234 (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob = BLOBSIZE 55235 goto __10 55236 __9: 55237 (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob = int32(*(*sqlite3_int64)(unsafe.Pointer(bp))) 55238 rc = (*struct { 55239 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 55240 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxRead})).f(tls, pRealFile, bp+8, 4, int64(0)) 55241 (*fs_real_file)(unsafe.Pointer(pReal)).FnDatabase = int32(*(*uint8)(unsafe.Pointer(bp + 8)))<<24 + int32(*(*uint8)(unsafe.Pointer(bp + 8 + 1)))<<16 + int32(*(*uint8)(unsafe.Pointer(bp + 8 + 2)))<<8 + int32(*(*uint8)(unsafe.Pointer(bp + 8 + 3))) 55242 if !(rc == SQLITE_OK) { 55243 goto __11 55244 } 55245 rc = (*struct { 55246 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 55247 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pRealFile)).FpMethods)).FxRead})).f(tls, pRealFile, bp+8, 4, int64((*fs_real_file)(unsafe.Pointer(pReal)).FnBlob-4)) 55248 if !(*(*uint8)(unsafe.Pointer(bp + 8)) != 0 || *(*uint8)(unsafe.Pointer(bp + 8 + 1)) != 0 || *(*uint8)(unsafe.Pointer(bp + 8 + 2)) != 0 || *(*uint8)(unsafe.Pointer(bp + 8 + 3)) != 0) { 55249 goto __12 55250 } 55251 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = (*fs_real_file)(unsafe.Pointer(pReal)).FnBlob 55252 __12: 55253 ; 55254 __11: 55255 ; 55256 __10: 55257 ; 55258 if !(rc == SQLITE_OK) { 55259 goto __13 55260 } 55261 (*fs_real_file)(unsafe.Pointer(pReal)).FpNext = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 55262 if !((*fs_real_file)(unsafe.Pointer(pReal)).FpNext != 0) { 55263 goto __14 55264 } 55265 (*fs_real_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpNext)).FppThis = pReal + 32 55266 __14: 55267 ; 55268 (*fs_real_file)(unsafe.Pointer(pReal)).FppThis = pFsVfs + 168 55269 (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList = pReal 55270 __13: 55271 ; 55272 __5: 55273 ; 55274 open_out: 55275 if !(pReal != 0) { 55276 goto __15 55277 } 55278 if !(rc == SQLITE_OK) { 55279 goto __16 55280 } 55281 (*fs_file)(unsafe.Pointer(p)).FpReal = pReal 55282 (*fs_real_file)(unsafe.Pointer(pReal)).FnRef++ 55283 goto __17 55284 __16: 55285 if !((*sqlite3_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpFile)).FpMethods != 0) { 55286 goto __18 55287 } 55288 (*struct { 55289 f func(*libc.TLS, uintptr) int32 55290 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*fs_real_file)(unsafe.Pointer(pReal)).FpFile)).FpMethods)).FxClose})).f(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FpFile) 55291 __18: 55292 ; 55293 sqlite3.Xsqlite3_free(tls, pReal) 55294 __17: 55295 ; 55296 __15: 55297 ; 55298 return rc 55299 } 55300 55301 func fsDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 55302 var rc int32 = SQLITE_OK 55303 var pFsVfs uintptr = pVfs 55304 var pReal uintptr 55305 var pF uintptr 55306 var nName int32 = int32(libc.Xstrlen(tls, zPath)) - 8 55307 55308 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 55309 for ; pReal != 0 && libc.Xstrncmp(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FzName, zPath, uint64(nName)) != 0; pReal = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext { 55310 } 55311 if pReal != 0 { 55312 pF = (*fs_real_file)(unsafe.Pointer(pReal)).FpFile 55313 rc = (*struct { 55314 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 55315 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pF)).FpMethods)).FxWrite})).f(tls, pF, ts+35703, 4, int64((*fs_real_file)(unsafe.Pointer(pReal)).FnBlob-BLOCKSIZE)) 55316 if rc == SQLITE_OK { 55317 (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal = 0 55318 } 55319 } 55320 return rc 55321 } 55322 55323 func fsAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 55324 var pFsVfs uintptr = pVfs 55325 var pReal uintptr 55326 var isJournal int32 = 0 55327 var nName int32 = int32(libc.Xstrlen(tls, zPath)) 55328 55329 if flags != SQLITE_ACCESS_EXISTS { 55330 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 55331 return (*struct { 55332 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55333 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxAccess})).f(tls, pParent, zPath, flags, pResOut) 55334 } 55335 55336 if nName > 8 && libc.Xstrcmp(tls, ts+32991, zPath+uintptr(nName-8)) == 0 { 55337 nName = nName - 8 55338 isJournal = 1 55339 } 55340 55341 pReal = (*fs_vfs_t)(unsafe.Pointer(pFsVfs)).FpFileList 55342 for ; pReal != 0 && libc.Xstrncmp(tls, (*fs_real_file)(unsafe.Pointer(pReal)).FzName, zPath, uint64(nName)) != 0; pReal = (*fs_real_file)(unsafe.Pointer(pReal)).FpNext { 55343 } 55344 55345 *(*int32)(unsafe.Pointer(pResOut)) = libc.Bool32(pReal != 0 && (!(isJournal != 0) || (*fs_real_file)(unsafe.Pointer(pReal)).FnJournal > 0)) 55346 return SQLITE_OK 55347 } 55348 55349 func fsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 55350 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 55351 return (*struct { 55352 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55353 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxFullPathname})).f(tls, pParent, zPath, nOut, zOut) 55354 } 55355 55356 func fsDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 55357 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 55358 return (*struct { 55359 f func(*libc.TLS, uintptr, uintptr) uintptr 55360 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlOpen})).f(tls, pParent, zPath) 55361 } 55362 55363 func fsDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 55364 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 55365 (*struct { 55366 f func(*libc.TLS, uintptr, int32, uintptr) 55367 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlError})).f(tls, pParent, nByte, zErrMsg) 55368 } 55369 55370 func fsDlSym(tls *libc.TLS, pVfs uintptr, pH uintptr, zSym uintptr) uintptr { 55371 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 55372 return (*struct { 55373 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 55374 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlSym})).f(tls, pParent, pH, zSym) 55375 } 55376 55377 func fsDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 55378 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 55379 (*struct { 55380 f func(*libc.TLS, uintptr, uintptr) 55381 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDlClose})).f(tls, pParent, pHandle) 55382 } 55383 55384 func fsRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 55385 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 55386 return (*struct { 55387 f func(*libc.TLS, uintptr, int32, uintptr) int32 55388 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxRandomness})).f(tls, pParent, nByte, zBufOut) 55389 } 55390 55391 func fsSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 55392 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 55393 return (*struct { 55394 f func(*libc.TLS, uintptr, int32) int32 55395 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxSleep})).f(tls, pParent, nMicro) 55396 } 55397 55398 func fsCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 55399 var pParent uintptr = (*fs_vfs_t)(unsafe.Pointer(pVfs)).FpParent 55400 return (*struct { 55401 f func(*libc.TLS, uintptr, uintptr) int32 55402 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxCurrentTime})).f(tls, pParent, pTimeOut) 55403 } 55404 55405 func fs_register(tls *libc.TLS) int32 { 55406 if fs_vfs.FpParent != 0 { 55407 return SQLITE_OK 55408 } 55409 fs_vfs.FpParent = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 55410 fs_vfs.Fbase.FmxPathname = (*sqlite3_vfs)(unsafe.Pointer(fs_vfs.FpParent)).FmxPathname 55411 fs_vfs.Fbase.FszOsFile = func() int32 { 55412 if uint64(unsafe.Sizeof(tmp_file{})) > uint64(unsafe.Sizeof(fs_file{})) { 55413 return int32(unsafe.Sizeof(tmp_file{})) 55414 } 55415 return int32(unsafe.Sizeof(fs_file{})) 55416 }() 55417 return sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&fs_vfs)), 0) 55418 } 55419 55420 func SqlitetestOnefile_Init(tls *libc.TLS) int32 { 55421 return fs_register(tls) 55422 } 55423 55424 type VfslogVfs1 = struct { 55425 Fbase sqlite3_vfs 55426 FpVfs uintptr 55427 FiNextFileId int32 55428 F__ccgo_pad1 [4]byte 55429 FpLog uintptr 55430 FiOffset sqlite3_int64 55431 FnBuf int32 55432 FaBuf [8192]int8 55433 F__ccgo_pad2 [4]byte 55434 } 55435 55436 type VfslogVfs = VfslogVfs1 55437 type VfslogFile1 = struct { 55438 Fbase sqlite3_file 55439 FpReal uintptr 55440 FpVfslog uintptr 55441 FiFileId int32 55442 F__ccgo_pad1 [4]byte 55443 } 55444 55445 type VfslogFile = VfslogFile1 55446 55447 var vfslog_vfs = sqlite3_vfs{ 55448 FiVersion: 1, 55449 FszOsFile: int32(unsafe.Sizeof(VfslogFile{})), 55450 FmxPathname: INST_MAX_PATHNAME, 55451 FxOpen: 0, 55452 FxDelete: 0, 55453 FxAccess: 0, 55454 FxFullPathname: 0, 55455 FxDlOpen: 0, 55456 FxDlError: 0, 55457 FxDlSym: 0, 55458 FxDlClose: 0, 55459 FxRandomness: 0, 55460 FxSleep: 0, 55461 FxCurrentTime: 0, 55462 FxGetLastError: 0, 55463 FxCurrentTimeInt64: 0, 55464 } 55465 55466 var vfslog_io_methods = sqlite3_io_methods{ 55467 FiVersion: 2, 55468 FxClose: 0, 55469 FxRead: 0, 55470 FxWrite: 0, 55471 FxTruncate: 0, 55472 FxSync: 0, 55473 FxFileSize: 0, 55474 FxLock: 0, 55475 FxUnlock: 0, 55476 FxCheckReservedLock: 0, 55477 FxFileControl: 0, 55478 FxSectorSize: 0, 55479 FxDeviceCharacteristics: 0, 55480 FxShmMap: 0, 55481 FxShmLock: 0, 55482 FxShmBarrier: 0, 55483 FxShmUnmap: 0, 55484 } 55485 55486 func vfslog_time(tls *libc.TLS) sqlite3_uint64 { 55487 bp := tls.Alloc(16) 55488 defer tls.Free(16) 55489 55490 libc.Xgettimeofday(tls, bp, uintptr(0)) 55491 return sqlite3_uint64((*timeval)(unsafe.Pointer(bp)).Ftv_usec) + sqlite3_uint64((*timeval)(unsafe.Pointer(bp)).Ftv_sec)*uint64(1000000) 55492 } 55493 55494 func vfslogClose(tls *libc.TLS, pFile uintptr) int32 { 55495 var t sqlite3_uint64 55496 var rc int32 = SQLITE_OK 55497 var p uintptr = pFile 55498 55499 t = vfslog_time(tls) 55500 if (*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods != 0 { 55501 rc = (*struct { 55502 f func(*libc.TLS, uintptr) int32 55503 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxClose})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal) 55504 } 55505 t = vfslog_time(tls) - t 55506 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_CLOSE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 55507 return rc 55508 } 55509 55510 func vfslogRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 55511 var rc int32 55512 var t sqlite3_uint64 55513 var p uintptr = pFile 55514 t = vfslog_time(tls) 55515 rc = (*struct { 55516 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 55517 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxRead})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal, zBuf, iAmt, iOfst) 55518 t = vfslog_time(tls) - t 55519 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_READ, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, iAmt, int32(iOfst)) 55520 return rc 55521 } 55522 55523 func vfslogWrite(tls *libc.TLS, pFile uintptr, z uintptr, iAmt int32, iOfst sqlite_int64) int32 { 55524 var rc int32 55525 var t sqlite3_uint64 55526 var p uintptr = pFile 55527 t = vfslog_time(tls) 55528 rc = (*struct { 55529 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 55530 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxWrite})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal, z, iAmt, iOfst) 55531 t = vfslog_time(tls) - t 55532 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_WRITE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, iAmt, int32(iOfst)) 55533 return rc 55534 } 55535 55536 func vfslogTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 55537 var rc int32 55538 var t sqlite3_uint64 55539 var p uintptr = pFile 55540 t = vfslog_time(tls) 55541 rc = (*struct { 55542 f func(*libc.TLS, uintptr, sqlite3_int64) int32 55543 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxTruncate})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal, size) 55544 t = vfslog_time(tls) - t 55545 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_TRUNCATE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, int32(size)) 55546 return rc 55547 } 55548 55549 func vfslogSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 55550 var rc int32 55551 var t sqlite3_uint64 55552 var p uintptr = pFile 55553 t = vfslog_time(tls) 55554 rc = (*struct { 55555 f func(*libc.TLS, uintptr, int32) int32 55556 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxSync})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal, flags) 55557 t = vfslog_time(tls) - t 55558 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SYNC, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, flags, 0) 55559 return rc 55560 } 55561 55562 func vfslogFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 55563 var rc int32 55564 var t sqlite3_uint64 55565 var p uintptr = pFile 55566 t = vfslog_time(tls) 55567 rc = (*struct { 55568 f func(*libc.TLS, uintptr, uintptr) int32 55569 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxFileSize})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal, pSize) 55570 t = vfslog_time(tls) - t 55571 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_FILESIZE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, int32(*(*sqlite_int64)(unsafe.Pointer(pSize)))) 55572 return rc 55573 } 55574 55575 func vfslogLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 55576 var rc int32 55577 var t sqlite3_uint64 55578 var p uintptr = pFile 55579 t = vfslog_time(tls) 55580 rc = (*struct { 55581 f func(*libc.TLS, uintptr, int32) int32 55582 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxLock})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal, eLock) 55583 t = vfslog_time(tls) - t 55584 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_LOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, eLock, 0) 55585 return rc 55586 } 55587 55588 func vfslogUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 55589 var rc int32 55590 var t sqlite3_uint64 55591 var p uintptr = pFile 55592 t = vfslog_time(tls) 55593 rc = (*struct { 55594 f func(*libc.TLS, uintptr, int32) int32 55595 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxUnlock})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal, eLock) 55596 t = vfslog_time(tls) - t 55597 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_UNLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, eLock, 0) 55598 return rc 55599 } 55600 55601 func vfslogCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 55602 var rc int32 55603 var t sqlite3_uint64 55604 var p uintptr = pFile 55605 t = vfslog_time(tls) 55606 rc = (*struct { 55607 f func(*libc.TLS, uintptr, uintptr) int32 55608 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxCheckReservedLock})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal, pResOut) 55609 t = vfslog_time(tls) - t 55610 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_CHECKRESERVEDLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, *(*int32)(unsafe.Pointer(pResOut)), 0) 55611 return rc 55612 } 55613 55614 func vfslogFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 55615 bp := tls.Alloc(8) 55616 defer tls.Free(8) 55617 55618 var p uintptr = pFile 55619 var rc int32 = (*struct { 55620 f func(*libc.TLS, uintptr, int32, uintptr) int32 55621 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxFileControl})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal, op, pArg) 55622 if op == SQLITE_FCNTL_VFSNAME && rc == SQLITE_OK { 55623 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+35708, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(pArg)))) 55624 } 55625 return rc 55626 } 55627 55628 func vfslogSectorSize(tls *libc.TLS, pFile uintptr) int32 { 55629 var rc int32 55630 var t sqlite3_uint64 55631 var p uintptr = pFile 55632 t = vfslog_time(tls) 55633 rc = (*struct { 55634 f func(*libc.TLS, uintptr) int32 55635 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxSectorSize})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal) 55636 t = vfslog_time(tls) - t 55637 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SECTORSIZE, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 55638 return rc 55639 } 55640 55641 func vfslogDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 55642 var rc int32 55643 var t sqlite3_uint64 55644 var p uintptr = pFile 55645 t = vfslog_time(tls) 55646 rc = (*struct { 55647 f func(*libc.TLS, uintptr) int32 55648 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxDeviceCharacteristics})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal) 55649 t = vfslog_time(tls) - t 55650 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_DEVCHAR, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 55651 return rc 55652 } 55653 55654 func vfslogShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 55655 var rc int32 55656 var t sqlite3_uint64 55657 var p uintptr = pFile 55658 t = vfslog_time(tls) 55659 rc = (*struct { 55660 f func(*libc.TLS, uintptr, int32, int32, int32) int32 55661 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxShmLock})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal, ofst, n, flags) 55662 t = vfslog_time(tls) - t 55663 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMLOCK, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 55664 return rc 55665 } 55666 55667 func vfslogShmMap(tls *libc.TLS, pFile uintptr, iRegion int32, szRegion int32, isWrite int32, pp uintptr) int32 { 55668 var rc int32 55669 var t sqlite3_uint64 55670 var p uintptr = pFile 55671 t = vfslog_time(tls) 55672 rc = (*struct { 55673 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 55674 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxShmMap})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal, iRegion, szRegion, isWrite, pp) 55675 t = vfslog_time(tls) - t 55676 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMMAP, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 55677 return rc 55678 } 55679 55680 func vfslogShmBarrier(tls *libc.TLS, pFile uintptr) { 55681 var t sqlite3_uint64 55682 var p uintptr = pFile 55683 t = vfslog_time(tls) 55684 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxShmBarrier})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal) 55685 t = vfslog_time(tls) - t 55686 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMBARRIER, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), SQLITE_OK, 0, 0) 55687 } 55688 55689 func vfslogShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 55690 var rc int32 55691 var t sqlite3_uint64 55692 var p uintptr = pFile 55693 t = vfslog_time(tls) 55694 rc = (*struct { 55695 f func(*libc.TLS, uintptr, int32) int32 55696 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogFile)(unsafe.Pointer(p)).FpReal)).FpMethods)).FxShmUnmap})).f(tls, (*VfslogFile)(unsafe.Pointer(p)).FpReal, deleteFlag) 55697 t = vfslog_time(tls) - t 55698 vfslog_call(tls, (*VfslogFile)(unsafe.Pointer(p)).FpVfslog, OS_SHMUNMAP, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 55699 return rc 55700 } 55701 55702 func vfslogOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 55703 var rc int32 55704 var t sqlite3_uint64 55705 var p uintptr = pFile 55706 var pLog uintptr = pVfs 55707 55708 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = uintptr(unsafe.Pointer(&vfslog_io_methods)) 55709 (*VfslogFile)(unsafe.Pointer(p)).FpReal = p + 1*32 55710 (*VfslogFile)(unsafe.Pointer(p)).FpVfslog = pVfs 55711 (*VfslogFile)(unsafe.Pointer(p)).FiFileId = libc.PreIncInt32(&(*VfslogVfs)(unsafe.Pointer(pLog)).FiNextFileId, 1) 55712 55713 t = vfslog_time(tls) 55714 rc = (*struct { 55715 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 55716 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxOpen})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zName, (*VfslogFile)(unsafe.Pointer(p)).FpReal, flags, pOutFlags) 55717 t = vfslog_time(tls) - t 55718 55719 vfslog_call(tls, pVfs, OS_OPEN, (*VfslogFile)(unsafe.Pointer(p)).FiFileId, int64(t), rc, 0, 0) 55720 vfslog_string(tls, pVfs, zName) 55721 return rc 55722 } 55723 55724 func vfslogDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 55725 var rc int32 55726 var t sqlite3_uint64 55727 t = vfslog_time(tls) 55728 rc = (*struct { 55729 f func(*libc.TLS, uintptr, uintptr, int32) int32 55730 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDelete})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, dirSync) 55731 t = vfslog_time(tls) - t 55732 vfslog_call(tls, pVfs, OS_DELETE, 0, int64(t), rc, dirSync, 0) 55733 vfslog_string(tls, pVfs, zPath) 55734 return rc 55735 } 55736 55737 func vfslogAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 55738 var rc int32 55739 var t sqlite3_uint64 55740 t = vfslog_time(tls) 55741 rc = (*struct { 55742 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55743 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxAccess})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, flags, pResOut) 55744 t = vfslog_time(tls) - t 55745 vfslog_call(tls, pVfs, OS_ACCESS, 0, int64(t), rc, flags, *(*int32)(unsafe.Pointer(pResOut))) 55746 vfslog_string(tls, pVfs, zPath) 55747 return rc 55748 } 55749 55750 func vfslogFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 55751 return (*struct { 55752 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55753 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxFullPathname})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath, nOut, zOut) 55754 } 55755 55756 func vfslogDlOpen(tls *libc.TLS, pVfs uintptr, zPath uintptr) uintptr { 55757 return (*struct { 55758 f func(*libc.TLS, uintptr, uintptr) uintptr 55759 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlOpen})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, zPath) 55760 } 55761 55762 func vfslogDlError(tls *libc.TLS, pVfs uintptr, nByte int32, zErrMsg uintptr) { 55763 (*struct { 55764 f func(*libc.TLS, uintptr, int32, uintptr) 55765 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlError})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nByte, zErrMsg) 55766 } 55767 55768 func vfslogDlSym(tls *libc.TLS, pVfs uintptr, p uintptr, zSym uintptr) uintptr { 55769 return (*struct { 55770 f func(*libc.TLS, uintptr, uintptr, uintptr) uintptr 55771 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlSym})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, p, zSym) 55772 } 55773 55774 func vfslogDlClose(tls *libc.TLS, pVfs uintptr, pHandle uintptr) { 55775 (*struct { 55776 f func(*libc.TLS, uintptr, uintptr) 55777 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxDlClose})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, pHandle) 55778 } 55779 55780 func vfslogRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 55781 return (*struct { 55782 f func(*libc.TLS, uintptr, int32, uintptr) int32 55783 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxRandomness})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nByte, zBufOut) 55784 } 55785 55786 func vfslogSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 55787 return (*struct { 55788 f func(*libc.TLS, uintptr, int32) int32 55789 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxSleep})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, nMicro) 55790 } 55791 55792 func vfslogCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 55793 return (*struct { 55794 f func(*libc.TLS, uintptr, uintptr) int32 55795 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxCurrentTime})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, pTimeOut) 55796 } 55797 55798 func vfslogGetLastError(tls *libc.TLS, pVfs uintptr, a int32, b uintptr) int32 { 55799 return (*struct { 55800 f func(*libc.TLS, uintptr, int32, uintptr) int32 55801 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxGetLastError})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, a, b) 55802 } 55803 55804 func vfslogCurrentTimeInt64(tls *libc.TLS, pVfs uintptr, p uintptr) int32 { 55805 return (*struct { 55806 f func(*libc.TLS, uintptr, uintptr) int32 55807 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs)).FxCurrentTimeInt64})).f(tls, (*VfslogVfs)(unsafe.Pointer(pVfs)).FpVfs, p) 55808 } 55809 55810 func vfslog_flush(tls *libc.TLS, p uintptr) { 55811 var pending int32 = libc.AtomicLoadInt32(&sqlite3.Xsqlite3_io_error_pending) 55812 var persist int32 = sqlite3.Xsqlite3_io_error_persist 55813 var diskfull int32 = sqlite3.Xsqlite3_diskfull_pending 55814 55815 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, int32(0)) 55816 sqlite3.Xsqlite3_io_error_persist = 0 55817 sqlite3.Xsqlite3_diskfull_pending = 0 55818 55819 if (*VfslogVfs)(unsafe.Pointer(p)).FnBuf != 0 { 55820 (*struct { 55821 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 55822 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(p)).FpLog)).FpMethods)).FxWrite})).f(tls, (*VfslogVfs)(unsafe.Pointer(p)).FpLog, p+204, (*VfslogVfs)(unsafe.Pointer(p)).FnBuf, (*VfslogVfs)(unsafe.Pointer(p)).FiOffset) 55823 *(*sqlite3_int64)(unsafe.Pointer(p + 192)) += sqlite3_int64((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 55824 (*VfslogVfs)(unsafe.Pointer(p)).FnBuf = 0 55825 } 55826 55827 libc.AtomicStoreInt32(&sqlite3.Xsqlite3_io_error_pending, pending) 55828 sqlite3.Xsqlite3_io_error_persist = persist 55829 sqlite3.Xsqlite3_diskfull_pending = diskfull 55830 } 55831 55832 func put32bits(tls *libc.TLS, p uintptr, v uint32) { 55833 *(*uint8)(unsafe.Pointer(p)) = uint8(v >> 24) 55834 *(*uint8)(unsafe.Pointer(p + 1)) = uint8(v >> 16) 55835 *(*uint8)(unsafe.Pointer(p + 2)) = uint8(v >> 8) 55836 *(*uint8)(unsafe.Pointer(p + 3)) = uint8(v) 55837 } 55838 55839 func vfslog_call(tls *libc.TLS, pVfs uintptr, eEvent int32, iFileid int32, nClick sqlite3_int64, return_code int32, size int32, offset int32) { 55840 var p uintptr = pVfs 55841 var zRec uintptr 55842 if uint64(24+(*VfslogVfs)(unsafe.Pointer(p)).FnBuf) > uint64(unsafe.Sizeof([8192]int8{})) { 55843 vfslog_flush(tls, p) 55844 } 55845 zRec = p + 204 + uintptr((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 55846 put32bits(tls, zRec, uint32(eEvent)) 55847 put32bits(tls, zRec+4, uint32(iFileid)) 55848 put32bits(tls, zRec+8, uint32(nClick&int64(0xffff))) 55849 put32bits(tls, zRec+12, uint32(return_code)) 55850 put32bits(tls, zRec+16, uint32(size)) 55851 put32bits(tls, zRec+20, uint32(offset)) 55852 *(*int32)(unsafe.Pointer(p + 200)) += 24 55853 } 55854 55855 func vfslog_string(tls *libc.TLS, pVfs uintptr, zStr uintptr) { 55856 var p uintptr = pVfs 55857 var zRec uintptr 55858 var nStr int32 55859 if zStr != 0 { 55860 nStr = int32(libc.Xstrlen(tls, zStr)) 55861 } else { 55862 nStr = 0 55863 } 55864 if uint64(4+nStr+(*VfslogVfs)(unsafe.Pointer(p)).FnBuf) > uint64(unsafe.Sizeof([8192]int8{})) { 55865 vfslog_flush(tls, p) 55866 } 55867 zRec = p + 204 + uintptr((*VfslogVfs)(unsafe.Pointer(p)).FnBuf) 55868 put32bits(tls, zRec, uint32(nStr)) 55869 if zStr != 0 { 55870 libc.X__builtin___memcpy_chk(tls, zRec+4, zStr, uint64(nStr), libc.X__builtin_object_size(tls, zRec+4, 0)) 55871 } 55872 *(*int32)(unsafe.Pointer(p + 200)) += 4 + nStr 55873 } 55874 55875 func vfslog_finalize(tls *libc.TLS, p uintptr) { 55876 if (*sqlite3_file)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(p)).FpLog)).FpMethods != 0 { 55877 vfslog_flush(tls, p) 55878 (*struct { 55879 f func(*libc.TLS, uintptr) int32 55880 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogVfs)(unsafe.Pointer(p)).FpLog)).FpMethods)).FxClose})).f(tls, (*VfslogVfs)(unsafe.Pointer(p)).FpLog) 55881 } 55882 sqlite3.Xsqlite3_free(tls, p) 55883 } 55884 55885 func sqlite3_vfslog_finalize(tls *libc.TLS, zVfs uintptr) int32 { 55886 var pVfs uintptr 55887 pVfs = sqlite3.Xsqlite3_vfs_find(tls, zVfs) 55888 if !(pVfs != 0) || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen != *(*uintptr)(unsafe.Pointer(&struct { 55889 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 55890 }{vfslogOpen})) { 55891 return SQLITE_ERROR 55892 } 55893 sqlite3.Xsqlite3_vfs_unregister(tls, pVfs) 55894 vfslog_finalize(tls, pVfs) 55895 return SQLITE_OK 55896 } 55897 55898 func sqlite3_vfslog_new(tls *libc.TLS, zVfs uintptr, zParentVfs uintptr, zLog uintptr) int32 { 55899 bp := tls.Alloc(4) 55900 defer tls.Free(4) 55901 55902 var p uintptr 55903 var pParent uintptr 55904 var nByte int32 55905 55906 var rc int32 55907 var zFile uintptr 55908 var nVfs int32 55909 55910 pParent = sqlite3.Xsqlite3_vfs_find(tls, zParentVfs) 55911 if !(pParent != 0) { 55912 return SQLITE_ERROR 55913 } 55914 55915 nVfs = int32(libc.Xstrlen(tls, zVfs)) 55916 nByte = int32(uint64(unsafe.Sizeof(VfslogVfs{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile) + uint64(nVfs) + uint64(1) + uint64((*sqlite3_vfs)(unsafe.Pointer(pParent)).FmxPathname) + uint64(1)) 55917 p = sqlite3.Xsqlite3_malloc(tls, nByte) 55918 libc.X__builtin___memset_chk(tls, p, 0, uint64(nByte), libc.X__builtin_object_size(tls, p, 0)) 55919 55920 (*VfslogVfs)(unsafe.Pointer(p)).FpVfs = pParent 55921 (*VfslogVfs)(unsafe.Pointer(p)).FpLog = p + 1*8400 55922 libc.X__builtin___memcpy_chk(tls, p, uintptr(unsafe.Pointer(&vfslog_vfs)), uint64(unsafe.Sizeof(sqlite3_vfs{})), libc.X__builtin_object_size(tls, p, 0)) 55923 (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName = (*VfslogVfs)(unsafe.Pointer(p)).FpLog + uintptr((*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile) 55924 *(*int32)(unsafe.Pointer(p + 4)) += (*sqlite3_vfs)(unsafe.Pointer(pParent)).FszOsFile 55925 libc.X__builtin___memcpy_chk(tls, (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName, zVfs, uint64(nVfs), libc.X__builtin_object_size(tls, (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName, 0)) 55926 55927 zFile = (*VfslogVfs)(unsafe.Pointer(p)).Fbase.FzName + uintptr(nVfs+1) 55928 (*struct { 55929 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 55930 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxFullPathname})).f(tls, pParent, zLog, (*sqlite3_vfs)(unsafe.Pointer(pParent)).FmxPathname, zFile) 55931 55932 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE | SQLITE_OPEN_SUPER_JOURNAL 55933 (*struct { 55934 f func(*libc.TLS, uintptr, uintptr, int32) int32 55935 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxDelete})).f(tls, pParent, zFile, 0) 55936 rc = (*struct { 55937 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 55938 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pParent)).FxOpen})).f(tls, pParent, zFile, (*VfslogVfs)(unsafe.Pointer(p)).FpLog, *(*int32)(unsafe.Pointer(bp)), bp) 55939 if rc == SQLITE_OK { 55940 libc.X__builtin___memcpy_chk(tls, p+204, ts+35718, uint64(20), libc.X__builtin_object_size(tls, p+204, 0)) 55941 (*VfslogVfs)(unsafe.Pointer(p)).FiOffset = int64(0) 55942 (*VfslogVfs)(unsafe.Pointer(p)).FnBuf = 20 55943 rc = sqlite3.Xsqlite3_vfs_register(tls, p, 1) 55944 } 55945 if rc != 0 { 55946 vfslog_finalize(tls, p) 55947 } 55948 return rc 55949 } 55950 55951 func sqlite3_vfslog_annotate(tls *libc.TLS, zVfs uintptr, zMsg uintptr) int32 { 55952 var pVfs uintptr 55953 pVfs = sqlite3.Xsqlite3_vfs_find(tls, zVfs) 55954 if !(pVfs != 0) || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen != *(*uintptr)(unsafe.Pointer(&struct { 55955 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 55956 }{vfslogOpen})) { 55957 return SQLITE_ERROR 55958 } 55959 vfslog_call(tls, pVfs, OS_ANNOTATE, 0, int64(0), 0, 0, 0) 55960 vfslog_string(tls, pVfs, zMsg) 55961 return SQLITE_OK 55962 } 55963 55964 func vfslog_eventname(tls *libc.TLS, eEvent int32) uintptr { 55965 var zEvent uintptr = uintptr(0) 55966 55967 switch eEvent { 55968 case OS_CLOSE: 55969 zEvent = ts + 35739 55970 break 55971 case OS_READ: 55972 zEvent = ts + 35746 55973 break 55974 case OS_WRITE: 55975 zEvent = ts + 35752 55976 break 55977 case OS_TRUNCATE: 55978 zEvent = ts + 35759 55979 break 55980 case OS_SYNC: 55981 zEvent = ts + 27947 55982 break 55983 case OS_FILESIZE: 55984 zEvent = ts + 35769 55985 break 55986 case OS_LOCK: 55987 zEvent = ts + 35779 55988 break 55989 case OS_UNLOCK: 55990 zEvent = ts + 35785 55991 break 55992 case OS_CHECKRESERVEDLOCK: 55993 zEvent = ts + 35793 55994 break 55995 case OS_FILECONTROL: 55996 zEvent = ts + 35807 55997 break 55998 case OS_SECTORSIZE: 55999 zEvent = ts + 35820 56000 break 56001 case OS_DEVCHAR: 56002 zEvent = ts + 35832 56003 break 56004 case OS_OPEN: 56005 zEvent = ts + 27525 56006 break 56007 case OS_DELETE: 56008 zEvent = ts + 35844 56009 break 56010 case OS_ACCESS: 56011 zEvent = ts + 35852 56012 break 56013 case OS_FULLPATHNAME: 56014 zEvent = ts + 35860 56015 break 56016 case OS_RANDOMNESS: 56017 zEvent = ts + 35874 56018 break 56019 case OS_SLEEP: 56020 zEvent = ts + 35886 56021 break 56022 case OS_CURRENTTIME: 56023 zEvent = ts + 35893 56024 break 56025 56026 case OS_SHMUNMAP: 56027 zEvent = ts + 35906 56028 break 56029 case OS_SHMLOCK: 56030 zEvent = ts + 35916 56031 break 56032 case OS_SHMBARRIER: 56033 zEvent = ts + 35925 56034 break 56035 case OS_SHMMAP: 56036 zEvent = ts + 35937 56037 break 56038 56039 case OS_ANNOTATE: 56040 zEvent = ts + 35945 56041 break 56042 } 56043 56044 return zEvent 56045 } 56046 56047 type VfslogVtab1 = struct { 56048 Fbase sqlite3_vtab 56049 FpFd uintptr 56050 FnByte sqlite3_int64 56051 FzFile uintptr 56052 } 56053 56054 type VfslogVtab = VfslogVtab1 56055 type VfslogCsr1 = struct { 56056 Fbase sqlite3_vtab_cursor 56057 FiRowid sqlite3_int64 56058 FiOffset sqlite3_int64 56059 FzTransient uintptr 56060 FnFile int32 56061 F__ccgo_pad1 [4]byte 56062 FazFile uintptr 56063 FaBuf [1024]uint8 56064 } 56065 56066 type VfslogCsr = VfslogCsr1 56067 56068 func get32bits(tls *libc.TLS, p uintptr) uint32 { 56069 return uint32(int32(*(*uint8)(unsafe.Pointer(p)))<<24 + int32(*(*uint8)(unsafe.Pointer(p + 1)))<<16 + int32(*(*uint8)(unsafe.Pointer(p + 2)))<<8 + int32(*(*uint8)(unsafe.Pointer(p + 3)))) 56070 } 56071 56072 func dequote(tls *libc.TLS, z uintptr) { 56073 var quote int8 56074 quote = *(*int8)(unsafe.Pointer(z)) 56075 if int32(quote) == '[' || int32(quote) == '\'' || int32(quote) == '"' || int32(quote) == '`' { 56076 var iIn int32 = 1 56077 var iOut int32 = 0 56078 if int32(quote) == '[' { 56079 quote = int8(']') 56080 } 56081 for *(*int8)(unsafe.Pointer(z + uintptr(iIn))) != 0 { 56082 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn)))) == int32(quote) { 56083 if int32(*(*int8)(unsafe.Pointer(z + uintptr(iIn+1)))) != int32(quote) { 56084 break 56085 } 56086 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = quote 56087 iIn = iIn + 2 56088 } else { 56089 *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iOut, 1)))) = *(*int8)(unsafe.Pointer(z + uintptr(libc.PostIncInt32(&iIn, 1)))) 56090 } 56091 } 56092 *(*int8)(unsafe.Pointer(z + uintptr(iOut))) = int8(0) 56093 } 56094 } 56095 56096 func vlogConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 56097 bp := tls.Alloc(12) 56098 defer tls.Free(12) 56099 56100 var pVfs uintptr 56101 56102 var p uintptr 56103 var rc int32 56104 var nByte int32 56105 var zFile uintptr 56106 56107 *(*uintptr)(unsafe.Pointer(ppVtab)) = uintptr(0) 56108 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 56109 nByte = int32(uint64(unsafe.Sizeof(VfslogVtab{})) + uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile) + uint64((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname)) 56110 p = sqlite3.Xsqlite3_malloc(tls, nByte) 56111 if p == uintptr(0) { 56112 return SQLITE_NOMEM 56113 } 56114 libc.X__builtin___memset_chk(tls, p, 0, uint64(nByte), libc.X__builtin_object_size(tls, p, 0)) 56115 56116 (*VfslogVtab)(unsafe.Pointer(p)).FpFd = p + 1*48 56117 (*VfslogVtab)(unsafe.Pointer(p)).FzFile = (*VfslogVtab)(unsafe.Pointer(p)).FpFd + uintptr((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile) 56118 56119 zFile = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(argv + 3*8)))) 56120 if !(zFile != 0) { 56121 sqlite3.Xsqlite3_free(tls, p) 56122 return SQLITE_NOMEM 56123 } 56124 dequote(tls, zFile) 56125 (*struct { 56126 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56127 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxFullPathname})).f(tls, pVfs, zFile, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname, (*VfslogVtab)(unsafe.Pointer(p)).FzFile) 56128 sqlite3.Xsqlite3_free(tls, zFile) 56129 56130 *(*int32)(unsafe.Pointer(bp + 8)) = SQLITE_OPEN_READWRITE | SQLITE_OPEN_SUPER_JOURNAL 56131 rc = (*struct { 56132 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 56133 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxOpen})).f(tls, pVfs, (*VfslogVtab)(unsafe.Pointer(p)).FzFile, (*VfslogVtab)(unsafe.Pointer(p)).FpFd, *(*int32)(unsafe.Pointer(bp + 8)), bp+8) 56134 56135 if rc == SQLITE_OK { 56136 (*struct { 56137 f func(*libc.TLS, uintptr, uintptr) int32 56138 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods)).FxFileSize})).f(tls, (*VfslogVtab)(unsafe.Pointer(p)).FpFd, p+32) 56139 sqlite3.Xsqlite3_declare_vtab(tls, db, 56140 ts+35956) 56141 *(*uintptr)(unsafe.Pointer(ppVtab)) = p 56142 } else { 56143 sqlite3.Xsqlite3_free(tls, p) 56144 } 56145 56146 return rc 56147 } 56148 56149 func vlogBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 56150 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FestimatedCost = 10.0 56151 return SQLITE_OK 56152 } 56153 56154 func vlogDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 56155 var p uintptr = pVtab 56156 if (*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods != 0 { 56157 (*struct { 56158 f func(*libc.TLS, uintptr) int32 56159 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods)).FxClose})).f(tls, (*VfslogVtab)(unsafe.Pointer(p)).FpFd) 56160 (*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods = uintptr(0) 56161 } 56162 sqlite3.Xsqlite3_free(tls, p) 56163 return SQLITE_OK 56164 } 56165 56166 func vlogOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 56167 var pCsr uintptr 56168 56169 pCsr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(VfslogCsr{}))) 56170 if !(pCsr != 0) { 56171 return SQLITE_NOMEM 56172 } 56173 libc.X__builtin___memset_chk(tls, pCsr, 0, uint64(unsafe.Sizeof(VfslogCsr{})), libc.X__builtin_object_size(tls, pCsr, 0)) 56174 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCsr 56175 return SQLITE_OK 56176 } 56177 56178 func vlogClose(tls *libc.TLS, pCursor uintptr) int32 { 56179 var p uintptr = pCursor 56180 var i int32 56181 for i = 0; i < (*VfslogCsr)(unsafe.Pointer(p)).FnFile; i++ { 56182 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(p)).FazFile + uintptr(i)*8))) 56183 } 56184 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(p)).FazFile) 56185 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(p)).FzTransient) 56186 sqlite3.Xsqlite3_free(tls, p) 56187 return SQLITE_OK 56188 } 56189 56190 func vlogNext(tls *libc.TLS, pCursor uintptr) int32 { 56191 bp := tls.Alloc(4) 56192 defer tls.Free(4) 56193 56194 var pCsr uintptr = pCursor 56195 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 56196 var rc int32 = SQLITE_OK 56197 var nRead int32 56198 56199 sqlite3.Xsqlite3_free(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient) 56200 (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient = uintptr(0) 56201 56202 nRead = 24 56203 if (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset+sqlite3_int64(nRead) <= (*VfslogVtab)(unsafe.Pointer(p)).FnByte { 56204 var eEvent int32 56205 rc = (*struct { 56206 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 56207 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods)).FxRead})).f(tls, (*VfslogVtab)(unsafe.Pointer(p)).FpFd, pCsr+48, nRead, (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset) 56208 56209 eEvent = int32(get32bits(tls, pCsr+48)) 56210 if rc == SQLITE_OK && 56211 (eEvent == OS_OPEN || eEvent == OS_DELETE || eEvent == OS_ACCESS) { 56212 rc = (*struct { 56213 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 56214 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods)).FxRead})).f(tls, (*VfslogVtab)(unsafe.Pointer(p)).FpFd, bp, 4, (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset+sqlite3_int64(nRead)) 56215 nRead = nRead + 4 56216 if rc == SQLITE_OK { 56217 var nStr int32 = int32(get32bits(tls, bp)) 56218 var zStr uintptr = sqlite3.Xsqlite3_malloc(tls, nStr+1) 56219 rc = (*struct { 56220 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 56221 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*VfslogVtab)(unsafe.Pointer(p)).FpFd)).FpMethods)).FxRead})).f(tls, (*VfslogVtab)(unsafe.Pointer(p)).FpFd, zStr, nStr, (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset+sqlite3_int64(nRead)) 56222 *(*int8)(unsafe.Pointer(zStr + uintptr(nStr))) = int8(0) 56223 nRead = nRead + nStr 56224 56225 if eEvent == OS_OPEN { 56226 var iFileid int32 = int32(get32bits(tls, pCsr+48+4)) 56227 if iFileid >= (*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile { 56228 var nNew int32 = int32(uint64(unsafe.Sizeof(uintptr(0))) * uint64(iFileid+1)) 56229 (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile = sqlite3.Xsqlite3_realloc(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile, nNew) 56230 nNew = int32(uint64(nNew) - uint64(unsafe.Sizeof(uintptr(0)))*uint64((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)) 56231 libc.X__builtin___memset_chk(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile+uintptr((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)*8, 0, uint64(nNew), libc.X__builtin_object_size(tls, (*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile+uintptr((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile)*8, 0)) 56232 (*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile = iFileid + 1 56233 } 56234 sqlite3.Xsqlite3_free(tls, *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(iFileid)*8))) 56235 *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(iFileid)*8)) = zStr 56236 } else { 56237 (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient = zStr 56238 } 56239 } 56240 } 56241 } 56242 56243 *(*sqlite3_int64)(unsafe.Pointer(pCsr + 8)) += int64(1) 56244 *(*sqlite3_int64)(unsafe.Pointer(pCsr + 16)) += sqlite3_int64(nRead) 56245 return rc 56246 } 56247 56248 func vlogEof(tls *libc.TLS, pCursor uintptr) int32 { 56249 var pCsr uintptr = pCursor 56250 var p uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pCursor)).FpVtab 56251 return libc.Bool32((*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset >= (*VfslogVtab)(unsafe.Pointer(p)).FnByte) 56252 } 56253 56254 func vlogFilter(tls *libc.TLS, pCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 56255 var pCsr uintptr = pCursor 56256 (*VfslogCsr)(unsafe.Pointer(pCsr)).FiRowid = int64(0) 56257 (*VfslogCsr)(unsafe.Pointer(pCsr)).FiOffset = int64(20) 56258 return vlogNext(tls, pCursor) 56259 } 56260 56261 func vlogColumn(tls *libc.TLS, pCursor uintptr, ctx uintptr, i int32) int32 { 56262 var val uint32 56263 var pCsr uintptr = pCursor 56264 56265 val = get32bits(tls, pCsr+48+uintptr(4*i)) 56266 56267 switch i { 56268 case 0: 56269 { 56270 sqlite3.Xsqlite3_result_text(tls, ctx, vfslog_eventname(tls, int32(val)), -1, uintptr(0)) 56271 break 56272 56273 } 56274 case 1: 56275 { 56276 var zStr uintptr = (*VfslogCsr)(unsafe.Pointer(pCsr)).FzTransient 56277 if val != uint32(0) && val < uint32((*VfslogCsr)(unsafe.Pointer(pCsr)).FnFile) { 56278 zStr = *(*uintptr)(unsafe.Pointer((*VfslogCsr)(unsafe.Pointer(pCsr)).FazFile + uintptr(val)*8)) 56279 } 56280 sqlite3.Xsqlite3_result_text(tls, ctx, zStr, -1, libc.UintptrFromInt32(-1)) 56281 break 56282 56283 } 56284 default: 56285 sqlite3.Xsqlite3_result_int(tls, ctx, int32(val)) 56286 break 56287 } 56288 56289 return SQLITE_OK 56290 } 56291 56292 func vlogRowid(tls *libc.TLS, pCursor uintptr, pRowid uintptr) int32 { 56293 var pCsr uintptr = pCursor 56294 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = (*VfslogCsr)(unsafe.Pointer(pCsr)).FiRowid 56295 return SQLITE_OK 56296 } 56297 56298 func sqlite3_vfslog_register(tls *libc.TLS, db uintptr) int32 { 56299 sqlite3.Xsqlite3_create_module(tls, db, ts+36011, uintptr(unsafe.Pointer(&vfslog_module)), uintptr(0)) 56300 return SQLITE_OK 56301 } 56302 56303 var vfslog_module = sqlite3_module{ 56304 FxCreate: 0, 56305 FxConnect: 0, 56306 FxBestIndex: 0, 56307 FxDisconnect: 0, 56308 FxDestroy: 0, 56309 FxOpen: 0, 56310 FxClose: 0, 56311 FxFilter: 0, 56312 FxNext: 0, 56313 FxEof: 0, 56314 FxColumn: 0, 56315 FxRowid: 0, 56316 } 56317 56318 func test_vfslog(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 56319 bp := tls.Alloc(144) 56320 defer tls.Free(144) 56321 56322 var db uintptr 56323 56324 var rc int32 = SQLITE_ERROR 56325 56326 if objc < 2 { 56327 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33165) 56328 return TCL_ERROR 56329 } 56330 if tcl.XTcl_GetIndexFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), uintptr(unsafe.Pointer(&strs)), ts+2014, 0, bp+72) != 0 { 56331 return TCL_ERROR 56332 } 56333 56334 switch uint32(*(*int32)(unsafe.Pointer(bp + 72))) { 56335 case uint32(0): 56336 { 56337 var zVfs uintptr 56338 var zMsg uintptr 56339 if objc != 4 { 56340 tcl.XTcl_WrongNumArgs(tls, interp, 3, objv, ts+36018) 56341 return TCL_ERROR 56342 } 56343 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 56344 zMsg = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 56345 rc = sqlite3_vfslog_annotate(tls, zVfs, zMsg) 56346 if rc != SQLITE_OK { 56347 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+36022, 0)) 56348 return TCL_ERROR 56349 } 56350 break 56351 56352 } 56353 case uint32(1): 56354 { 56355 var zVfs uintptr 56356 if objc != 3 { 56357 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+36018) 56358 return TCL_ERROR 56359 } 56360 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 56361 rc = sqlite3_vfslog_finalize(tls, zVfs) 56362 if rc != SQLITE_OK { 56363 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+16, ts+36022, 0)) 56364 return TCL_ERROR 56365 } 56366 break 56367 56368 } 56369 56370 case uint32(2): 56371 { 56372 var zVfs uintptr 56373 var zParent uintptr 56374 var zLog uintptr 56375 if objc != 5 { 56376 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+36029) 56377 return TCL_ERROR 56378 } 56379 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 56380 zParent = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 56381 zLog = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 56382 if int32(*(*int8)(unsafe.Pointer(zParent))) == 0 { 56383 zParent = uintptr(0) 56384 } 56385 rc = sqlite3_vfslog_new(tls, zVfs, zParent, zLog) 56386 if rc != SQLITE_OK { 56387 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+32, ts+36022, 0)) 56388 return TCL_ERROR 56389 } 56390 break 56391 56392 } 56393 56394 case uint32(3): 56395 { 56396 var zDb uintptr 56397 if objc != 3 { 56398 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+2050) 56399 return TCL_ERROR 56400 } 56401 zDb = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 56402 if tcl.XTcl_GetCommandInfo(tls, interp, zDb, bp+80) != 0 { 56403 db = (*struct{ Fdb uintptr })(unsafe.Pointer((*Tcl_CmdInfo)(unsafe.Pointer(bp + 80)).FobjClientData)).Fdb 56404 rc = sqlite3_vfslog_register(tls, db) 56405 } 56406 if rc != SQLITE_OK { 56407 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+36048, zDb, uintptr(0))) 56408 return TCL_ERROR 56409 } 56410 break 56411 56412 } 56413 } 56414 56415 return TCL_OK 56416 } 56417 56418 var strs = [5]uintptr{ts + 36069, ts + 36078, ts + 14009, ts + 36087, uintptr(0)} 56419 56420 func SqlitetestOsinst_Init(tls *libc.TLS, interp uintptr) int32 { 56421 tcl.XTcl_CreateObjCommand(tls, interp, ts+36011, *(*uintptr)(unsafe.Pointer(&struct { 56422 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 56423 }{test_vfslog})), uintptr(0), uintptr(0)) 56424 return TCL_OK 56425 } 56426 56427 type testpcacheGlobalType1 = struct { 56428 FpDummy uintptr 56429 FnInstance int32 56430 FdiscardChance uint32 56431 FprngSeed uint32 56432 FhighStress uint32 56433 } 56434 56435 type testpcacheGlobalType = testpcacheGlobalType1 56436 56437 var testpcacheGlobal testpcacheGlobalType 56438 56439 func testpcacheInit(tls *libc.TLS, pArg uintptr) int32 { 56440 testpcacheGlobal.FpDummy = sqlite3.Xsqlite3_malloc(tls, 10) 56441 if testpcacheGlobal.FpDummy == uintptr(0) { 56442 return SQLITE_NOMEM 56443 } 56444 return SQLITE_OK 56445 } 56446 56447 func testpcacheShutdown(tls *libc.TLS, pArg uintptr) { 56448 sqlite3.Xsqlite3_free(tls, testpcacheGlobal.FpDummy) 56449 testpcacheGlobal.FpDummy = uintptr(0) 56450 } 56451 56452 type testpcache1 = struct { 56453 FszPage int32 56454 FszExtra int32 56455 FbPurgeable int32 56456 FnFree int32 56457 FnPinned int32 56458 FiRand uint32 56459 FiMagic uint32 56460 F__ccgo_pad1 [4]byte 56461 Fa [217]struct { 56462 Fpage sqlite3_pcache_page 56463 Fkey uint32 56464 FisPinned int32 56465 } 56466 } 56467 56468 type testpcache = testpcache1 56469 type testpcachePage = struct { 56470 Fpage sqlite3_pcache_page 56471 Fkey uint32 56472 FisPinned int32 56473 } 56474 56475 func testpcacheRandom(tls *libc.TLS, p uintptr) uint32 { 56476 var x uint32 = uint32(0) 56477 var i int32 56478 for i = 0; i < 4; i++ { 56479 (*testpcache)(unsafe.Pointer(p)).FiRand = (*testpcache)(unsafe.Pointer(p)).FiRand*uint32(69069) + uint32(5) 56480 x = x<<8 | (*testpcache)(unsafe.Pointer(p)).FiRand>>16&uint32(0xff) 56481 } 56482 return x 56483 } 56484 56485 func testpcacheCreate(tls *libc.TLS, szPage int32, szExtra int32, bPurgeable int32) uintptr { 56486 var nMem int32 56487 var x uintptr 56488 var p uintptr 56489 var i int32 56490 56491 szPage = (szPage + 7) & libc.CplInt32(7) 56492 nMem = int32(uint64(unsafe.Sizeof(testpcache{})) + uint64(TESTPCACHE_NPAGE*(szPage+szExtra))) 56493 p = sqlite3.Xsqlite3_malloc(tls, nMem) 56494 if p == uintptr(0) { 56495 return uintptr(0) 56496 } 56497 x = p + 1*5240 56498 (*testpcache)(unsafe.Pointer(p)).FszPage = szPage 56499 (*testpcache)(unsafe.Pointer(p)).FszExtra = szExtra 56500 (*testpcache)(unsafe.Pointer(p)).FnFree = TESTPCACHE_NPAGE 56501 (*testpcache)(unsafe.Pointer(p)).FnPinned = 0 56502 (*testpcache)(unsafe.Pointer(p)).FiRand = testpcacheGlobal.FprngSeed 56503 (*testpcache)(unsafe.Pointer(p)).FbPurgeable = bPurgeable 56504 (*testpcache)(unsafe.Pointer(p)).FiMagic = uint32(TESTPCACHE_VALID) 56505 i = 0 56506 __1: 56507 if !(i < TESTPCACHE_NPAGE) { 56508 goto __3 56509 } 56510 { 56511 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 56512 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 0 56513 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fpage.FpBuf = x 56514 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fpage.FpExtra = x + uintptr(szPage) 56515 56516 } 56517 goto __2 56518 __2: 56519 i++ 56520 x += uintptr(szPage + szExtra) 56521 goto __1 56522 goto __3 56523 __3: 56524 ; 56525 testpcacheGlobal.FnInstance++ 56526 return p 56527 } 56528 56529 func testpcacheCachesize(tls *libc.TLS, pCache uintptr, newSize int32) { 56530 var p uintptr = pCache 56531 _ = p 56532 56533 } 56534 56535 func testpcachePagecount(tls *libc.TLS, pCache uintptr) int32 { 56536 var p uintptr = pCache 56537 56538 return TESTPCACHE_NPAGE - (*testpcache)(unsafe.Pointer(p)).FnFree 56539 } 56540 56541 func testpcacheFetch(tls *libc.TLS, pCache uintptr, key uint32, createFlag int32) uintptr { 56542 var p uintptr = pCache 56543 var i int32 56544 var j int32 56545 56546 for i = 0; i < TESTPCACHE_NPAGE; i++ { 56547 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == key { 56548 if !((*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).FisPinned != 0) { 56549 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 56550 56551 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 1 56552 } 56553 return p + 32 + uintptr(i)*24 56554 } 56555 } 56556 56557 if createFlag == 0 { 56558 return uintptr(0) 56559 } 56560 56561 if (*testpcache)(unsafe.Pointer(p)).FnPinned == TESTPCACHE_NPAGE { 56562 return uintptr(0) 56563 } 56564 56565 if (*testpcache)(unsafe.Pointer(p)).FnPinned >= TESTPCACHE_NPAGE-TESTPCACHE_RESERVE && createFlag < 2 { 56566 return uintptr(0) 56567 } 56568 56569 if testpcacheGlobal.FhighStress != 0 && createFlag < 2 { 56570 return uintptr(0) 56571 } 56572 56573 if (*testpcache)(unsafe.Pointer(p)).FnFree > TESTPCACHE_RESERVE || createFlag == 2 && (*testpcache)(unsafe.Pointer(p)).FnFree > 0 { 56574 j = int32(testpcacheRandom(tls, p) % uint32(TESTPCACHE_NPAGE)) 56575 i = 0 56576 __1: 56577 if !(i < TESTPCACHE_NPAGE) { 56578 goto __3 56579 } 56580 { 56581 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fkey == uint32(0) { 56582 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).Fkey = key 56583 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).FisPinned = 1 56584 libc.X__builtin___memset_chk(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpBuf, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszPage), libc.X__builtin_object_size(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpBuf, 0)) 56585 libc.X__builtin___memset_chk(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpExtra, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszExtra), libc.X__builtin_object_size(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpExtra, 0)) 56586 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 56587 (*testpcache)(unsafe.Pointer(p)).FnFree-- 56588 56589 return p + 32 + uintptr(j)*24 56590 } 56591 56592 } 56593 goto __2 56594 __2: 56595 i++ 56596 j = (j + 1) % TESTPCACHE_NPAGE 56597 goto __1 56598 goto __3 56599 __3: 56600 } 56601 56602 if (*testpcache)(unsafe.Pointer(p)).FbPurgeable == 0 { 56603 return uintptr(0) 56604 } 56605 56606 j = int32(testpcacheRandom(tls, p) % uint32(TESTPCACHE_NPAGE)) 56607 i = 0 56608 __4: 56609 if !(i < TESTPCACHE_NPAGE) { 56610 goto __6 56611 } 56612 { 56613 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fkey > uint32(0) && (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).FisPinned == 0 { 56614 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).Fkey = key 56615 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(j)*24)).FisPinned = 1 56616 libc.X__builtin___memset_chk(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpBuf, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszPage), libc.X__builtin_object_size(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpBuf, 0)) 56617 libc.X__builtin___memset_chk(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpExtra, 0, uint64((*testpcache)(unsafe.Pointer(p)).FszExtra), libc.X__builtin_object_size(tls, (*testpcachePage)(unsafe.Pointer(p+32+uintptr(j)*24)).Fpage.FpExtra, 0)) 56618 (*testpcache)(unsafe.Pointer(p)).FnPinned++ 56619 56620 return p + 32 + uintptr(j)*24 56621 } 56622 56623 } 56624 goto __5 56625 __5: 56626 i++ 56627 j = (j + 1) % TESTPCACHE_NPAGE 56628 goto __4 56629 goto __6 56630 __6: 56631 ; 56632 return uintptr(0) 56633 } 56634 56635 func testpcacheUnpin(tls *libc.TLS, pCache uintptr, pOldPage uintptr, discard int32) { 56636 var p uintptr = pCache 56637 var i int32 56638 56639 if (*testpcache)(unsafe.Pointer(p)).FbPurgeable != 0 && 56640 uint32(100)-testpcacheGlobal.FdiscardChance <= testpcacheRandom(tls, p)%uint32(100) { 56641 discard = 1 56642 } 56643 56644 for i = 0; i < TESTPCACHE_NPAGE; i++ { 56645 if p+32+uintptr(i)*24 == pOldPage { 56646 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).FisPinned = 0 56647 (*testpcache)(unsafe.Pointer(p)).FnPinned-- 56648 56649 if discard != 0 { 56650 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 56651 (*testpcache)(unsafe.Pointer(p)).FnFree++ 56652 56653 } 56654 return 56655 } 56656 } 56657 56658 } 56659 56660 func testpcacheRekey(tls *libc.TLS, pCache uintptr, pOldPage uintptr, oldKey uint32, newKey uint32) { 56661 var p uintptr = pCache 56662 var i int32 56663 56664 for i = 0; i < TESTPCACHE_NPAGE; i++ { 56665 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == newKey { 56666 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 56667 (*testpcache)(unsafe.Pointer(p)).FnFree++ 56668 56669 break 56670 } 56671 } 56672 56673 for i = 0; i < TESTPCACHE_NPAGE; i++ { 56674 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey == oldKey { 56675 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = newKey 56676 return 56677 } 56678 } 56679 56680 } 56681 56682 func testpcacheTruncate(tls *libc.TLS, pCache uintptr, iLimit uint32) { 56683 var p uintptr = pCache 56684 var i uint32 56685 56686 for i = uint32(0); i < uint32(TESTPCACHE_NPAGE); i++ { 56687 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).Fkey >= iLimit { 56688 (*testpcachePage)(unsafe.Pointer(p + 32 + uintptr(i)*24)).Fkey = uint32(0) 56689 if (*testpcachePage)(unsafe.Pointer(p+32+uintptr(i)*24)).FisPinned != 0 { 56690 (*testpcache)(unsafe.Pointer(p)).FnPinned-- 56691 56692 } 56693 (*testpcache)(unsafe.Pointer(p)).FnFree++ 56694 56695 } 56696 } 56697 } 56698 56699 func testpcacheDestroy(tls *libc.TLS, pCache uintptr) { 56700 var p uintptr = pCache 56701 56702 (*testpcache)(unsafe.Pointer(p)).FiMagic = TESTPCACHE_CLEAR 56703 sqlite3.Xsqlite3_free(tls, p) 56704 testpcacheGlobal.FnInstance-- 56705 } 56706 56707 func installTestPCache(tls *libc.TLS, installFlag int32, discardChance uint32, prngSeed uint32, highStress uint32) { 56708 bp := tls.Alloc(24) 56709 defer tls.Free(24) 56710 56711 testpcacheGlobal.FdiscardChance = discardChance 56712 testpcacheGlobal.FprngSeed = prngSeed ^ prngSeed<<16 56713 testpcacheGlobal.FhighStress = highStress 56714 if installFlag != isInstalled { 56715 if installFlag != 0 { 56716 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_GETPCACHE2, libc.VaList(bp, uintptr(unsafe.Pointer(&defaultPcache)))) 56717 56718 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+8, uintptr(unsafe.Pointer(&testPcache)))) 56719 } else { 56720 sqlite3.Xsqlite3_config(tls, SQLITE_CONFIG_PCACHE2, libc.VaList(bp+16, uintptr(unsafe.Pointer(&defaultPcache)))) 56721 } 56722 isInstalled = installFlag 56723 } 56724 } 56725 56726 var testPcache = sqlite3_pcache_methods2{ 56727 FiVersion: 1, 56728 FpArg: 0, 56729 FxInit: 0, 56730 FxShutdown: 0, 56731 FxCreate: 0, 56732 FxCachesize: 0, 56733 FxPagecount: 0, 56734 FxFetch: 0, 56735 FxUnpin: 0, 56736 FxRekey: 0, 56737 FxTruncate: 0, 56738 FxDestroy: 0, 56739 } 56740 var defaultPcache sqlite3_pcache_methods2 56741 var isInstalled int32 = 0 56742 56743 type quota_FILE1 = struct { 56744 Ff uintptr 56745 FiOfst sqlite3_int64 56746 FpFile uintptr 56747 } 56748 56749 type quota_FILE = quota_FILE1 56750 56751 type quotaGroup1 = struct { 56752 FzPattern uintptr 56753 FiLimit sqlite3_int64 56754 FiSize sqlite3_int64 56755 FxCallback uintptr 56756 FpArg uintptr 56757 FxDestroy uintptr 56758 FpNext uintptr 56759 FppPrev uintptr 56760 FpFiles uintptr 56761 } 56762 56763 type quotaGroup = quotaGroup1 56764 type quotaConn1 = struct { 56765 Fbase sqlite3_file 56766 FpFile uintptr 56767 } 56768 56769 type quotaConn = quotaConn1 56770 type quotaFile1 = struct { 56771 FzFilename uintptr 56772 FpGroup uintptr 56773 FiSize sqlite3_int64 56774 FnRef int32 56775 FdeleteOnClose int32 56776 FpNext uintptr 56777 FppPrev uintptr 56778 } 56779 56780 type quotaFile = quotaFile1 56781 56782 var gQuota struct { 56783 FpOrigVfs uintptr 56784 FsThisVfs sqlite3_vfs 56785 FsIoMethodsV1 sqlite3_io_methods 56786 FsIoMethodsV2 sqlite3_io_methods 56787 FisInitialized int32 56788 F__ccgo_pad1 [4]byte 56789 FpMutex uintptr 56790 FpGroup uintptr 56791 } 56792 56793 func quotaEnter(tls *libc.TLS) { 56794 sqlite3.Xsqlite3_mutex_enter(tls, gQuota.FpMutex) 56795 } 56796 56797 func quotaLeave(tls *libc.TLS) { 56798 sqlite3.Xsqlite3_mutex_leave(tls, gQuota.FpMutex) 56799 } 56800 56801 func quotaGroupOpenFileCount(tls *libc.TLS, pGroup uintptr) int32 { 56802 var N int32 = 0 56803 var pFile uintptr = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 56804 for pFile != 0 { 56805 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 56806 N++ 56807 } 56808 pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 56809 } 56810 return N 56811 } 56812 56813 func quotaRemoveFile(tls *libc.TLS, pFile uintptr) { 56814 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 56815 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 56816 *(*uintptr)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FppPrev)) = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 56817 if (*quotaFile)(unsafe.Pointer(pFile)).FpNext != 0 { 56818 (*quotaFile)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FpNext)).FppPrev = (*quotaFile)(unsafe.Pointer(pFile)).FppPrev 56819 } 56820 sqlite3.Xsqlite3_free(tls, pFile) 56821 } 56822 56823 func quotaRemoveAllFiles(tls *libc.TLS, pGroup uintptr) { 56824 for (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles != 0 { 56825 quotaRemoveFile(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles) 56826 } 56827 } 56828 56829 func quotaGroupDeref(tls *libc.TLS, pGroup uintptr) { 56830 if (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit == int64(0) && quotaGroupOpenFileCount(tls, pGroup) == 0 { 56831 quotaRemoveAllFiles(tls, pGroup) 56832 *(*uintptr)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev)) = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 56833 if (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext != 0 { 56834 (*quotaGroup)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FpNext)).FppPrev = (*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev 56835 } 56836 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy != 0 { 56837 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy})).f(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 56838 } 56839 sqlite3.Xsqlite3_free(tls, pGroup) 56840 } 56841 } 56842 56843 func quotaStrglob(tls *libc.TLS, zGlob uintptr, z uintptr) int32 { 56844 var c int32 56845 var c2 int32 56846 var cx int32 56847 var invert int32 56848 var seen int32 56849 56850 for libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))) != 0 { 56851 if c == '*' { 56852 for libc.AssignInt32(&c, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1))))) == '*' || c == '?' { 56853 if c == '?' && int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) == 0 { 56854 return 0 56855 } 56856 } 56857 if c == 0 { 56858 return 1 56859 } else if c == '[' { 56860 for *(*int8)(unsafe.Pointer(z)) != 0 && quotaStrglob(tls, zGlob-uintptr(1), z) == 0 { 56861 z++ 56862 } 56863 return libc.Bool32(int32(*(*int8)(unsafe.Pointer(z))) != 0) 56864 } 56865 if c == '/' { 56866 cx = '\\' 56867 } else { 56868 cx = c 56869 } 56870 for libc.AssignInt32(&c2, int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1))))) != 0 { 56871 for c2 != c && c2 != cx { 56872 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 56873 if c2 == 0 { 56874 return 0 56875 } 56876 } 56877 if quotaStrglob(tls, zGlob, z) != 0 { 56878 return 1 56879 } 56880 } 56881 return 0 56882 } else if c == '?' { 56883 if int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) == 0 { 56884 return 0 56885 } 56886 } else if c == '[' { 56887 var prior_c int32 = 0 56888 seen = 0 56889 invert = 0 56890 c = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) 56891 if c == 0 { 56892 return 0 56893 } 56894 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 56895 if c2 == '^' { 56896 invert = 1 56897 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 56898 } 56899 if c2 == ']' { 56900 if c == ']' { 56901 seen = 1 56902 } 56903 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 56904 } 56905 for c2 != 0 && c2 != ']' { 56906 if c2 == '-' && int32(*(*int8)(unsafe.Pointer(zGlob))) != ']' && int32(*(*int8)(unsafe.Pointer(zGlob))) != 0 && prior_c > 0 { 56907 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 56908 if c >= prior_c && c <= c2 { 56909 seen = 1 56910 } 56911 prior_c = 0 56912 } else { 56913 if c == c2 { 56914 seen = 1 56915 } 56916 prior_c = c2 56917 } 56918 c2 = int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&zGlob, 1)))) 56919 } 56920 if c2 == 0 || seen^invert == 0 { 56921 return 0 56922 } 56923 } else if c == '/' { 56924 if int32(*(*int8)(unsafe.Pointer(z))) != '/' && int32(*(*int8)(unsafe.Pointer(z))) != '\\' { 56925 return 0 56926 } 56927 z++ 56928 } else { 56929 if c != int32(*(*int8)(unsafe.Pointer(libc.PostIncUintptr(&z, 1)))) { 56930 return 0 56931 } 56932 } 56933 } 56934 return libc.Bool32(int32(*(*int8)(unsafe.Pointer(z))) == 0) 56935 } 56936 56937 func quotaGroupFind(tls *libc.TLS, zFilename uintptr) uintptr { 56938 var p uintptr 56939 for p = gQuota.FpGroup; p != 0 && quotaStrglob(tls, (*quotaGroup)(unsafe.Pointer(p)).FzPattern, zFilename) == 0; p = (*quotaGroup)(unsafe.Pointer(p)).FpNext { 56940 } 56941 return p 56942 } 56943 56944 func quotaSubOpen(tls *libc.TLS, pConn uintptr) uintptr { 56945 var p uintptr = pConn 56946 return p + 1*16 56947 } 56948 56949 func quotaFindFile(tls *libc.TLS, pGroup uintptr, zName uintptr, createFlag int32) uintptr { 56950 var pFile uintptr = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 56951 for pFile != 0 && libc.Xstrcmp(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, zName) != 0 { 56952 pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 56953 } 56954 if pFile == uintptr(0) && createFlag != 0 { 56955 var nName int32 = int32(libc.Xstrlen(tls, zName) & uint64(0x3fffffff)) 56956 pFile = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(quotaFile{}))+uint64(nName)+uint64(1))) 56957 if pFile != 0 { 56958 libc.X__builtin___memset_chk(tls, pFile, 0, uint64(unsafe.Sizeof(quotaFile{})), libc.X__builtin_object_size(tls, pFile, 0)) 56959 (*quotaFile)(unsafe.Pointer(pFile)).FzFilename = pFile + 1*48 56960 libc.X__builtin___memcpy_chk(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, zName, uint64(nName+1), libc.X__builtin_object_size(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0)) 56961 (*quotaFile)(unsafe.Pointer(pFile)).FpNext = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles 56962 if (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles != 0 { 56963 (*quotaFile)(unsafe.Pointer((*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles)).FppPrev = pFile + 32 56964 } 56965 (*quotaFile)(unsafe.Pointer(pFile)).FppPrev = pGroup + 64 56966 (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles = pFile 56967 (*quotaFile)(unsafe.Pointer(pFile)).FpGroup = pGroup 56968 } 56969 } 56970 return pFile 56971 } 56972 56973 func quota_utf8_to_mbcs(tls *libc.TLS, zUtf8 uintptr) uintptr { 56974 return zUtf8 56975 } 56976 56977 func quota_mbcs_free(tls *libc.TLS, zOld uintptr) { 56978 } 56979 56980 func quotaOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pConn uintptr, flags int32, pOutFlags uintptr) int32 { 56981 var rc int32 56982 var pQuotaOpen uintptr 56983 var pFile uintptr 56984 var pGroup uintptr 56985 var pSubOpen uintptr 56986 var pOrigVfs uintptr = gQuota.FpOrigVfs 56987 56988 if flags&(SQLITE_OPEN_MAIN_DB|SQLITE_OPEN_WAL) == 0 { 56989 return (*struct { 56990 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 56991 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pConn, flags, pOutFlags) 56992 } 56993 56994 quotaEnter(tls) 56995 pGroup = quotaGroupFind(tls, zName) 56996 if pGroup == uintptr(0) { 56997 rc = (*struct { 56998 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 56999 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pConn, flags, pOutFlags) 57000 } else { 57001 pQuotaOpen = pConn 57002 pSubOpen = quotaSubOpen(tls, pConn) 57003 rc = (*struct { 57004 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 57005 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxOpen})).f(tls, pOrigVfs, zName, pSubOpen, flags, pOutFlags) 57006 if rc == SQLITE_OK { 57007 pFile = quotaFindFile(tls, pGroup, zName, 1) 57008 if pFile == uintptr(0) { 57009 quotaLeave(tls) 57010 (*struct { 57011 f func(*libc.TLS, uintptr) int32 57012 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 57013 return SQLITE_NOMEM 57014 } 57015 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = libc.Bool32(flags&SQLITE_OPEN_DELETEONCLOSE != 0) 57016 (*quotaFile)(unsafe.Pointer(pFile)).FnRef++ 57017 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).FpFile = pFile 57018 if (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FiVersion == 1 { 57019 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).Fbase.FpMethods = uintptr(unsafe.Pointer(&gQuota)) + 176 57020 } else { 57021 (*quotaConn)(unsafe.Pointer(pQuotaOpen)).Fbase.FpMethods = uintptr(unsafe.Pointer(&gQuota)) + 328 57022 } 57023 } 57024 } 57025 quotaLeave(tls) 57026 return rc 57027 } 57028 57029 func quotaDelete(tls *libc.TLS, pVfs uintptr, zName uintptr, syncDir int32) int32 { 57030 var rc int32 57031 var pFile uintptr 57032 var pGroup uintptr 57033 var pOrigVfs uintptr = gQuota.FpOrigVfs 57034 57035 rc = (*struct { 57036 f func(*libc.TLS, uintptr, uintptr, int32) int32 57037 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)).FxDelete})).f(tls, pOrigVfs, zName, syncDir) 57038 57039 if rc == SQLITE_OK { 57040 quotaEnter(tls) 57041 pGroup = quotaGroupFind(tls, zName) 57042 if pGroup != 0 { 57043 pFile = quotaFindFile(tls, pGroup, zName, 0) 57044 if pFile != 0 { 57045 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 57046 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = 1 57047 } else { 57048 quotaRemoveFile(tls, pFile) 57049 quotaGroupDeref(tls, pGroup) 57050 } 57051 } 57052 } 57053 quotaLeave(tls) 57054 } 57055 return rc 57056 } 57057 57058 func quotaClose(tls *libc.TLS, pConn uintptr) int32 { 57059 var p uintptr = pConn 57060 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 57061 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57062 var rc int32 57063 rc = (*struct { 57064 f func(*libc.TLS, uintptr) int32 57065 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxClose})).f(tls, pSubOpen) 57066 quotaEnter(tls) 57067 (*quotaFile)(unsafe.Pointer(pFile)).FnRef-- 57068 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef == 0 { 57069 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 57070 if (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose != 0 { 57071 (*struct { 57072 f func(*libc.TLS, uintptr, uintptr, int32) int32 57073 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 57074 quotaRemoveFile(tls, pFile) 57075 } 57076 quotaGroupDeref(tls, pGroup) 57077 } 57078 quotaLeave(tls) 57079 return rc 57080 } 57081 57082 func quotaRead(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 57083 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57084 return (*struct { 57085 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 57086 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxRead})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 57087 } 57088 57089 func quotaWrite(tls *libc.TLS, pConn uintptr, pBuf uintptr, iAmt int32, iOfst sqlite3_int64) int32 { 57090 var p uintptr = pConn 57091 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57092 var iEnd sqlite3_int64 = iOfst + sqlite3_int64(iAmt) 57093 var pGroup uintptr 57094 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 57095 var szNew sqlite3_int64 57096 57097 if (*quotaFile)(unsafe.Pointer(pFile)).FiSize < iEnd { 57098 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 57099 quotaEnter(tls) 57100 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 57101 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 57102 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback != 0 { 57103 (*struct { 57104 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 57105 })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback})).f(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, pGroup+8, szNew, 57106 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 57107 } 57108 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 57109 quotaLeave(tls) 57110 return SQLITE_FULL 57111 } 57112 } 57113 (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize = szNew 57114 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iEnd 57115 quotaLeave(tls) 57116 } 57117 return (*struct { 57118 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 57119 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxWrite})).f(tls, pSubOpen, pBuf, iAmt, iOfst) 57120 } 57121 57122 func quotaTruncate(tls *libc.TLS, pConn uintptr, size sqlite3_int64) int32 { 57123 var p uintptr = pConn 57124 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57125 var rc int32 = (*struct { 57126 f func(*libc.TLS, uintptr, sqlite3_int64) int32 57127 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxTruncate})).f(tls, pSubOpen, size) 57128 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 57129 var pGroup uintptr 57130 if rc == SQLITE_OK { 57131 quotaEnter(tls) 57132 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 57133 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 57134 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = size 57135 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += size 57136 quotaLeave(tls) 57137 } 57138 return rc 57139 } 57140 57141 func quotaSync(tls *libc.TLS, pConn uintptr, flags int32) int32 { 57142 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57143 return (*struct { 57144 f func(*libc.TLS, uintptr, int32) int32 57145 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSync})).f(tls, pSubOpen, flags) 57146 } 57147 57148 func quotaFileSize(tls *libc.TLS, pConn uintptr, pSize uintptr) int32 { 57149 bp := tls.Alloc(8) 57150 defer tls.Free(8) 57151 57152 var p uintptr = pConn 57153 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57154 var pFile uintptr = (*quotaConn)(unsafe.Pointer(p)).FpFile 57155 var pGroup uintptr 57156 57157 var rc int32 57158 57159 rc = (*struct { 57160 f func(*libc.TLS, uintptr, uintptr) int32 57161 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileSize})).f(tls, pSubOpen, bp) 57162 if rc == SQLITE_OK { 57163 quotaEnter(tls) 57164 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 57165 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) -= (*quotaFile)(unsafe.Pointer(pFile)).FiSize 57166 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = *(*sqlite3_int64)(unsafe.Pointer(bp)) 57167 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += *(*sqlite3_int64)(unsafe.Pointer(bp)) 57168 quotaLeave(tls) 57169 *(*sqlite3_int64)(unsafe.Pointer(pSize)) = *(*sqlite3_int64)(unsafe.Pointer(bp)) 57170 } 57171 return rc 57172 } 57173 57174 func quotaLock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 57175 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57176 return (*struct { 57177 f func(*libc.TLS, uintptr, int32) int32 57178 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxLock})).f(tls, pSubOpen, lock) 57179 } 57180 57181 func quotaUnlock(tls *libc.TLS, pConn uintptr, lock int32) int32 { 57182 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57183 return (*struct { 57184 f func(*libc.TLS, uintptr, int32) int32 57185 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxUnlock})).f(tls, pSubOpen, lock) 57186 } 57187 57188 func quotaCheckReservedLock(tls *libc.TLS, pConn uintptr, pResOut uintptr) int32 { 57189 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57190 return (*struct { 57191 f func(*libc.TLS, uintptr, uintptr) int32 57192 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxCheckReservedLock})).f(tls, pSubOpen, pResOut) 57193 } 57194 57195 func quotaFileControl(tls *libc.TLS, pConn uintptr, op int32, pArg uintptr) int32 { 57196 bp := tls.Alloc(8) 57197 defer tls.Free(8) 57198 57199 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57200 var rc int32 = (*struct { 57201 f func(*libc.TLS, uintptr, int32, uintptr) int32 57202 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxFileControl})).f(tls, pSubOpen, op, pArg) 57203 if op == SQLITE_FCNTL_VFSNAME && rc == SQLITE_OK { 57204 *(*uintptr)(unsafe.Pointer(pArg)) = sqlite3.Xsqlite3_mprintf(tls, ts+36096, libc.VaList(bp, *(*uintptr)(unsafe.Pointer(pArg)))) 57205 } 57206 return rc 57207 } 57208 57209 func quotaSectorSize(tls *libc.TLS, pConn uintptr) int32 { 57210 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57211 return (*struct { 57212 f func(*libc.TLS, uintptr) int32 57213 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxSectorSize})).f(tls, pSubOpen) 57214 } 57215 57216 func quotaDeviceCharacteristics(tls *libc.TLS, pConn uintptr) int32 { 57217 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57218 return (*struct { 57219 f func(*libc.TLS, uintptr) int32 57220 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxDeviceCharacteristics})).f(tls, pSubOpen) 57221 } 57222 57223 func quotaShmMap(tls *libc.TLS, pConn uintptr, iRegion int32, szRegion int32, bExtend int32, pp uintptr) int32 { 57224 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57225 return (*struct { 57226 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 57227 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmMap})).f(tls, pSubOpen, iRegion, szRegion, bExtend, pp) 57228 } 57229 57230 func quotaShmLock(tls *libc.TLS, pConn uintptr, ofst int32, n int32, flags int32) int32 { 57231 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57232 return (*struct { 57233 f func(*libc.TLS, uintptr, int32, int32, int32) int32 57234 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmLock})).f(tls, pSubOpen, ofst, n, flags) 57235 } 57236 57237 func quotaShmBarrier(tls *libc.TLS, pConn uintptr) { 57238 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57239 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmBarrier})).f(tls, pSubOpen) 57240 } 57241 57242 func quotaShmUnmap(tls *libc.TLS, pConn uintptr, deleteFlag int32) int32 { 57243 var pSubOpen uintptr = quotaSubOpen(tls, pConn) 57244 return (*struct { 57245 f func(*libc.TLS, uintptr, int32) int32 57246 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pSubOpen)).FpMethods)).FxShmUnmap})).f(tls, pSubOpen, deleteFlag) 57247 } 57248 57249 func sqlite3_quota_initialize(tls *libc.TLS, zOrigVfsName uintptr, makeDefault int32) int32 { 57250 var pOrigVfs uintptr 57251 if gQuota.FisInitialized != 0 { 57252 return SQLITE_MISUSE 57253 } 57254 pOrigVfs = sqlite3.Xsqlite3_vfs_find(tls, zOrigVfsName) 57255 if pOrigVfs == uintptr(0) { 57256 return SQLITE_ERROR 57257 } 57258 57259 gQuota.FpMutex = sqlite3.Xsqlite3_mutex_alloc(tls, SQLITE_MUTEX_FAST) 57260 if !(int32(gQuota.FpMutex) != 0) { 57261 return SQLITE_NOMEM 57262 } 57263 gQuota.FisInitialized = 1 57264 gQuota.FpOrigVfs = pOrigVfs 57265 gQuota.FsThisVfs = *(*sqlite3_vfs)(unsafe.Pointer(pOrigVfs)) 57266 gQuota.FsThisVfs.FxOpen = *(*uintptr)(unsafe.Pointer(&struct { 57267 f func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32 57268 }{quotaOpen})) 57269 gQuota.FsThisVfs.FxDelete = *(*uintptr)(unsafe.Pointer(&struct { 57270 f func(*libc.TLS, uintptr, uintptr, int32) int32 57271 }{quotaDelete})) 57272 *(*int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&gQuota)) + 8 + 4)) += int32(uint64(unsafe.Sizeof(quotaConn{}))) 57273 gQuota.FsThisVfs.FzName = ts + 36105 57274 gQuota.FsIoMethodsV1.FiVersion = 1 57275 gQuota.FsIoMethodsV1.FxClose = *(*uintptr)(unsafe.Pointer(&struct { 57276 f func(*libc.TLS, uintptr) int32 57277 }{quotaClose})) 57278 gQuota.FsIoMethodsV1.FxRead = *(*uintptr)(unsafe.Pointer(&struct { 57279 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 57280 }{quotaRead})) 57281 gQuota.FsIoMethodsV1.FxWrite = *(*uintptr)(unsafe.Pointer(&struct { 57282 f func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32 57283 }{quotaWrite})) 57284 gQuota.FsIoMethodsV1.FxTruncate = *(*uintptr)(unsafe.Pointer(&struct { 57285 f func(*libc.TLS, uintptr, sqlite3_int64) int32 57286 }{quotaTruncate})) 57287 gQuota.FsIoMethodsV1.FxSync = *(*uintptr)(unsafe.Pointer(&struct { 57288 f func(*libc.TLS, uintptr, int32) int32 57289 }{quotaSync})) 57290 gQuota.FsIoMethodsV1.FxFileSize = *(*uintptr)(unsafe.Pointer(&struct { 57291 f func(*libc.TLS, uintptr, uintptr) int32 57292 }{quotaFileSize})) 57293 gQuota.FsIoMethodsV1.FxLock = *(*uintptr)(unsafe.Pointer(&struct { 57294 f func(*libc.TLS, uintptr, int32) int32 57295 }{quotaLock})) 57296 gQuota.FsIoMethodsV1.FxUnlock = *(*uintptr)(unsafe.Pointer(&struct { 57297 f func(*libc.TLS, uintptr, int32) int32 57298 }{quotaUnlock})) 57299 gQuota.FsIoMethodsV1.FxCheckReservedLock = *(*uintptr)(unsafe.Pointer(&struct { 57300 f func(*libc.TLS, uintptr, uintptr) int32 57301 }{quotaCheckReservedLock})) 57302 gQuota.FsIoMethodsV1.FxFileControl = *(*uintptr)(unsafe.Pointer(&struct { 57303 f func(*libc.TLS, uintptr, int32, uintptr) int32 57304 }{quotaFileControl})) 57305 gQuota.FsIoMethodsV1.FxSectorSize = *(*uintptr)(unsafe.Pointer(&struct { 57306 f func(*libc.TLS, uintptr) int32 57307 }{quotaSectorSize})) 57308 gQuota.FsIoMethodsV1.FxDeviceCharacteristics = *(*uintptr)(unsafe.Pointer(&struct { 57309 f func(*libc.TLS, uintptr) int32 57310 }{quotaDeviceCharacteristics})) 57311 gQuota.FsIoMethodsV2 = gQuota.FsIoMethodsV1 57312 gQuota.FsIoMethodsV2.FiVersion = 2 57313 gQuota.FsIoMethodsV2.FxShmMap = *(*uintptr)(unsafe.Pointer(&struct { 57314 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 57315 }{quotaShmMap})) 57316 gQuota.FsIoMethodsV2.FxShmLock = *(*uintptr)(unsafe.Pointer(&struct { 57317 f func(*libc.TLS, uintptr, int32, int32, int32) int32 57318 }{quotaShmLock})) 57319 gQuota.FsIoMethodsV2.FxShmBarrier = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{quotaShmBarrier})) 57320 gQuota.FsIoMethodsV2.FxShmUnmap = *(*uintptr)(unsafe.Pointer(&struct { 57321 f func(*libc.TLS, uintptr, int32) int32 57322 }{quotaShmUnmap})) 57323 sqlite3.Xsqlite3_vfs_register(tls, uintptr(unsafe.Pointer(&gQuota))+8, makeDefault) 57324 return SQLITE_OK 57325 } 57326 57327 func sqlite3_quota_shutdown(tls *libc.TLS) int32 { 57328 var pGroup uintptr 57329 if gQuota.FisInitialized == 0 { 57330 return SQLITE_MISUSE 57331 } 57332 for pGroup = gQuota.FpGroup; pGroup != 0; pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext { 57333 if quotaGroupOpenFileCount(tls, pGroup) > 0 { 57334 return SQLITE_MISUSE 57335 } 57336 } 57337 for gQuota.FpGroup != 0 { 57338 pGroup = gQuota.FpGroup 57339 gQuota.FpGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 57340 (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit = int64(0) 57341 57342 quotaGroupDeref(tls, pGroup) 57343 } 57344 gQuota.FisInitialized = 0 57345 sqlite3.Xsqlite3_mutex_free(tls, gQuota.FpMutex) 57346 sqlite3.Xsqlite3_vfs_unregister(tls, uintptr(unsafe.Pointer(&gQuota))+8) 57347 libc.X__builtin___memset_chk(tls, uintptr(unsafe.Pointer(&gQuota)), 0, uint64(unsafe.Sizeof(gQuota)), libc.X__builtin_object_size(tls, uintptr(unsafe.Pointer(&gQuota)), 0)) 57348 return SQLITE_OK 57349 } 57350 57351 func sqlite3_quota_set(tls *libc.TLS, zPattern uintptr, iLimit sqlite3_int64, xCallback uintptr, pArg uintptr, xDestroy uintptr) int32 { 57352 var pGroup uintptr 57353 quotaEnter(tls) 57354 pGroup = gQuota.FpGroup 57355 for pGroup != 0 && libc.Xstrcmp(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, zPattern) != 0 { 57356 pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext 57357 } 57358 if pGroup == uintptr(0) { 57359 var nPattern int32 = int32(libc.Xstrlen(tls, zPattern) & uint64(0x3fffffff)) 57360 if iLimit <= int64(0) { 57361 quotaLeave(tls) 57362 return SQLITE_OK 57363 } 57364 pGroup = sqlite3.Xsqlite3_malloc(tls, int32(uint64(unsafe.Sizeof(quotaGroup{}))+uint64(nPattern)+uint64(1))) 57365 if pGroup == uintptr(0) { 57366 quotaLeave(tls) 57367 return SQLITE_NOMEM 57368 } 57369 libc.X__builtin___memset_chk(tls, pGroup, 0, uint64(unsafe.Sizeof(quotaGroup{})), libc.X__builtin_object_size(tls, pGroup, 0)) 57370 (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern = pGroup + 1*72 57371 libc.X__builtin___memcpy_chk(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, zPattern, uint64(nPattern+1), libc.X__builtin_object_size(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, 0)) 57372 if gQuota.FpGroup != 0 { 57373 (*quotaGroup)(unsafe.Pointer(gQuota.FpGroup)).FppPrev = pGroup + 48 57374 } 57375 (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext = gQuota.FpGroup 57376 (*quotaGroup)(unsafe.Pointer(pGroup)).FppPrev = uintptr(unsafe.Pointer(&gQuota)) + 496 57377 gQuota.FpGroup = pGroup 57378 } 57379 (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit = iLimit 57380 (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback = xCallback 57381 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy != 0 && (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg != pArg { 57382 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy})).f(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 57383 } 57384 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg = pArg 57385 (*quotaGroup)(unsafe.Pointer(pGroup)).FxDestroy = xDestroy 57386 quotaGroupDeref(tls, pGroup) 57387 quotaLeave(tls) 57388 return SQLITE_OK 57389 } 57390 57391 func sqlite3_quota_file(tls *libc.TLS, zFilename uintptr) int32 { 57392 bp := tls.Alloc(16) 57393 defer tls.Free(16) 57394 57395 var zFull uintptr = uintptr(0) 57396 var fd uintptr 57397 var rc int32 57398 *(*int32)(unsafe.Pointer(bp)) = 0 57399 57400 var nAlloc int32 = gQuota.FsThisVfs.FszOsFile + gQuota.FsThisVfs.FmxPathname + 2 57401 57402 fd = sqlite3.Xsqlite3_malloc(tls, nAlloc) 57403 if fd == uintptr(0) { 57404 rc = SQLITE_NOMEM 57405 } else { 57406 zFull = fd + uintptr(gQuota.FsThisVfs.FszOsFile) 57407 rc = (*struct { 57408 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57409 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 57410 gQuota.FsThisVfs.FmxPathname+1, zFull) 57411 } 57412 57413 if rc == SQLITE_OK { 57414 *(*int8)(unsafe.Pointer(zFull + uintptr(libc.Xstrlen(tls, zFull)+uint64(1)))) = int8(0) 57415 rc = quotaOpen(tls, uintptr(unsafe.Pointer(&gQuota))+8, zFull, fd, 57416 SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_DB, bp) 57417 if rc == SQLITE_OK { 57418 (*struct { 57419 f func(*libc.TLS, uintptr, uintptr) int32 57420 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxFileSize})).f(tls, fd, bp+8) 57421 (*struct { 57422 f func(*libc.TLS, uintptr) int32 57423 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxClose})).f(tls, fd) 57424 } else if rc == SQLITE_CANTOPEN { 57425 var pGroup uintptr 57426 var pFile uintptr 57427 quotaEnter(tls) 57428 pGroup = quotaGroupFind(tls, zFull) 57429 if pGroup != 0 { 57430 pFile = quotaFindFile(tls, pGroup, zFull, 0) 57431 if pFile != 0 { 57432 quotaRemoveFile(tls, pFile) 57433 } 57434 } 57435 quotaLeave(tls) 57436 } 57437 } 57438 57439 sqlite3.Xsqlite3_free(tls, fd) 57440 return rc 57441 } 57442 57443 func sqlite3_quota_fopen(tls *libc.TLS, zFilename uintptr, zMode uintptr) uintptr { 57444 var p uintptr 57445 var zFull uintptr 57446 var zFullTranslated uintptr 57447 var rc int32 57448 var pGroup uintptr 57449 var pFile uintptr 57450 p = uintptr(0) 57451 zFull = uintptr(0) 57452 zFullTranslated = uintptr(0) 57453 57454 zFull = sqlite3.Xsqlite3_malloc(tls, gQuota.FsThisVfs.FmxPathname+1) 57455 if !(zFull == uintptr(0)) { 57456 goto __1 57457 } 57458 return uintptr(0) 57459 __1: 57460 ; 57461 rc = (*struct { 57462 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57463 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 57464 gQuota.FsThisVfs.FmxPathname+1, zFull) 57465 if !(rc != 0) { 57466 goto __2 57467 } 57468 goto quota_fopen_error 57469 __2: 57470 ; 57471 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(quota_FILE{}))) 57472 if !(p == uintptr(0)) { 57473 goto __3 57474 } 57475 goto quota_fopen_error 57476 __3: 57477 ; 57478 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(quota_FILE{})), libc.X__builtin_object_size(tls, p, 0)) 57479 zFullTranslated = quota_utf8_to_mbcs(tls, zFull) 57480 if !(zFullTranslated == uintptr(0)) { 57481 goto __4 57482 } 57483 goto quota_fopen_error 57484 __4: 57485 ; 57486 (*quota_FILE)(unsafe.Pointer(p)).Ff = libc.Xfopen(tls, zFullTranslated, zMode) 57487 if !((*quota_FILE)(unsafe.Pointer(p)).Ff == uintptr(0)) { 57488 goto __5 57489 } 57490 goto quota_fopen_error 57491 __5: 57492 ; 57493 quotaEnter(tls) 57494 pGroup = quotaGroupFind(tls, zFull) 57495 if !(pGroup != 0) { 57496 goto __6 57497 } 57498 pFile = quotaFindFile(tls, pGroup, zFull, 1) 57499 if !(pFile == uintptr(0)) { 57500 goto __7 57501 } 57502 quotaLeave(tls) 57503 goto quota_fopen_error 57504 __7: 57505 ; 57506 (*quotaFile)(unsafe.Pointer(pFile)).FnRef++ 57507 (*quota_FILE)(unsafe.Pointer(p)).FpFile = pFile 57508 __6: 57509 ; 57510 quotaLeave(tls) 57511 sqlite3.Xsqlite3_free(tls, zFull) 57512 return p 57513 57514 quota_fopen_error: 57515 quota_mbcs_free(tls, zFullTranslated) 57516 sqlite3.Xsqlite3_free(tls, zFull) 57517 if !(p != 0 && (*quota_FILE)(unsafe.Pointer(p)).Ff != 0) { 57518 goto __8 57519 } 57520 libc.Xfclose(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 57521 __8: 57522 ; 57523 sqlite3.Xsqlite3_free(tls, p) 57524 return uintptr(0) 57525 } 57526 57527 func sqlite3_quota_fread(tls *libc.TLS, pBuf uintptr, size size_t, nmemb size_t, p uintptr) size_t { 57528 return libc.Xfread(tls, pBuf, size, nmemb, (*quota_FILE)(unsafe.Pointer(p)).Ff) 57529 } 57530 57531 func sqlite3_quota_fwrite(tls *libc.TLS, pBuf uintptr, size size_t, nmemb size_t, p uintptr) size_t { 57532 var iOfst sqlite3_int64 57533 var iEnd sqlite3_int64 57534 var szNew sqlite3_int64 57535 var pFile uintptr 57536 var rc size_t 57537 57538 iOfst = libc.Xftell(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 57539 iEnd = sqlite3_int64(uint64(iOfst) + size*nmemb) 57540 pFile = (*quota_FILE)(unsafe.Pointer(p)).FpFile 57541 if pFile != 0 && (*quotaFile)(unsafe.Pointer(pFile)).FiSize < iEnd { 57542 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 57543 quotaEnter(tls) 57544 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 57545 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 57546 if (*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback != 0 { 57547 (*struct { 57548 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 57549 })(unsafe.Pointer(&struct{ uintptr }{(*quotaGroup)(unsafe.Pointer(pGroup)).FxCallback})).f(tls, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, pGroup+8, szNew, 57550 (*quotaGroup)(unsafe.Pointer(pGroup)).FpArg) 57551 } 57552 if szNew > (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit && (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit > int64(0) { 57553 iEnd = (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit - (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize + (*quotaFile)(unsafe.Pointer(pFile)).FiSize 57554 nmemb = uint64(iEnd-iOfst) / size 57555 iEnd = sqlite3_int64(uint64(iOfst) + size*nmemb) 57556 szNew = (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize - (*quotaFile)(unsafe.Pointer(pFile)).FiSize + iEnd 57557 } 57558 } 57559 (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize = szNew 57560 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iEnd 57561 quotaLeave(tls) 57562 } else { 57563 pFile = uintptr(0) 57564 } 57565 rc = libc.Xfwrite(tls, pBuf, size, nmemb, (*quota_FILE)(unsafe.Pointer(p)).Ff) 57566 57567 if rc < nmemb && pFile != 0 { 57568 var nWritten size_t = rc 57569 var iNewEnd sqlite3_int64 = sqlite3_int64(uint64(iOfst) + size*nWritten) 57570 if iNewEnd < iEnd { 57571 iNewEnd = iEnd 57572 } 57573 quotaEnter(tls) 57574 *(*sqlite3_int64)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FpGroup + 16)) += iNewEnd - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 57575 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = iNewEnd 57576 quotaLeave(tls) 57577 } 57578 return rc 57579 } 57580 57581 func sqlite3_quota_fclose(tls *libc.TLS, p uintptr) int32 { 57582 var rc int32 57583 var pFile uintptr 57584 rc = libc.Xfclose(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 57585 pFile = (*quota_FILE)(unsafe.Pointer(p)).FpFile 57586 if pFile != 0 { 57587 quotaEnter(tls) 57588 (*quotaFile)(unsafe.Pointer(pFile)).FnRef-- 57589 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef == 0 { 57590 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 57591 if (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose != 0 { 57592 (*struct { 57593 f func(*libc.TLS, uintptr, uintptr, int32) int32 57594 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 57595 quotaRemoveFile(tls, pFile) 57596 } 57597 quotaGroupDeref(tls, pGroup) 57598 } 57599 quotaLeave(tls) 57600 } 57601 sqlite3.Xsqlite3_free(tls, p) 57602 return rc 57603 } 57604 57605 func sqlite3_quota_fflush(tls *libc.TLS, p uintptr, doFsync int32) int32 { 57606 var rc int32 57607 rc = libc.Xfflush(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 57608 if rc == 0 && doFsync != 0 { 57609 rc = libc.Xfsync(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff)) 57610 } 57611 return libc.Bool32(rc != 0) 57612 } 57613 57614 func sqlite3_quota_fseek(tls *libc.TLS, p uintptr, offset int64, whence int32) int32 { 57615 return libc.Xfseek(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff, offset, whence) 57616 } 57617 57618 func sqlite3_quota_rewind(tls *libc.TLS, p uintptr) { 57619 libc.Xrewind(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 57620 } 57621 57622 func sqlite3_quota_ftell(tls *libc.TLS, p uintptr) int64 { 57623 return libc.Xftell(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 57624 } 57625 57626 func sqlite3_quota_ferror(tls *libc.TLS, p uintptr) int32 { 57627 return libc.Xferror(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff) 57628 } 57629 57630 func sqlite3_quota_ftruncate(tls *libc.TLS, p uintptr, szNew sqlite3_int64) int32 { 57631 var pFile uintptr = (*quota_FILE)(unsafe.Pointer(p)).FpFile 57632 var rc int32 57633 if libc.AssignUintptr(&pFile, (*quota_FILE)(unsafe.Pointer(p)).FpFile) != uintptr(0) && (*quotaFile)(unsafe.Pointer(pFile)).FiSize < szNew { 57634 var pGroup uintptr 57635 if (*quotaFile)(unsafe.Pointer(pFile)).FiSize < szNew { 57636 return -1 57637 } 57638 pGroup = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 57639 quotaEnter(tls) 57640 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += szNew - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 57641 quotaLeave(tls) 57642 } 57643 rc = libc.Xftruncate(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff), szNew) 57644 if pFile != 0 && rc == 0 { 57645 var pGroup uintptr = (*quotaFile)(unsafe.Pointer(pFile)).FpGroup 57646 quotaEnter(tls) 57647 *(*sqlite3_int64)(unsafe.Pointer(pGroup + 16)) += szNew - (*quotaFile)(unsafe.Pointer(pFile)).FiSize 57648 (*quotaFile)(unsafe.Pointer(pFile)).FiSize = szNew 57649 quotaLeave(tls) 57650 } 57651 return rc 57652 } 57653 57654 func sqlite3_quota_file_mtime(tls *libc.TLS, p uintptr, pTime uintptr) int32 { 57655 bp := tls.Alloc(144) 57656 defer tls.Free(144) 57657 57658 var rc int32 57659 57660 rc = libc.Xfstat(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff), bp) 57661 if rc == 0 { 57662 *(*time_t)(unsafe.Pointer(pTime)) = (*stat)(unsafe.Pointer(bp)).Fst_mtimespec.Ftv_sec 57663 } 57664 return rc 57665 } 57666 57667 func sqlite3_quota_file_truesize(tls *libc.TLS, p uintptr) sqlite3_int64 { 57668 bp := tls.Alloc(144) 57669 defer tls.Free(144) 57670 57671 var rc int32 57672 57673 rc = libc.Xfstat(tls, libc.Xfileno(tls, (*quota_FILE)(unsafe.Pointer(p)).Ff), bp) 57674 if rc == 0 { 57675 return (*stat)(unsafe.Pointer(bp)).Fst_size 57676 } 57677 return int64(-1) 57678 } 57679 57680 func sqlite3_quota_file_size(tls *libc.TLS, p uintptr) sqlite3_int64 { 57681 if (*quota_FILE)(unsafe.Pointer(p)).FpFile != 0 { 57682 return (*quotaFile)(unsafe.Pointer((*quota_FILE)(unsafe.Pointer(p)).FpFile)).FiSize 57683 } 57684 return int64(-1) 57685 } 57686 57687 func sqlite3_quota_file_available(tls *libc.TLS, p uintptr) int64 { 57688 var f uintptr = (*quota_FILE)(unsafe.Pointer(p)).Ff 57689 var pos1 int64 57690 var pos2 int64 57691 var rc int32 57692 pos1 = libc.Xftell(tls, f) 57693 if pos1 < int64(0) { 57694 return int64(-1) 57695 } 57696 rc = libc.Xfseek(tls, f, int64(0), SEEK_END) 57697 if rc != 0 { 57698 return int64(-1) 57699 } 57700 pos2 = libc.Xftell(tls, f) 57701 if pos2 < int64(0) { 57702 return int64(-1) 57703 } 57704 rc = libc.Xfseek(tls, f, pos1, SEEK_SET) 57705 if rc != 0 { 57706 return int64(-1) 57707 } 57708 return pos2 - pos1 57709 } 57710 57711 func sqlite3_quota_remove(tls *libc.TLS, zFilename uintptr) int32 { 57712 var zFull uintptr 57713 var nFull size_t 57714 var rc int32 57715 var pGroup uintptr 57716 var pFile uintptr 57717 var pNextFile uintptr 57718 var diff int32 57719 var c int8 57720 57721 zFull = sqlite3.Xsqlite3_malloc(tls, gQuota.FsThisVfs.FmxPathname+1) 57722 if zFull == uintptr(0) { 57723 return SQLITE_NOMEM 57724 } 57725 rc = (*struct { 57726 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 57727 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxFullPathname})).f(tls, gQuota.FpOrigVfs, zFilename, 57728 gQuota.FsThisVfs.FmxPathname+1, zFull) 57729 if rc != 0 { 57730 sqlite3.Xsqlite3_free(tls, zFull) 57731 return rc 57732 } 57733 57734 nFull = libc.Xstrlen(tls, zFull) 57735 if nFull > uint64(0) && (int32(*(*int8)(unsafe.Pointer(zFull + uintptr(nFull-uint64(1))))) == '/' || int32(*(*int8)(unsafe.Pointer(zFull + uintptr(nFull-uint64(1))))) == '\\') { 57736 nFull-- 57737 *(*int8)(unsafe.Pointer(zFull + uintptr(nFull))) = int8(0) 57738 } 57739 57740 quotaEnter(tls) 57741 pGroup = quotaGroupFind(tls, zFull) 57742 if pGroup != 0 { 57743 for pFile = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles; pFile != 0 && rc == SQLITE_OK; pFile = pNextFile { 57744 pNextFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext 57745 diff = libc.Xstrncmp(tls, zFull, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, nFull) 57746 if diff == 0 && (int32(libc.AssignInt8(&c, *(*int8)(unsafe.Pointer((*quotaFile)(unsafe.Pointer(pFile)).FzFilename + uintptr(nFull))))) == 0 || int32(c) == '/' || int32(c) == '\\') { 57747 if (*quotaFile)(unsafe.Pointer(pFile)).FnRef != 0 { 57748 (*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose = 1 57749 } else { 57750 rc = (*struct { 57751 f func(*libc.TLS, uintptr, uintptr, int32) int32 57752 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(gQuota.FpOrigVfs)).FxDelete})).f(tls, gQuota.FpOrigVfs, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename, 0) 57753 quotaRemoveFile(tls, pFile) 57754 quotaGroupDeref(tls, pGroup) 57755 } 57756 } 57757 } 57758 } 57759 quotaLeave(tls) 57760 sqlite3.Xsqlite3_free(tls, zFull) 57761 return rc 57762 } 57763 57764 type TclQuotaCallback1 = struct { 57765 Finterp uintptr 57766 FpScript uintptr 57767 } 57768 57769 type TclQuotaCallback = TclQuotaCallback1 57770 57771 func tclQuotaCallback(tls *libc.TLS, zFilename uintptr, piLimit uintptr, iSize sqlite3_int64, pArg uintptr) { 57772 bp := tls.Alloc(16) 57773 defer tls.Free(16) 57774 57775 var p uintptr 57776 var pEval uintptr 57777 var pVarname uintptr 57778 57779 var rc int32 57780 57781 p = pArg 57782 if p == uintptr(0) { 57783 return 57784 } 57785 57786 pVarname = tcl.XTcl_NewStringObj(tls, ts+36111, -1) 57787 (*Tcl_Obj)(unsafe.Pointer(pVarname)).FrefCount++ 57788 sqlite3.Xsqlite3_randomness(tls, int32(unsafe.Sizeof(uint32(0))), bp) 57789 tcl.XTcl_AppendObjToObj(tls, pVarname, tcl.XTcl_NewIntObj(tls, int32(*(*uint32)(unsafe.Pointer(bp))&uint32(0x7FFFFFFF)))) 57790 tcl.XTcl_ObjSetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pVarname, uintptr(0), tcl.XTcl_NewWideIntObj(tls, *(*sqlite3_int64)(unsafe.Pointer(piLimit))), 0) 57791 57792 pEval = tcl.XTcl_DuplicateObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript) 57793 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 57794 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewStringObj(tls, zFilename, -1)) 57795 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, pVarname) 57796 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pEval, tcl.XTcl_NewWideIntObj(tls, iSize)) 57797 rc = tcl.XTcl_EvalObjEx(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 57798 57799 if rc == TCL_OK { 57800 var pLimit uintptr = tcl.XTcl_ObjGetVar2(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pVarname, uintptr(0), 0) 57801 rc = tcl.XTcl_GetWideIntFromObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, pLimit, bp+8) 57802 *(*sqlite3_int64)(unsafe.Pointer(piLimit)) = *(*Tcl_WideInt)(unsafe.Pointer(bp + 8)) 57803 tcl.XTcl_UnsetVar(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetString(tls, pVarname), 0) 57804 } 57805 57806 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57807 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount, 1) <= 0 { 57808 tcl.XTclFreeObj(tls, pEval) 57809 } 57810 } 57811 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 57812 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pVarname)).FrefCount, 1) <= 0 { 57813 tcl.XTclFreeObj(tls, pVarname) 57814 } 57815 } 57816 if rc != TCL_OK { 57817 tcl.XTcl_BackgroundError(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp) 57818 } 57819 } 57820 57821 func tclCallbackDestructor(tls *libc.TLS, pObj uintptr) { 57822 var p uintptr = pObj 57823 if p != 0 { 57824 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 57825 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*TclQuotaCallback)(unsafe.Pointer(p)).FpScript)).FrefCount, 1) <= 0 { 57826 tcl.XTclFreeObj(tls, (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript) 57827 } 57828 } 57829 sqlite3.Xsqlite3_free(tls, p) 57830 } 57831 } 57832 57833 func test_quota_initialize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57834 bp := tls.Alloc(4) 57835 defer tls.Free(4) 57836 57837 var zName uintptr 57838 57839 var rc int32 57840 57841 if objc != 3 { 57842 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+35000) 57843 return TCL_ERROR 57844 } 57845 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 57846 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 57847 return TCL_ERROR 57848 } 57849 if int32(*(*int8)(unsafe.Pointer(zName))) == 0 { 57850 zName = uintptr(0) 57851 } 57852 57853 rc = sqlite3_quota_initialize(tls, zName, *(*int32)(unsafe.Pointer(bp))) 57854 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 57855 57856 return TCL_OK 57857 } 57858 57859 func test_quota_shutdown(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57860 var rc int32 57861 57862 if objc != 1 { 57863 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 57864 return TCL_ERROR 57865 } 57866 57867 rc = sqlite3_quota_shutdown(tls) 57868 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 57869 57870 return TCL_OK 57871 } 57872 57873 func test_quota_set(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57874 bp := tls.Alloc(12) 57875 defer tls.Free(12) 57876 57877 var zPattern uintptr 57878 57879 var pScript uintptr 57880 var rc int32 57881 var p uintptr 57882 57883 var xDestroy uintptr 57884 var xCallback uintptr 57885 57886 if objc != 4 { 57887 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36122) 57888 return TCL_ERROR 57889 } 57890 zPattern = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 57891 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 57892 return TCL_ERROR 57893 } 57894 pScript = *(*uintptr)(unsafe.Pointer(objv + 3*8)) 57895 tcl.XTcl_GetStringFromObj(tls, pScript, bp+8) 57896 57897 if *(*int32)(unsafe.Pointer(bp + 8)) > 0 { 57898 p = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(TclQuotaCallback{}))) 57899 if !(p != 0) { 57900 tcl.XTcl_SetResult(tls, interp, ts+32929, uintptr(0)) 57901 return TCL_OK 57902 } 57903 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(TclQuotaCallback{})), libc.X__builtin_object_size(tls, p, 0)) 57904 (*TclQuotaCallback)(unsafe.Pointer(p)).Finterp = interp 57905 (*Tcl_Obj)(unsafe.Pointer(pScript)).FrefCount++ 57906 (*TclQuotaCallback)(unsafe.Pointer(p)).FpScript = pScript 57907 xDestroy = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{tclCallbackDestructor})) 57908 xCallback = *(*uintptr)(unsafe.Pointer(&struct { 57909 f func(*libc.TLS, uintptr, uintptr, sqlite3_int64, uintptr) 57910 }{tclQuotaCallback})) 57911 } else { 57912 p = uintptr(0) 57913 xDestroy = uintptr(0) 57914 xCallback = uintptr(0) 57915 } 57916 57917 rc = sqlite3_quota_set(tls, zPattern, *(*Tcl_WideInt)(unsafe.Pointer(bp)), xCallback, p, xDestroy) 57918 57919 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 57920 return TCL_OK 57921 } 57922 57923 func test_quota_file(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57924 var zFilename uintptr 57925 var rc int32 57926 57927 if objc != 2 { 57928 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33113) 57929 return TCL_ERROR 57930 } 57931 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 57932 57933 rc = sqlite3_quota_file(tls, zFilename) 57934 57935 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 57936 return TCL_OK 57937 } 57938 57939 func test_quota_dump(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57940 bp := tls.Alloc(1008) 57941 defer tls.Free(1008) 57942 57943 var pResult uintptr 57944 var pGroupTerm uintptr 57945 var pFileTerm uintptr 57946 var pGroup uintptr 57947 var pFile uintptr 57948 57949 pResult = tcl.XTcl_NewObj(tls) 57950 quotaEnter(tls) 57951 for pGroup = gQuota.FpGroup; pGroup != 0; pGroup = (*quotaGroup)(unsafe.Pointer(pGroup)).FpNext { 57952 pGroupTerm = tcl.XTcl_NewObj(tls) 57953 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 57954 tcl.XTcl_NewStringObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FzPattern, -1)) 57955 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 57956 tcl.XTcl_NewWideIntObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FiLimit)) 57957 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, 57958 tcl.XTcl_NewWideIntObj(tls, (*quotaGroup)(unsafe.Pointer(pGroup)).FiSize)) 57959 for pFile = (*quotaGroup)(unsafe.Pointer(pGroup)).FpFiles; pFile != 0; pFile = (*quotaFile)(unsafe.Pointer(pFile)).FpNext { 57960 var i int32 57961 57962 pFileTerm = tcl.XTcl_NewObj(tls) 57963 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([1000]int8{})), bp+8, ts, libc.VaList(bp, (*quotaFile)(unsafe.Pointer(pFile)).FzFilename)) 57964 for i = 0; *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) != 0; i++ { 57965 if int32(*(*int8)(unsafe.Pointer(bp + 8 + uintptr(i)))) == '\\' { 57966 *(*int8)(unsafe.Pointer(bp + 8 + uintptr(i))) = int8('/') 57967 } 57968 } 57969 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 57970 tcl.XTcl_NewStringObj(tls, bp+8, -1)) 57971 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 57972 tcl.XTcl_NewWideIntObj(tls, (*quotaFile)(unsafe.Pointer(pFile)).FiSize)) 57973 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 57974 tcl.XTcl_NewWideIntObj(tls, int64((*quotaFile)(unsafe.Pointer(pFile)).FnRef))) 57975 tcl.XTcl_ListObjAppendElement(tls, interp, pFileTerm, 57976 tcl.XTcl_NewWideIntObj(tls, int64((*quotaFile)(unsafe.Pointer(pFile)).FdeleteOnClose))) 57977 tcl.XTcl_ListObjAppendElement(tls, interp, pGroupTerm, pFileTerm) 57978 } 57979 tcl.XTcl_ListObjAppendElement(tls, interp, pResult, pGroupTerm) 57980 } 57981 quotaLeave(tls) 57982 tcl.XTcl_SetObjResult(tls, interp, pResult) 57983 return TCL_OK 57984 } 57985 57986 func test_quota_fopen(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 57987 bp := tls.Alloc(58) 57988 defer tls.Free(58) 57989 57990 var zFilename uintptr 57991 var zMode uintptr 57992 var p uintptr 57993 57994 if objc != 3 { 57995 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36143) 57996 return TCL_ERROR 57997 } 57998 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 57999 zMode = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 58000 p = sqlite3_quota_fopen(tls, zFilename, zMode) 58001 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+8, ts+9889, libc.VaList(bp, p)) 58002 tcl.XTcl_SetResult(tls, interp, bp+8, uintptr(1)) 58003 return TCL_OK 58004 } 58005 58006 func test_quota_fread(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58007 bp := tls.Alloc(8) 58008 defer tls.Free(8) 58009 58010 var p uintptr 58011 var zBuf uintptr 58012 58013 var got size_t 58014 58015 if objc != 4 { 58016 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36157) 58017 return TCL_ERROR 58018 } 58019 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58020 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 58021 return TCL_ERROR 58022 } 58023 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 58024 return TCL_ERROR 58025 } 58026 zBuf = sqlite3.Xsqlite3_malloc(tls, *(*int32)(unsafe.Pointer(bp))**(*int32)(unsafe.Pointer(bp + 4))+1) 58027 if zBuf == uintptr(0) { 58028 tcl.XTcl_SetResult(tls, interp, ts+2069, uintptr(0)) 58029 return TCL_ERROR 58030 } 58031 got = sqlite3_quota_fread(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp))), uint64(*(*int32)(unsafe.Pointer(bp + 4))), p) 58032 *(*int8)(unsafe.Pointer(zBuf + uintptr(got*size_t(*(*int32)(unsafe.Pointer(bp)))))) = int8(0) 58033 tcl.XTcl_SetResult(tls, interp, zBuf, uintptr(1)) 58034 sqlite3.Xsqlite3_free(tls, zBuf) 58035 return TCL_OK 58036 } 58037 58038 func test_quota_fwrite(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58039 bp := tls.Alloc(8) 58040 defer tls.Free(8) 58041 58042 var p uintptr 58043 var zBuf uintptr 58044 58045 var got size_t 58046 58047 if objc != 5 { 58048 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36175) 58049 return TCL_ERROR 58050 } 58051 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58052 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 58053 return TCL_ERROR 58054 } 58055 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 58056 return TCL_ERROR 58057 } 58058 zBuf = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 58059 got = sqlite3_quota_fwrite(tls, zBuf, uint64(*(*int32)(unsafe.Pointer(bp))), uint64(*(*int32)(unsafe.Pointer(bp + 4))), p) 58060 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, int64(got))) 58061 return TCL_OK 58062 } 58063 58064 func test_quota_fclose(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58065 var p uintptr 58066 var rc int32 58067 58068 if objc != 2 { 58069 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28764) 58070 return TCL_ERROR 58071 } 58072 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58073 rc = sqlite3_quota_fclose(tls, p) 58074 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 58075 return TCL_OK 58076 } 58077 58078 func test_quota_fflush(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58079 bp := tls.Alloc(4) 58080 defer tls.Free(4) 58081 58082 var p uintptr 58083 var rc int32 58084 *(*int32)(unsafe.Pointer(bp)) = 0 58085 58086 if objc != 2 && objc != 3 { 58087 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36201) 58088 return TCL_ERROR 58089 } 58090 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58091 if objc == 3 { 58092 if tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 58093 return TCL_ERROR 58094 } 58095 } 58096 rc = sqlite3_quota_fflush(tls, p, *(*int32)(unsafe.Pointer(bp))) 58097 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 58098 return TCL_OK 58099 } 58100 58101 func test_quota_fseek(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58102 bp := tls.Alloc(20) 58103 defer tls.Free(20) 58104 58105 var p uintptr 58106 58107 var zWhence uintptr 58108 var whence int32 58109 var rc int32 58110 58111 if objc != 4 { 58112 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36219) 58113 return TCL_ERROR 58114 } 58115 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58116 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) != 0 { 58117 return TCL_ERROR 58118 } 58119 zWhence = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 58120 if libc.Xstrcmp(tls, zWhence, ts+36240) == 0 { 58121 whence = SEEK_SET 58122 } else if libc.Xstrcmp(tls, zWhence, ts+36249) == 0 { 58123 whence = SEEK_CUR 58124 } else if libc.Xstrcmp(tls, zWhence, ts+36258) == 0 { 58125 whence = SEEK_END 58126 } else { 58127 tcl.XTcl_AppendResult(tls, interp, 58128 libc.VaList(bp, ts+36267, uintptr(0))) 58129 return TCL_ERROR 58130 } 58131 rc = sqlite3_quota_fseek(tls, p, int64(*(*int32)(unsafe.Pointer(bp + 16))), whence) 58132 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 58133 return TCL_OK 58134 } 58135 58136 func test_quota_rewind(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58137 var p uintptr 58138 if objc != 2 { 58139 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28764) 58140 return TCL_ERROR 58141 } 58142 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58143 sqlite3_quota_rewind(tls, p) 58144 return TCL_OK 58145 } 58146 58147 func test_quota_ftell(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58148 var p uintptr 58149 var x sqlite3_int64 58150 if objc != 2 { 58151 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28764) 58152 return TCL_ERROR 58153 } 58154 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58155 x = sqlite3_quota_ftell(tls, p) 58156 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 58157 return TCL_OK 58158 } 58159 58160 func test_quota_ftruncate(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58161 bp := tls.Alloc(8) 58162 defer tls.Free(8) 58163 58164 var p uintptr 58165 var x sqlite3_int64 58166 58167 var rc int32 58168 if objc != 3 { 58169 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36316) 58170 return TCL_ERROR 58171 } 58172 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58173 if tcl.XTcl_GetWideIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 { 58174 return TCL_ERROR 58175 } 58176 x = *(*Tcl_WideInt)(unsafe.Pointer(bp)) 58177 rc = sqlite3_quota_ftruncate(tls, p, x) 58178 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 58179 return TCL_OK 58180 } 58181 58182 func test_quota_file_size(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58183 var p uintptr 58184 var x sqlite3_int64 58185 if objc != 2 { 58186 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28764) 58187 return TCL_ERROR 58188 } 58189 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58190 x = sqlite3_quota_file_size(tls, p) 58191 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 58192 return TCL_OK 58193 } 58194 58195 func test_quota_file_truesize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58196 var p uintptr 58197 var x sqlite3_int64 58198 if objc != 2 { 58199 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28764) 58200 return TCL_ERROR 58201 } 58202 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58203 x = sqlite3_quota_file_truesize(tls, p) 58204 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 58205 return TCL_OK 58206 } 58207 58208 func test_quota_file_mtime(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58209 bp := tls.Alloc(8) 58210 defer tls.Free(8) 58211 58212 var p uintptr 58213 58214 if objc != 2 { 58215 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28764) 58216 return TCL_ERROR 58217 } 58218 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58219 *(*time_t)(unsafe.Pointer(bp)) = int64(0) 58220 sqlite3_quota_file_mtime(tls, p, bp) 58221 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, *(*time_t)(unsafe.Pointer(bp)))) 58222 return TCL_OK 58223 } 58224 58225 func test_quota_remove(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58226 var zFilename uintptr 58227 var rc int32 58228 if objc != 2 { 58229 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33113) 58230 return TCL_ERROR 58231 } 58232 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 58233 rc = sqlite3_quota_remove(tls, zFilename) 58234 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 58235 return TCL_OK 58236 } 58237 58238 func test_quota_glob(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58239 var zPattern uintptr 58240 var zText uintptr 58241 var rc int32 58242 if objc != 3 { 58243 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+36328) 58244 return TCL_ERROR 58245 } 58246 zPattern = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 58247 zText = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 58248 rc = quotaStrglob(tls, zPattern, zText) 58249 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, rc)) 58250 return TCL_OK 58251 } 58252 58253 func test_quota_file_available(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58254 var p uintptr 58255 var x sqlite3_int64 58256 if objc != 2 { 58257 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28764) 58258 return TCL_ERROR 58259 } 58260 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58261 x = sqlite3_quota_file_available(tls, p) 58262 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewWideIntObj(tls, x)) 58263 return TCL_OK 58264 } 58265 58266 func test_quota_ferror(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58267 var p uintptr 58268 var x int32 58269 if objc != 2 { 58270 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+28764) 58271 return TCL_ERROR 58272 } 58273 p = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 58274 x = sqlite3_quota_ferror(tls, p) 58275 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, x)) 58276 return TCL_OK 58277 } 58278 58279 func Sqlitequota_Init(tls *libc.TLS, interp uintptr) int32 { 58280 var i int32 58281 58282 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aCmd9))/uint64(unsafe.Sizeof(struct { 58283 FzName uintptr 58284 FxProc uintptr 58285 }{})); i++ { 58286 tcl.XTcl_CreateObjCommand(tls, interp, aCmd9[i].FzName, aCmd9[i].FxProc, uintptr(0), uintptr(0)) 58287 } 58288 58289 return TCL_OK 58290 } 58291 58292 var aCmd9 = [21]struct { 58293 FzName uintptr 58294 FxProc uintptr 58295 }{ 58296 {FzName: ts + 36341, FxProc: 0}, 58297 {FzName: ts + 36366, FxProc: 0}, 58298 {FzName: ts + 36389, FxProc: 0}, 58299 {FzName: ts + 36407, FxProc: 0}, 58300 {FzName: ts + 36426, FxProc: 0}, 58301 {FzName: ts + 36445, FxProc: 0}, 58302 {FzName: ts + 36465, FxProc: 0}, 58303 {FzName: ts + 36485, FxProc: 0}, 58304 {FzName: ts + 36506, FxProc: 0}, 58305 {FzName: ts + 36527, FxProc: 0}, 58306 {FzName: ts + 36548, FxProc: 0}, 58307 {FzName: ts + 36568, FxProc: 0}, 58308 {FzName: ts + 36589, FxProc: 0}, 58309 {FzName: ts + 36609, FxProc: 0}, 58310 {FzName: ts + 36633, FxProc: 0}, 58311 {FzName: ts + 36657, FxProc: 0}, 58312 {FzName: ts + 36685, FxProc: 0}, 58313 {FzName: ts + 36710, FxProc: 0}, 58314 {FzName: ts + 36731, FxProc: 0}, 58315 {FzName: ts + 36750, FxProc: 0}, 58316 {FzName: ts + 36779, FxProc: 0}, 58317 } 58318 58319 type Circle1 = struct { 58320 FaBox [2]struct { 58321 Fxmin float64 58322 Fxmax float64 58323 Fymin float64 58324 Fymax float64 58325 } 58326 Fcenterx float64 58327 Fcentery float64 58328 Fradius float64 58329 FmxArea float64 58330 FeScoreType int32 58331 F__ccgo_pad1 [4]byte 58332 } 58333 58334 type Circle = Circle1 58335 type Box = struct { 58336 Fxmin float64 58337 Fxmax float64 58338 Fymin float64 58339 Fymax float64 58340 } 58341 58342 func circle_del(tls *libc.TLS, p uintptr) { 58343 sqlite3.Xsqlite3_free(tls, p) 58344 } 58345 58346 func circle_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, pRes uintptr) int32 { 58347 var i int32 58348 var pCircle uintptr 58349 var xmin float64 58350 var xmax float64 58351 var ymin float64 58352 var ymax float64 58353 58354 xmin = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord)) 58355 xmax = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 1*8)) 58356 ymin = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 2*8)) 58357 ymax = *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 3*8)) 58358 pCircle = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser 58359 if pCircle == uintptr(0) { 58360 if nCoord != 4 { 58361 return SQLITE_ERROR 58362 } 58363 58364 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam != 3 || *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) < 0.0 { 58365 return SQLITE_ERROR 58366 } 58367 58368 pCircle = libc.AssignPtrUintptr(p+24, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Circle{})))) 58369 if !(pCircle != 0) { 58370 return SQLITE_NOMEM 58371 } 58372 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{circle_del})) 58373 58374 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) 58375 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 1*8)) 58376 (*Circle)(unsafe.Pointer(pCircle)).Fradius = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) 58377 58378 (*Box)(unsafe.Pointer(pCircle)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 58379 (*Box)(unsafe.Pointer(pCircle)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 58380 (*Box)(unsafe.Pointer(pCircle)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery + (*Circle)(unsafe.Pointer(pCircle)).Fradius 58381 (*Box)(unsafe.Pointer(pCircle)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery - (*Circle)(unsafe.Pointer(pCircle)).Fradius 58382 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx + (*Circle)(unsafe.Pointer(pCircle)).Fradius 58383 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx - (*Circle)(unsafe.Pointer(pCircle)).Fradius 58384 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 58385 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 58386 (*Circle)(unsafe.Pointer(pCircle)).FmxArea = (xmax-xmin)*(ymax-ymin) + 1.0 58387 } 58388 58389 for i = 0; i < 4; i++ { 58390 var x float64 58391 if i&0x01 != 0 { 58392 x = xmax 58393 } else { 58394 x = xmin 58395 } 58396 var y float64 58397 if i&0x02 != 0 { 58398 y = ymax 58399 } else { 58400 y = ymin 58401 } 58402 var d2 float64 58403 58404 d2 = (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) * (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) 58405 d2 = d2 + (y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery)*(y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery) 58406 if d2 < (*Circle)(unsafe.Pointer(pCircle)).Fradius*(*Circle)(unsafe.Pointer(pCircle)).Fradius { 58407 *(*int32)(unsafe.Pointer(pRes)) = 1 58408 return SQLITE_OK 58409 } 58410 } 58411 58412 for i = 0; i < 2; i++ { 58413 if xmin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmin && 58414 xmax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmax && 58415 ymin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymin && 58416 ymax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymax { 58417 *(*int32)(unsafe.Pointer(pRes)) = 1 58418 return SQLITE_OK 58419 } 58420 } 58421 58422 *(*int32)(unsafe.Pointer(pRes)) = 0 58423 return SQLITE_OK 58424 } 58425 58426 func circle_query_func(tls *libc.TLS, p uintptr) int32 { 58427 var i int32 58428 var pCircle uintptr 58429 var xmin float64 58430 var xmax float64 58431 var ymin float64 58432 var ymax float64 58433 var nWithin int32 = 0 58434 58435 xmin = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord)) 58436 xmax = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 1*8)) 58437 ymin = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 2*8)) 58438 ymax = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 3*8)) 58439 pCircle = (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FpUser 58440 if pCircle == uintptr(0) { 58441 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnCoord != 4 { 58442 return SQLITE_ERROR 58443 } 58444 58445 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 4 && (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 1 { 58446 return SQLITE_ERROR 58447 } 58448 58449 pCircle = libc.AssignPtrUintptr(p+24, sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Circle{})))) 58450 if !(pCircle != 0) { 58451 return SQLITE_NOMEM 58452 } 58453 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{circle_del})) 58454 58455 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam == 4 { 58456 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam)) 58457 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 1*8)) 58458 (*Circle)(unsafe.Pointer(pCircle)).Fradius = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 2*8)) 58459 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = libc.Int32FromFloat64(*(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 3*8))) 58460 } else { 58461 var z uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FapSqlParam))) 58462 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = 0.0 58463 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = 0.0 58464 (*Circle)(unsafe.Pointer(pCircle)).Fradius = 0.0 58465 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = 0 58466 for z != 0 && *(*int8)(unsafe.Pointer(z)) != 0 { 58467 if int32(*(*int8)(unsafe.Pointer(z))) == 'r' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 58468 (*Circle)(unsafe.Pointer(pCircle)).Fradius = libc.Xatof(tls, z+2) 58469 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'x' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 58470 (*Circle)(unsafe.Pointer(pCircle)).Fcenterx = libc.Xatof(tls, z+2) 58471 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'y' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 58472 (*Circle)(unsafe.Pointer(pCircle)).Fcentery = libc.Xatof(tls, z+2) 58473 } else if int32(*(*int8)(unsafe.Pointer(z))) == 'e' && int32(*(*int8)(unsafe.Pointer(z + 1))) == ':' { 58474 (*Circle)(unsafe.Pointer(pCircle)).FeScoreType = libc.Int32FromFloat64(libc.Xatof(tls, z+2)) 58475 } else if int32(*(*int8)(unsafe.Pointer(z))) == ' ' { 58476 z++ 58477 continue 58478 } 58479 for int32(*(*int8)(unsafe.Pointer(z))) != 0 && int32(*(*int8)(unsafe.Pointer(z))) != ' ' { 58480 z++ 58481 } 58482 for int32(*(*int8)(unsafe.Pointer(z))) == ' ' { 58483 z++ 58484 } 58485 } 58486 } 58487 if (*Circle)(unsafe.Pointer(pCircle)).Fradius < 0.0 { 58488 sqlite3.Xsqlite3_free(tls, pCircle) 58489 return SQLITE_NOMEM 58490 } 58491 58492 (*Box)(unsafe.Pointer(pCircle)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 58493 (*Box)(unsafe.Pointer(pCircle)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx 58494 (*Box)(unsafe.Pointer(pCircle)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery + (*Circle)(unsafe.Pointer(pCircle)).Fradius 58495 (*Box)(unsafe.Pointer(pCircle)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery - (*Circle)(unsafe.Pointer(pCircle)).Fradius 58496 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmin = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx + (*Circle)(unsafe.Pointer(pCircle)).Fradius 58497 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fxmax = (*Circle)(unsafe.Pointer(pCircle)).Fcenterx - (*Circle)(unsafe.Pointer(pCircle)).Fradius 58498 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymin = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 58499 (*Box)(unsafe.Pointer(pCircle + 1*32)).Fymax = (*Circle)(unsafe.Pointer(pCircle)).Fcentery 58500 (*Circle)(unsafe.Pointer(pCircle)).FmxArea = float64(200.0) * 200.0 58501 } 58502 58503 for i = 0; i < 4; i++ { 58504 var x float64 58505 if i&0x01 != 0 { 58506 x = xmax 58507 } else { 58508 x = xmin 58509 } 58510 var y float64 58511 if i&0x02 != 0 { 58512 y = ymax 58513 } else { 58514 y = ymin 58515 } 58516 var d2 float64 58517 58518 d2 = (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) * (x - (*Circle)(unsafe.Pointer(pCircle)).Fcenterx) 58519 d2 = d2 + (y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery)*(y-(*Circle)(unsafe.Pointer(pCircle)).Fcentery) 58520 if d2 < (*Circle)(unsafe.Pointer(pCircle)).Fradius*(*Circle)(unsafe.Pointer(pCircle)).Fradius { 58521 nWithin++ 58522 } 58523 } 58524 58525 if nWithin == 0 { 58526 for i = 0; i < 2; i++ { 58527 if xmin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmin && 58528 xmax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fxmax && 58529 ymin <= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymin && 58530 ymax >= (*Box)(unsafe.Pointer(pCircle+uintptr(i)*32)).Fymax { 58531 nWithin = 1 58532 break 58533 } 58534 } 58535 } 58536 58537 if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 1 { 58538 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 58539 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 2 { 58540 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 58541 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 3 { 58542 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel == 1 { 58543 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 1.0 - (xmax-xmin)*(ymax-ymin)/(*Circle)(unsafe.Pointer(pCircle)).FmxArea 58544 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore < 0.01 { 58545 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 0.01 58546 } 58547 } else { 58548 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = 0.0 58549 } 58550 } else if (*Circle)(unsafe.Pointer(pCircle)).FeScoreType == 4 { 58551 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 58552 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiRowid&int64(1) != 0 { 58553 nWithin = 0 58554 } 58555 } else { 58556 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 58557 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiRowid&int64(1) != 0 { 58558 nWithin = 0 58559 } 58560 } 58561 if nWithin == 0 { 58562 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = NOT_WITHIN 58563 } else if nWithin >= 4 { 58564 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 58565 } else { 58566 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = PARTLY_WITHIN 58567 } 58568 return SQLITE_OK 58569 } 58570 58571 func bfs_query_func(tls *libc.TLS, p uintptr) int32 { 58572 var x0 float64 58573 var x1 float64 58574 var y0 float64 58575 var y1 float64 58576 var bx0 float64 58577 var bx1 float64 58578 var by0 float64 58579 var by1 float64 58580 58581 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FnParam != 4 { 58582 return SQLITE_ERROR 58583 } 58584 x0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord)) 58585 x1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 1*8)) 58586 y0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 2*8)) 58587 y1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaCoord + 3*8)) 58588 bx0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam)) 58589 bx1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 1*8)) 58590 by0 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 2*8)) 58591 by1 = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FaParam + 3*8)) 58592 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FrScore = sqlite3_rtree_dbl(100 - (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FiLevel) 58593 if (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeParentWithin == FULLY_WITHIN { 58594 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 58595 } else if x0 >= bx0 && x1 <= bx1 && y0 >= by0 && y1 <= by1 { 58596 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = FULLY_WITHIN 58597 } else if x1 >= bx0 && x0 <= bx1 && y1 >= by0 && y0 <= by1 { 58598 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = PARTLY_WITHIN 58599 } else { 58600 (*sqlite3_rtree_query_info)(unsafe.Pointer(p)).FeWithin = NOT_WITHIN 58601 } 58602 return SQLITE_OK 58603 } 58604 58605 type Cube1 = struct { 58606 Fx float64 58607 Fy float64 58608 Fz float64 58609 Fwidth float64 58610 Fheight float64 58611 Fdepth float64 58612 } 58613 58614 type Cube = Cube1 58615 58616 func cube_context_free(tls *libc.TLS, p uintptr) { 58617 sqlite3.Xsqlite3_free(tls, p) 58618 } 58619 58620 var gHere int32 = 42 58621 58622 func cube_geom(tls *libc.TLS, p uintptr, nCoord int32, aCoord uintptr, piRes uintptr) int32 { 58623 var pCube uintptr = (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser 58624 58625 if pCube == uintptr(0) { 58626 if (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FnParam != 6 || nCoord != 6 || 58627 *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 3*8)) <= 0.0 || *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 4*8)) <= 0.0 || *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 5*8)) <= 0.0 { 58628 return SQLITE_ERROR 58629 } 58630 pCube = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Cube{}))) 58631 if !(pCube != 0) { 58632 return SQLITE_NOMEM 58633 } 58634 (*Cube)(unsafe.Pointer(pCube)).Fx = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam)) 58635 (*Cube)(unsafe.Pointer(pCube)).Fy = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 1*8)) 58636 (*Cube)(unsafe.Pointer(pCube)).Fz = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 2*8)) 58637 (*Cube)(unsafe.Pointer(pCube)).Fwidth = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 3*8)) 58638 (*Cube)(unsafe.Pointer(pCube)).Fheight = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 4*8)) 58639 (*Cube)(unsafe.Pointer(pCube)).Fdepth = *(*sqlite3_rtree_dbl)(unsafe.Pointer((*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FaParam + 5*8)) 58640 58641 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FpUser = pCube 58642 (*sqlite3_rtree_geometry)(unsafe.Pointer(p)).FxDelUser = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{cube_context_free})) 58643 } 58644 58645 *(*int32)(unsafe.Pointer(piRes)) = 0 58646 if *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord)) <= (*Cube)(unsafe.Pointer(pCube)).Fx+(*Cube)(unsafe.Pointer(pCube)).Fwidth && 58647 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 1*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fx && 58648 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 2*8)) <= (*Cube)(unsafe.Pointer(pCube)).Fy+(*Cube)(unsafe.Pointer(pCube)).Fheight && 58649 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 3*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fy && 58650 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 4*8)) <= (*Cube)(unsafe.Pointer(pCube)).Fz+(*Cube)(unsafe.Pointer(pCube)).Fdepth && 58651 *(*sqlite3_rtree_dbl)(unsafe.Pointer(aCoord + 5*8)) >= (*Cube)(unsafe.Pointer(pCube)).Fz { 58652 *(*int32)(unsafe.Pointer(piRes)) = 1 58653 } 58654 58655 return SQLITE_OK 58656 } 58657 58658 func register_cube_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58659 bp := tls.Alloc(8) 58660 defer tls.Free(8) 58661 58662 var rc int32 58663 58664 if objc != 2 { 58665 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 58666 return TCL_ERROR 58667 } 58668 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 58669 return TCL_ERROR 58670 } 58671 rc = sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36800, *(*uintptr)(unsafe.Pointer(&struct { 58672 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 58673 }{cube_geom})), uintptr(unsafe.Pointer(&gHere))) 58674 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 58675 return TCL_OK 58676 } 58677 58678 func register_circle_geom(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 58679 bp := tls.Alloc(8) 58680 defer tls.Free(8) 58681 58682 var rc int32 58683 58684 if objc != 2 { 58685 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 58686 return TCL_ERROR 58687 } 58688 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 58689 return TCL_ERROR 58690 } 58691 rc = sqlite3.Xsqlite3_rtree_geometry_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36805, *(*uintptr)(unsafe.Pointer(&struct { 58692 f func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32 58693 }{circle_geom})), uintptr(0)) 58694 if rc == SQLITE_OK { 58695 rc = sqlite3.Xsqlite3_rtree_query_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36812, 58696 *(*uintptr)(unsafe.Pointer(&struct { 58697 f func(*libc.TLS, uintptr) int32 58698 }{circle_query_func})), uintptr(0), uintptr(0)) 58699 } 58700 if rc == SQLITE_OK { 58701 rc = sqlite3.Xsqlite3_rtree_query_callback(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+36820, 58702 *(*uintptr)(unsafe.Pointer(&struct { 58703 f func(*libc.TLS, uintptr) int32 58704 }{bfs_query_func})), uintptr(0), uintptr(0)) 58705 } 58706 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 58707 return TCL_OK 58708 } 58709 58710 func Sqlitetestrtree_Init(tls *libc.TLS, interp uintptr) int32 { 58711 tcl.XTcl_CreateObjCommand(tls, interp, ts+36839, *(*uintptr)(unsafe.Pointer(&struct { 58712 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58713 }{register_cube_geom})), uintptr(0), uintptr(0)) 58714 tcl.XTcl_CreateObjCommand(tls, interp, ts+36858, *(*uintptr)(unsafe.Pointer(&struct { 58715 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 58716 }{register_circle_geom})), uintptr(0), uintptr(0)) 58717 return TCL_OK 58718 } 58719 58720 type schema_vtab1 = struct { 58721 Fbase sqlite3_vtab 58722 Fdb uintptr 58723 } 58724 58725 type schema_vtab = schema_vtab1 58726 type schema_cursor1 = struct { 58727 Fbase sqlite3_vtab_cursor 58728 FpDbList uintptr 58729 FpTableList uintptr 58730 FpColumnList uintptr 58731 Frowid int32 58732 F__ccgo_pad1 [4]byte 58733 } 58734 58735 type schema_cursor = schema_cursor1 58736 58737 func schemaDestroy(tls *libc.TLS, pVtab uintptr) int32 { 58738 sqlite3.Xsqlite3_free(tls, pVtab) 58739 return 0 58740 } 58741 58742 func schemaCreate(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 58743 var rc int32 = SQLITE_NOMEM 58744 var pVtab uintptr = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(schema_vtab{}))) 58745 if pVtab != 0 { 58746 libc.X__builtin___memset_chk(tls, pVtab, 0, uint64(unsafe.Sizeof(schema_vtab{})), libc.X__builtin_object_size(tls, pVtab, 0)) 58747 (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb = db 58748 rc = sqlite3.Xsqlite3_declare_vtab(tls, db, ts+36879) 58749 } 58750 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 58751 return rc 58752 } 58753 58754 func schemaOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 58755 var rc int32 = SQLITE_NOMEM 58756 var pCur uintptr 58757 pCur = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(schema_cursor{}))) 58758 if pCur != 0 { 58759 libc.X__builtin___memset_chk(tls, pCur, 0, uint64(unsafe.Sizeof(schema_cursor{})), libc.X__builtin_object_size(tls, pCur, 0)) 58760 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 58761 rc = SQLITE_OK 58762 } 58763 return rc 58764 } 58765 58766 func schemaClose(tls *libc.TLS, cur uintptr) int32 { 58767 var pCur uintptr = cur 58768 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList) 58769 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList) 58770 sqlite3.Xsqlite3_finalize(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList) 58771 sqlite3.Xsqlite3_free(tls, pCur) 58772 return SQLITE_OK 58773 } 58774 58775 func schemaColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 58776 var pCur uintptr = cur 58777 switch i { 58778 case 0: 58779 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 1)) 58780 break 58781 case 1: 58782 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList, 0)) 58783 break 58784 default: 58785 sqlite3.Xsqlite3_result_value(tls, ctx, sqlite3.Xsqlite3_column_value(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList, i-2)) 58786 break 58787 } 58788 return SQLITE_OK 58789 } 58790 58791 func schemaRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 58792 var pCur uintptr = cur 58793 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = sqlite_int64((*schema_cursor)(unsafe.Pointer(pCur)).Frowid) 58794 return SQLITE_OK 58795 } 58796 58797 func finalize(tls *libc.TLS, ppStmt uintptr) int32 { 58798 var rc int32 = sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(ppStmt))) 58799 *(*uintptr)(unsafe.Pointer(ppStmt)) = uintptr(0) 58800 return rc 58801 } 58802 58803 func schemaEof(tls *libc.TLS, cur uintptr) int32 { 58804 var pCur uintptr = cur 58805 return func() int32 { 58806 if (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList != 0 { 58807 return 0 58808 } 58809 return 1 58810 }() 58811 } 58812 58813 func schemaNext(tls *libc.TLS, cur uintptr) int32 { 58814 bp := tls.Alloc(24) 58815 defer tls.Free(24) 58816 58817 var rc int32 58818 var pCur uintptr 58819 var pVtab uintptr 58820 var zSql uintptr 58821 var pDbList uintptr 58822 rc = SQLITE_OK 58823 pCur = cur 58824 pVtab = (*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab 58825 zSql = uintptr(0) 58826 58827 __1: 58828 if !(!(int32((*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList) != 0) || SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpColumnList)) { 58829 goto __2 58830 } 58831 if !(SQLITE_OK != libc.AssignInt32(&rc, finalize(tls, pCur+24))) { 58832 goto __3 58833 } 58834 goto next_exit 58835 __3: 58836 ; 58837 __4: 58838 if !(!(int32((*schema_cursor)(unsafe.Pointer(pCur)).FpTableList) != 0) || SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList)) { 58839 goto __5 58840 } 58841 if !(SQLITE_OK != libc.AssignInt32(&rc, finalize(tls, pCur+16))) { 58842 goto __6 58843 } 58844 goto next_exit 58845 __6: 58846 ; 58847 __7: 58848 if !(SQLITE_ROW != sqlite3.Xsqlite3_step(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList)) { 58849 goto __8 58850 } 58851 rc = finalize(tls, pCur+8) 58852 goto next_exit 58853 goto __7 58854 __8: 58855 ; 58856 if !(sqlite3.Xsqlite3_column_int(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 0) == 1) { 58857 goto __9 58858 } 58859 zSql = sqlite3.Xsqlite3_mprintf(tls, 58860 ts+36951, 0) 58861 goto __10 58862 __9: 58863 pDbList = (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList 58864 zSql = sqlite3.Xsqlite3_mprintf(tls, 58865 ts+37006, 58866 libc.VaList(bp, sqlite3.Xsqlite3_column_text(tls, pDbList, 1))) 58867 __10: 58868 ; 58869 if !!(zSql != 0) { 58870 goto __11 58871 } 58872 rc = SQLITE_NOMEM 58873 goto next_exit 58874 __11: 58875 ; 58876 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, pCur+16, uintptr(0)) 58877 sqlite3.Xsqlite3_free(tls, zSql) 58878 if !(rc != SQLITE_OK) { 58879 goto __12 58880 } 58881 goto next_exit 58882 __12: 58883 ; 58884 goto __4 58885 __5: 58886 ; 58887 zSql = sqlite3.Xsqlite3_mprintf(tls, ts+37059, 58888 libc.VaList(bp+8, sqlite3.Xsqlite3_column_text(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpDbList, 1), 58889 sqlite3.Xsqlite3_column_text(tls, (*schema_cursor)(unsafe.Pointer(pCur)).FpTableList, 0))) 58890 58891 if !!(zSql != 0) { 58892 goto __13 58893 } 58894 rc = SQLITE_NOMEM 58895 goto next_exit 58896 __13: 58897 ; 58898 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, zSql, -1, pCur+24, uintptr(0)) 58899 sqlite3.Xsqlite3_free(tls, zSql) 58900 if !(rc != SQLITE_OK) { 58901 goto __14 58902 } 58903 goto next_exit 58904 __14: 58905 ; 58906 goto __1 58907 __2: 58908 ; 58909 (*schema_cursor)(unsafe.Pointer(pCur)).Frowid++ 58910 58911 next_exit: 58912 return rc 58913 } 58914 58915 func schemaFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 58916 var rc int32 58917 var pVtab uintptr = (*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab 58918 var pCur uintptr = pVtabCursor 58919 (*schema_cursor)(unsafe.Pointer(pCur)).Frowid = 0 58920 finalize(tls, pCur+16) 58921 finalize(tls, pCur+24) 58922 finalize(tls, pCur+8) 58923 rc = sqlite3.Xsqlite3_prepare(tls, (*schema_vtab)(unsafe.Pointer(pVtab)).Fdb, ts+37084, -1, pCur+8, uintptr(0)) 58924 return func() int32 { 58925 if rc == SQLITE_OK { 58926 return schemaNext(tls, pVtabCursor) 58927 } 58928 return rc 58929 }() 58930 } 58931 58932 func schemaBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 58933 return SQLITE_OK 58934 } 58935 58936 var schemaModule = sqlite3_module{ 58937 FxCreate: 0, 58938 FxConnect: 0, 58939 FxBestIndex: 0, 58940 FxDisconnect: 0, 58941 FxDestroy: 0, 58942 FxOpen: 0, 58943 FxClose: 0, 58944 FxFilter: 0, 58945 FxNext: 0, 58946 FxEof: 0, 58947 FxColumn: 0, 58948 FxRowid: 0, 58949 } 58950 58951 func register_schema_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 58952 bp := tls.Alloc(8) 58953 defer tls.Free(8) 58954 58955 if objc != 2 { 58956 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 58957 return TCL_ERROR 58958 } 58959 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 58960 return TCL_ERROR 58961 } 58962 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+4808, uintptr(unsafe.Pointer(&schemaModule)), uintptr(0)) 58963 return TCL_OK 58964 } 58965 58966 func Sqlitetestschema_Init(tls *libc.TLS, interp uintptr) int32 { 58967 var i int32 58968 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd12))/uint64(unsafe.Sizeof(struct { 58969 FzName uintptr 58970 FxProc uintptr 58971 FclientData uintptr 58972 }{})); i++ { 58973 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd12[i].FzName, 58974 aObjCmd12[i].FxProc, aObjCmd12[i].FclientData, uintptr(0)) 58975 } 58976 return TCL_OK 58977 } 58978 58979 var aObjCmd12 = [1]struct { 58980 FzName uintptr 58981 FxProc uintptr 58982 FclientData uintptr 58983 }{ 58984 {FzName: ts + 37105, FxProc: 0}, 58985 } 58986 58987 type SqlMessage1 = struct { 58988 Fop int32 58989 F__ccgo_pad1 [4]byte 58990 FpDb uintptr 58991 FpStmt uintptr 58992 FerrCode int32 58993 F__ccgo_pad2 [4]byte 58994 FzIn uintptr 58995 FnByte int32 58996 F__ccgo_pad3 [4]byte 58997 FzOut uintptr 58998 FpNext uintptr 58999 FpPrev uintptr 59000 FclientMutex pthread_mutex_t 59001 FclientWakeup pthread_cond_t 59002 } 59003 59004 type SqlMessage = SqlMessage1 59005 59006 type ServerState = struct { 59007 FqueueMutex pthread_mutex_t 59008 FserverMutex pthread_mutex_t 59009 FserverWakeup pthread_cond_t 59010 FserverHalt int32 59011 F__ccgo_pad1 [4]byte 59012 FpQueueHead uintptr 59013 FpQueueTail uintptr 59014 } 59015 59016 var g4 = ServerState{ 59017 FqueueMutex: pthread_mutex_t{F__sig: int64(X_PTHREAD_MUTEX_SIG_init)}, 59018 FserverMutex: pthread_mutex_t{F__sig: int64(X_PTHREAD_MUTEX_SIG_init)}, 59019 FserverWakeup: pthread_cond_t{F__sig: int64(X_PTHREAD_COND_SIG_init)}} 59020 59021 func sendToServer(tls *libc.TLS, pMsg uintptr) { 59022 libc.Xpthread_mutex_init(tls, pMsg+72, uintptr(0)) 59023 libc.Xpthread_cond_init(tls, pMsg+136, uintptr(0)) 59024 59025 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))) 59026 (*SqlMessage)(unsafe.Pointer(pMsg)).FpNext = g4.FpQueueHead 59027 if g4.FpQueueHead == uintptr(0) { 59028 g4.FpQueueTail = pMsg 59029 } else { 59030 (*SqlMessage)(unsafe.Pointer(g4.FpQueueHead)).FpPrev = pMsg 59031 } 59032 (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev = uintptr(0) 59033 g4.FpQueueHead = pMsg 59034 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))) 59035 59036 libc.Xpthread_mutex_lock(tls, pMsg+72) 59037 libc.Xpthread_cond_signal(tls, uintptr(unsafe.Pointer(&g4))+128) 59038 for (*SqlMessage)(unsafe.Pointer(pMsg)).Fop != MSG_Done { 59039 libc.Xpthread_cond_wait(tls, pMsg+136, pMsg+72) 59040 } 59041 libc.Xpthread_mutex_unlock(tls, pMsg+72) 59042 59043 libc.Xpthread_mutex_destroy(tls, pMsg+72) 59044 libc.Xpthread_cond_destroy(tls, pMsg+136) 59045 } 59046 59047 func sqlite3_client_open(tls *libc.TLS, zDatabaseName uintptr, ppDb uintptr) int32 { 59048 bp := tls.Alloc(184) 59049 defer tls.Free(184) 59050 59051 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Open 59052 (*SqlMessage)(unsafe.Pointer(bp)).FzIn = zDatabaseName 59053 sendToServer(tls, bp) 59054 *(*uintptr)(unsafe.Pointer(ppDb)) = (*SqlMessage)(unsafe.Pointer(bp)).FpDb 59055 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 59056 } 59057 59058 func sqlite3_client_prepare(tls *libc.TLS, pDb uintptr, zSql uintptr, nByte int32, ppStmt uintptr, pzTail uintptr) int32 { 59059 bp := tls.Alloc(184) 59060 defer tls.Free(184) 59061 59062 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Prepare 59063 (*SqlMessage)(unsafe.Pointer(bp)).FpDb = pDb 59064 (*SqlMessage)(unsafe.Pointer(bp)).FzIn = zSql 59065 (*SqlMessage)(unsafe.Pointer(bp)).FnByte = nByte 59066 sendToServer(tls, bp) 59067 *(*uintptr)(unsafe.Pointer(ppStmt)) = (*SqlMessage)(unsafe.Pointer(bp)).FpStmt 59068 if pzTail != 0 { 59069 *(*uintptr)(unsafe.Pointer(pzTail)) = (*SqlMessage)(unsafe.Pointer(bp)).FzOut 59070 } 59071 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 59072 } 59073 59074 func sqlite3_client_step(tls *libc.TLS, pStmt uintptr) int32 { 59075 bp := tls.Alloc(184) 59076 defer tls.Free(184) 59077 59078 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Step 59079 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 59080 sendToServer(tls, bp) 59081 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 59082 } 59083 59084 func sqlite3_client_reset(tls *libc.TLS, pStmt uintptr) int32 { 59085 bp := tls.Alloc(184) 59086 defer tls.Free(184) 59087 59088 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Reset 59089 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 59090 sendToServer(tls, bp) 59091 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 59092 } 59093 59094 func sqlite3_client_finalize(tls *libc.TLS, pStmt uintptr) int32 { 59095 bp := tls.Alloc(184) 59096 defer tls.Free(184) 59097 59098 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Finalize 59099 (*SqlMessage)(unsafe.Pointer(bp)).FpStmt = pStmt 59100 sendToServer(tls, bp) 59101 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 59102 } 59103 59104 func sqlite3_client_close(tls *libc.TLS, pDb uintptr) int32 { 59105 bp := tls.Alloc(184) 59106 defer tls.Free(184) 59107 59108 (*SqlMessage)(unsafe.Pointer(bp)).Fop = MSG_Close 59109 (*SqlMessage)(unsafe.Pointer(bp)).FpDb = pDb 59110 sendToServer(tls, bp) 59111 return (*SqlMessage)(unsafe.Pointer(bp)).FerrCode 59112 } 59113 59114 func sqlite3_server(tls *libc.TLS, NotUsed uintptr) uintptr { 59115 if libc.Xpthread_mutex_trylock(tls, uintptr(unsafe.Pointer(&g4))+64) != 0 { 59116 return uintptr(0) 59117 } 59118 sqlite3.Xsqlite3_enable_shared_cache(tls, 1) 59119 for !(g4.FserverHalt != 0) { 59120 var pMsg uintptr 59121 59122 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))) 59123 for g4.FpQueueTail == uintptr(0) && g4.FserverHalt == 0 { 59124 libc.Xpthread_cond_wait(tls, uintptr(unsafe.Pointer(&g4))+128, uintptr(unsafe.Pointer(&g4))) 59125 } 59126 pMsg = g4.FpQueueTail 59127 if pMsg != 0 { 59128 if (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev != 0 { 59129 (*SqlMessage)(unsafe.Pointer((*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev)).FpNext = uintptr(0) 59130 } else { 59131 g4.FpQueueHead = uintptr(0) 59132 } 59133 g4.FpQueueTail = (*SqlMessage)(unsafe.Pointer(pMsg)).FpPrev 59134 } 59135 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))) 59136 if pMsg == uintptr(0) { 59137 break 59138 } 59139 59140 libc.Xpthread_mutex_lock(tls, pMsg+72) 59141 switch (*SqlMessage)(unsafe.Pointer(pMsg)).Fop { 59142 case MSG_Open: 59143 { 59144 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_open(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FzIn, pMsg+8) 59145 break 59146 59147 } 59148 case MSG_Prepare: 59149 { 59150 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_prepare(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpDb, (*SqlMessage)(unsafe.Pointer(pMsg)).FzIn, (*SqlMessage)(unsafe.Pointer(pMsg)).FnByte, 59151 pMsg+16, pMsg+48) 59152 break 59153 59154 } 59155 case MSG_Step: 59156 { 59157 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_step(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 59158 break 59159 59160 } 59161 case MSG_Reset: 59162 { 59163 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_reset(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 59164 break 59165 59166 } 59167 case MSG_Finalize: 59168 { 59169 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_finalize(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpStmt) 59170 break 59171 59172 } 59173 case MSG_Close: 59174 { 59175 (*SqlMessage)(unsafe.Pointer(pMsg)).FerrCode = sqlite3.Xsqlite3_close(tls, (*SqlMessage)(unsafe.Pointer(pMsg)).FpDb) 59176 break 59177 59178 } 59179 } 59180 59181 (*SqlMessage)(unsafe.Pointer(pMsg)).Fop = MSG_Done 59182 libc.Xpthread_mutex_unlock(tls, pMsg+72) 59183 libc.Xpthread_cond_signal(tls, pMsg+136) 59184 } 59185 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))+64) 59186 return uintptr(0) 59187 } 59188 59189 func sqlite3_server_start(tls *libc.TLS) { 59190 bp := tls.Alloc(8) 59191 defer tls.Free(8) 59192 59193 var rc int32 59194 g4.FserverHalt = 0 59195 rc = libc.Xpthread_create(tls, bp, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 59196 f func(*libc.TLS, uintptr) uintptr 59197 }{sqlite3_server})), uintptr(0)) 59198 if rc == 0 { 59199 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp))) 59200 } 59201 } 59202 59203 func serverWrapper(tls *libc.TLS, pnDecr uintptr) uintptr { 59204 var p uintptr = sqlite3_server(tls, uintptr(0)) 59205 *(*int32)(unsafe.Pointer(pnDecr))-- 59206 return p 59207 } 59208 59209 func sqlite3_server_start2(tls *libc.TLS, pnDecr uintptr) { 59210 bp := tls.Alloc(8) 59211 defer tls.Free(8) 59212 59213 var rc int32 59214 g4.FserverHalt = 0 59215 rc = libc.Xpthread_create(tls, bp, uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 59216 f func(*libc.TLS, uintptr) uintptr 59217 }{serverWrapper})), pnDecr) 59218 if rc == 0 { 59219 libc.Xpthread_detach(tls, *(*pthread_t)(unsafe.Pointer(bp))) 59220 } 59221 } 59222 59223 func sqlite3_server_stop(tls *libc.TLS) { 59224 g4.FserverHalt = 1 59225 libc.Xpthread_cond_broadcast(tls, uintptr(unsafe.Pointer(&g4))+128) 59226 libc.Xpthread_mutex_lock(tls, uintptr(unsafe.Pointer(&g4))+64) 59227 libc.Xpthread_mutex_unlock(tls, uintptr(unsafe.Pointer(&g4))+64) 59228 } 59229 59230 type SuperlockBusy1 = struct { 59231 FxBusy uintptr 59232 FpBusyArg uintptr 59233 FnBusy int32 59234 F__ccgo_pad1 [4]byte 59235 } 59236 59237 type SuperlockBusy = SuperlockBusy1 59238 59239 type Superlock1 = struct { 59240 Fdb uintptr 59241 FbWal int32 59242 F__ccgo_pad1 [4]byte 59243 } 59244 59245 type Superlock = Superlock1 59246 59247 func superlockBusyHandler(tls *libc.TLS, pCtx uintptr, UNUSED int32) int32 { 59248 var pBusy uintptr = pCtx 59249 if (*SuperlockBusy)(unsafe.Pointer(pBusy)).FxBusy == uintptr(0) { 59250 return 0 59251 } 59252 return (*struct { 59253 f func(*libc.TLS, uintptr, int32) int32 59254 })(unsafe.Pointer(&struct{ uintptr }{(*SuperlockBusy)(unsafe.Pointer(pBusy)).FxBusy})).f(tls, (*SuperlockBusy)(unsafe.Pointer(pBusy)).FpBusyArg, libc.PostIncInt32(&(*SuperlockBusy)(unsafe.Pointer(pBusy)).FnBusy, 1)) 59255 } 59256 59257 func superlockIsWal(tls *libc.TLS, pLock uintptr) int32 { 59258 bp := tls.Alloc(8) 59259 defer tls.Free(8) 59260 59261 var rc int32 59262 59263 rc = sqlite3.Xsqlite3_prepare(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+37128, -1, bp, uintptr(0)) 59264 if rc != SQLITE_OK { 59265 return rc 59266 } 59267 59268 (*Superlock)(unsafe.Pointer(pLock)).FbWal = 0 59269 if SQLITE_ROW == sqlite3.Xsqlite3_step(tls, *(*uintptr)(unsafe.Pointer(bp))) { 59270 var zMode uintptr = sqlite3.Xsqlite3_column_text(tls, *(*uintptr)(unsafe.Pointer(bp)), 0) 59271 if zMode != 0 && libc.Xstrlen(tls, zMode) == uint64(3) && sqlite3.Xsqlite3_strnicmp(tls, ts+30050, zMode, 3) == 0 { 59272 (*Superlock)(unsafe.Pointer(pLock)).FbWal = 1 59273 } 59274 } 59275 59276 return sqlite3.Xsqlite3_finalize(tls, *(*uintptr)(unsafe.Pointer(bp))) 59277 } 59278 59279 func superlockShmLock(tls *libc.TLS, fd uintptr, idx int32, nByte int32, pBusy uintptr) int32 { 59280 var rc int32 59281 var xShmLock uintptr = (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(fd)).FpMethods)).FxShmLock 59282 for __ccgo := true; __ccgo; __ccgo = rc == SQLITE_BUSY && superlockBusyHandler(tls, pBusy, 0) != 0 { 59283 rc = (*struct { 59284 f func(*libc.TLS, uintptr, int32, int32, int32) int32 59285 })(unsafe.Pointer(&struct{ uintptr }{xShmLock})).f(tls, fd, idx, nByte, SQLITE_SHM_LOCK|SQLITE_SHM_EXCLUSIVE) 59286 } 59287 return rc 59288 } 59289 59290 func superlockWalLock(tls *libc.TLS, db uintptr, pBusy uintptr) int32 { 59291 bp := tls.Alloc(16) 59292 defer tls.Free(16) 59293 59294 var rc int32 59295 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 59296 *(*uintptr)(unsafe.Pointer(bp + 8)) = uintptr(0) 59297 59298 rc = sqlite3.Xsqlite3_file_control(tls, db, ts+85, SQLITE_FCNTL_FILE_POINTER, bp) 59299 if rc != SQLITE_OK { 59300 return rc 59301 } 59302 59303 rc = superlockShmLock(tls, *(*uintptr)(unsafe.Pointer(bp)), 2, 1, pBusy) 59304 if rc != SQLITE_OK { 59305 return rc 59306 } 59307 59308 rc = (*struct { 59309 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 59310 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpMethods)).FxShmMap})).f(tls, *(*uintptr)(unsafe.Pointer(bp)), 0, 32*1024, 1, bp+8) 59311 if rc != SQLITE_OK { 59312 return rc 59313 } 59314 libc.X__builtin___memset_chk(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0, uint64(32), libc.X__builtin_object_size(tls, *(*uintptr)(unsafe.Pointer(bp + 8)), 0)) 59315 59316 rc = superlockShmLock(tls, *(*uintptr)(unsafe.Pointer(bp)), 3, SQLITE_SHM_NLOCK-3, pBusy) 59317 return rc 59318 } 59319 59320 func sqlite3demo_superunlock(tls *libc.TLS, pLock uintptr) { 59321 bp := tls.Alloc(8) 59322 defer tls.Free(8) 59323 59324 var p uintptr = pLock 59325 if (*Superlock)(unsafe.Pointer(p)).FbWal != 0 { 59326 var rc int32 59327 var flags int32 = SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE 59328 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 59329 rc = sqlite3.Xsqlite3_file_control(tls, (*Superlock)(unsafe.Pointer(p)).Fdb, ts+85, SQLITE_FCNTL_FILE_POINTER, bp) 59330 if rc == SQLITE_OK { 59331 (*struct { 59332 f func(*libc.TLS, uintptr, int32, int32, int32) int32 59333 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpMethods)).FxShmLock})).f(tls, *(*uintptr)(unsafe.Pointer(bp)), 2, 1, flags) 59334 (*struct { 59335 f func(*libc.TLS, uintptr, int32, int32, int32) int32 59336 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp)))).FpMethods)).FxShmLock})).f(tls, *(*uintptr)(unsafe.Pointer(bp)), 3, SQLITE_SHM_NLOCK-3, flags) 59337 } 59338 } 59339 sqlite3.Xsqlite3_close(tls, (*Superlock)(unsafe.Pointer(p)).Fdb) 59340 sqlite3.Xsqlite3_free(tls, p) 59341 } 59342 59343 func sqlite3demo_superlock(tls *libc.TLS, zPath uintptr, zVfs uintptr, xBusy uintptr, pBusyArg uintptr, ppLock uintptr) int32 { 59344 bp := tls.Alloc(24) 59345 defer tls.Free(24) 59346 59347 *(*SuperlockBusy)(unsafe.Pointer(bp)) = SuperlockBusy{} 59348 var rc int32 59349 var pLock uintptr 59350 59351 pLock = sqlite3.Xsqlite3_malloc(tls, int32(unsafe.Sizeof(Superlock{}))) 59352 if !(pLock != 0) { 59353 return SQLITE_NOMEM 59354 } 59355 libc.X__builtin___memset_chk(tls, pLock, 0, uint64(unsafe.Sizeof(Superlock{})), libc.X__builtin_object_size(tls, pLock, 0)) 59356 59357 rc = sqlite3.Xsqlite3_open_v2(tls, 59358 zPath, pLock, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, zVfs) 59359 59360 if rc == SQLITE_OK { 59361 (*SuperlockBusy)(unsafe.Pointer(bp)).FxBusy = xBusy 59362 (*SuperlockBusy)(unsafe.Pointer(bp)).FpBusyArg = pBusyArg 59363 sqlite3.Xsqlite3_busy_handler(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, *(*uintptr)(unsafe.Pointer(&struct { 59364 f func(*libc.TLS, uintptr, int32) int32 59365 }{superlockBusyHandler})), bp) 59366 rc = sqlite3.Xsqlite3_exec(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+13217, uintptr(0), uintptr(0), uintptr(0)) 59367 } 59368 59369 if rc == SQLITE_OK { 59370 if SQLITE_OK == libc.AssignInt32(&rc, superlockIsWal(tls, pLock)) && (*Superlock)(unsafe.Pointer(pLock)).FbWal != 0 { 59371 rc = sqlite3.Xsqlite3_exec(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, ts+11628, uintptr(0), uintptr(0), uintptr(0)) 59372 if rc == SQLITE_OK { 59373 rc = superlockWalLock(tls, (*Superlock)(unsafe.Pointer(pLock)).Fdb, bp) 59374 } 59375 } 59376 } 59377 59378 if rc != SQLITE_OK { 59379 sqlite3demo_superunlock(tls, pLock) 59380 *(*uintptr)(unsafe.Pointer(ppLock)) = uintptr(0) 59381 } else { 59382 *(*uintptr)(unsafe.Pointer(ppLock)) = pLock 59383 } 59384 59385 return rc 59386 } 59387 59388 type InterpAndScript1 = struct { 59389 Finterp uintptr 59390 FpScript uintptr 59391 } 59392 59393 type InterpAndScript = InterpAndScript1 59394 59395 func superunlock_del(tls *libc.TLS, cd ClientData) { 59396 sqlite3demo_superunlock(tls, cd) 59397 } 59398 59399 func superunlock_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 59400 if objc != 1 { 59401 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+584) 59402 return TCL_ERROR 59403 } 59404 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 59405 return TCL_OK 59406 } 59407 59408 func superlock_busy(tls *libc.TLS, pCtx uintptr, nBusy int32) int32 { 59409 bp := tls.Alloc(4) 59410 defer tls.Free(4) 59411 59412 var p uintptr = pCtx 59413 var pEval uintptr 59414 *(*int32)(unsafe.Pointer(bp)) = 0 59415 59416 pEval = tcl.XTcl_DuplicateObj(tls, (*InterpAndScript)(unsafe.Pointer(p)).FpScript) 59417 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 59418 tcl.XTcl_ListObjAppendElement(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewIntObj(tls, nBusy)) 59419 tcl.XTcl_EvalObjEx(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 59420 tcl.XTcl_GetIntFromObj(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp, tcl.XTcl_GetObjResult(tls, (*InterpAndScript)(unsafe.Pointer(p)).Finterp), bp) 59421 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59422 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount, 1) <= 0 { 59423 tcl.XTclFreeObj(tls, pEval) 59424 } 59425 } 59426 59427 return *(*int32)(unsafe.Pointer(bp)) 59428 } 59429 59430 func superlock_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 59431 bp := tls.Alloc(40) 59432 defer tls.Free(40) 59433 59434 var zPath uintptr 59435 var zVfs uintptr = uintptr(0) 59436 *(*InterpAndScript)(unsafe.Pointer(bp + 16)) = InterpAndScript{} 59437 var xBusy uintptr = uintptr(0) 59438 var rc int32 59439 59440 if objc < 3 || objc > 5 { 59441 tcl.XTcl_WrongNumArgs(tls, 59442 interp, 1, objv, ts+37153) 59443 return TCL_ERROR 59444 } 59445 59446 zPath = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 59447 59448 if objc > 3 { 59449 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 59450 if libc.Xstrlen(tls, zVfs) == uint64(0) { 59451 zVfs = uintptr(0) 59452 } 59453 } 59454 if objc > 4 { 59455 (*InterpAndScript)(unsafe.Pointer(bp + 16)).Finterp = interp 59456 (*InterpAndScript)(unsafe.Pointer(bp + 16)).FpScript = *(*uintptr)(unsafe.Pointer(objv + 4*8)) 59457 xBusy = *(*uintptr)(unsafe.Pointer(&struct { 59458 f func(*libc.TLS, uintptr, int32) int32 59459 }{superlock_busy})) 59460 } 59461 59462 rc = sqlite3demo_superlock(tls, zPath, zVfs, xBusy, bp+16, bp+32) 59463 59464 if rc != SQLITE_OK { 59465 tcl.XTcl_ResetResult(tls, interp) 59466 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, sqlite3.Xsqlite3ErrStr(tls, rc), 0)) 59467 return TCL_ERROR 59468 } 59469 59470 tcl.XTcl_CreateObjCommand(tls, 59471 interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), *(*uintptr)(unsafe.Pointer(&struct { 59472 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 59473 }{superunlock_cmd})), *(*uintptr)(unsafe.Pointer(bp + 32)), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{superunlock_del}))) 59474 tcl.XTcl_SetObjResult(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 59475 return TCL_OK 59476 } 59477 59478 func SqliteSuperlock_Init(tls *libc.TLS, interp uintptr) int32 { 59479 tcl.XTcl_CreateObjCommand(tls, interp, ts+37194, *(*uintptr)(unsafe.Pointer(&struct { 59480 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 59481 }{superlock_cmd})), uintptr(0), uintptr(0)) 59482 return TCL_OK 59483 } 59484 59485 type TestSyscallGlobal = struct { 59486 FbPersist int32 59487 FnCount int32 59488 FnFail int32 59489 Fpgsz int32 59490 Forig_getpagesize sqlite3_syscall_ptr 59491 } 59492 59493 var gSyscall = TestSyscallGlobal{} 59494 59495 type TestSyscallArray = struct { 59496 FzName uintptr 59497 FxTest sqlite3_syscall_ptr 59498 FxOrig sqlite3_syscall_ptr 59499 Fdefault_errno int32 59500 Fcustom_errno int32 59501 } 59502 59503 var aSyscall = [19]TestSyscallArray{ 59504 {FzName: ts + 37216, FxTest: 0, Fdefault_errno: EACCES}, 59505 {FzName: ts + 9490, FxTest: 0}, 59506 {FzName: ts + 37221, FxTest: 0}, 59507 {FzName: ts + 37228, FxTest: 0}, 59508 {FzName: ts + 37235, FxTest: 0}, 59509 {FzName: ts + 37240, FxTest: 0}, 59510 {FzName: ts + 37246, FxTest: 0, Fdefault_errno: EIO}, 59511 {FzName: ts + 37256, FxTest: 0, Fdefault_errno: EACCES}, 59512 {FzName: ts + 25230, FxTest: 0}, 59513 {FzName: ts + 37262, FxTest: 0}, 59514 {FzName: ts + 37268, FxTest: 0}, 59515 {FzName: ts + 25235, FxTest: 0}, 59516 {FzName: ts + 37276, FxTest: 0}, 59517 {FzName: ts + 37283, FxTest: 0}, 59518 {FzName: ts + 37292, FxTest: 0}, 59519 {FzName: ts + 37299, FxTest: 0}, 59520 {FzName: ts + 29144, FxTest: 0}, 59521 {FzName: ts + 37309, FxTest: 0}, 59522 {}, 59523 } 59524 59525 func tsIsFail(tls *libc.TLS) int32 { 59526 gSyscall.FnCount-- 59527 if gSyscall.FnCount == 0 || gSyscall.FnFail != 0 && gSyscall.FbPersist != 0 { 59528 gSyscall.FnFail++ 59529 return 1 59530 } 59531 return 0 59532 } 59533 59534 func tsErrno(tls *libc.TLS, zFunc uintptr) int32 { 59535 var i int32 59536 var nFunc int32 = int32(libc.Xstrlen(tls, zFunc)) 59537 for i = 0; aSyscall[i].FzName != 0; i++ { 59538 if libc.Xstrlen(tls, aSyscall[i].FzName) != size_t(nFunc) { 59539 continue 59540 } 59541 if libc.Xmemcmp(tls, aSyscall[i].FzName, zFunc, uint64(nFunc)) != 0 { 59542 continue 59543 } 59544 return aSyscall[i].Fcustom_errno 59545 } 59546 59547 return 0 59548 } 59549 59550 func tsIsFailErrno(tls *libc.TLS, zFunc uintptr) int32 { 59551 if tsIsFail(tls) != 0 { 59552 *(*int32)(unsafe.Pointer(libc.X__error(tls))) = tsErrno(tls, zFunc) 59553 return 1 59554 } 59555 return 0 59556 } 59557 59558 func ts_open(tls *libc.TLS, zFile uintptr, flags int32, mode int32) int32 { 59559 if tsIsFailErrno(tls, ts+37216) != 0 { 59560 return -1 59561 } 59562 return (*(*func(*libc.TLS, uintptr, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 16)))(tls, zFile, flags, mode) 59563 } 59564 59565 func ts_close(tls *libc.TLS, fd int32) int32 { 59566 if tsIsFail(tls) != 0 { 59567 (*(*func(*libc.TLS, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 1*32 + 16)))(tls, fd) 59568 return -1 59569 } 59570 return (*(*func(*libc.TLS, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 1*32 + 16)))(tls, fd) 59571 } 59572 59573 func ts_access(tls *libc.TLS, zPath uintptr, mode int32) int32 { 59574 if tsIsFail(tls) != 0 { 59575 return -1 59576 } 59577 return (*(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 2*32 + 16)))(tls, zPath, mode) 59578 } 59579 59580 func ts_getcwd(tls *libc.TLS, zPath uintptr, nPath size_t) uintptr { 59581 if tsIsFail(tls) != 0 { 59582 return uintptr(0) 59583 } 59584 return (*(*func(*libc.TLS, uintptr, size_t) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 3*32 + 16)))(tls, zPath, nPath) 59585 } 59586 59587 func ts_stat(tls *libc.TLS, zPath uintptr, p uintptr) int32 { 59588 if tsIsFail(tls) != 0 { 59589 return -1 59590 } 59591 return (*(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 4*32 + 16)))(tls, zPath, p) 59592 } 59593 59594 func ts_fstat(tls *libc.TLS, fd int32, p uintptr) int32 { 59595 if tsIsFailErrno(tls, ts+37240) != 0 { 59596 return -1 59597 } 59598 return (*(*func(*libc.TLS, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 5*32 + 16)))(tls, fd, p) 59599 } 59600 59601 func ts_ftruncate(tls *libc.TLS, fd int32, n off_t) int32 { 59602 if tsIsFailErrno(tls, ts+37246) != 0 { 59603 return -1 59604 } 59605 return (*(*func(*libc.TLS, int32, off_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 6*32 + 16)))(tls, fd, n) 59606 } 59607 59608 func ts_fcntl(tls *libc.TLS, fd int32, cmd int32, va uintptr) int32 { 59609 bp := tls.Alloc(8) 59610 defer tls.Free(8) 59611 59612 var ap va_list 59613 _ = ap 59614 var pArg uintptr 59615 if tsIsFailErrno(tls, ts+37256) != 0 { 59616 return -1 59617 } 59618 ap = va 59619 pArg = libc.VaUintptr(&ap) 59620 return (*(*func(*libc.TLS, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 7*32 + 16)))(tls, fd, cmd, libc.VaList(bp, pArg)) 59621 } 59622 59623 func ts_read(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t) int32 { 59624 if tsIsFailErrno(tls, ts+25230) != 0 { 59625 return -1 59626 } 59627 return int32((*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 8*32 + 16)))(tls, fd, aBuf, nBuf)) 59628 } 59629 59630 func ts_pread(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off off_t) int32 { 59631 if tsIsFailErrno(tls, ts+37262) != 0 { 59632 return -1 59633 } 59634 return int32((*(*func(*libc.TLS, int32, uintptr, size_t, off_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 9*32 + 16)))(tls, fd, aBuf, nBuf, off)) 59635 } 59636 59637 func ts_pread64(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off sqlite3_uint64) int32 { 59638 if tsIsFailErrno(tls, ts+37268) != 0 { 59639 return -1 59640 } 59641 return int32((*(*func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 10*32 + 16)))(tls, fd, aBuf, nBuf, off)) 59642 } 59643 59644 func ts_write(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t) int32 { 59645 if tsIsFailErrno(tls, ts+25235) != 0 { 59646 if tsErrno(tls, ts+25235) == EINTR { 59647 (*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 11*32 + 16)))(tls, fd, aBuf, nBuf/uint64(2)) 59648 } 59649 return -1 59650 } 59651 return int32((*(*func(*libc.TLS, int32, uintptr, size_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 11*32 + 16)))(tls, fd, aBuf, nBuf)) 59652 } 59653 59654 func ts_pwrite(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off off_t) int32 { 59655 if tsIsFailErrno(tls, ts+37276) != 0 { 59656 return -1 59657 } 59658 return int32((*(*func(*libc.TLS, int32, uintptr, size_t, off_t) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 12*32 + 16)))(tls, fd, aBuf, nBuf, off)) 59659 } 59660 59661 func ts_pwrite64(tls *libc.TLS, fd int32, aBuf uintptr, nBuf size_t, off sqlite3_uint64) int32 { 59662 if tsIsFailErrno(tls, ts+37283) != 0 { 59663 return -1 59664 } 59665 return int32((*(*func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) ssize_t)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 13*32 + 16)))(tls, fd, aBuf, nBuf, off)) 59666 } 59667 59668 func ts_fchmod(tls *libc.TLS, fd int32, mode mode_t) int32 { 59669 if tsIsFail(tls) != 0 { 59670 return -1 59671 } 59672 return (*(*func(*libc.TLS, int32, mode_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 14*32 + 16)))(tls, fd, mode) 59673 } 59674 59675 func ts_fallocate(tls *libc.TLS, fd int32, off off_t, len off_t) int32 { 59676 if tsIsFail(tls) != 0 { 59677 return tsErrno(tls, ts+37299) 59678 } 59679 return (*(*func(*libc.TLS, int32, off_t, off_t) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 15*32 + 16)))(tls, fd, off, len) 59680 } 59681 59682 func ts_mmap(tls *libc.TLS, pAddr uintptr, nByte size_t, prot int32, flags int32, fd int32, iOff off_t) uintptr { 59683 if tsIsFailErrno(tls, ts+29144) != 0 { 59684 return libc.UintptrFromInt32(-1) 59685 } 59686 return (*(*func(*libc.TLS, uintptr, size_t, int32, int32, int32, off_t) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 16*32 + 16)))(tls, pAddr, nByte, prot, flags, fd, iOff) 59687 } 59688 59689 func ts_mremap(tls *libc.TLS, a uintptr, b size_t, c size_t, d int32, va uintptr) uintptr { 59690 bp := tls.Alloc(8) 59691 defer tls.Free(8) 59692 59693 var ap va_list 59694 _ = ap 59695 var pArg uintptr 59696 if tsIsFailErrno(tls, ts+37309) != 0 { 59697 return libc.UintptrFromInt32(-1) 59698 } 59699 ap = va 59700 pArg = libc.VaUintptr(&ap) 59701 return (*(*func(*libc.TLS, uintptr, size_t, size_t, int32, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 17*32 + 16)))(tls, a, b, c, d, libc.VaList(bp, pArg)) 59702 } 59703 59704 func test_syscall_install(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59705 bp := tls.Alloc(20) 59706 defer tls.Free(20) 59707 59708 var pVfs uintptr 59709 59710 var i int32 59711 59712 if objc != 3 { 59713 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37316) 59714 return TCL_ERROR 59715 } 59716 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp, bp+8) != 0 { 59717 return TCL_ERROR 59718 } 59719 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 59720 59721 for i = 0; i < *(*int32)(unsafe.Pointer(bp)); i++ { 59722 var rc int32 = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 59723 *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 8)) + uintptr(i)*8)), uintptr(unsafe.Pointer(&aSyscall)), int32(unsafe.Sizeof(TestSyscallArray{})), ts+37329, 0, bp+16) 59724 if rc != 0 { 59725 return rc 59726 } 59727 if aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxOrig == uintptr(0) { 59728 aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxOrig = (*struct { 59729 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 59730 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FzName) 59731 (*struct { 59732 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 59733 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FzName, aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].FxTest) 59734 } 59735 aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].Fcustom_errno = aSyscall[*(*int32)(unsafe.Pointer(bp + 16))].Fdefault_errno 59736 } 59737 59738 return TCL_OK 59739 } 59740 59741 func test_syscall_uninstall(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59742 var pVfs uintptr 59743 var i int32 59744 59745 if objc != 2 { 59746 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 59747 return TCL_ERROR 59748 } 59749 59750 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 59751 for i = 0; aSyscall[i].FzName != 0; i++ { 59752 if aSyscall[i].FxOrig != 0 { 59753 (*struct { 59754 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 59755 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, aSyscall[i].FzName, uintptr(0)) 59756 aSyscall[i].FxOrig = uintptr(0) 59757 } 59758 } 59759 return TCL_OK 59760 } 59761 59762 func test_syscall_reset(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59763 bp := tls.Alloc(4) 59764 defer tls.Free(4) 59765 59766 var pVfs uintptr 59767 var i int32 59768 var rc int32 59769 59770 if objc != 2 && objc != 3 { 59771 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 59772 return TCL_ERROR 59773 } 59774 59775 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 59776 if objc == 2 { 59777 rc = (*struct { 59778 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 59779 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, uintptr(0), uintptr(0)) 59780 for i = 0; aSyscall[i].FzName != 0; i++ { 59781 aSyscall[i].FxOrig = uintptr(0) 59782 } 59783 } else { 59784 var zFunc uintptr = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) 59785 rc = (*struct { 59786 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 59787 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), uintptr(0)) 59788 for i = 0; rc == SQLITE_OK && aSyscall[i].FzName != 0; i++ { 59789 if libc.Xstrlen(tls, aSyscall[i].FzName) != size_t(*(*int32)(unsafe.Pointer(bp))) { 59790 continue 59791 } 59792 if libc.Xmemcmp(tls, aSyscall[i].FzName, zFunc, uint64(*(*int32)(unsafe.Pointer(bp)))) != 0 { 59793 continue 59794 } 59795 aSyscall[i].FxOrig = uintptr(0) 59796 } 59797 } 59798 if rc != SQLITE_OK { 59799 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 59800 return TCL_ERROR 59801 } 59802 59803 tcl.XTcl_ResetResult(tls, interp) 59804 return TCL_OK 59805 } 59806 59807 func test_syscall_exists(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59808 var pVfs uintptr 59809 var x sqlite3_syscall_ptr 59810 59811 if objc != 3 { 59812 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 59813 return TCL_ERROR 59814 } 59815 59816 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 59817 x = (*struct { 59818 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 59819 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)))) 59820 59821 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewBooleanObj(tls, libc.Bool32(x != uintptr(0)))) 59822 return TCL_OK 59823 } 59824 59825 func test_syscall_fault(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59826 bp := tls.Alloc(8) 59827 defer tls.Free(8) 59828 59829 *(*int32)(unsafe.Pointer(bp)) = 0 59830 *(*int32)(unsafe.Pointer(bp + 4)) = 0 59831 59832 if objc != 2 && objc != 4 { 59833 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37341) 59834 return TCL_ERROR 59835 } 59836 59837 if objc == 4 { 59838 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp) != 0 || 59839 tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+4) != 0 { 59840 return TCL_ERROR 59841 } 59842 } 59843 59844 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, gSyscall.FnFail)) 59845 gSyscall.FnCount = *(*int32)(unsafe.Pointer(bp)) 59846 gSyscall.FbPersist = *(*int32)(unsafe.Pointer(bp + 4)) 59847 gSyscall.FnFail = 0 59848 return TCL_OK 59849 } 59850 59851 func test_syscall_errno(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59852 bp := tls.Alloc(204) 59853 defer tls.Free(204) 59854 59855 var rc int32 59856 59857 *(*[12]Errno)(unsafe.Pointer(bp + 8)) = [12]Errno{ 59858 {Fz: ts + 37357, Fi: EACCES}, 59859 {Fz: ts + 37364, Fi: EINTR}, 59860 {Fz: ts + 37370, Fi: EIO}, 59861 {Fz: ts + 37374, Fi: EOVERFLOW}, 59862 {Fz: ts + 37384, Fi: ENOMEM}, 59863 {Fz: ts + 37391, Fi: EAGAIN}, 59864 {Fz: ts + 37398, Fi: ETIMEDOUT}, 59865 {Fz: ts + 37408, Fi: EBUSY}, 59866 {Fz: ts + 37414, Fi: EPERM}, 59867 {Fz: ts + 37420, Fi: EDEADLK}, 59868 {Fz: ts + 37428, Fi: ENOLCK}, 59869 {}, 59870 } 59871 59872 if objc != 4 { 59873 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37435) 59874 return TCL_ERROR 59875 } 59876 59877 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 59878 *(*uintptr)(unsafe.Pointer(objv + 2*8)), uintptr(unsafe.Pointer(&aSyscall)), int32(unsafe.Sizeof(TestSyscallArray{})), ts+37329, 0, bp) 59879 if rc != TCL_OK { 59880 return rc 59881 } 59882 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 59883 *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8, int32(unsafe.Sizeof(Errno{})), ts+37449, 0, bp+200) 59884 if rc != TCL_OK { 59885 return rc 59886 } 59887 59888 aSyscall[*(*int32)(unsafe.Pointer(bp))].Fcustom_errno = (*Errno)(unsafe.Pointer(bp + 8 + uintptr(*(*int32)(unsafe.Pointer(bp + 200)))*16)).Fi 59889 return TCL_OK 59890 } 59891 59892 type Errno = struct { 59893 Fz uintptr 59894 Fi int32 59895 F__ccgo_pad1 [4]byte 59896 } 59897 59898 func test_syscall_list(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59899 var zSys uintptr 59900 var pVfs uintptr 59901 var pList uintptr 59902 59903 if objc != 2 { 59904 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 59905 return TCL_ERROR 59906 } 59907 59908 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 59909 pList = tcl.XTcl_NewObj(tls) 59910 (*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount++ 59911 for zSys = (*struct { 59912 f func(*libc.TLS, uintptr, uintptr) uintptr 59913 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxNextSystemCall})).f(tls, pVfs, uintptr(0)); zSys != uintptr(0); zSys = (*struct { 59914 f func(*libc.TLS, uintptr, uintptr) uintptr 59915 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxNextSystemCall})).f(tls, pVfs, zSys) { 59916 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, zSys, -1)) 59917 } 59918 59919 tcl.XTcl_SetObjResult(tls, interp, pList) 59920 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 59921 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount, 1) <= 0 { 59922 tcl.XTclFreeObj(tls, pList) 59923 } 59924 } 59925 return TCL_OK 59926 } 59927 59928 func test_syscall_defaultvfs(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59929 var pVfs uintptr 59930 59931 if objc != 2 { 59932 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+584) 59933 return TCL_ERROR 59934 } 59935 59936 pVfs = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 59937 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName, -1)) 59938 return TCL_OK 59939 } 59940 59941 func ts_getpagesize(tls *libc.TLS) int32 { 59942 return gSyscall.Fpgsz 59943 } 59944 59945 func test_syscall_pagesize(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59946 bp := tls.Alloc(20) 59947 defer tls.Free(20) 59948 59949 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 59950 59951 if objc != 3 { 59952 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+37455) 59953 return TCL_ERROR 59954 } 59955 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) != 0 { 59956 return TCL_ERROR 59957 } 59958 59959 if *(*int32)(unsafe.Pointer(bp + 16)) < 0 { 59960 if gSyscall.Forig_getpagesize != 0 { 59961 (*struct { 59962 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 59963 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, pVfs, ts+37460, gSyscall.Forig_getpagesize) 59964 } 59965 } else { 59966 if *(*int32)(unsafe.Pointer(bp + 16)) < 512 || *(*int32)(unsafe.Pointer(bp + 16))&(*(*int32)(unsafe.Pointer(bp + 16))-1) != 0 { 59967 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+37472, 0)) 59968 return TCL_ERROR 59969 } 59970 gSyscall.Forig_getpagesize = (*struct { 59971 f func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr 59972 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxGetSystemCall})).f(tls, pVfs, ts+37460) 59973 gSyscall.Fpgsz = *(*int32)(unsafe.Pointer(bp + 16)) 59974 (*struct { 59975 f func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32 59976 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall})).f(tls, 59977 pVfs, ts+37460, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS) int32 }{ts_getpagesize}))) 59978 } 59979 59980 return TCL_OK 59981 } 59982 59983 func test_syscall(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 59984 bp := tls.Alloc(180) 59985 defer tls.Free(180) 59986 59987 *(*[10]SyscallCmd)(unsafe.Pointer(bp + 16)) = [10]SyscallCmd{ 59988 {FzName: ts + 37490, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 59989 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59990 }{test_syscall_fault}))}, 59991 {FzName: ts + 37496, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 59992 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59993 }{test_syscall_install}))}, 59994 {FzName: ts + 37504, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 59995 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59996 }{test_syscall_uninstall}))}, 59997 {FzName: ts + 7933, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 59998 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 59999 }{test_syscall_reset}))}, 60000 {FzName: ts + 37449, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 60001 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60002 }{test_syscall_errno}))}, 60003 {FzName: ts + 13516, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 60004 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60005 }{test_syscall_exists}))}, 60006 {FzName: ts + 37514, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 60007 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60008 }{test_syscall_list}))}, 60009 {FzName: ts + 37519, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 60010 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60011 }{test_syscall_defaultvfs}))}, 60012 {FzName: ts + 37530, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 60013 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60014 }{test_syscall_pagesize}))}, 60015 {}, 60016 } 60017 60018 var rc int32 60019 var pVfs uintptr = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 60020 60021 if objc < 2 { 60022 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+33165) 60023 return TCL_ERROR 60024 } 60025 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion < 3 || (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FxSetSystemCall == uintptr(0) { 60026 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+37539, 0)) 60027 rc = TCL_ERROR 60028 } else { 60029 rc = tcl.XTcl_GetIndexFromObjStruct(tls, interp, 60030 *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+16, int32(unsafe.Sizeof(SyscallCmd{})), ts+2014, 0, bp+176) 60031 } 60032 if rc != TCL_OK { 60033 return rc 60034 } 60035 return (*struct { 60036 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 60037 })(unsafe.Pointer(&struct{ uintptr }{(*SyscallCmd)(unsafe.Pointer(bp + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 176)))*16)).FxCmd})).f(tls, clientData, interp, objc, objv) 60038 } 60039 60040 type SyscallCmd = struct { 60041 FzName uintptr 60042 FxCmd uintptr 60043 } 60044 60045 func SqlitetestSyscall_Init(tls *libc.TLS, interp uintptr) int32 { 60046 bp := tls.Alloc(16) 60047 defer tls.Free(16) 60048 60049 *(*[1]SyscallCmd)(unsafe.Pointer(bp)) = [1]SyscallCmd{ 60050 {FzName: ts + 37575, FxCmd: *(*uintptr)(unsafe.Pointer(&struct { 60051 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60052 }{test_syscall}))}, 60053 } 60054 var i int32 60055 60056 for i = 0; uint64(i) < uint64(unsafe.Sizeof([1]SyscallCmd{}))/uint64(unsafe.Sizeof(SyscallCmd{})); i++ { 60057 tcl.XTcl_CreateObjCommand(tls, interp, (*SyscallCmd)(unsafe.Pointer(bp+uintptr(i)*16)).FzName, (*SyscallCmd)(unsafe.Pointer(bp+uintptr(i)*16)).FxCmd, uintptr(0), uintptr(0)) 60058 } 60059 return TCL_OK 60060 } 60061 60062 func sqlite3TestInit(tls *libc.TLS, interp uintptr) uintptr { 60063 bp := tls.Alloc(64) 60064 defer tls.Free(64) 60065 60066 if tcl.XTcl_GetCommandInfo(tls, interp, ts+14267, bp) == 0 { 60067 Sqlite3_Init(tls, interp) 60068 } 60069 Md5_Init(tls, interp) 60070 Sqliteconfig_Init(tls, interp) 60071 Sqlitetest1_Init(tls, interp) 60072 Sqlitetest2_Init(tls, interp) 60073 Sqlitetest3_Init(tls, interp) 60074 Sqlitetest4_Init(tls, interp) 60075 Sqlitetest5_Init(tls, interp) 60076 Sqlitetest6_Init(tls, interp) 60077 Sqlitetest7_Init(tls, interp) 60078 Sqlitetest8_Init(tls, interp) 60079 Sqlitetest9_Init(tls, interp) 60080 Sqlitetestasync_Init(tls, interp) 60081 Sqlitetest_autoext_Init(tls, interp) 60082 Sqlitetest_blob_Init(tls, interp) 60083 Sqlitetest_demovfs_Init(tls, interp) 60084 Sqlitetest_func_Init(tls, interp) 60085 Sqlitetest_hexio_Init(tls, interp) 60086 Sqlitetest_init_Init(tls, interp) 60087 Sqlitetest_malloc_Init(tls, interp) 60088 Sqlitetest_mutex_Init(tls, interp) 60089 Sqlitetestschema_Init(tls, interp) 60090 Sqlitetesttclvar_Init(tls, interp) 60091 Sqlitetestfs_Init(tls, interp) 60092 SqlitetestThread_Init(tls, interp) 60093 SqlitetestOnefile_Init(tls) 60094 SqlitetestOsinst_Init(tls, interp) 60095 Sqlitetestbackup_Init(tls, interp) 60096 Sqlitetestintarray_Init(tls, interp) 60097 Sqlitetestvfs_Init(tls, interp) 60098 Sqlitetestrtree_Init(tls, interp) 60099 Sqlitetestrtreedoc_Init(tls, interp) 60100 Sqlitequota_Init(tls, interp) 60101 Sqlitemultiplex_Init(tls, interp) 60102 SqliteSuperlock_Init(tls, interp) 60103 SqlitetestSyscall_Init(tls, interp) 60104 TestSession_Init(tls, interp) 60105 Fts5tcl_Init(tls, interp) 60106 SqliteRbu_Init(tls, interp) 60107 Sqlitetesttcl_Init(tls, interp) 60108 60109 TestExpert_Init(tls, interp) 60110 Sqlitetest_window_Init(tls, interp) 60111 Sqlitetestvdbecov_Init(tls, interp) 60112 60113 tcl.XTcl_CreateObjCommand(tls, 60114 interp, ts+37588, *(*uintptr)(unsafe.Pointer(&struct { 60115 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 60116 }{load_testfixture_extensions})), uintptr(0), uintptr(0)) 60117 return uintptr(0) 60118 } 60119 60120 func load_testfixture_extensions(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 60121 var slave uintptr 60122 if objc != 2 { 60123 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+37616) 60124 return TCL_ERROR 60125 } 60126 60127 slave = tcl.XTcl_GetSlave(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 60128 if !(slave != 0) { 60129 return TCL_ERROR 60130 } 60131 60132 sqlite3TestInit(tls, slave) 60133 return TCL_OK 60134 } 60135 60136 type tclvar_vtab1 = struct { 60137 Fbase sqlite3_vtab 60138 Finterp uintptr 60139 } 60140 60141 type tclvar_vtab = tclvar_vtab1 60142 type tclvar_cursor1 = struct { 60143 Fbase sqlite3_vtab_cursor 60144 FpList1 uintptr 60145 FpList2 uintptr 60146 Fi1 int32 60147 Fi2 int32 60148 } 60149 60150 type tclvar_cursor = tclvar_cursor1 60151 60152 func tclvarConnect(tls *libc.TLS, db uintptr, pAux uintptr, argc int32, argv uintptr, ppVtab uintptr, pzErr uintptr) int32 { 60153 var pVtab uintptr 60154 pVtab = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(tclvar_vtab{}))) 60155 if pVtab == uintptr(0) { 60156 return SQLITE_NOMEM 60157 } 60158 *(*uintptr)(unsafe.Pointer(ppVtab)) = pVtab 60159 (*tclvar_vtab)(unsafe.Pointer(pVtab)).Finterp = pAux 60160 sqlite3.Xsqlite3_declare_vtab(tls, db, uintptr(unsafe.Pointer(&zSchema))) 60161 return SQLITE_OK 60162 } 60163 60164 var zSchema = *(*[100]int8)(unsafe.Pointer(ts + 37622)) 60165 60166 func tclvarDisconnect(tls *libc.TLS, pVtab uintptr) int32 { 60167 sqlite3.Xsqlite3_free(tls, pVtab) 60168 return SQLITE_OK 60169 } 60170 60171 func tclvarOpen(tls *libc.TLS, pVTab uintptr, ppCursor uintptr) int32 { 60172 var pCur uintptr 60173 pCur = sqlite3.Xsqlite3MallocZero(tls, uint64(unsafe.Sizeof(tclvar_cursor{}))) 60174 *(*uintptr)(unsafe.Pointer(ppCursor)) = pCur 60175 return SQLITE_OK 60176 } 60177 60178 func tclvarClose(tls *libc.TLS, cur uintptr) int32 { 60179 var pCur uintptr = cur 60180 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 != 0 { 60181 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 60182 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1)).FrefCount, 1) <= 0 { 60183 tcl.XTclFreeObj(tls, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1) 60184 } 60185 } 60186 } 60187 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 60188 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 60189 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2)).FrefCount, 1) <= 0 { 60190 tcl.XTclFreeObj(tls, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2) 60191 } 60192 } 60193 } 60194 sqlite3.Xsqlite3_free(tls, pCur) 60195 return SQLITE_OK 60196 } 60197 60198 func next2(tls *libc.TLS, interp uintptr, pCur uintptr, pObj uintptr) int32 { 60199 bp := tls.Alloc(4) 60200 defer tls.Free(4) 60201 60202 var p uintptr 60203 60204 if pObj != 0 { 60205 if !(int32((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2) != 0) { 60206 p = tcl.XTcl_NewStringObj(tls, ts+37722, -1) 60207 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 60208 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, pObj) 60209 tcl.XTcl_EvalObjEx(tls, interp, p, TCL_EVAL_GLOBAL) 60210 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 60211 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(p)).FrefCount, 1) <= 0 { 60212 tcl.XTclFreeObj(tls, p) 60213 } 60214 } 60215 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = tcl.XTcl_GetObjResult(tls, interp) 60216 (*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2)).FrefCount++ 60217 60218 } else { 60219 *(*int32)(unsafe.Pointer(bp)) = 0 60220 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2++ 60221 tcl.XTcl_ListObjLength(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2, bp) 60222 if (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 >= *(*int32)(unsafe.Pointer(bp)) { 60223 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 60224 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2)).FrefCount, 1) <= 0 { 60225 tcl.XTclFreeObj(tls, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2) 60226 } 60227 } 60228 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = uintptr(0) 60229 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 = 0 60230 return 0 60231 } 60232 } 60233 } 60234 60235 return 1 60236 } 60237 60238 func tclvarNext(tls *libc.TLS, cur uintptr) int32 { 60239 bp := tls.Alloc(16) 60240 defer tls.Free(16) 60241 60242 *(*int32)(unsafe.Pointer(bp)) = 0 60243 var ok int32 = 0 60244 60245 var pCur uintptr = cur 60246 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab)).Finterp 60247 60248 tcl.XTcl_ListObjLength(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, bp) 60249 for !(ok != 0) && (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1 < *(*int32)(unsafe.Pointer(bp)) { 60250 tcl.XTcl_ListObjIndex(tls, uintptr(0), (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1, bp+8) 60251 ok = next2(tls, interp, pCur, *(*uintptr)(unsafe.Pointer(bp + 8))) 60252 if !(ok != 0) { 60253 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1++ 60254 } 60255 } 60256 60257 return 0 60258 } 60259 60260 func tclvarFilter(tls *libc.TLS, pVtabCursor uintptr, idxNum int32, idxStr uintptr, argc int32, argv uintptr) int32 { 60261 var pCur uintptr = pVtabCursor 60262 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(pVtabCursor)).FpVtab)).Finterp 60263 var p uintptr = tcl.XTcl_NewStringObj(tls, ts+37734, -1) 60264 60265 var zEq uintptr = ts + 584 60266 var zMatch uintptr = ts + 584 60267 var zGlob uintptr = ts + 584 60268 var zRegexp uintptr = ts + 584 60269 var zLike uintptr = ts + 584 60270 var i int32 60271 60272 for i = 0; *(*int8)(unsafe.Pointer(idxStr + uintptr(i))) != 0; i++ { 60273 switch int32(*(*int8)(unsafe.Pointer(idxStr + uintptr(i)))) { 60274 case 'e': 60275 zEq = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 60276 break 60277 case 'm': 60278 zMatch = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 60279 break 60280 case 'g': 60281 zGlob = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 60282 break 60283 case 'r': 60284 zRegexp = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 60285 break 60286 case 'l': 60287 zLike = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + uintptr(i)*8))) 60288 break 60289 default: 60290 } 60291 } 60292 60293 (*Tcl_Obj)(unsafe.Pointer(p)).FrefCount++ 60294 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zEq, -1)) 60295 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zMatch, -1)) 60296 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zGlob, -1)) 60297 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zRegexp, -1)) 60298 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), p, tcl.XTcl_NewStringObj(tls, zLike, -1)) 60299 60300 tcl.XTcl_EvalObjEx(tls, interp, p, TCL_EVAL_GLOBAL) 60301 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 != 0 { 60302 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 60303 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1)).FrefCount, 1) <= 0 { 60304 tcl.XTclFreeObj(tls, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1) 60305 } 60306 } 60307 } 60308 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 60309 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 60310 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2)).FrefCount, 1) <= 0 { 60311 tcl.XTclFreeObj(tls, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2) 60312 } 60313 } 60314 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 = uintptr(0) 60315 } 60316 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1 = 0 60317 (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2 = 0 60318 (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1 = tcl.XTcl_GetObjResult(tls, interp) 60319 (*Tcl_Obj)(unsafe.Pointer((*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1)).FrefCount++ 60320 60321 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 60322 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(p)).FrefCount, 1) <= 0 { 60323 tcl.XTclFreeObj(tls, p) 60324 } 60325 } 60326 return tclvarNext(tls, pVtabCursor) 60327 } 60328 60329 func tclvarColumn(tls *libc.TLS, cur uintptr, ctx uintptr, i int32) int32 { 60330 bp := tls.Alloc(32) 60331 defer tls.Free(32) 60332 60333 var z1 uintptr 60334 var z2 uintptr = ts + 584 60335 var pCur uintptr = cur 60336 var interp uintptr = (*tclvar_vtab)(unsafe.Pointer((*sqlite3_vtab_cursor)(unsafe.Pointer(cur)).FpVtab)).Finterp 60337 60338 tcl.XTcl_ListObjIndex(tls, interp, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList1, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi1, bp+16) 60339 tcl.XTcl_ListObjIndex(tls, interp, (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2, (*tclvar_cursor)(unsafe.Pointer(pCur)).Fi2, bp+24) 60340 z1 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(bp + 16))) 60341 if *(*uintptr)(unsafe.Pointer(bp + 24)) != 0 { 60342 z2 = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(bp + 24))) 60343 } 60344 switch i { 60345 case 0: 60346 { 60347 sqlite3.Xsqlite3_result_text(tls, ctx, z1, -1, libc.UintptrFromInt32(-1)) 60348 break 60349 60350 } 60351 case 1: 60352 { 60353 sqlite3.Xsqlite3_result_text(tls, ctx, z2, -1, libc.UintptrFromInt32(-1)) 60354 break 60355 60356 } 60357 case 2: 60358 { 60359 var pVal uintptr = tcl.XTcl_GetVar2Ex(tls, interp, z1, func() uintptr { 60360 if *(*int8)(unsafe.Pointer(z2)) != 0 { 60361 return z2 60362 } 60363 return uintptr(0) 60364 }(), TCL_GLOBAL_ONLY) 60365 sqlite3.Xsqlite3_result_text(tls, ctx, tcl.XTcl_GetString(tls, pVal), -1, libc.UintptrFromInt32(-1)) 60366 break 60367 60368 } 60369 case 3: 60370 { 60371 var z3 uintptr 60372 if *(*uintptr)(unsafe.Pointer(bp + 24)) != 0 { 60373 z3 = sqlite3.Xsqlite3_mprintf(tls, ts+37752, libc.VaList(bp, z1, z2)) 60374 sqlite3.Xsqlite3_result_text(tls, ctx, z3, -1, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sqlite3.Xsqlite3_free}))) 60375 } else { 60376 sqlite3.Xsqlite3_result_text(tls, ctx, z1, -1, libc.UintptrFromInt32(-1)) 60377 } 60378 break 60379 60380 } 60381 } 60382 return SQLITE_OK 60383 } 60384 60385 func tclvarRowid(tls *libc.TLS, cur uintptr, pRowid uintptr) int32 { 60386 *(*sqlite_int64)(unsafe.Pointer(pRowid)) = int64(0) 60387 return SQLITE_OK 60388 } 60389 60390 func tclvarEof(tls *libc.TLS, cur uintptr) int32 { 60391 var pCur uintptr = cur 60392 return func() int32 { 60393 if (*tclvar_cursor)(unsafe.Pointer(pCur)).FpList2 != 0 { 60394 return 0 60395 } 60396 return 1 60397 }() 60398 } 60399 60400 func tclvarAddToIdxstr(tls *libc.TLS, zStr uintptr, x int8) int32 { 60401 var i int32 60402 for i = 0; *(*int8)(unsafe.Pointer(zStr + uintptr(i))) != 0; i++ { 60403 if int32(*(*int8)(unsafe.Pointer(zStr + uintptr(i)))) == int32(x) { 60404 return 1 60405 } 60406 } 60407 *(*int8)(unsafe.Pointer(zStr + uintptr(i))) = x 60408 *(*int8)(unsafe.Pointer(zStr + uintptr(i+1))) = int8(0) 60409 return 0 60410 } 60411 60412 func tclvarSetOmit(tls *libc.TLS, interp uintptr) int32 { 60413 bp := tls.Alloc(4) 60414 defer tls.Free(4) 60415 60416 var rc int32 60417 *(*int32)(unsafe.Pointer(bp)) = 0 60418 var pRes uintptr 60419 rc = tcl.XTcl_Eval(tls, interp, 60420 ts+37759) 60421 if rc == TCL_OK { 60422 pRes = tcl.XTcl_GetObjResult(tls, interp) 60423 rc = tcl.XTcl_GetBooleanFromObj(tls, uintptr(0), pRes, bp) 60424 } 60425 return libc.Bool32(rc == TCL_OK && *(*int32)(unsafe.Pointer(bp)) != 0) 60426 } 60427 60428 func tclvarBestIndex(tls *libc.TLS, tab uintptr, pIdxInfo uintptr) int32 { 60429 var pTab uintptr = tab 60430 var ii int32 60431 var zStr uintptr = sqlite3.Xsqlite3_malloc(tls, 32) 60432 var iStr int32 = 0 60433 60434 if zStr == uintptr(0) { 60435 return SQLITE_NOMEM 60436 } 60437 *(*int8)(unsafe.Pointer(zStr)) = int8(0) 60438 60439 for ii = 0; ii < (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FnConstraint; ii++ { 60440 var pCons uintptr = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraint + uintptr(ii)*12 60441 var pUsage uintptr 60442 60443 pUsage = (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FaConstraintUsage + uintptr(ii)*8 60444 if (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fusable != 0 { 60445 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_EQ && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 0 { 60446 if 0 == tclvarAddToIdxstr(tls, zStr, int8('e')) { 60447 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 60448 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(0) 60449 } 60450 } 60451 60452 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_MATCH && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 0 { 60453 if 0 == tclvarAddToIdxstr(tls, zStr, int8('m')) { 60454 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 60455 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(1) 60456 } 60457 } 60458 60459 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_GLOB && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 60460 if 0 == tclvarAddToIdxstr(tls, zStr, int8('g')) { 60461 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 60462 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 60463 } 60464 } 60465 60466 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_REGEXP && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 60467 if 0 == tclvarAddToIdxstr(tls, zStr, int8('r')) { 60468 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 60469 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 60470 } 60471 } 60472 60473 if int32((*sqlite3_index_constraint)(unsafe.Pointer(pCons)).Fop) == SQLITE_INDEX_CONSTRAINT_LIKE && (*sqlite3_index_constraint)(unsafe.Pointer(pCons)).FiColumn == 2 { 60474 if 0 == tclvarAddToIdxstr(tls, zStr, int8('l')) { 60475 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).FargvIndex = libc.PreIncInt32(&iStr, 1) 60476 (*sqlite3_index_constraint_usage)(unsafe.Pointer(pUsage)).Fomit = uint8(tclvarSetOmit(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp)) 60477 } 60478 } 60479 } 60480 } 60481 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FidxStr = zStr 60482 (*sqlite3_index_info)(unsafe.Pointer(pIdxInfo)).FneedToFreeIdxStr = 1 60483 60484 return SQLITE_OK 60485 } 60486 60487 func tclvarUpdate(tls *libc.TLS, tab uintptr, argc int32, argv uintptr, pRowid uintptr) int32 { 60488 var pTab uintptr = tab 60489 if argc == 1 { 60490 var zVar uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 60491 tcl.XTcl_UnsetVar(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zVar, TCL_GLOBAL_ONLY) 60492 return SQLITE_OK 60493 } 60494 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_NULL { 60495 var zValue uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) 60496 var zName uintptr 60497 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) != SQLITE_TEXT { 60498 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+37820, 0) 60499 return SQLITE_ERROR 60500 } 60501 zName = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 5*8))) 60502 if zValue != 0 { 60503 tcl.XTcl_SetVar(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zName, zValue, TCL_GLOBAL_ONLY) 60504 } else { 60505 tcl.XTcl_UnsetVar(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zName, TCL_GLOBAL_ONLY) 60506 } 60507 return SQLITE_OK 60508 } 60509 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv))) == SQLITE_TEXT && 60510 sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) == SQLITE_TEXT { 60511 var zOldName uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv))) 60512 var zNewName uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8))) 60513 var zValue uintptr = sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(argv + 4*8))) 60514 60515 if libc.Xstrcmp(tls, zOldName, zNewName) != 0 || zValue == uintptr(0) { 60516 tcl.XTcl_UnsetVar(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zOldName, TCL_GLOBAL_ONLY) 60517 } 60518 if zValue != uintptr(0) { 60519 tcl.XTcl_SetVar(tls, (*tclvar_vtab)(unsafe.Pointer(pTab)).Finterp, zNewName, zValue, TCL_GLOBAL_ONLY) 60520 } 60521 return SQLITE_OK 60522 } 60523 (*sqlite3_vtab)(unsafe.Pointer(tab)).FzErrMsg = sqlite3.Xsqlite3_mprintf(tls, ts+37855, 0) 60524 return SQLITE_ERROR 60525 } 60526 60527 var tclvarModule = sqlite3_module{ 60528 FxCreate: 0, 60529 FxConnect: 0, 60530 FxBestIndex: 0, 60531 FxDisconnect: 0, 60532 FxDestroy: 0, 60533 FxOpen: 0, 60534 FxClose: 0, 60535 FxFilter: 0, 60536 FxNext: 0, 60537 FxEof: 0, 60538 FxColumn: 0, 60539 FxRowid: 0, 60540 FxUpdate: 0, 60541 } 60542 60543 func register_tclvar_module(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 60544 bp := tls.Alloc(8) 60545 defer tls.Free(8) 60546 60547 var rc int32 = TCL_OK 60548 60549 if objc != 2 { 60550 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 60551 return TCL_ERROR 60552 } 60553 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 60554 return TCL_ERROR 60555 } 60556 sqlite3.Xsqlite3_create_module(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+29963, uintptr(unsafe.Pointer(&tclvarModule)), interp) 60557 rc = tcl.XTcl_Eval(tls, interp, 60558 ts+37886) 60559 return rc 60560 } 60561 60562 func Sqlitetesttclvar_Init(tls *libc.TLS, interp uintptr) int32 { 60563 var i int32 60564 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd13))/uint64(unsafe.Sizeof(struct { 60565 FzName uintptr 60566 FxProc uintptr 60567 FclientData uintptr 60568 }{})); i++ { 60569 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd13[i].FzName, 60570 aObjCmd13[i].FxProc, aObjCmd13[i].FclientData, uintptr(0)) 60571 } 60572 return TCL_OK 60573 } 60574 60575 var aObjCmd13 = [1]struct { 60576 FzName uintptr 60577 FxProc uintptr 60578 FclientData uintptr 60579 }{ 60580 {FzName: ts + 38422, FxProc: 0}, 60581 } 60582 60583 type SqlThread1 = struct { 60584 Fparent Tcl_ThreadId 60585 Finterp uintptr 60586 FzScript uintptr 60587 FzVarname uintptr 60588 } 60589 60590 type SqlThread = SqlThread1 60591 60592 type EvalEvent1 = struct { 60593 Fbase Tcl_Event 60594 FzScript uintptr 60595 Finterp uintptr 60596 } 60597 60598 type EvalEvent = EvalEvent1 60599 60600 func tclScriptEvent(tls *libc.TLS, evPtr uintptr, flags int32) int32 { 60601 var rc int32 60602 var p uintptr = evPtr 60603 rc = tcl.XTcl_Eval(tls, (*EvalEvent)(unsafe.Pointer(p)).Finterp, (*EvalEvent)(unsafe.Pointer(p)).FzScript) 60604 if rc != TCL_OK { 60605 tcl.XTcl_BackgroundError(tls, (*EvalEvent)(unsafe.Pointer(p)).Finterp) 60606 } 60607 _ = flags 60608 return 1 60609 } 60610 60611 func postToParent(tls *libc.TLS, p uintptr, pScript uintptr) { 60612 bp := tls.Alloc(4) 60613 defer tls.Free(4) 60614 60615 var pEvent uintptr 60616 var zMsg uintptr 60617 60618 zMsg = tcl.XTcl_GetStringFromObj(tls, pScript, bp) 60619 pEvent = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(EvalEvent{}))+uint64(*(*int32)(unsafe.Pointer(bp)))+uint64(1))) 60620 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.FnextPtr = uintptr(0) 60621 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.Fproc = *(*uintptr)(unsafe.Pointer(&struct { 60622 f func(*libc.TLS, uintptr, int32) int32 60623 }{tclScriptEvent})) 60624 (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript = pEvent + 1*32 60625 libc.X__builtin___memcpy_chk(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, zMsg, uint64(*(*int32)(unsafe.Pointer(bp))+1), libc.X__builtin_object_size(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, 0)) 60626 (*EvalEvent)(unsafe.Pointer(pEvent)).Finterp = (*SqlThread)(unsafe.Pointer(p)).Finterp 60627 60628 tcl.XTcl_ThreadQueueEvent(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent, pEvent, TCL_QUEUE_TAIL) 60629 tcl.XTcl_ThreadAlert(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent) 60630 } 60631 60632 func tclScriptThread(tls *libc.TLS, pSqlThread ClientData) { 60633 var interp uintptr 60634 var pRes uintptr 60635 var pList uintptr 60636 var rc int32 60637 var p uintptr = pSqlThread 60638 60639 interp = tcl.XTcl_CreateInterp(tls) 60640 tcl.XTcl_CreateObjCommand(tls, interp, ts+38445, *(*uintptr)(unsafe.Pointer(&struct { 60641 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 60642 }{clock_seconds_proc})), uintptr(0), uintptr(0)) 60643 tcl.XTcl_CreateObjCommand(tls, interp, ts+38459, *(*uintptr)(unsafe.Pointer(&struct { 60644 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 60645 }{sqlthread_proc})), pSqlThread, uintptr(0)) 60646 tcl.XTcl_CreateObjCommand(tls, interp, ts+38469, *(*uintptr)(unsafe.Pointer(&struct { 60647 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60648 }{blocking_step_proc})), uintptr(0), uintptr(0)) 60649 tcl.XTcl_CreateObjCommand(tls, interp, 60650 ts+38491, *(*uintptr)(unsafe.Pointer(&struct { 60651 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60652 }{blocking_prepare_v2_proc})), uintptr(1), uintptr(0)) 60653 tcl.XTcl_CreateObjCommand(tls, interp, 60654 ts+38519, *(*uintptr)(unsafe.Pointer(&struct { 60655 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 60656 }{blocking_prepare_v2_proc})), uintptr(0), uintptr(0)) 60657 Sqlitetest1_Init(tls, interp) 60658 Sqlitetest_mutex_Init(tls, interp) 60659 Sqlite3_Init(tls, interp) 60660 60661 rc = tcl.XTcl_Eval(tls, interp, (*SqlThread)(unsafe.Pointer(p)).FzScript) 60662 pRes = tcl.XTcl_GetObjResult(tls, interp) 60663 pList = tcl.XTcl_NewObj(tls) 60664 (*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount++ 60665 (*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount++ 60666 60667 if rc != TCL_OK { 60668 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, ts+9674, -1)) 60669 tcl.XTcl_ListObjAppendElement(tls, interp, pList, pRes) 60670 postToParent(tls, p, pList) 60671 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 60672 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount, 1) <= 0 { 60673 tcl.XTclFreeObj(tls, pList) 60674 } 60675 } 60676 pList = tcl.XTcl_NewObj(tls) 60677 } 60678 60679 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, ts+38550, -1)) 60680 tcl.XTcl_ListObjAppendElement(tls, interp, pList, tcl.XTcl_NewStringObj(tls, (*SqlThread)(unsafe.Pointer(p)).FzVarname, -1)) 60681 tcl.XTcl_ListObjAppendElement(tls, interp, pList, pRes) 60682 postToParent(tls, p, pList) 60683 60684 tcl.XTcl_Free(tls, p) 60685 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 60686 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pList)).FrefCount, 1) <= 0 { 60687 tcl.XTclFreeObj(tls, pList) 60688 } 60689 } 60690 for __ccgo2 := true; __ccgo2; __ccgo2 = 0 != 0 { 60691 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pRes)).FrefCount, 1) <= 0 { 60692 tcl.XTclFreeObj(tls, pRes) 60693 } 60694 } 60695 tcl.XTcl_DeleteInterp(tls, interp) 60696 for tcl.XTcl_DoOneEvent(tls, libc.CplInt32(int32(1)<<1)|int32(1)<<1) != 0 { 60697 } 60698 tcl.XTcl_ExitThread(tls, 0) 60699 60700 } 60701 60702 func sqlthread_spawn(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 60703 bp := tls.Alloc(32) 60704 defer tls.Free(32) 60705 60706 var pNew uintptr 60707 var rc int32 60708 60709 var zVarname uintptr 60710 60711 var zScript uintptr 60712 60713 var nStack int32 = 0 60714 var flags int32 = 0000 60715 60716 _ = clientData 60717 _ = objc 60718 60719 zVarname = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) 60720 zScript = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+20) 60721 60722 pNew = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(SqlThread{}))+uint64(*(*int32)(unsafe.Pointer(bp + 16)))+uint64(*(*int32)(unsafe.Pointer(bp + 20)))+uint64(2))) 60723 (*SqlThread)(unsafe.Pointer(pNew)).FzVarname = pNew + 1*32 60724 (*SqlThread)(unsafe.Pointer(pNew)).FzScript = (*SqlThread)(unsafe.Pointer(pNew)).FzVarname + uintptr(*(*int32)(unsafe.Pointer(bp + 16))+1) 60725 libc.X__builtin___memcpy_chk(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzVarname, zVarname, uint64(*(*int32)(unsafe.Pointer(bp + 16))+1), libc.X__builtin_object_size(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzVarname, 0)) 60726 libc.X__builtin___memcpy_chk(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzScript, zScript, uint64(*(*int32)(unsafe.Pointer(bp + 20))+1), libc.X__builtin_object_size(tls, (*SqlThread)(unsafe.Pointer(pNew)).FzScript, 0)) 60727 (*SqlThread)(unsafe.Pointer(pNew)).Fparent = tcl.XTcl_GetCurrentThread(tls) 60728 (*SqlThread)(unsafe.Pointer(pNew)).Finterp = interp 60729 60730 rc = tcl.XTcl_CreateThread(tls, bp+24, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{tclScriptThread})), pNew, nStack, flags) 60731 if rc != TCL_OK { 60732 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38554, 0)) 60733 tcl.XTcl_Free(tls, pNew) 60734 return TCL_ERROR 60735 } 60736 60737 return TCL_OK 60738 } 60739 60740 func sqlthread_parent(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 60741 bp := tls.Alloc(20) 60742 defer tls.Free(20) 60743 60744 var pEvent uintptr 60745 var zMsg uintptr 60746 60747 var p uintptr = clientData 60748 60749 _ = objc 60750 60751 if p == uintptr(0) { 60752 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+38582, 0)) 60753 return TCL_ERROR 60754 } 60755 60756 zMsg = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+16) 60757 pEvent = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(EvalEvent{}))+uint64(*(*int32)(unsafe.Pointer(bp + 16)))+uint64(1))) 60758 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.FnextPtr = uintptr(0) 60759 (*EvalEvent)(unsafe.Pointer(pEvent)).Fbase.Fproc = *(*uintptr)(unsafe.Pointer(&struct { 60760 f func(*libc.TLS, uintptr, int32) int32 60761 }{tclScriptEvent})) 60762 (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript = pEvent + 1*32 60763 libc.X__builtin___memcpy_chk(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, zMsg, uint64(*(*int32)(unsafe.Pointer(bp + 16))+1), libc.X__builtin_object_size(tls, (*EvalEvent)(unsafe.Pointer(pEvent)).FzScript, 0)) 60764 (*EvalEvent)(unsafe.Pointer(pEvent)).Finterp = (*SqlThread)(unsafe.Pointer(p)).Finterp 60765 tcl.XTcl_ThreadQueueEvent(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent, pEvent, TCL_QUEUE_TAIL) 60766 tcl.XTcl_ThreadAlert(tls, (*SqlThread)(unsafe.Pointer(p)).Fparent) 60767 60768 return TCL_OK 60769 } 60770 60771 func xBusy(tls *libc.TLS, pArg uintptr, nBusy int32) int32 { 60772 _ = pArg 60773 _ = nBusy 60774 sqlite3.Xsqlite3_sleep(tls, 50) 60775 return 1 60776 } 60777 60778 func sqlthread_open(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 60779 bp := tls.Alloc(124) 60780 defer tls.Free(124) 60781 60782 var zFilename uintptr 60783 60784 _ = clientData 60785 _ = objc 60786 60787 zFilename = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 60788 sqlite3.Xsqlite3_open(tls, zFilename, bp+16) 60789 Md5_Register(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), uintptr(0), uintptr(0)) 60790 sqlite3.Xsqlite3_busy_handler(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), *(*uintptr)(unsafe.Pointer(&struct { 60791 f func(*libc.TLS, uintptr, int32) int32 60792 }{xBusy})), uintptr(0)) 60793 60794 if sqlite3TestMakePointerStr(tls, interp, bp+24, *(*uintptr)(unsafe.Pointer(bp + 16))) != 0 { 60795 return TCL_ERROR 60796 } 60797 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, bp+24, 0)) 60798 60799 return TCL_OK 60800 } 60801 60802 func sqlthread_id(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 60803 var id Tcl_ThreadId = tcl.XTcl_GetCurrentThread(tls) 60804 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(id))) 60805 _ = clientData 60806 _ = objc 60807 _ = objv 60808 return TCL_OK 60809 } 60810 60811 func sqlthread_proc(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 60812 bp := tls.Alloc(164) 60813 defer tls.Free(164) 60814 60815 *(*[5]struct { 60816 FzName uintptr 60817 FxProc uintptr 60818 FnArg int32 60819 F__ccgo_pad1 [4]byte 60820 FzUsage uintptr 60821 })(unsafe.Pointer(bp)) = [5]struct { 60822 FzName uintptr 60823 FxProc uintptr 60824 FnArg int32 60825 F__ccgo_pad1 [4]byte 60826 FzUsage uintptr 60827 }{ 60828 {FzName: ts + 38599, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 60829 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 60830 }{sqlthread_parent})), FnArg: 1, FzUsage: ts + 10187}, 60831 {FzName: ts + 38606, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 60832 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 60833 }{sqlthread_spawn})), FnArg: 2, FzUsage: ts + 38612}, 60834 {FzName: ts + 37216, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 60835 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 60836 }{sqlthread_open})), FnArg: 1, FzUsage: ts + 38627}, 60837 {FzName: ts + 38634, FxProc: *(*uintptr)(unsafe.Pointer(&struct { 60838 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 60839 }{sqlthread_id})), FzUsage: ts + 584}, 60840 {}, 60841 } 60842 var pSub uintptr 60843 var rc int32 60844 60845 if objc < 2 { 60846 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2523) 60847 return TCL_ERROR 60848 } 60849 60850 rc = tcl.XTcl_GetIndexFromObjStruct(tls, 60851 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp, int32(unsafe.Sizeof(struct { 60852 FzName uintptr 60853 FxProc uintptr 60854 FnArg int32 60855 F__ccgo_pad1 [4]byte 60856 FzUsage uintptr 60857 }{})), ts+2014, 0, bp+160) 60858 if rc != TCL_OK { 60859 return rc 60860 } 60861 pSub = bp + uintptr(*(*int32)(unsafe.Pointer(bp + 160)))*32 60862 60863 if objc < (*struct { 60864 FzName uintptr 60865 FxProc uintptr 60866 FnArg int32 60867 F__ccgo_pad1 [4]byte 60868 FzUsage uintptr 60869 })(unsafe.Pointer(pSub)).FnArg+2 { 60870 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, (*struct { 60871 FzName uintptr 60872 FxProc uintptr 60873 FnArg int32 60874 F__ccgo_pad1 [4]byte 60875 FzUsage uintptr 60876 })(unsafe.Pointer(pSub)).FzUsage) 60877 return TCL_ERROR 60878 } 60879 60880 return (*struct { 60881 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 60882 })(unsafe.Pointer(&struct{ uintptr }{(*struct { 60883 FzName uintptr 60884 FxProc uintptr 60885 FnArg int32 60886 F__ccgo_pad1 [4]byte 60887 FzUsage uintptr 60888 })(unsafe.Pointer(pSub)).FxProc})).f(tls, clientData, interp, objc, objv) 60889 } 60890 60891 func clock_seconds_proc(tls *libc.TLS, clientData ClientData, interp uintptr, objc int32, objv uintptr) int32 { 60892 bp := tls.Alloc(16) 60893 defer tls.Free(16) 60894 60895 tcl.XTcl_GetTime(tls, bp) 60896 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32((*Tcl_Time)(unsafe.Pointer(bp)).Fsec))) 60897 _ = clientData 60898 _ = objc 60899 _ = objv 60900 return TCL_OK 60901 } 60902 60903 type UnlockNotification1 = struct { 60904 Ffired int32 60905 F__ccgo_pad1 [4]byte 60906 Fcond pthread_cond_t 60907 Fmutex pthread_mutex_t 60908 } 60909 60910 type UnlockNotification = UnlockNotification1 60911 60912 func unlock_notify_cb(tls *libc.TLS, apArg uintptr, nArg int32) { 60913 var i int32 60914 for i = 0; i < nArg; i++ { 60915 var p uintptr = *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8)) 60916 libc.Xpthread_mutex_lock(tls, p+56) 60917 (*UnlockNotification)(unsafe.Pointer(p)).Ffired = 1 60918 libc.Xpthread_cond_signal(tls, p+8) 60919 libc.Xpthread_mutex_unlock(tls, p+56) 60920 } 60921 } 60922 60923 func wait_for_unlock_notify(tls *libc.TLS, db uintptr) int32 { 60924 bp := tls.Alloc(120) 60925 defer tls.Free(120) 60926 60927 var rc int32 60928 60929 (*UnlockNotification)(unsafe.Pointer(bp)).Ffired = 0 60930 libc.Xpthread_mutex_init(tls, bp+56, uintptr(0)) 60931 libc.Xpthread_cond_init(tls, bp+8, uintptr(0)) 60932 60933 rc = sqlite3.Xsqlite3_unlock_notify(tls, db, *(*uintptr)(unsafe.Pointer(&struct { 60934 f func(*libc.TLS, uintptr, int32) 60935 }{unlock_notify_cb})), bp) 60936 60937 if rc == SQLITE_OK { 60938 libc.Xpthread_mutex_lock(tls, bp+56) 60939 if !((*UnlockNotification)(unsafe.Pointer(bp)).Ffired != 0) { 60940 libc.Xpthread_cond_wait(tls, bp+8, bp+56) 60941 } 60942 libc.Xpthread_mutex_unlock(tls, bp+56) 60943 } 60944 60945 libc.Xpthread_cond_destroy(tls, bp+8) 60946 libc.Xpthread_mutex_destroy(tls, bp+56) 60947 60948 return rc 60949 } 60950 60951 func sqlite3_blocking_step(tls *libc.TLS, pStmt uintptr) int32 { 60952 var rc int32 60953 for SQLITE_LOCKED == libc.AssignInt32(&rc, sqlite3.Xsqlite3_step(tls, pStmt)) { 60954 rc = wait_for_unlock_notify(tls, sqlite3.Xsqlite3_db_handle(tls, pStmt)) 60955 if rc != SQLITE_OK { 60956 break 60957 } 60958 sqlite3.Xsqlite3_reset(tls, pStmt) 60959 } 60960 return rc 60961 } 60962 60963 func sqlite3_blocking_prepare_v2(tls *libc.TLS, db uintptr, zSql uintptr, nSql int32, ppStmt uintptr, pz uintptr) int32 { 60964 var rc int32 60965 for SQLITE_LOCKED == libc.AssignInt32(&rc, sqlite3.Xsqlite3_prepare_v2(tls, db, zSql, nSql, ppStmt, pz)) { 60966 rc = wait_for_unlock_notify(tls, db) 60967 if rc != SQLITE_OK { 60968 break 60969 } 60970 } 60971 return rc 60972 } 60973 60974 func blocking_step_proc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60975 var pStmt uintptr 60976 var rc int32 60977 60978 if objc != 2 { 60979 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+17042) 60980 return TCL_ERROR 60981 } 60982 60983 pStmt = sqlite3TestTextToPtr(tls, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8)))) 60984 rc = sqlite3_blocking_step(tls, pStmt) 60985 60986 tcl.XTcl_SetResult(tls, interp, sqlite3.Xsqlite3ErrName(tls, rc), uintptr(0)) 60987 return TCL_OK 60988 } 60989 60990 func blocking_prepare_v2_proc(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 60991 bp := tls.Alloc(162) 60992 defer tls.Free(162) 60993 60994 var zSql uintptr 60995 60996 *(*uintptr)(unsafe.Pointer(bp + 104)) = uintptr(0) 60997 *(*uintptr)(unsafe.Pointer(bp + 96)) = uintptr(0) 60998 60999 var rc int32 61000 var isBlocking int32 = libc.BoolInt32(!(clientData == uintptr(0))) 61001 61002 if objc != 5 && objc != 4 { 61003 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+14949, 61004 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv))), ts+17088, 0)) 61005 return TCL_ERROR 61006 } 61007 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+80) != 0 { 61008 return TCL_ERROR 61009 } 61010 zSql = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 61011 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+88) != 0 { 61012 return TCL_ERROR 61013 } 61014 61015 if isBlocking != 0 { 61016 rc = sqlite3_blocking_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, bp+104) 61017 } else { 61018 rc = sqlite3.Xsqlite3_prepare_v2(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), zSql, *(*int32)(unsafe.Pointer(bp + 88)), bp+96, bp+104) 61019 } 61020 61021 if *(*uintptr)(unsafe.Pointer(bp + 104)) != 0 && objc >= 5 { 61022 if *(*int32)(unsafe.Pointer(bp + 88)) >= 0 { 61023 *(*int32)(unsafe.Pointer(bp + 88)) = int32(int64(*(*int32)(unsafe.Pointer(bp + 88))) - (int64(*(*uintptr)(unsafe.Pointer(bp + 104)))-int64(zSql))/1) 61024 } 61025 tcl.XTcl_ObjSetVar2(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), uintptr(0), tcl.XTcl_NewStringObj(tls, *(*uintptr)(unsafe.Pointer(bp + 104)), *(*int32)(unsafe.Pointer(bp + 88))), 0) 61026 } 61027 if rc != SQLITE_OK { 61028 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([50]int8{})), bp+112, ts+38637, libc.VaList(bp+32, sqlite3.Xsqlite3ErrName(tls, rc))) 61029 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+40, bp+112, sqlite3.Xsqlite3_errmsg(tls, *(*uintptr)(unsafe.Pointer(bp + 80))), 0)) 61030 return TCL_ERROR 61031 } 61032 61033 if *(*uintptr)(unsafe.Pointer(bp + 96)) != 0 { 61034 if sqlite3TestMakePointerStr(tls, interp, bp+112, *(*uintptr)(unsafe.Pointer(bp + 96))) != 0 { 61035 return TCL_ERROR 61036 } 61037 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+64, bp+112, 0)) 61038 } 61039 return TCL_OK 61040 } 61041 61042 func SqlitetestThread_Init(tls *libc.TLS, interp uintptr) int32 { 61043 tcl.XTcl_CreateObjCommand(tls, interp, ts+38459, *(*uintptr)(unsafe.Pointer(&struct { 61044 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 61045 }{sqlthread_proc})), uintptr(0), uintptr(0)) 61046 tcl.XTcl_CreateObjCommand(tls, interp, ts+38445, *(*uintptr)(unsafe.Pointer(&struct { 61047 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 61048 }{clock_seconds_proc})), uintptr(0), uintptr(0)) 61049 tcl.XTcl_CreateObjCommand(tls, interp, ts+38469, *(*uintptr)(unsafe.Pointer(&struct { 61050 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61051 }{blocking_step_proc})), uintptr(0), uintptr(0)) 61052 tcl.XTcl_CreateObjCommand(tls, interp, 61053 ts+38491, *(*uintptr)(unsafe.Pointer(&struct { 61054 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61055 }{blocking_prepare_v2_proc})), uintptr(1), uintptr(0)) 61056 tcl.XTcl_CreateObjCommand(tls, interp, 61057 ts+38519, *(*uintptr)(unsafe.Pointer(&struct { 61058 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 61059 }{blocking_prepare_v2_proc})), uintptr(0), uintptr(0)) 61060 return TCL_OK 61061 } 61062 61063 func Sqlitetestvdbecov_Init(tls *libc.TLS, interp uintptr) int32 { 61064 return TCL_OK 61065 } 61066 61067 type Testvfs1 = struct { 61068 FzName uintptr 61069 FpParent uintptr 61070 FpVfs uintptr 61071 Finterp uintptr 61072 FpScript uintptr 61073 FpBuffer uintptr 61074 FisNoshm int32 61075 FisFullshm int32 61076 Fmask int32 61077 Fioerr_err TestFaultInject 61078 Ffull_err TestFaultInject 61079 Fcantopen_err TestFaultInject 61080 FiDevchar int32 61081 FiSectorsize int32 61082 } 61083 61084 type Testvfs = Testvfs1 61085 type TestvfsBuffer1 = struct { 61086 FzFile uintptr 61087 Fpgsz int32 61088 F__ccgo_pad1 [4]byte 61089 FaPage [1024]uintptr 61090 FpFile uintptr 61091 FpNext uintptr 61092 } 61093 61094 type TestvfsBuffer = TestvfsBuffer1 61095 type TestvfsFile1 = struct { 61096 Fbase sqlite3_file 61097 FpFd uintptr 61098 } 61099 61100 type TestvfsFile = TestvfsFile1 61101 type TestvfsFd1 = struct { 61102 FpVfs uintptr 61103 FzFilename uintptr 61104 FpReal uintptr 61105 FpShmId uintptr 61106 FpShm uintptr 61107 Fexcllock u32 61108 Fsharedlock u32 61109 FpNext uintptr 61110 } 61111 61112 type TestvfsFd = TestvfsFd1 61113 61114 type TestFaultInject1 = struct { 61115 FiCnt int32 61116 FeFault int32 61117 FnFail int32 61118 } 61119 61120 type TestFaultInject = TestFaultInject1 61121 61122 var tvfs_io_methods = sqlite3_io_methods{ 61123 FiVersion: 3, 61124 FxClose: 0, 61125 FxRead: 0, 61126 FxWrite: 0, 61127 FxTruncate: 0, 61128 FxSync: 0, 61129 FxFileSize: 0, 61130 FxLock: 0, 61131 FxUnlock: 0, 61132 FxCheckReservedLock: 0, 61133 FxFileControl: 0, 61134 FxSectorSize: 0, 61135 FxDeviceCharacteristics: 0, 61136 FxShmMap: 0, 61137 FxShmLock: 0, 61138 FxShmBarrier: 0, 61139 FxShmUnmap: 0, 61140 FxFetch: 0, 61141 FxUnfetch: 0, 61142 } 61143 61144 func tvfsResultCode(tls *libc.TLS, p uintptr, pRc uintptr) int32 { 61145 bp := tls.Alloc(144) 61146 defer tls.Free(144) 61147 61148 *(*[9]errcode)(unsafe.Pointer(bp)) = [9]errcode{ 61149 {FzCode: ts + 2127}, 61150 {FeCode: SQLITE_ERROR, FzCode: ts + 2114}, 61151 {FeCode: SQLITE_IOERR, FzCode: ts + 38641}, 61152 {FeCode: SQLITE_LOCKED, FzCode: ts + 38654}, 61153 {FeCode: SQLITE_BUSY, FzCode: ts + 38668}, 61154 {FeCode: SQLITE_READONLY, FzCode: ts + 38680}, 61155 {FeCode: SQLITE_READONLY | int32(5)<<8, FzCode: ts + 38696}, 61156 {FeCode: SQLITE_NOTFOUND, FzCode: ts + 38721}, 61157 {FeCode: -1, FzCode: ts + 38737}, 61158 } 61159 var z uintptr 61160 var i int32 61161 61162 z = tcl.XTcl_GetStringResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 61163 for i = 0; i < int32(uint64(unsafe.Sizeof([9]errcode{}))/uint64(unsafe.Sizeof(errcode{}))); i++ { 61164 if 0 == libc.Xstrcmp(tls, z, (*errcode)(unsafe.Pointer(bp+uintptr(i)*16)).FzCode) { 61165 *(*int32)(unsafe.Pointer(pRc)) = (*errcode)(unsafe.Pointer(bp + uintptr(i)*16)).FeCode 61166 return 1 61167 } 61168 } 61169 61170 return 0 61171 } 61172 61173 type errcode = struct { 61174 FeCode int32 61175 F__ccgo_pad1 [4]byte 61176 FzCode uintptr 61177 } 61178 61179 func tvfsInjectFault(tls *libc.TLS, p uintptr) int32 { 61180 var ret int32 = 0 61181 if (*TestFaultInject)(unsafe.Pointer(p)).FeFault != 0 { 61182 (*TestFaultInject)(unsafe.Pointer(p)).FiCnt-- 61183 if (*TestFaultInject)(unsafe.Pointer(p)).FiCnt == 0 || (*TestFaultInject)(unsafe.Pointer(p)).FiCnt < 0 && (*TestFaultInject)(unsafe.Pointer(p)).FeFault == FAULT_INJECT_PERSISTENT { 61184 ret = 1 61185 (*TestFaultInject)(unsafe.Pointer(p)).FnFail++ 61186 } 61187 } 61188 return ret 61189 } 61190 61191 func tvfsInjectIoerr(tls *libc.TLS, p uintptr) int32 { 61192 return tvfsInjectFault(tls, p+60) 61193 } 61194 61195 func tvfsInjectFullerr(tls *libc.TLS, p uintptr) int32 { 61196 return tvfsInjectFault(tls, p+72) 61197 } 61198 61199 func tvfsInjectCantopenerr(tls *libc.TLS, p uintptr) int32 { 61200 return tvfsInjectFault(tls, p+84) 61201 } 61202 61203 func tvfsExecTcl(tls *libc.TLS, p uintptr, zMethod uintptr, arg1 uintptr, arg2 uintptr, arg3 uintptr, arg4 uintptr) { 61204 var rc int32 61205 var pEval uintptr 61206 61207 pEval = tcl.XTcl_DuplicateObj(tls, (*Testvfs)(unsafe.Pointer(p)).FpScript) 61208 (*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount++ 61209 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, zMethod, -1)) 61210 if arg1 != 0 { 61211 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg1) 61212 } 61213 if arg2 != 0 { 61214 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg2) 61215 } 61216 if arg3 != 0 { 61217 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg3) 61218 } 61219 if arg4 != 0 { 61220 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, arg4) 61221 } 61222 61223 rc = tcl.XTcl_EvalObjEx(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 61224 if rc != TCL_OK { 61225 tcl.XTcl_BackgroundError(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 61226 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 61227 } 61228 } 61229 61230 func tvfsClose(tls *libc.TLS, pFile uintptr) int32 { 61231 var pTestfile uintptr = pFile 61232 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd 61233 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61234 61235 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_CLOSE_MASK != 0 { 61236 tvfsExecTcl(tls, p, ts+35739, 61237 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 61238 } 61239 61240 if (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId != 0 { 61241 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 61242 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId)).FrefCount, 1) <= 0 { 61243 tcl.XTclFreeObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId) 61244 } 61245 } 61246 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = uintptr(0) 61247 } 61248 if (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods != 0 { 61249 tcl.XTcl_Free(tls, (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods) 61250 } 61251 sqlite3.Xsqlite3OsClose(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 61252 tcl.XTcl_Free(tls, pFd) 61253 (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd = uintptr(0) 61254 return SQLITE_OK 61255 } 61256 61257 func tvfsRead(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 61258 bp := tls.Alloc(4) 61259 defer tls.Free(4) 61260 61261 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 61262 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61263 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61264 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_READ_MASK != 0 { 61265 tvfsExecTcl(tls, p, ts+35746, 61266 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 61267 tvfsResultCode(tls, p, bp) 61268 } 61269 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_READ_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 61270 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 61271 } 61272 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 61273 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsRead(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, zBuf, iAmt, iOfst) 61274 } 61275 return *(*int32)(unsafe.Pointer(bp)) 61276 } 61277 61278 func tvfsWrite(tls *libc.TLS, pFile uintptr, zBuf uintptr, iAmt int32, iOfst sqlite_int64) int32 { 61279 bp := tls.Alloc(4) 61280 defer tls.Free(4) 61281 61282 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 61283 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61284 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61285 61286 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 { 61287 tvfsExecTcl(tls, p, ts+35752, 61288 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 61289 tcl.XTcl_NewWideIntObj(tls, iOfst), tcl.XTcl_NewIntObj(tls, iAmt)) 61290 tvfsResultCode(tls, p, bp) 61291 if *(*int32)(unsafe.Pointer(bp)) < 0 { 61292 return SQLITE_OK 61293 } 61294 } 61295 61296 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && tvfsInjectFullerr(tls, p) != 0 { 61297 *(*int32)(unsafe.Pointer(bp)) = SQLITE_FULL 61298 } 61299 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 61300 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 61301 } 61302 61303 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 61304 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsWrite(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, zBuf, iAmt, iOfst) 61305 } 61306 return *(*int32)(unsafe.Pointer(bp)) 61307 } 61308 61309 func tvfsTruncate(tls *libc.TLS, pFile uintptr, size sqlite_int64) int32 { 61310 bp := tls.Alloc(4) 61311 defer tls.Free(4) 61312 61313 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 61314 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61315 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61316 61317 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_TRUNCATE_MASK != 0 { 61318 tvfsExecTcl(tls, p, ts+35759, 61319 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 61320 tvfsResultCode(tls, p, bp) 61321 } 61322 61323 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 61324 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsTruncate(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, size) 61325 } 61326 return *(*int32)(unsafe.Pointer(bp)) 61327 } 61328 61329 func tvfsSync(tls *libc.TLS, pFile uintptr, flags int32) int32 { 61330 bp := tls.Alloc(4) 61331 defer tls.Free(4) 61332 61333 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 61334 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61335 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61336 61337 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SYNC_MASK != 0 { 61338 var zFlags uintptr = uintptr(0) 61339 61340 switch flags { 61341 case SQLITE_SYNC_NORMAL: 61342 zFlags = ts + 16397 61343 break 61344 fallthrough 61345 case SQLITE_SYNC_FULL: 61346 zFlags = ts + 18377 61347 break 61348 fallthrough 61349 case SQLITE_SYNC_NORMAL | SQLITE_SYNC_DATAONLY: 61350 zFlags = ts + 38749 61351 break 61352 fallthrough 61353 case SQLITE_SYNC_FULL | SQLITE_SYNC_DATAONLY: 61354 zFlags = ts + 38765 61355 break 61356 fallthrough 61357 default: 61358 } 61359 61360 tvfsExecTcl(tls, p, ts+27947, 61361 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 61362 tcl.XTcl_NewStringObj(tls, zFlags, -1), uintptr(0)) 61363 tvfsResultCode(tls, p, bp) 61364 } 61365 61366 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && tvfsInjectFullerr(tls, p) != 0 { 61367 *(*int32)(unsafe.Pointer(bp)) = SQLITE_FULL 61368 } 61369 61370 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 61371 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsSync(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, flags) 61372 } 61373 61374 return *(*int32)(unsafe.Pointer(bp)) 61375 } 61376 61377 func tvfsFileSize(tls *libc.TLS, pFile uintptr, pSize uintptr) int32 { 61378 var p uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61379 return sqlite3.Xsqlite3OsFileSize(tls, (*TestvfsFd)(unsafe.Pointer(p)).FpReal, pSize) 61380 } 61381 61382 func tvfsLock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 61383 bp := tls.Alloc(38) 61384 defer tls.Free(38) 61385 61386 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61387 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61388 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_LOCK_MASK != 0 { 61389 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+8, ts+1333, libc.VaList(bp, eLock)) 61390 tvfsExecTcl(tls, p, ts+35779, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 61391 tcl.XTcl_NewStringObj(tls, bp+8, -1), uintptr(0), uintptr(0)) 61392 } 61393 return sqlite3.Xsqlite3OsLock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, eLock) 61394 } 61395 61396 func tvfsUnlock(tls *libc.TLS, pFile uintptr, eLock int32) int32 { 61397 bp := tls.Alloc(38) 61398 defer tls.Free(38) 61399 61400 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61401 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61402 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_UNLOCK_MASK != 0 { 61403 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([30]int8{})), bp+8, ts+1333, libc.VaList(bp, eLock)) 61404 tvfsExecTcl(tls, p, ts+35785, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 61405 tcl.XTcl_NewStringObj(tls, bp+8, -1), uintptr(0), uintptr(0)) 61406 } 61407 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_WRITE_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 61408 return SQLITE_IOERR | int32(8)<<8 61409 } 61410 return sqlite3.Xsqlite3OsUnlock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, eLock) 61411 } 61412 61413 func tvfsCheckReservedLock(tls *libc.TLS, pFile uintptr, pResOut uintptr) int32 { 61414 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61415 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61416 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_CKLOCK_MASK != 0 { 61417 tvfsExecTcl(tls, p, ts+38779, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 61418 uintptr(0), uintptr(0), uintptr(0)) 61419 } 61420 return sqlite3.Xsqlite3OsCheckReservedLock(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, pResOut) 61421 } 61422 61423 func tvfsFileControl(tls *libc.TLS, pFile uintptr, op int32, pArg uintptr) int32 { 61424 bp := tls.Alloc(68) 61425 defer tls.Free(68) 61426 61427 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61428 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61429 if op == SQLITE_FCNTL_PRAGMA { 61430 var argv uintptr = pArg 61431 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+9674) == 0 { 61432 var rc int32 = SQLITE_ERROR 61433 if *(*uintptr)(unsafe.Pointer(argv + 2*8)) != 0 { 61434 var z uintptr = *(*uintptr)(unsafe.Pointer(argv + 2*8)) 61435 var x int32 = libc.Xatoi(tls, z) 61436 if x != 0 { 61437 rc = x 61438 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x04 != 0 { 61439 z++ 61440 } 61441 for int32(sqlite3.Xsqlite3CtypeMap[uint8(*(*int8)(unsafe.Pointer(z)))])&0x01 != 0 { 61442 z++ 61443 } 61444 } 61445 if *(*int8)(unsafe.Pointer(z)) != 0 { 61446 *(*uintptr)(unsafe.Pointer(argv)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp, z)) 61447 } 61448 } 61449 return rc 61450 } 61451 if sqlite3.Xsqlite3_stricmp(tls, *(*uintptr)(unsafe.Pointer(argv + 1*8)), ts+4794) == 0 { 61452 *(*uintptr)(unsafe.Pointer(argv)) = sqlite3.Xsqlite3_mprintf(tls, ts, libc.VaList(bp+8, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename)) 61453 return SQLITE_OK 61454 } 61455 } 61456 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_FCNTL_MASK != 0 { 61457 *(*[3]Fcntl)(unsafe.Pointer(bp + 16)) = [3]Fcntl{ 61458 {FiFnctl: SQLITE_FCNTL_BEGIN_ATOMIC_WRITE, FzFnctl: ts + 38798}, 61459 {FiFnctl: SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, FzFnctl: ts + 38817}, 61460 {FiFnctl: SQLITE_FCNTL_ZIPVFS, FzFnctl: ts + 38837}, 61461 } 61462 var i int32 61463 for i = 0; uint64(i) < uint64(unsafe.Sizeof([3]Fcntl{}))/uint64(unsafe.Sizeof(Fcntl{})); i++ { 61464 if op == (*Fcntl)(unsafe.Pointer(bp+16+uintptr(i)*16)).FiFnctl { 61465 break 61466 } 61467 } 61468 if uint64(i) < uint64(unsafe.Sizeof([3]Fcntl{}))/uint64(unsafe.Sizeof(Fcntl{})) { 61469 *(*int32)(unsafe.Pointer(bp + 64)) = 0 61470 tvfsExecTcl(tls, p, ts+35807, 61471 tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), 61472 tcl.XTcl_NewStringObj(tls, (*Fcntl)(unsafe.Pointer(bp+16+uintptr(i)*16)).FzFnctl, -1), 61473 uintptr(0), uintptr(0)) 61474 tvfsResultCode(tls, p, bp+64) 61475 if *(*int32)(unsafe.Pointer(bp + 64)) != 0 { 61476 return func() int32 { 61477 if *(*int32)(unsafe.Pointer(bp + 64)) < 0 { 61478 return SQLITE_OK 61479 } 61480 return *(*int32)(unsafe.Pointer(bp + 64)) 61481 }() 61482 } 61483 } 61484 } 61485 return sqlite3.Xsqlite3OsFileControl(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, op, pArg) 61486 } 61487 61488 type Fcntl = struct { 61489 FiFnctl int32 61490 F__ccgo_pad1 [4]byte 61491 FzFnctl uintptr 61492 } 61493 61494 func tvfsSectorSize(tls *libc.TLS, pFile uintptr) int32 { 61495 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61496 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61497 if (*Testvfs)(unsafe.Pointer(p)).FiSectorsize >= 0 { 61498 return (*Testvfs)(unsafe.Pointer(p)).FiSectorsize 61499 } 61500 return sqlite3.Xsqlite3OsSectorSize(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 61501 } 61502 61503 func tvfsDeviceCharacteristics(tls *libc.TLS, pFile uintptr) int32 { 61504 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61505 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61506 if (*Testvfs)(unsafe.Pointer(p)).FiDevchar >= 0 { 61507 return (*Testvfs)(unsafe.Pointer(p)).FiDevchar 61508 } 61509 return sqlite3.Xsqlite3OsDeviceCharacteristics(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal) 61510 } 61511 61512 func tvfsOpen(tls *libc.TLS, pVfs uintptr, zName uintptr, pFile uintptr, flags int32, pOutFlags uintptr) int32 { 61513 bp := tls.Alloc(4) 61514 defer tls.Free(4) 61515 61516 var pTestfile uintptr = pFile 61517 var pFd uintptr 61518 var pId uintptr = uintptr(0) 61519 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 61520 61521 pFd = tcl.XTcl_Alloc(tls, uint32(uint64(unsafe.Sizeof(TestvfsFd{}))+uint64((*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent)).FszOsFile))) 61522 libc.X__builtin___memset_chk(tls, pFd, 0, uint64(unsafe.Sizeof(TestvfsFd{}))+uint64((*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent)).FszOsFile), libc.X__builtin_object_size(tls, pFd, 0)) 61523 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = uintptr(0) 61524 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = uintptr(0) 61525 (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename = zName 61526 (*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs = pVfs 61527 (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal = pFd + 1*56 61528 libc.X__builtin___memset_chk(tls, pTestfile, 0, uint64(unsafe.Sizeof(TestvfsFile{})), libc.X__builtin_object_size(tls, pTestfile, 0)) 61529 (*TestvfsFile)(unsafe.Pointer(pTestfile)).FpFd = pFd 61530 61531 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 61532 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_OPEN_MASK != 0 { 61533 var pArg uintptr = tcl.XTcl_NewObj(tls) 61534 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 61535 if flags&SQLITE_OPEN_MAIN_DB != 0 { 61536 var z uintptr = zName + uintptr(libc.Xstrlen(tls, zName)+uint64(1)) 61537 for *(*int8)(unsafe.Pointer(z)) != 0 { 61538 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pArg, tcl.XTcl_NewStringObj(tls, z, -1)) 61539 z += uintptr(libc.Xstrlen(tls, z) + uint64(1)) 61540 tcl.XTcl_ListObjAppendElement(tls, uintptr(0), pArg, tcl.XTcl_NewStringObj(tls, z, -1)) 61541 z += uintptr(libc.Xstrlen(tls, z) + uint64(1)) 61542 } 61543 } 61544 tvfsExecTcl(tls, p, ts+27525, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), pArg, uintptr(0), uintptr(0)) 61545 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 61546 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount, 1) <= 0 { 61547 tcl.XTclFreeObj(tls, pArg) 61548 } 61549 } 61550 if tvfsResultCode(tls, p, bp) != 0 { 61551 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 61552 return *(*int32)(unsafe.Pointer(bp)) 61553 } 61554 } else { 61555 pId = tcl.XTcl_GetObjResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 61556 } 61557 } 61558 61559 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_OPEN_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 61560 return SQLITE_IOERR 61561 } 61562 if tvfsInjectCantopenerr(tls, p) != 0 { 61563 return SQLITE_CANTOPEN 61564 } 61565 if tvfsInjectFullerr(tls, p) != 0 { 61566 return SQLITE_FULL 61567 } 61568 61569 if !(pId != 0) { 61570 pId = tcl.XTcl_NewStringObj(tls, ts+38844, -1) 61571 } 61572 (*Tcl_Obj)(unsafe.Pointer(pId)).FrefCount++ 61573 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId = pId 61574 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 61575 61576 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsOpen(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zName, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, flags, pOutFlags) 61577 if (*sqlite3_file)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpReal)).FpMethods != 0 { 61578 var pMethods uintptr 61579 var nByte int32 61580 61581 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion > 1 { 61582 nByte = int32(unsafe.Sizeof(sqlite3_io_methods{})) 61583 } else { 61584 nByte = int32(uintptr(0) + 104) 61585 } 61586 61587 pMethods = tcl.XTcl_Alloc(tls, uint32(nByte)) 61588 libc.X__builtin___memcpy_chk(tls, pMethods, uintptr(unsafe.Pointer(&tvfs_io_methods)), uint64(nByte), libc.X__builtin_object_size(tls, pMethods, 0)) 61589 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion = (*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpReal)).FpMethods)).FiVersion 61590 if (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion > (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion { 61591 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FiVersion = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion 61592 } 61593 if (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion > 1 && (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FisNoshm != 0 { 61594 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmUnmap = uintptr(0) 61595 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmLock = uintptr(0) 61596 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmBarrier = uintptr(0) 61597 (*sqlite3_io_methods)(unsafe.Pointer(pMethods)).FxShmMap = uintptr(0) 61598 } 61599 (*sqlite3_file)(unsafe.Pointer(pFile)).FpMethods = pMethods 61600 } 61601 61602 return *(*int32)(unsafe.Pointer(bp)) 61603 } 61604 61605 func tvfsDelete(tls *libc.TLS, pVfs uintptr, zPath uintptr, dirSync int32) int32 { 61606 bp := tls.Alloc(4) 61607 defer tls.Free(4) 61608 61609 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 61610 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 61611 61612 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_DELETE_MASK != 0 { 61613 tvfsExecTcl(tls, p, ts+35844, 61614 tcl.XTcl_NewStringObj(tls, zPath, -1), tcl.XTcl_NewIntObj(tls, dirSync), uintptr(0), uintptr(0)) 61615 tvfsResultCode(tls, p, bp) 61616 } 61617 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK { 61618 *(*int32)(unsafe.Pointer(bp)) = sqlite3.Xsqlite3OsDelete(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, dirSync) 61619 } 61620 return *(*int32)(unsafe.Pointer(bp)) 61621 } 61622 61623 func tvfsAccess(tls *libc.TLS, pVfs uintptr, zPath uintptr, flags int32, pResOut uintptr) int32 { 61624 bp := tls.Alloc(4) 61625 defer tls.Free(4) 61626 61627 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 61628 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_ACCESS_MASK != 0 { 61629 var zArg uintptr = uintptr(0) 61630 if flags == SQLITE_ACCESS_EXISTS { 61631 zArg = ts + 38849 61632 } 61633 if flags == SQLITE_ACCESS_READWRITE { 61634 zArg = ts + 38870 61635 } 61636 if flags == SQLITE_ACCESS_READ { 61637 zArg = ts + 38894 61638 } 61639 tvfsExecTcl(tls, p, ts+35852, 61640 tcl.XTcl_NewStringObj(tls, zPath, -1), tcl.XTcl_NewStringObj(tls, zArg, -1), uintptr(0), uintptr(0)) 61641 if tvfsResultCode(tls, p, bp) != 0 { 61642 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 61643 return *(*int32)(unsafe.Pointer(bp)) 61644 } 61645 } else { 61646 var interp uintptr = (*Testvfs)(unsafe.Pointer(p)).Finterp 61647 if TCL_OK == tcl.XTcl_GetBooleanFromObj(tls, uintptr(0), tcl.XTcl_GetObjResult(tls, interp), pResOut) { 61648 return SQLITE_OK 61649 } 61650 } 61651 } 61652 return sqlite3.Xsqlite3OsAccess(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, flags, pResOut) 61653 } 61654 61655 func tvfsFullPathname(tls *libc.TLS, pVfs uintptr, zPath uintptr, nOut int32, zOut uintptr) int32 { 61656 bp := tls.Alloc(4) 61657 defer tls.Free(4) 61658 61659 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData 61660 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_FULLPATHNAME_MASK != 0 { 61661 tvfsExecTcl(tls, p, ts+35860, tcl.XTcl_NewStringObj(tls, zPath, -1), uintptr(0), uintptr(0), uintptr(0)) 61662 if tvfsResultCode(tls, p, bp) != 0 { 61663 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 61664 return *(*int32)(unsafe.Pointer(bp)) 61665 } 61666 } 61667 } 61668 return sqlite3.Xsqlite3OsFullPathname(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, zPath, nOut, zOut) 61669 } 61670 61671 func tvfsRandomness(tls *libc.TLS, pVfs uintptr, nByte int32, zBufOut uintptr) int32 { 61672 return sqlite3.Xsqlite3OsRandomness(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, nByte, zBufOut) 61673 } 61674 61675 func tvfsSleep(tls *libc.TLS, pVfs uintptr, nMicro int32) int32 { 61676 return sqlite3.Xsqlite3OsSleep(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, nMicro) 61677 } 61678 61679 func tvfsCurrentTime(tls *libc.TLS, pVfs uintptr, pTimeOut uintptr) int32 { 61680 return (*struct { 61681 f func(*libc.TLS, uintptr, uintptr) int32 61682 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent)).FxCurrentTime})).f(tls, (*Testvfs)(unsafe.Pointer((*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData)).FpParent, pTimeOut) 61683 } 61684 61685 func tvfsShmOpen(tls *libc.TLS, pFile uintptr) int32 { 61686 bp := tls.Alloc(4) 61687 defer tls.Free(4) 61688 61689 var p uintptr 61690 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 61691 var pBuffer uintptr 61692 var pFd uintptr 61693 61694 pFd = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61695 p = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61696 61697 tcl.XTcl_ResetResult(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp) 61698 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMOPEN_MASK != 0 { 61699 tvfsExecTcl(tls, p, ts+38913, tcl.XTcl_NewStringObj(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, -1), uintptr(0), uintptr(0), uintptr(0)) 61700 if tvfsResultCode(tls, p, bp) != 0 { 61701 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 61702 return *(*int32)(unsafe.Pointer(bp)) 61703 } 61704 } 61705 } 61706 61707 if (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMOPEN_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 61708 return SQLITE_IOERR 61709 } 61710 61711 for pBuffer = (*Testvfs)(unsafe.Pointer(p)).FpBuffer; pBuffer != 0; pBuffer = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext { 61712 if 0 == libc.Xstrcmp(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile) { 61713 break 61714 } 61715 } 61716 if !(pBuffer != 0) { 61717 var szName int32 = int32(libc.Xstrlen(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename)) 61718 var nByte int32 = int32(uint64(unsafe.Sizeof(TestvfsBuffer{})) + uint64(szName) + uint64(1)) 61719 pBuffer = tcl.XTcl_Alloc(tls, uint32(nByte)) 61720 libc.X__builtin___memset_chk(tls, pBuffer, 0, uint64(nByte), libc.X__builtin_object_size(tls, pBuffer, 0)) 61721 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile = pBuffer + 1*8224 61722 libc.X__builtin___memcpy_chk(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, (*TestvfsFd)(unsafe.Pointer(pFd)).FzFilename, uint64(szName+1), libc.X__builtin_object_size(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, 0)) 61723 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext = (*Testvfs)(unsafe.Pointer(p)).FpBuffer 61724 (*Testvfs)(unsafe.Pointer(p)).FpBuffer = pBuffer 61725 } 61726 61727 (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile 61728 (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile = pFd 61729 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = pBuffer 61730 return *(*int32)(unsafe.Pointer(bp)) 61731 } 61732 61733 func tvfsAllocPage(tls *libc.TLS, p uintptr, iPage int32, pgsz int32) { 61734 if *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)) == uintptr(0) { 61735 *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)) = tcl.XTcl_Alloc(tls, uint32(pgsz)) 61736 libc.X__builtin___memset_chk(tls, *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)), 0, uint64(pgsz), libc.X__builtin_object_size(tls, *(*uintptr)(unsafe.Pointer(p + 16 + uintptr(iPage)*8)), 0)) 61737 (*TestvfsBuffer)(unsafe.Pointer(p)).Fpgsz = pgsz 61738 } 61739 } 61740 61741 func tvfsShmMap(tls *libc.TLS, pFile uintptr, iPage int32, pgsz int32, isWrite int32, pp uintptr) int32 { 61742 bp := tls.Alloc(4) 61743 defer tls.Free(4) 61744 61745 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 61746 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61747 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61748 61749 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 61750 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 61751 return (*struct { 61752 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 61753 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmMap})).f(tls, pReal, iPage, pgsz, isWrite, pp) 61754 } 61755 61756 if uintptr(0) == (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm { 61757 *(*int32)(unsafe.Pointer(bp)) = tvfsShmOpen(tls, pFile) 61758 if *(*int32)(unsafe.Pointer(bp)) != SQLITE_OK { 61759 return *(*int32)(unsafe.Pointer(bp)) 61760 } 61761 } 61762 61763 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMMAP_MASK != 0 { 61764 var pArg uintptr = tcl.XTcl_NewObj(tls) 61765 (*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount++ 61766 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, iPage)) 61767 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, pgsz)) 61768 tcl.XTcl_ListObjAppendElement(tls, (*Testvfs)(unsafe.Pointer(p)).Finterp, pArg, tcl.XTcl_NewIntObj(tls, isWrite)) 61769 tvfsExecTcl(tls, p, ts+35937, 61770 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, pArg, uintptr(0)) 61771 tvfsResultCode(tls, p, bp) 61772 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 61773 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pArg)).FrefCount, 1) <= 0 { 61774 tcl.XTclFreeObj(tls, pArg) 61775 } 61776 } 61777 } 61778 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMMAP_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 61779 *(*int32)(unsafe.Pointer(bp)) = SQLITE_IOERR 61780 } 61781 61782 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK && isWrite != 0 && !(int32(*(*uintptr)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm + 16 + uintptr(iPage)*8))) != 0) { 61783 tvfsAllocPage(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm, iPage, pgsz) 61784 } 61785 if *(*int32)(unsafe.Pointer(bp)) == SQLITE_OK || *(*int32)(unsafe.Pointer(bp)) == SQLITE_READONLY { 61786 *(*uintptr)(unsafe.Pointer(pp)) = *(*uintptr)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm + 16 + uintptr(iPage)*8)) 61787 } 61788 61789 return *(*int32)(unsafe.Pointer(bp)) 61790 } 61791 61792 func tvfsShmLock(tls *libc.TLS, pFile uintptr, ofst int32, n int32, flags int32) int32 { 61793 bp := tls.Alloc(100) 61794 defer tls.Free(100) 61795 61796 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_OK 61797 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61798 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61799 var nLock int32 61800 61801 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 61802 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 61803 return (*struct { 61804 f func(*libc.TLS, uintptr, int32, int32, int32) int32 61805 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmLock})).f(tls, pReal, ofst, n, flags) 61806 } 61807 61808 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMLOCK_MASK != 0 { 61809 sqlite3.Xsqlite3_snprintf(tls, int32(unsafe.Sizeof([80]int8{})), bp+16, ts+17912, libc.VaList(bp, ofst, n)) 61810 nLock = int32(libc.Xstrlen(tls, bp+16)) 61811 if flags&SQLITE_SHM_LOCK != 0 { 61812 libc.X__builtin___strcpy_chk(tls, bp+16+uintptr(nLock), ts+38922, libc.X__builtin_object_size(tls, bp+16+uintptr(nLock), func() int32 { 61813 if X_USE_FORTIFY_LEVEL > 1 { 61814 return 1 61815 } 61816 return 0 61817 }())) 61818 } else { 61819 libc.X__builtin___strcpy_chk(tls, bp+16+uintptr(nLock), ts+38928, libc.X__builtin_object_size(tls, bp+16+uintptr(nLock), func() int32 { 61820 if X_USE_FORTIFY_LEVEL > 1 { 61821 return 1 61822 } 61823 return 0 61824 }())) 61825 } 61826 nLock = nLock + int32(libc.Xstrlen(tls, bp+16+uintptr(nLock))) 61827 if flags&SQLITE_SHM_SHARED != 0 { 61828 libc.X__builtin___strcpy_chk(tls, bp+16+uintptr(nLock), ts+38936, libc.X__builtin_object_size(tls, bp+16+uintptr(nLock), func() int32 { 61829 if X_USE_FORTIFY_LEVEL > 1 { 61830 return 1 61831 } 61832 return 0 61833 }())) 61834 } else { 61835 libc.X__builtin___strcpy_chk(tls, bp+16+uintptr(nLock), ts+38944, libc.X__builtin_object_size(tls, bp+16+uintptr(nLock), func() int32 { 61836 if X_USE_FORTIFY_LEVEL > 1 { 61837 return 1 61838 } 61839 return 0 61840 }())) 61841 } 61842 tvfsExecTcl(tls, p, ts+35916, 61843 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, 61844 tcl.XTcl_NewStringObj(tls, bp+16, -1), uintptr(0)) 61845 tvfsResultCode(tls, p, bp+96) 61846 } 61847 61848 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMLOCK_MASK != 0 && tvfsInjectIoerr(tls, p) != 0 { 61849 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_IOERR 61850 } 61851 61852 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK { 61853 var isLock int32 = flags & SQLITE_SHM_LOCK 61854 var isExcl int32 = flags & SQLITE_SHM_EXCLUSIVE 61855 var mask u32 = u32((int32(1)<<n - 1) << ofst) 61856 if isLock != 0 { 61857 var p2 uintptr 61858 for p2 = (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FpFile; p2 != 0; p2 = (*TestvfsFd)(unsafe.Pointer(p2)).FpNext { 61859 if p2 == pFd { 61860 continue 61861 } 61862 if (*TestvfsFd)(unsafe.Pointer(p2)).Fexcllock&mask != 0 || isExcl != 0 && (*TestvfsFd)(unsafe.Pointer(p2)).Fsharedlock&mask != 0 { 61863 *(*int32)(unsafe.Pointer(bp + 96)) = SQLITE_BUSY 61864 break 61865 } 61866 } 61867 if *(*int32)(unsafe.Pointer(bp + 96)) == SQLITE_OK { 61868 if isExcl != 0 { 61869 *(*u32)(unsafe.Pointer(pFd + 40)) |= mask 61870 } 61871 if !(isExcl != 0) { 61872 *(*u32)(unsafe.Pointer(pFd + 44)) |= mask 61873 } 61874 } 61875 } else { 61876 if isExcl != 0 { 61877 *(*u32)(unsafe.Pointer(pFd + 40)) &= ^mask 61878 } 61879 if !(isExcl != 0) { 61880 *(*u32)(unsafe.Pointer(pFd + 44)) &= ^mask 61881 } 61882 } 61883 } 61884 61885 return *(*int32)(unsafe.Pointer(bp + 96)) 61886 } 61887 61888 func tvfsShmBarrier(tls *libc.TLS, pFile uintptr) { 61889 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61890 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61891 61892 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMBARRIER_MASK != 0 { 61893 var z uintptr 61894 if (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm != 0 { 61895 z = (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile 61896 } else { 61897 z = ts + 584 61898 } 61899 tvfsExecTcl(tls, p, ts+35925, tcl.XTcl_NewStringObj(tls, z, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 61900 } 61901 61902 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 61903 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 61904 (*struct{ f func(*libc.TLS, uintptr) })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmBarrier})).f(tls, pReal) 61905 return 61906 } 61907 } 61908 61909 func tvfsShmUnmap(tls *libc.TLS, pFile uintptr, deleteFlag int32) int32 { 61910 bp := tls.Alloc(4) 61911 defer tls.Free(4) 61912 61913 *(*int32)(unsafe.Pointer(bp)) = SQLITE_OK 61914 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61915 var p uintptr = (*sqlite3_vfs)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpVfs)).FpAppData 61916 var pBuffer uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm 61917 var ppFd uintptr 61918 61919 if (*Testvfs)(unsafe.Pointer(p)).FisFullshm != 0 { 61920 var pReal uintptr = (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal 61921 return (*struct { 61922 f func(*libc.TLS, uintptr, int32) int32 61923 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(pReal)).FpMethods)).FxShmUnmap})).f(tls, pReal, deleteFlag) 61924 } 61925 61926 if !(pBuffer != 0) { 61927 return SQLITE_OK 61928 } 61929 61930 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 && (*Testvfs)(unsafe.Pointer(p)).Fmask&TESTVFS_SHMCLOSE_MASK != 0 { 61931 tvfsExecTcl(tls, p, ts+35906, 61932 tcl.XTcl_NewStringObj(tls, (*TestvfsBuffer)(unsafe.Pointer((*TestvfsFd)(unsafe.Pointer(pFd)).FpShm)).FzFile, -1), (*TestvfsFd)(unsafe.Pointer(pFd)).FpShmId, uintptr(0), uintptr(0)) 61933 tvfsResultCode(tls, p, bp) 61934 } 61935 61936 for ppFd = pBuffer + 8208; *(*uintptr)(unsafe.Pointer(ppFd)) != pFd; ppFd = *(*uintptr)(unsafe.Pointer(ppFd)) + 48 { 61937 } 61938 61939 *(*uintptr)(unsafe.Pointer(ppFd)) = (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext 61940 (*TestvfsFd)(unsafe.Pointer(pFd)).FpNext = uintptr(0) 61941 61942 if (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpFile == uintptr(0) { 61943 var i int32 61944 var pp uintptr 61945 for pp = p + 40; *(*uintptr)(unsafe.Pointer(pp)) != pBuffer; pp = *(*uintptr)(unsafe.Pointer(pp)) + 8216 { 61946 } 61947 *(*uintptr)(unsafe.Pointer(pp)) = (*TestvfsBuffer)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(pp)))).FpNext 61948 for i = 0; *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(i)*8)) != 0; i++ { 61949 tcl.XTcl_Free(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(i)*8))) 61950 } 61951 tcl.XTcl_Free(tls, pBuffer) 61952 } 61953 (*TestvfsFd)(unsafe.Pointer(pFd)).FpShm = uintptr(0) 61954 61955 return *(*int32)(unsafe.Pointer(bp)) 61956 } 61957 61958 func tvfsFetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, iAmt int32, pp uintptr) int32 { 61959 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61960 return sqlite3.Xsqlite3OsFetch(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, iOfst, iAmt, pp) 61961 } 61962 61963 func tvfsUnfetch(tls *libc.TLS, pFile uintptr, iOfst sqlite3_int64, p uintptr) int32 { 61964 var pFd uintptr = (*TestvfsFile)(unsafe.Pointer(pFile)).FpFd 61965 return sqlite3.Xsqlite3OsUnfetch(tls, (*TestvfsFd)(unsafe.Pointer(pFd)).FpReal, iOfst, p) 61966 } 61967 61968 func testvfs_obj_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 61969 bp := tls.Alloc(568) 61970 defer tls.Free(568) 61971 61972 var p uintptr = cd 61973 *(*[10]TestvfsSubcmd)(unsafe.Pointer(bp + 96)) = [10]TestvfsSubcmd{ 61974 {FzName: ts + 38955}, 61975 {FzName: ts + 10138, FeCmd: uint32(1)}, 61976 {FzName: ts + 38959, FeCmd: uint32(2)}, 61977 {FzName: ts + 38966, FeCmd: uint32(3)}, 61978 {FzName: ts + 38972, FeCmd: uint32(7)}, 61979 {FzName: ts + 38980, FeCmd: uint32(8)}, 61980 {FzName: ts + 38992, FeCmd: uint32(4)}, 61981 {FzName: ts + 38999, FeCmd: uint32(5)}, 61982 {FzName: ts + 39007, FeCmd: uint32(6)}, 61983 {}, 61984 } 61985 61986 if objc < 2 { 61987 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+1999) 61988 return TCL_ERROR 61989 } 61990 if tcl.XTcl_GetIndexFromObjStruct(tls, 61991 interp, *(*uintptr)(unsafe.Pointer(objv + 1*8)), bp+96, int32(unsafe.Sizeof(TestvfsSubcmd{})), ts+39018, 0, bp+256) != 0 { 61992 return TCL_ERROR 61993 } 61994 tcl.XTcl_ResetResult(tls, interp) 61995 61996 switch (*TestvfsSubcmd)(unsafe.Pointer(bp + 96 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*16)).FeCmd { 61997 case uint32(0): 61998 { 61999 var pObj uintptr 62000 var rc int32 62001 var pBuffer uintptr 62002 var zName uintptr 62003 if objc != 3 && objc != 4 { 62004 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+39029) 62005 return TCL_ERROR 62006 } 62007 zName = tcl.XTcl_Alloc(tls, uint32((*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname)) 62008 rc = (*struct { 62009 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 62010 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FxFullPathname})).f(tls, 62011 (*Testvfs)(unsafe.Pointer(p)).FpParent, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 62012 (*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname, zName) 62013 if rc != SQLITE_OK { 62014 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+39042, 62015 tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 62016 tcl.XTcl_Free(tls, zName) 62017 return TCL_ERROR 62018 } 62019 for pBuffer = (*Testvfs)(unsafe.Pointer(p)).FpBuffer; pBuffer != 0; pBuffer = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FpNext { 62020 if 0 == libc.Xstrcmp(tls, (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).FzFile, zName) { 62021 break 62022 } 62023 } 62024 tcl.XTcl_Free(tls, zName) 62025 if !(pBuffer != 0) { 62026 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+24, ts+39068, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 62027 return TCL_ERROR 62028 } 62029 if objc == 4 { 62030 var a uintptr = tcl.XTcl_GetByteArrayFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+260) 62031 var pgsz int32 = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).Fpgsz 62032 if pgsz == 0 { 62033 pgsz = 65536 62034 } 62035 for *(*int32)(unsafe.Pointer(bp + 256)) = 0; *(*int32)(unsafe.Pointer(bp + 256))*pgsz < *(*int32)(unsafe.Pointer(bp + 260)); *(*int32)(unsafe.Pointer(bp + 256))++ { 62036 var nByte int32 = pgsz 62037 tvfsAllocPage(tls, pBuffer, *(*int32)(unsafe.Pointer(bp + 256)), pgsz) 62038 if *(*int32)(unsafe.Pointer(bp + 260))-*(*int32)(unsafe.Pointer(bp + 256))*pgsz < pgsz { 62039 nByte = *(*int32)(unsafe.Pointer(bp + 260)) 62040 } 62041 libc.X__builtin___memcpy_chk(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8)), a+uintptr(*(*int32)(unsafe.Pointer(bp + 256))*pgsz), uint64(nByte), libc.X__builtin_object_size(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8)), 0)) 62042 } 62043 } 62044 62045 pObj = tcl.XTcl_NewObj(tls) 62046 for *(*int32)(unsafe.Pointer(bp + 256)) = 0; *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8)) != 0; *(*int32)(unsafe.Pointer(bp + 256))++ { 62047 var pgsz int32 = (*TestvfsBuffer)(unsafe.Pointer(pBuffer)).Fpgsz 62048 if pgsz == 0 { 62049 pgsz = 65536 62050 } 62051 tcl.XTcl_AppendObjToObj(tls, pObj, tcl.XTcl_NewByteArrayObj(tls, *(*uintptr)(unsafe.Pointer(pBuffer + 16 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8)), pgsz)) 62052 } 62053 tcl.XTcl_SetObjResult(tls, interp, pObj) 62054 break 62055 62056 } 62057 62058 case uint32(2): 62059 { 62060 *(*uintptr)(unsafe.Pointer(bp + 272)) = uintptr(0) 62061 *(*int32)(unsafe.Pointer(bp + 264)) = 0 62062 var mask int32 = 0 62063 if objc != 3 { 62064 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+32602) 62065 return TCL_ERROR 62066 } 62067 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+264, bp+272) != 0 { 62068 return TCL_ERROR 62069 } 62070 tcl.XTcl_ResetResult(tls, interp) 62071 for *(*int32)(unsafe.Pointer(bp + 256)) = 0; *(*int32)(unsafe.Pointer(bp + 256)) < *(*int32)(unsafe.Pointer(bp + 264)); *(*int32)(unsafe.Pointer(bp + 256))++ { 62072 var iMethod int32 62073 var zElem uintptr = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 272)) + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*8))) 62074 for iMethod = 0; iMethod < int32(uint64(unsafe.Sizeof(vfsmethod))/uint64(unsafe.Sizeof(VfsMethod{}))); iMethod++ { 62075 if libc.Xstrcmp(tls, zElem, vfsmethod[iMethod].FzName) == 0 { 62076 mask = mask | vfsmethod[iMethod].Fmask 62077 break 62078 } 62079 } 62080 if iMethod == int32(uint64(unsafe.Sizeof(vfsmethod))/uint64(unsafe.Sizeof(VfsMethod{}))) { 62081 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+48, ts+39083, zElem, 0)) 62082 return TCL_ERROR 62083 } 62084 } 62085 (*Testvfs)(unsafe.Pointer(p)).Fmask = mask 62086 break 62087 62088 } 62089 62090 case uint32(4): 62091 { 62092 if objc == 3 { 62093 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 62094 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 62095 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount, 1) <= 0 { 62096 tcl.XTclFreeObj(tls, (*Testvfs)(unsafe.Pointer(p)).FpScript) 62097 } 62098 } 62099 (*Testvfs)(unsafe.Pointer(p)).FpScript = uintptr(0) 62100 } 62101 tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+280) 62102 if *(*int32)(unsafe.Pointer(bp + 280)) > 0 { 62103 (*Testvfs)(unsafe.Pointer(p)).FpScript = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 62104 (*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount++ 62105 } 62106 } else if objc != 2 { 62107 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+13249) 62108 return TCL_ERROR 62109 } 62110 62111 tcl.XTcl_ResetResult(tls, interp) 62112 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 62113 tcl.XTcl_SetObjResult(tls, interp, (*Testvfs)(unsafe.Pointer(p)).FpScript) 62114 } 62115 62116 break 62117 62118 } 62119 62120 case uint32(8): 62121 fallthrough 62122 case uint32(3): 62123 fallthrough 62124 case uint32(7): 62125 { 62126 var pTest uintptr = uintptr(0) 62127 var iRet int32 62128 62129 switch (*TestvfsSubcmd)(unsafe.Pointer(bp + 96 + uintptr(*(*int32)(unsafe.Pointer(bp + 256)))*16)).FeCmd { 62130 case uint32(3): 62131 pTest = p + 60 62132 break 62133 case uint32(7): 62134 pTest = p + 72 62135 break 62136 case uint32(8): 62137 pTest = p + 84 62138 break 62139 default: 62140 } 62141 iRet = (*TestFaultInject)(unsafe.Pointer(pTest)).FnFail 62142 (*TestFaultInject)(unsafe.Pointer(pTest)).FnFail = 0 62143 (*TestFaultInject)(unsafe.Pointer(pTest)).FeFault = 0 62144 (*TestFaultInject)(unsafe.Pointer(pTest)).FiCnt = 0 62145 62146 if objc == 4 { 62147 if TCL_OK != tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+284) || 62148 TCL_OK != tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+288) { 62149 return TCL_ERROR 62150 } 62151 (*TestFaultInject)(unsafe.Pointer(pTest)).FeFault = func() int32 { 62152 if *(*int32)(unsafe.Pointer(bp + 288)) != 0 { 62153 return FAULT_INJECT_PERSISTENT 62154 } 62155 return FAULT_INJECT_TRANSIENT 62156 }() 62157 (*TestFaultInject)(unsafe.Pointer(pTest)).FiCnt = *(*int32)(unsafe.Pointer(bp + 284)) 62158 } else if objc != 2 { 62159 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+39100) 62160 return TCL_ERROR 62161 } 62162 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, iRet)) 62163 break 62164 62165 } 62166 62167 case uint32(1): 62168 { 62169 tcl.XTcl_DeleteCommand(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv)))) 62170 break 62171 62172 } 62173 62174 case uint32(5): 62175 { 62176 *(*[16]DeviceFlag)(unsafe.Pointer(bp + 304)) = [16]DeviceFlag{ 62177 {FzName: ts + 39114, FiValue: -1}, 62178 {FzName: ts + 26507, FiValue: SQLITE_IOCAP_ATOMIC}, 62179 {FzName: ts + 26514, FiValue: SQLITE_IOCAP_ATOMIC512}, 62180 {FzName: ts + 26524, FiValue: SQLITE_IOCAP_ATOMIC1K}, 62181 {FzName: ts + 26533, FiValue: SQLITE_IOCAP_ATOMIC2K}, 62182 {FzName: ts + 26542, FiValue: SQLITE_IOCAP_ATOMIC4K}, 62183 {FzName: ts + 26551, FiValue: SQLITE_IOCAP_ATOMIC8K}, 62184 {FzName: ts + 26560, FiValue: SQLITE_IOCAP_ATOMIC16K}, 62185 {FzName: ts + 26570, FiValue: SQLITE_IOCAP_ATOMIC32K}, 62186 {FzName: ts + 26580, FiValue: SQLITE_IOCAP_ATOMIC64K}, 62187 {FzName: ts + 26590, FiValue: SQLITE_IOCAP_SEQUENTIAL}, 62188 {FzName: ts + 26601, FiValue: SQLITE_IOCAP_SAFE_APPEND}, 62189 {FzName: ts + 39122, FiValue: SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN}, 62190 {FzName: ts + 26613, FiValue: SQLITE_IOCAP_POWERSAFE_OVERWRITE}, 62191 {FzName: ts + 39144, FiValue: SQLITE_IOCAP_IMMUTABLE}, 62192 {}, 62193 } 62194 var pRet uintptr 62195 var iFlag int32 62196 62197 if objc > 3 { 62198 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+39154) 62199 return TCL_ERROR 62200 } 62201 if objc == 3 { 62202 var j int32 62203 var iNew int32 = 0 62204 *(*uintptr)(unsafe.Pointer(bp + 296)) = uintptr(0) 62205 *(*int32)(unsafe.Pointer(bp + 292)) = 0 62206 62207 if tcl.XTcl_ListObjGetElements(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+292, bp+296) != 0 { 62208 return TCL_ERROR 62209 } 62210 62211 for j = 0; j < *(*int32)(unsafe.Pointer(bp + 292)); j++ { 62212 *(*int32)(unsafe.Pointer(bp + 560)) = 0 62213 if tcl.XTcl_GetIndexFromObjStruct(tls, interp, *(*uintptr)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 296)) + uintptr(j)*8)), bp+304, 62214 int32(unsafe.Sizeof(DeviceFlag{})), ts+17631, 0, bp+560) != 0 { 62215 return TCL_ERROR 62216 } 62217 if (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(*(*int32)(unsafe.Pointer(bp + 560)))*16)).FiValue < 0 && *(*int32)(unsafe.Pointer(bp + 292)) > 1 { 62218 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp+72, ts+39166, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))), 0)) 62219 return TCL_ERROR 62220 } 62221 iNew = iNew | (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(*(*int32)(unsafe.Pointer(bp + 560)))*16)).FiValue 62222 } 62223 62224 (*Testvfs)(unsafe.Pointer(p)).FiDevchar = iNew | 0x10000000 62225 } 62226 62227 pRet = tcl.XTcl_NewObj(tls) 62228 for iFlag = 0; uint64(iFlag) < uint64(unsafe.Sizeof([16]DeviceFlag{}))/uint64(unsafe.Sizeof(DeviceFlag{})); iFlag++ { 62229 if (*Testvfs)(unsafe.Pointer(p)).FiDevchar&(*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(iFlag)*16)).FiValue != 0 { 62230 tcl.XTcl_ListObjAppendElement(tls, 62231 interp, pRet, tcl.XTcl_NewStringObj(tls, (*DeviceFlag)(unsafe.Pointer(bp+304+uintptr(iFlag)*16)).FzName, -1)) 62232 } 62233 } 62234 tcl.XTcl_SetObjResult(tls, interp, pRet) 62235 62236 break 62237 62238 } 62239 62240 case uint32(6): 62241 { 62242 if objc > 3 { 62243 tcl.XTcl_WrongNumArgs(tls, interp, 2, objv, ts+39178) 62244 return TCL_ERROR 62245 } 62246 if objc == 3 { 62247 *(*int32)(unsafe.Pointer(bp + 564)) = 0 62248 if tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 2*8)), bp+564) != 0 { 62249 return TCL_ERROR 62250 } 62251 (*Testvfs)(unsafe.Pointer(p)).FiSectorsize = *(*int32)(unsafe.Pointer(bp + 564)) 62252 } 62253 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, (*Testvfs)(unsafe.Pointer(p)).FiSectorsize)) 62254 break 62255 62256 } 62257 } 62258 62259 return TCL_OK 62260 } 62261 62262 type TestvfsSubcmd = struct { 62263 FzName uintptr 62264 FeCmd uint32 62265 F__ccgo_pad1 [4]byte 62266 } 62267 62268 type VfsMethod = struct { 62269 FzName uintptr 62270 Fmask int32 62271 F__ccgo_pad1 [4]byte 62272 } 62273 62274 var vfsmethod = [18]VfsMethod{ 62275 {FzName: ts + 38913, Fmask: TESTVFS_SHMOPEN_MASK}, 62276 {FzName: ts + 35916, Fmask: TESTVFS_SHMLOCK_MASK}, 62277 {FzName: ts + 35925, Fmask: TESTVFS_SHMBARRIER_MASK}, 62278 {FzName: ts + 35906, Fmask: TESTVFS_SHMCLOSE_MASK}, 62279 {FzName: ts + 35937, Fmask: TESTVFS_SHMMAP_MASK}, 62280 {FzName: ts + 27947, Fmask: TESTVFS_SYNC_MASK}, 62281 {FzName: ts + 35844, Fmask: TESTVFS_DELETE_MASK}, 62282 {FzName: ts + 35752, Fmask: TESTVFS_WRITE_MASK}, 62283 {FzName: ts + 35746, Fmask: TESTVFS_READ_MASK}, 62284 {FzName: ts + 35759, Fmask: TESTVFS_TRUNCATE_MASK}, 62285 {FzName: ts + 27525, Fmask: TESTVFS_OPEN_MASK}, 62286 {FzName: ts + 35739, Fmask: TESTVFS_CLOSE_MASK}, 62287 {FzName: ts + 35852, Fmask: TESTVFS_ACCESS_MASK}, 62288 {FzName: ts + 35860, Fmask: TESTVFS_FULLPATHNAME_MASK}, 62289 {FzName: ts + 35785, Fmask: TESTVFS_UNLOCK_MASK}, 62290 {FzName: ts + 35779, Fmask: TESTVFS_LOCK_MASK}, 62291 {FzName: ts + 38779, Fmask: TESTVFS_CKLOCK_MASK}, 62292 {FzName: ts + 35807, Fmask: TESTVFS_FCNTL_MASK}, 62293 } 62294 62295 func testvfs_obj_del(tls *libc.TLS, cd ClientData) { 62296 var p uintptr = cd 62297 if (*Testvfs)(unsafe.Pointer(p)).FpScript != 0 { 62298 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 62299 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpScript)).FrefCount, 1) <= 0 { 62300 tcl.XTclFreeObj(tls, (*Testvfs)(unsafe.Pointer(p)).FpScript) 62301 } 62302 } 62303 } 62304 sqlite3.Xsqlite3_vfs_unregister(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs) 62305 libc.X__builtin___memset_chk(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs, 0, uint64(unsafe.Sizeof(sqlite3_vfs{})), libc.X__builtin_object_size(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs, 0)) 62306 tcl.XTcl_Free(tls, (*Testvfs)(unsafe.Pointer(p)).FpVfs) 62307 libc.X__builtin___memset_chk(tls, p, 0, uint64(unsafe.Sizeof(Testvfs{})), libc.X__builtin_object_size(tls, p, 0)) 62308 tcl.XTcl_Free(tls, p) 62309 } 62310 62311 func testvfs_cmd(tls *libc.TLS, cd ClientData, interp uintptr, objc int32, objv uintptr) int32 { 62312 bp := tls.Alloc(28) 62313 defer tls.Free(28) 62314 62315 var p uintptr 62316 var pVfs uintptr 62317 var zVfs uintptr 62318 var nByte int32 62319 62320 var i int32 62321 62322 var zSwitch uintptr 62323 *(*int32)(unsafe.Pointer(bp + 4)) = 0 62324 *(*int32)(unsafe.Pointer(bp + 24)) = 0 62325 *(*int32)(unsafe.Pointer(bp + 8)) = 0 62326 *(*int32)(unsafe.Pointer(bp + 12)) = 0 62327 *(*int32)(unsafe.Pointer(bp + 16)) = -1 62328 *(*int32)(unsafe.Pointer(bp + 20)) = 3 62329 62330 if !(objc < 2 || 0 != objc%2) { 62331 goto __1 62332 } 62333 goto bad_args 62334 __1: 62335 ; 62336 i = 2 62337 __2: 62338 if !(i < objc) { 62339 goto __4 62340 } 62341 zSwitch = tcl.XTcl_GetStringFromObj(tls, *(*uintptr)(unsafe.Pointer(objv + uintptr(i)*8)), bp) 62342 62343 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39186, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 62344 goto __5 62345 } 62346 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+4) != 0) { 62347 goto __7 62348 } 62349 return TCL_ERROR 62350 __7: 62351 ; 62352 if !(*(*int32)(unsafe.Pointer(bp + 4)) != 0) { 62353 goto __8 62354 } 62355 *(*int32)(unsafe.Pointer(bp + 24)) = 0 62356 __8: 62357 ; 62358 goto __6 62359 __5: 62360 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+26883, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 62361 goto __9 62362 } 62363 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+8) != 0) { 62364 goto __11 62365 } 62366 return TCL_ERROR 62367 __11: 62368 ; 62369 goto __10 62370 __9: 62371 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39193, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 62372 goto __12 62373 } 62374 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+12) != 0) { 62375 goto __14 62376 } 62377 return TCL_ERROR 62378 __14: 62379 ; 62380 goto __13 62381 __12: 62382 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39203, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 62383 goto __15 62384 } 62385 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+16) != 0) { 62386 goto __17 62387 } 62388 return TCL_ERROR 62389 __17: 62390 ; 62391 goto __16 62392 __15: 62393 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39215, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 62394 goto __18 62395 } 62396 if !(tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+20) != 0) { 62397 goto __20 62398 } 62399 return TCL_ERROR 62400 __20: 62401 ; 62402 goto __19 62403 __18: 62404 if !(*(*int32)(unsafe.Pointer(bp)) > 2 && 0 == libc.Xstrncmp(tls, ts+39225, zSwitch, uint64(*(*int32)(unsafe.Pointer(bp))))) { 62405 goto __21 62406 } 62407 if !(tcl.XTcl_GetBooleanFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + uintptr(i+1)*8)), bp+24) != 0) { 62408 goto __23 62409 } 62410 return TCL_ERROR 62411 __23: 62412 ; 62413 if !(*(*int32)(unsafe.Pointer(bp + 24)) != 0) { 62414 goto __24 62415 } 62416 *(*int32)(unsafe.Pointer(bp + 4)) = 0 62417 __24: 62418 ; 62419 goto __22 62420 __21: 62421 goto bad_args 62422 __22: 62423 ; 62424 __19: 62425 ; 62426 __16: 62427 ; 62428 __13: 62429 ; 62430 __10: 62431 ; 62432 __6: 62433 ; 62434 goto __3 62435 __3: 62436 i = i + 2 62437 goto __2 62438 goto __4 62439 __4: 62440 ; 62441 if !(uint64(*(*int32)(unsafe.Pointer(bp + 12))) < uint64(unsafe.Sizeof(TestvfsFile{}))) { 62442 goto __25 62443 } 62444 *(*int32)(unsafe.Pointer(bp + 12)) = int32(unsafe.Sizeof(TestvfsFile{})) 62445 __25: 62446 ; 62447 zVfs = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))) 62448 nByte = int32(uint64(unsafe.Sizeof(Testvfs{})) + uint64(int32(libc.Xstrlen(tls, zVfs))) + uint64(1)) 62449 p = tcl.XTcl_Alloc(tls, uint32(nByte)) 62450 libc.X__builtin___memset_chk(tls, p, 0, uint64(nByte), libc.X__builtin_object_size(tls, p, 0)) 62451 (*Testvfs)(unsafe.Pointer(p)).FiDevchar = -1 62452 (*Testvfs)(unsafe.Pointer(p)).FiSectorsize = -1 62453 62454 tcl.XTcl_CreateObjCommand(tls, interp, zVfs, *(*uintptr)(unsafe.Pointer(&struct { 62455 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 62456 }{testvfs_obj_cmd})), p, *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, ClientData) }{testvfs_obj_del}))) 62457 (*Testvfs)(unsafe.Pointer(p)).FpParent = sqlite3.Xsqlite3_vfs_find(tls, uintptr(0)) 62458 (*Testvfs)(unsafe.Pointer(p)).Finterp = interp 62459 62460 (*Testvfs)(unsafe.Pointer(p)).FzName = p + 1*104 62461 libc.X__builtin___memcpy_chk(tls, (*Testvfs)(unsafe.Pointer(p)).FzName, zVfs, libc.Xstrlen(tls, zVfs)+uint64(1), libc.X__builtin_object_size(tls, (*Testvfs)(unsafe.Pointer(p)).FzName, 0)) 62462 62463 pVfs = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(sqlite3_vfs{}))) 62464 libc.X__builtin___memcpy_chk(tls, pVfs, uintptr(unsafe.Pointer(&tvfs_vfs)), uint64(unsafe.Sizeof(sqlite3_vfs{})), libc.X__builtin_object_size(tls, pVfs, 0)) 62465 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FpAppData = p 62466 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FiVersion = *(*int32)(unsafe.Pointer(bp + 20)) 62467 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FzName = (*Testvfs)(unsafe.Pointer(p)).FzName 62468 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname = (*sqlite3_vfs)(unsafe.Pointer((*Testvfs)(unsafe.Pointer(p)).FpParent)).FmxPathname 62469 if !(*(*int32)(unsafe.Pointer(bp + 16)) >= 0 && *(*int32)(unsafe.Pointer(bp + 16)) < (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname) { 62470 goto __26 62471 } 62472 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FmxPathname = *(*int32)(unsafe.Pointer(bp + 16)) 62473 __26: 62474 ; 62475 (*sqlite3_vfs)(unsafe.Pointer(pVfs)).FszOsFile = *(*int32)(unsafe.Pointer(bp + 12)) 62476 (*Testvfs)(unsafe.Pointer(p)).FpVfs = pVfs 62477 (*Testvfs)(unsafe.Pointer(p)).FisNoshm = *(*int32)(unsafe.Pointer(bp + 4)) 62478 (*Testvfs)(unsafe.Pointer(p)).FisFullshm = *(*int32)(unsafe.Pointer(bp + 24)) 62479 (*Testvfs)(unsafe.Pointer(p)).Fmask = TESTVFS_ALL_MASK 62480 62481 sqlite3.Xsqlite3_vfs_register(tls, pVfs, *(*int32)(unsafe.Pointer(bp + 8))) 62482 62483 return TCL_OK 62484 62485 bad_args: 62486 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39234) 62487 return TCL_ERROR 62488 } 62489 62490 var tvfs_vfs = sqlite3_vfs{ 62491 FiVersion: 3, 62492 FxOpen: 0, 62493 FxDelete: 0, 62494 FxAccess: 0, 62495 FxFullPathname: 0, 62496 FxRandomness: 0, 62497 FxSleep: 0, 62498 FxCurrentTime: 0, 62499 } 62500 62501 func test_vfs_shmlock(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 62502 bp := tls.Alloc(88) 62503 defer tls.Free(88) 62504 62505 *(*[3]uintptr)(unsafe.Pointer(bp + 8)) = [3]uintptr{ts + 39338, ts + 13978, uintptr(0)} 62506 *(*[3]uintptr)(unsafe.Pointer(bp + 40)) = [3]uintptr{ts + 39345, ts + 39350, uintptr(0)} 62507 *(*uintptr)(unsafe.Pointer(bp)) = uintptr(0) 62508 var rc int32 = SQLITE_OK 62509 var zDbname uintptr = uintptr(0) 62510 *(*int32)(unsafe.Pointer(bp + 32)) = 0 62511 *(*int32)(unsafe.Pointer(bp + 64)) = 0 62512 *(*int32)(unsafe.Pointer(bp + 68)) = 0 62513 *(*int32)(unsafe.Pointer(bp + 72)) = 0 62514 62515 if objc != 7 { 62516 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, 62517 ts+39357) 62518 return TCL_ERROR 62519 } 62520 62521 zDbname = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 62522 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 || 62523 tcl.XTcl_GetIndexFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+8, ts+39409, 0, bp+32) != 0 || 62524 tcl.XTcl_GetIndexFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+40, ts+39409, 0, bp+64) != 0 || 62525 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 5*8)), bp+68) != 0 || 62526 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 6*8)), bp+72) != 0 { 62527 return TCL_ERROR 62528 } 62529 62530 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp)), zDbname, SQLITE_FCNTL_FILE_POINTER, bp+80) 62531 if *(*uintptr)(unsafe.Pointer(bp + 80)) == uintptr(0) { 62532 return TCL_ERROR 62533 } 62534 rc = (*struct { 62535 f func(*libc.TLS, uintptr, int32, int32, int32) int32 62536 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 80)))).FpMethods)).FxShmLock})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 80)), *(*int32)(unsafe.Pointer(bp + 68)), *(*int32)(unsafe.Pointer(bp + 72)), 62537 func() int32 { 62538 if *(*int32)(unsafe.Pointer(bp + 32)) == 0 { 62539 return SQLITE_SHM_SHARED 62540 } 62541 return SQLITE_SHM_EXCLUSIVE 62542 }()| 62543 func() int32 { 62544 if *(*int32)(unsafe.Pointer(bp + 64)) == 0 { 62545 return SQLITE_SHM_LOCK 62546 } 62547 return SQLITE_SHM_UNLOCK 62548 }()) 62549 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 62550 return TCL_OK 62551 } 62552 62553 func test_vfs_set_readmark(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 62554 bp := tls.Alloc(48) 62555 defer tls.Free(48) 62556 62557 *(*uintptr)(unsafe.Pointer(bp + 16)) = uintptr(0) 62558 var rc int32 = SQLITE_OK 62559 var zDbname uintptr = uintptr(0) 62560 *(*int32)(unsafe.Pointer(bp + 24)) = 0 62561 *(*int32)(unsafe.Pointer(bp + 28)) = -1 62562 62563 *(*uintptr)(unsafe.Pointer(bp + 40)) = uintptr(0) 62564 var aShm uintptr 62565 var iOff int32 62566 62567 if objc != 4 && objc != 5 { 62568 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39413) 62569 return TCL_ERROR 62570 } 62571 62572 zDbname = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 62573 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp+16) != 0 || 62574 tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 3*8)), bp+24) != 0 || 62575 objc == 5 && tcl.XTcl_GetIntFromObj(tls, interp, *(*uintptr)(unsafe.Pointer(objv + 4*8)), bp+28) != 0 { 62576 return TCL_ERROR 62577 } 62578 62579 sqlite3.Xsqlite3_file_control(tls, *(*uintptr)(unsafe.Pointer(bp + 16)), zDbname, SQLITE_FCNTL_FILE_POINTER, bp+32) 62580 if *(*uintptr)(unsafe.Pointer(bp + 32)) == uintptr(0) { 62581 return TCL_ERROR 62582 } 62583 rc = (*struct { 62584 f func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32 62585 })(unsafe.Pointer(&struct{ uintptr }{(*sqlite3_io_methods1)(unsafe.Pointer((*sqlite3_file)(unsafe.Pointer(*(*uintptr)(unsafe.Pointer(bp + 32)))).FpMethods)).FxShmMap})).f(tls, *(*uintptr)(unsafe.Pointer(bp + 32)), 0, 32*1024, 0, bp+40) 62586 if rc != SQLITE_OK { 62587 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 62588 return TCL_ERROR 62589 } 62590 if *(*uintptr)(unsafe.Pointer(bp + 40)) == uintptr(0) { 62591 tcl.XTcl_AppendResult(tls, interp, libc.VaList(bp, ts+39436, 0)) 62592 return TCL_ERROR 62593 } 62594 aShm = *(*uintptr)(unsafe.Pointer(bp + 40)) 62595 iOff = 12*2 + 1 + *(*int32)(unsafe.Pointer(bp + 24)) 62596 62597 if objc == 5 { 62598 *(*u32)(unsafe.Pointer(aShm + uintptr(iOff)*4)) = u32(*(*int32)(unsafe.Pointer(bp + 28))) 62599 } 62600 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewIntObj(tls, int32(*(*u32)(unsafe.Pointer(aShm + uintptr(iOff)*4))))) 62601 62602 return TCL_OK 62603 } 62604 62605 func Sqlitetestvfs_Init(tls *libc.TLS, interp uintptr) int32 { 62606 tcl.XTcl_CreateObjCommand(tls, interp, ts+39460, *(*uintptr)(unsafe.Pointer(&struct { 62607 f func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32 62608 }{testvfs_cmd})), uintptr(0), uintptr(0)) 62609 tcl.XTcl_CreateObjCommand(tls, interp, ts+39468, *(*uintptr)(unsafe.Pointer(&struct { 62610 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 62611 }{test_vfs_shmlock})), uintptr(0), uintptr(0)) 62612 tcl.XTcl_CreateObjCommand(tls, interp, ts+39480, *(*uintptr)(unsafe.Pointer(&struct { 62613 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 62614 }{test_vfs_set_readmark})), uintptr(0), uintptr(0)) 62615 return TCL_OK 62616 } 62617 62618 type TestWindow1 = struct { 62619 FxStep uintptr 62620 FxFinal uintptr 62621 FxValue uintptr 62622 FxInverse uintptr 62623 Finterp uintptr 62624 } 62625 62626 type TestWindow = TestWindow1 62627 62628 type TestWindowCtx1 = struct{ FpVal uintptr } 62629 62630 type TestWindowCtx = TestWindowCtx1 62631 62632 func doTestWindowStep(tls *libc.TLS, bInverse int32, ctx uintptr, nArg int32, apArg uintptr) { 62633 var i int32 62634 var p uintptr = sqlite3.Xsqlite3_user_data(tls, ctx) 62635 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, func() uintptr { 62636 if bInverse != 0 { 62637 return (*TestWindow)(unsafe.Pointer(p)).FxInverse 62638 } 62639 return (*TestWindow)(unsafe.Pointer(p)).FxStep 62640 }()) 62641 var pCtx uintptr = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(TestWindowCtx{}))) 62642 62643 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 62644 if pCtx != 0 { 62645 var zResult uintptr 62646 var rc int32 62647 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 62648 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_DuplicateObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)) 62649 } else { 62650 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 62651 } 62652 for i = 0; i < nArg; i++ { 62653 var pArg uintptr 62654 pArg = tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3_value_text(tls, *(*uintptr)(unsafe.Pointer(apArg + uintptr(i)*8))), -1) 62655 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, pArg) 62656 } 62657 rc = tcl.XTcl_EvalObjEx(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 62658 if rc != TCL_OK { 62659 zResult = tcl.XTcl_GetStringResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp) 62660 sqlite3.Xsqlite3_result_error(tls, ctx, zResult, -1) 62661 } else { 62662 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 62663 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 62664 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)).FrefCount, 1) <= 0 { 62665 tcl.XTclFreeObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal) 62666 } 62667 } 62668 } 62669 (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal = tcl.XTcl_DuplicateObj(tls, tcl.XTcl_GetObjResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp)) 62670 (*Tcl_Obj)(unsafe.Pointer((*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)).FrefCount++ 62671 } 62672 } 62673 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 62674 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount, 1) <= 0 { 62675 tcl.XTclFreeObj(tls, pEval) 62676 } 62677 } 62678 } 62679 62680 func doTestWindowFinalize(tls *libc.TLS, bValue int32, ctx uintptr) { 62681 var p uintptr = sqlite3.Xsqlite3_user_data(tls, ctx) 62682 var pEval uintptr = tcl.XTcl_DuplicateObj(tls, func() uintptr { 62683 if bValue != 0 { 62684 return (*TestWindow)(unsafe.Pointer(p)).FxValue 62685 } 62686 return (*TestWindow)(unsafe.Pointer(p)).FxFinal 62687 }()) 62688 var pCtx uintptr = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(TestWindowCtx{}))) 62689 62690 (*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount++ 62691 if pCtx != 0 { 62692 var zResult uintptr 62693 var rc int32 62694 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 62695 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_DuplicateObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)) 62696 } else { 62697 tcl.XTcl_ListObjAppendElement(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, tcl.XTcl_NewStringObj(tls, ts+584, -1)) 62698 } 62699 62700 rc = tcl.XTcl_EvalObjEx(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp, pEval, TCL_EVAL_GLOBAL) 62701 zResult = tcl.XTcl_GetStringResult(tls, (*TestWindow)(unsafe.Pointer(p)).Finterp) 62702 if rc != TCL_OK { 62703 sqlite3.Xsqlite3_result_error(tls, ctx, zResult, -1) 62704 } else { 62705 sqlite3.Xsqlite3_result_text(tls, ctx, zResult, -1, libc.UintptrFromInt32(-1)) 62706 } 62707 62708 if bValue == 0 { 62709 if (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal != 0 { 62710 for __ccgo := true; __ccgo; __ccgo = 0 != 0 { 62711 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer((*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal)).FrefCount, 1) <= 0 { 62712 tcl.XTclFreeObj(tls, (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal) 62713 } 62714 } 62715 } 62716 (*TestWindowCtx)(unsafe.Pointer(pCtx)).FpVal = uintptr(0) 62717 } 62718 } 62719 for __ccgo1 := true; __ccgo1; __ccgo1 = 0 != 0 { 62720 if libc.PreDecInt32(&(*Tcl_Obj)(unsafe.Pointer(pEval)).FrefCount, 1) <= 0 { 62721 tcl.XTclFreeObj(tls, pEval) 62722 } 62723 } 62724 } 62725 62726 func testWindowStep(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 62727 doTestWindowStep(tls, 0, ctx, nArg, apArg) 62728 } 62729 62730 func testWindowInverse(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 62731 doTestWindowStep(tls, 1, ctx, nArg, apArg) 62732 } 62733 62734 func testWindowFinal(tls *libc.TLS, ctx uintptr) { 62735 doTestWindowFinalize(tls, 0, ctx) 62736 } 62737 62738 func testWindowValue(tls *libc.TLS, ctx uintptr) { 62739 doTestWindowFinalize(tls, 1, ctx) 62740 } 62741 62742 func testWindowDestroy(tls *libc.TLS, pCtx uintptr) { 62743 tcl.XTcl_Free(tls, pCtx) 62744 } 62745 62746 func test_create_window(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 62747 bp := tls.Alloc(8) 62748 defer tls.Free(8) 62749 62750 var pNew uintptr 62751 62752 var zName uintptr 62753 var rc int32 62754 62755 if objc != 7 { 62756 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+39497) 62757 return TCL_ERROR 62758 } 62759 62760 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 62761 return TCL_ERROR 62762 } 62763 zName = tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 2*8))) 62764 pNew = tcl.XTcl_Alloc(tls, uint32(unsafe.Sizeof(TestWindow{}))) 62765 libc.X__builtin___memset_chk(tls, pNew, 0, uint64(unsafe.Sizeof(TestWindow{})), libc.X__builtin_object_size(tls, pNew, 0)) 62766 (*TestWindow)(unsafe.Pointer(pNew)).FxStep = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 3*8))) 62767 (*TestWindow)(unsafe.Pointer(pNew)).FxFinal = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 4*8))) 62768 (*TestWindow)(unsafe.Pointer(pNew)).FxValue = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 5*8))) 62769 (*TestWindow)(unsafe.Pointer(pNew)).FxInverse = tcl.XTcl_DuplicateObj(tls, *(*uintptr)(unsafe.Pointer(objv + 6*8))) 62770 (*TestWindow)(unsafe.Pointer(pNew)).Finterp = interp 62771 62772 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxStep)).FrefCount++ 62773 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxFinal)).FrefCount++ 62774 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxValue)).FrefCount++ 62775 (*Tcl_Obj)(unsafe.Pointer((*TestWindow)(unsafe.Pointer(pNew)).FxInverse)).FrefCount++ 62776 62777 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), zName, -1, SQLITE_UTF8, pNew, 62778 *(*uintptr)(unsafe.Pointer(&struct { 62779 f func(*libc.TLS, uintptr, int32, uintptr) 62780 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), *(*uintptr)(unsafe.Pointer(&struct { 62781 f func(*libc.TLS, uintptr, int32, uintptr) 62782 }{testWindowInverse})), 62783 *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowDestroy}))) 62784 if rc != SQLITE_OK { 62785 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 62786 return TCL_ERROR 62787 } 62788 62789 return TCL_OK 62790 } 62791 62792 func test_create_window_misuse(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 62793 bp := tls.Alloc(8) 62794 defer tls.Free(8) 62795 62796 var rc int32 62797 62798 if !(objc != 2) { 62799 goto __1 62800 } 62801 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 62802 return TCL_ERROR 62803 __1: 62804 ; 62805 if !(getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0) { 62806 goto __2 62807 } 62808 return TCL_ERROR 62809 __2: 62810 ; 62811 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39534, -1, SQLITE_UTF8, uintptr(0), 62812 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), *(*uintptr)(unsafe.Pointer(&struct { 62813 f func(*libc.TLS, uintptr, int32, uintptr) 62814 }{testWindowInverse})), 62815 uintptr(0)) 62816 if !(rc != SQLITE_MISUSE) { 62817 goto __3 62818 } 62819 goto error 62820 __3: 62821 ; 62822 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39534, -1, SQLITE_UTF8, uintptr(0), 62823 *(*uintptr)(unsafe.Pointer(&struct { 62824 f func(*libc.TLS, uintptr, int32, uintptr) 62825 }{testWindowStep})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), *(*uintptr)(unsafe.Pointer(&struct { 62826 f func(*libc.TLS, uintptr, int32, uintptr) 62827 }{testWindowInverse})), 62828 uintptr(0)) 62829 if !(rc != SQLITE_MISUSE) { 62830 goto __4 62831 } 62832 goto error 62833 __4: 62834 ; 62835 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39534, -1, SQLITE_UTF8, uintptr(0), 62836 *(*uintptr)(unsafe.Pointer(&struct { 62837 f func(*libc.TLS, uintptr, int32, uintptr) 62838 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 62839 f func(*libc.TLS, uintptr, int32, uintptr) 62840 }{testWindowInverse})), 62841 uintptr(0)) 62842 if !(rc != SQLITE_MISUSE) { 62843 goto __5 62844 } 62845 goto error 62846 __5: 62847 ; 62848 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39534, -1, SQLITE_UTF8, uintptr(0), 62849 *(*uintptr)(unsafe.Pointer(&struct { 62850 f func(*libc.TLS, uintptr, int32, uintptr) 62851 }{testWindowStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowFinal})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{testWindowValue})), uintptr(0), 62852 uintptr(0)) 62853 if !(rc != SQLITE_MISUSE) { 62854 goto __6 62855 } 62856 goto error 62857 __6: 62858 ; 62859 return TCL_OK 62860 62861 error: 62862 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, ts+39538, -1)) 62863 return TCL_ERROR 62864 } 62865 62866 func sumintStep(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 62867 var pInt uintptr 62868 62869 if sqlite3.Xsqlite3_value_type(tls, *(*uintptr)(unsafe.Pointer(apArg))) != SQLITE_INTEGER { 62870 sqlite3.Xsqlite3_result_error(tls, ctx, ts+39556, -1) 62871 return 62872 } 62873 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(sqlite3_int64(0)))) 62874 if pInt != 0 { 62875 *(*sqlite3_int64)(unsafe.Pointer(pInt)) += sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apArg))) 62876 } 62877 } 62878 62879 func sumintInverse(tls *libc.TLS, ctx uintptr, nArg int32, apArg uintptr) { 62880 var pInt uintptr 62881 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, int32(unsafe.Sizeof(sqlite3_int64(0)))) 62882 *(*sqlite3_int64)(unsafe.Pointer(pInt)) -= sqlite3.Xsqlite3_value_int64(tls, *(*uintptr)(unsafe.Pointer(apArg))) 62883 } 62884 62885 func sumintFinal(tls *libc.TLS, ctx uintptr) { 62886 var res sqlite3_int64 = int64(0) 62887 var pInt uintptr 62888 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, 0) 62889 if pInt != 0 { 62890 res = *(*sqlite3_int64)(unsafe.Pointer(pInt)) 62891 } 62892 sqlite3.Xsqlite3_result_int64(tls, ctx, res) 62893 } 62894 62895 func sumintValue(tls *libc.TLS, ctx uintptr) { 62896 var res sqlite3_int64 = int64(0) 62897 var pInt uintptr 62898 pInt = sqlite3.Xsqlite3_aggregate_context(tls, ctx, 0) 62899 if pInt != 0 { 62900 res = *(*sqlite3_int64)(unsafe.Pointer(pInt)) 62901 } 62902 sqlite3.Xsqlite3_result_int64(tls, ctx, res) 62903 } 62904 62905 func test_create_sumint(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 62906 bp := tls.Alloc(8) 62907 defer tls.Free(8) 62908 62909 var rc int32 62910 62911 if objc != 2 { 62912 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 62913 return TCL_ERROR 62914 } 62915 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 62916 return TCL_ERROR 62917 } 62918 62919 rc = sqlite3.Xsqlite3_create_window_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39573, 1, SQLITE_UTF8, uintptr(0), 62920 *(*uintptr)(unsafe.Pointer(&struct { 62921 f func(*libc.TLS, uintptr, int32, uintptr) 62922 }{sumintStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sumintFinal})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sumintValue})), *(*uintptr)(unsafe.Pointer(&struct { 62923 f func(*libc.TLS, uintptr, int32, uintptr) 62924 }{sumintInverse})), 62925 uintptr(0)) 62926 62927 if rc != SQLITE_OK { 62928 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 62929 return TCL_ERROR 62930 } 62931 return TCL_OK 62932 } 62933 62934 func test_override_sum(tls *libc.TLS, clientData uintptr, interp uintptr, objc int32, objv uintptr) int32 { 62935 bp := tls.Alloc(8) 62936 defer tls.Free(8) 62937 62938 var rc int32 62939 62940 if objc != 2 { 62941 tcl.XTcl_WrongNumArgs(tls, interp, 1, objv, ts+2050) 62942 return TCL_ERROR 62943 } 62944 if getDbPointer(tls, interp, tcl.XTcl_GetString(tls, *(*uintptr)(unsafe.Pointer(objv + 1*8))), bp) != 0 { 62945 return TCL_ERROR 62946 } 62947 62948 rc = sqlite3.Xsqlite3_create_function(tls, *(*uintptr)(unsafe.Pointer(bp)), ts+39580, -1, SQLITE_UTF8, uintptr(0), 62949 uintptr(0), *(*uintptr)(unsafe.Pointer(&struct { 62950 f func(*libc.TLS, uintptr, int32, uintptr) 62951 }{sumintStep})), *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, uintptr) }{sumintFinal}))) 62952 62953 if rc != SQLITE_OK { 62954 tcl.XTcl_SetObjResult(tls, interp, tcl.XTcl_NewStringObj(tls, sqlite3.Xsqlite3ErrName(tls, rc), -1)) 62955 return TCL_ERROR 62956 } 62957 return TCL_OK 62958 } 62959 62960 func Sqlitetest_window_Init(tls *libc.TLS, interp uintptr) int32 { 62961 var i int32 62962 for i = 0; uint64(i) < uint64(unsafe.Sizeof(aObjCmd14))/uint64(unsafe.Sizeof(struct { 62963 FzName uintptr 62964 FxProc uintptr 62965 FclientData int32 62966 F__ccgo_pad1 [4]byte 62967 }{})); i++ { 62968 var c ClientData = uintptr(intptr_t(aObjCmd14[i].FclientData)) 62969 tcl.XTcl_CreateObjCommand(tls, interp, aObjCmd14[i].FzName, aObjCmd14[i].FxProc, c, uintptr(0)) 62970 } 62971 return TCL_OK 62972 } 62973 62974 var aObjCmd14 = [4]struct { 62975 FzName uintptr 62976 FxProc uintptr 62977 FclientData int32 62978 F__ccgo_pad1 [4]byte 62979 }{ 62980 {FzName: ts + 39584, FxProc: 0}, 62981 {FzName: ts + 39615, FxProc: 0}, 62982 {FzName: ts + 39650, FxProc: 0}, 62983 {FzName: ts + 39669, FxProc: 0}, 62984 } 62985 62986 func init() { 62987 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 8)) = cfClose 62988 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 16)) = cfRead 62989 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 24)) = cfWrite 62990 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 32)) = cfTruncate 62991 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 40)) = cfSync 62992 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 48)) = cfFileSize 62993 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 56)) = cfLock 62994 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 64)) = cfUnlock 62995 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 72)) = cfCheckReservedLock 62996 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 80)) = cfFileControl 62997 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 88)) = cfSectorSize 62998 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 96)) = cfDeviceCharacteristics 62999 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 104)) = cfShmMap 63000 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 112)) = cfShmLock 63001 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 120)) = cfShmBarrier 63002 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CrashFileVtab)) + 128)) = cfShmUnmap 63003 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 8)) = csvtabCreate 63004 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 16)) = csvtabConnect 63005 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 24)) = csvtabBestIndex 63006 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 32)) = csvtabDisconnect 63007 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 40)) = csvtabDisconnect 63008 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 48)) = csvtabOpen 63009 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 56)) = csvtabClose 63010 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 64)) = csvtabFilter 63011 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 72)) = csvtabNext 63012 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 80)) = csvtabEof 63013 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 88)) = csvtabColumn 63014 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModule)) + 96)) = csvtabRowid 63015 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 8)) = csvtabCreate 63016 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 16)) = csvtabConnect 63017 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 24)) = csvtabBestIndex 63018 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 32)) = csvtabDisconnect 63019 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 40)) = csvtabDisconnect 63020 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 48)) = csvtabOpen 63021 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 56)) = csvtabClose 63022 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 64)) = csvtabFilter 63023 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 72)) = csvtabNext 63024 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 80)) = csvtabEof 63025 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 88)) = csvtabColumn 63026 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 96)) = csvtabRowid 63027 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&CsvModuleFauxWrite)) + 104)) = csvtabUpdate 63028 *(*func(*libc.TLS, ClientData, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 16)) = incrblobClose 63029 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 24)) = incrblobInput 63030 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 32)) = incrblobOutput 63031 *(*func(*libc.TLS, ClientData, int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 40)) = incrblobSeek 63032 *(*func(*libc.TLS, ClientData, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 64)) = incrblobWatch 63033 *(*func(*libc.TLS, ClientData, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&IncrblobChannelType)) + 72)) = incrblobHandle 63034 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 8)) = f5tCreateTokenizer 63035 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 32)) = f5tTokenizerReturn 63036 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 56)) = f5tTokenize 63037 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 80)) = f5tCreateFunction 63038 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 104)) = f5tMayBeCorrupt 63039 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 128)) = f5tTokenHash 63040 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 152)) = f5tRegisterMatchinfo 63041 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd)) + 176)) = f5tRegisterTok 63042 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 63043 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63044 }{db_enter})) 63045 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 63046 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63047 }{db_leave})) 63048 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 63049 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63050 }{sqlite3_mprintf_int})) 63051 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 63052 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63053 }{sqlite3_mprintf_int64})) 63054 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 63055 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63056 }{sqlite3_mprintf_long})) 63057 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 63058 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63059 }{sqlite3_mprintf_str})) 63060 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 63061 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63062 }{sqlite3_snprintf_str})) 63063 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 63064 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63065 }{sqlite3_mprintf_stronly})) 63066 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 63067 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63068 }{sqlite3_mprintf_double})) 63069 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 63070 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63071 }{sqlite3_mprintf_scaled})) 63072 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 63073 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63074 }{sqlite3_mprintf_hexdouble})) 63075 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 63076 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63077 }{test_mprintf_z})) 63078 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 63079 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63080 }{test_mprintf_n})) 63081 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 63082 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63083 }{test_snprintf_int})) 63084 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 63085 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63086 }{test_last_rowid})) 63087 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 248)) = *(*uintptr)(unsafe.Pointer(&struct { 63088 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63089 }{test_exec_printf})) 63090 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 63091 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63092 }{test_exec_hex})) 63093 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 280)) = *(*uintptr)(unsafe.Pointer(&struct { 63094 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63095 }{test_exec})) 63096 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 63097 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63098 }{test_exec_nr})) 63099 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 312)) = *(*uintptr)(unsafe.Pointer(&struct { 63100 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63101 }{test_get_table_printf})) 63102 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 328)) = *(*uintptr)(unsafe.Pointer(&struct { 63103 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63104 }{sqlite_test_close})) 63105 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 344)) = *(*uintptr)(unsafe.Pointer(&struct { 63106 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63107 }{sqlite_test_close_v2})) 63108 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 360)) = *(*uintptr)(unsafe.Pointer(&struct { 63109 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63110 }{test_create_function})) 63111 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 376)) = *(*uintptr)(unsafe.Pointer(&struct { 63112 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63113 }{test_create_aggregate})) 63114 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 392)) = *(*uintptr)(unsafe.Pointer(&struct { 63115 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63116 }{test_drop_modules})) 63117 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 408)) = *(*uintptr)(unsafe.Pointer(&struct { 63118 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63119 }{test_register_func})) 63120 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 424)) = *(*uintptr)(unsafe.Pointer(&struct { 63121 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63122 }{sqlite_abort})) 63123 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 440)) = *(*uintptr)(unsafe.Pointer(&struct { 63124 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63125 }{test_bind})) 63126 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 456)) = *(*uintptr)(unsafe.Pointer(&struct { 63127 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63128 }{test_breakpoint})) 63129 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 472)) = *(*uintptr)(unsafe.Pointer(&struct { 63130 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63131 }{test_key})) 63132 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 488)) = *(*uintptr)(unsafe.Pointer(&struct { 63133 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63134 }{test_rekey})) 63135 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 504)) = *(*uintptr)(unsafe.Pointer(&struct { 63136 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63137 }{test_interrupt})) 63138 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 520)) = *(*uintptr)(unsafe.Pointer(&struct { 63139 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63140 }{delete_function})) 63141 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 536)) = *(*uintptr)(unsafe.Pointer(&struct { 63142 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63143 }{delete_collation})) 63144 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 552)) = *(*uintptr)(unsafe.Pointer(&struct { 63145 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63146 }{get_autocommit})) 63147 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 568)) = *(*uintptr)(unsafe.Pointer(&struct { 63148 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63149 }{test_busy_timeout})) 63150 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 584)) = *(*uintptr)(unsafe.Pointer(&struct { 63151 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63152 }{test_printf})) 63153 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 600)) = *(*uintptr)(unsafe.Pointer(&struct { 63154 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63155 }{test_io_trace})) 63156 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd1)) + 616)) = *(*uintptr)(unsafe.Pointer(&struct { 63157 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63158 }{clang_sanitize_address})) 63159 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 63160 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63161 }{pager_open})) 63162 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 63163 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63164 }{pager_close})) 63165 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 63166 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63167 }{pager_commit})) 63168 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 63169 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63170 }{pager_rollback})) 63171 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 63172 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63173 }{pager_stmt_begin})) 63174 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 63175 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63176 }{pager_stmt_commit})) 63177 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 63178 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63179 }{pager_stmt_rollback})) 63180 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 63181 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63182 }{pager_stats})) 63183 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 63184 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63185 }{pager_pagecount})) 63186 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 63187 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63188 }{page_get})) 63189 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 63190 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63191 }{page_lookup})) 63192 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 63193 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63194 }{page_unref})) 63195 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 63196 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63197 }{page_read})) 63198 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 63199 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63200 }{page_write})) 63201 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 63202 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63203 }{page_number})) 63204 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 248)) = *(*uintptr)(unsafe.Pointer(&struct { 63205 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63206 }{pager_truncate})) 63207 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 63208 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63209 }{fake_big_file})) 63210 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 280)) = *(*uintptr)(unsafe.Pointer(&struct { 63211 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63212 }{testBitvecBuiltinTest})) 63213 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 63214 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63215 }{testPendingByte})) 63216 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd2)) + 312)) = *(*uintptr)(unsafe.Pointer(&struct { 63217 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63218 }{faultInstallCmd})) 63219 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 63220 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63221 }{btree_open})) 63222 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 63223 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63224 }{btree_close})) 63225 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 63226 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63227 }{btree_begin_transaction})) 63228 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 63229 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63230 }{btree_pager_stats})) 63231 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 63232 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63233 }{btree_cursor})) 63234 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 63235 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63236 }{btree_close_cursor})) 63237 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 63238 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63239 }{btree_next})) 63240 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 63241 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63242 }{btree_eof})) 63243 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 63244 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63245 }{btree_payload_size})) 63246 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 63247 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63248 }{btree_first})) 63249 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 63250 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63251 }{btree_varint_test})) 63252 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 63253 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63254 }{btree_from_db})) 63255 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 63256 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63257 }{btree_ismemdb})) 63258 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd3)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 63259 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63260 }{btree_set_cache_size})) 63261 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 63262 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63263 }{tcl_thread_create})) 63264 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 63265 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63266 }{tcl_thread_wait})) 63267 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 63268 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63269 }{tcl_thread_halt})) 63270 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 63271 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63272 }{tcl_thread_argc})) 63273 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 63274 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63275 }{tcl_thread_argv})) 63276 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 63277 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63278 }{tcl_thread_colname})) 63279 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 63280 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63281 }{tcl_thread_result})) 63282 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 63283 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63284 }{tcl_thread_error})) 63285 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 63286 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63287 }{tcl_thread_compile})) 63288 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 63289 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63290 }{tcl_thread_step})) 63291 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 63292 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63293 }{tcl_thread_finalize})) 63294 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 63295 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63296 }{tcl_thread_swap})) 63297 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 63298 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63299 }{tcl_thread_db_get})) 63300 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 216)) = *(*uintptr)(unsafe.Pointer(&struct { 63301 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63302 }{tcl_thread_db_put})) 63303 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd4)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 63304 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63305 }{tcl_thread_stmt_get})) 63306 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 63307 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63308 }{binarize})) 63309 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 63310 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63311 }{test_value_overhead})) 63312 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 63313 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63314 }{test_translate})) 63315 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd5)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 63316 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63317 }{test_translate_selftest})) 63318 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 63319 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63320 }{tcl_client_create})) 63321 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 63322 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63323 }{tcl_client_wait})) 63324 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 63325 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63326 }{tcl_client_halt})) 63327 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 63328 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63329 }{tcl_client_argc})) 63330 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 63331 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63332 }{tcl_client_argv})) 63333 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 63334 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63335 }{tcl_client_colname})) 63336 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 63337 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63338 }{tcl_client_result})) 63339 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 63340 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63341 }{tcl_client_error})) 63342 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 63343 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63344 }{tcl_client_compile})) 63345 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 63346 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63347 }{tcl_client_step})) 63348 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 63349 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63350 }{tcl_client_reset})) 63351 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 184)) = *(*uintptr)(unsafe.Pointer(&struct { 63352 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63353 }{tcl_client_finalize})) 63354 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd6)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 63355 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63356 }{tcl_client_swap})) 63357 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 8)) = test_multiplex_initialize 63358 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 24)) = test_multiplex_shutdown 63359 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd7)) + 40)) = test_multiplex_control 63360 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 63361 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63362 }{test_shutdown})) 63363 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 24)) = *(*uintptr)(unsafe.Pointer(&struct { 63364 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63365 }{test_initialize})) 63366 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct { 63367 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63368 }{test_config})) 63369 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 56)) = *(*uintptr)(unsafe.Pointer(&struct { 63370 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63371 }{test_enter_static_mutex})) 63372 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 63373 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63374 }{test_leave_static_mutex})) 63375 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 88)) = *(*uintptr)(unsafe.Pointer(&struct { 63376 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63377 }{test_enter_db_mutex})) 63378 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 63379 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63380 }{test_leave_db_mutex})) 63381 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 120)) = *(*uintptr)(unsafe.Pointer(&struct { 63382 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63383 }{test_alloc_mutex})) 63384 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 63385 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63386 }{test_install_mutex_counters})) 63387 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 152)) = *(*uintptr)(unsafe.Pointer(&struct { 63388 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63389 }{test_read_mutex_counters})) 63390 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd8)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 63391 f func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32 63392 }{test_clear_mutex_counters})) 63393 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 8)) = test_quota_initialize 63394 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 24)) = test_quota_shutdown 63395 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 40)) = test_quota_set 63396 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 56)) = test_quota_file 63397 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 72)) = test_quota_dump 63398 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 88)) = test_quota_fopen 63399 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 104)) = test_quota_fread 63400 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 120)) = test_quota_fwrite 63401 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 136)) = test_quota_fclose 63402 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 152)) = test_quota_fflush 63403 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 168)) = test_quota_fseek 63404 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 184)) = test_quota_rewind 63405 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 200)) = test_quota_ftell 63406 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 216)) = test_quota_ftruncate 63407 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 232)) = test_quota_file_size 63408 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 248)) = test_quota_file_truesize 63409 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 264)) = test_quota_file_mtime 63410 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 280)) = test_quota_remove 63411 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 296)) = test_quota_glob 63412 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 312)) = test_quota_file_available 63413 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aCmd9)) + 328)) = test_quota_ferror 63414 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 8)) = sqlite3_amatch_init 63415 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 24)) = sqlite3_appendvfs_init 63416 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 40)) = sqlite3_carray_init 63417 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 56)) = sqlite3_closure_init 63418 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 72)) = sqlite3_csv_init 63419 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 88)) = sqlite3_decimal_init 63420 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 104)) = sqlite3_eval_init 63421 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 120)) = sqlite3_explain_init 63422 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 136)) = sqlite3_fileio_init 63423 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 152)) = sqlite3_fuzzer_init 63424 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 168)) = sqlite3_ieee_init 63425 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 184)) = sqlite3_nextchar_init 63426 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 200)) = sqlite3_percentile_init 63427 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 216)) = sqlite3_prefixes_init 63428 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 232)) = sqlite3_qpvtab_init 63429 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 248)) = sqlite3_regexp_init 63430 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 264)) = sqlite3_remember_init 63431 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 280)) = sqlite3_series_init 63432 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 296)) = sqlite3_spellfix_init 63433 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 312)) = sqlite3_totype_init 63434 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 328)) = sqlite3_unionvtab_init 63435 *(*func(*libc.TLS, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aExtension)) + 344)) = sqlite3_wholenumber_init 63436 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 16)) = decimalFunc 63437 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 40)) = decimalCmpFunc 63438 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 64)) = decimalAddFunc 63439 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 88)) = decimalSubFunc 63440 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc)) + 112)) = decimalMulFunc 63441 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 16)) = ieee754func 63442 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 40)) = ieee754func 63443 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 64)) = ieee754func 63444 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 88)) = ieee754func 63445 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 112)) = ieee754func_to_blob 63446 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFunc1)) + 136)) = ieee754func_from_blob 63447 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 16)) = randStr 63448 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 40)) = test_destructor 63449 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 64)) = test_destructor16 63450 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 88)) = testHexToUtf16be 63451 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 112)) = testHexToUtf16le 63452 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 136)) = testHexToUtf8 63453 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 160)) = test_destructor_count 63454 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 184)) = test_auxdata 63455 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 208)) = test_error 63456 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 232)) = test_error 63457 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 256)) = test_eval 63458 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 280)) = test_isolation 63459 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 304)) = counterFunc 63460 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 328)) = real2hex 63461 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 352)) = test_decode 63462 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 376)) = test_extract 63463 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 400)) = test_zeroblob 63464 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 424)) = test_getsubtype 63465 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 448)) = test_setsubtype 63466 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&aFuncs)) + 472)) = test_frombind 63467 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 8)) = test_sqlite3rbu 63468 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 24)) = test_sqlite3rbu_vacuum 63469 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 40)) = test_sqlite3rbu_create_vfs 63470 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 56)) = test_sqlite3rbu_destroy_vfs 63471 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd)) + 72)) = test_sqlite3rbu_internal_test 63472 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 8)) = test_sqlite3_db_config 63473 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 32)) = test_sqlite3_txn_state 63474 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 56)) = test_bad_behavior 63475 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 64)) = uintptr(unsafe.Pointer(&iZero)) 63476 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 80)) = test_register_dbstat_vtab 63477 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 104)) = get_sqlite_pointer 63478 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 128)) = test_intarray_addr 63479 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 152)) = test_int64array_addr 63480 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 176)) = test_doublearray_addr 63481 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 200)) = test_textarray_addr 63482 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 224)) = test_bind_int 63483 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 248)) = test_bind_zeroblob 63484 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 272)) = test_bind_zeroblob64 63485 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 296)) = test_bind_int64 63486 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 320)) = test_bind_double 63487 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 344)) = test_bind_null 63488 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 368)) = test_bind_text 63489 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 392)) = test_bind_text16 63490 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 416)) = test_bind_blob 63491 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 440)) = test_bind_value_from_select 63492 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 464)) = test_bind_value_from_preupdate 63493 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 488)) = test_carray_bind 63494 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 512)) = test_bind_parameter_count 63495 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 536)) = test_bind_parameter_name 63496 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 560)) = test_bind_parameter_index 63497 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 584)) = test_clear_bindings 63498 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 608)) = test_sleep 63499 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 632)) = test_errcode 63500 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 656)) = test_ex_errcode 63501 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 680)) = test_errmsg 63502 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 704)) = test_error_offset 63503 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 728)) = test_errmsg16 63504 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 752)) = test_open 63505 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 776)) = test_open16 63506 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 800)) = test_open_v2 63507 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 824)) = test_complete16 63508 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 848)) = test_normalize 63509 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 872)) = test_prepare 63510 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 896)) = test_prepare16 63511 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 920)) = test_prepare_v2 63512 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 944)) = test_prepare_v3 63513 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 968)) = test_prepare_tkt3134 63514 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 992)) = test_prepare16_v2 63515 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1016)) = test_finalize 63516 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1040)) = test_stmt_status 63517 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1064)) = test_reset 63518 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1088)) = test_expired 63519 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1112)) = test_transfer_bind 63520 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1136)) = test_changes 63521 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1160)) = test_step 63522 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1184)) = test_sql 63523 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1208)) = test_ex_sql 63524 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1232)) = test_next_stmt 63525 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1256)) = test_stmt_readonly 63526 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1280)) = test_stmt_isexplain 63527 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1304)) = test_stmt_busy 63528 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1328)) = uses_stmt_journal 63529 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1352)) = test_release_memory 63530 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1376)) = test_db_release_memory 63531 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1400)) = test_db_cacheflush 63532 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1424)) = test_system_errno 63533 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1448)) = test_db_filename 63534 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1472)) = test_db_readonly 63535 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1496)) = test_soft_heap_limit 63536 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1520)) = test_soft_heap_limit 63537 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1544)) = test_hard_heap_limit 63538 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1568)) = test_thread_cleanup 63539 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1592)) = test_pager_refcounts 63540 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1616)) = test_load_extension 63541 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1640)) = test_enable_load 63542 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1664)) = test_extended_result_codes 63543 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1688)) = test_limit 63544 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1712)) = test_dbconfig_maindbname_icecube 63545 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1736)) = save_prng_state 63546 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1760)) = restore_prng_state 63547 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1784)) = reset_prng_state 63548 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1808)) = prng_seed 63549 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1832)) = extra_schema_checks 63550 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1856)) = database_never_corrupt 63551 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1880)) = database_may_be_corrupt 63552 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1904)) = optimization_control 63553 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1928)) = runAsObjProc 63554 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1952)) = test_column_count 63555 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 1976)) = test_data_count 63556 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2000)) = test_column_type 63557 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2024)) = test_column_blob 63558 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2048)) = test_column_double 63559 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2072)) = test_column_int64 63560 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2096)) = test_stmt_utf8 63561 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2104)) = *(*uintptr)(unsafe.Pointer(&struct { 63562 f func(*libc.TLS, uintptr, int32) uintptr 63563 }{sqlite3.Xsqlite3_column_text})) 63564 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2120)) = test_stmt_utf8 63565 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2128)) = *(*uintptr)(unsafe.Pointer(&struct { 63566 f func(*libc.TLS, uintptr, int32) uintptr 63567 }{sqlite3.Xsqlite3_column_name})) 63568 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2144)) = test_stmt_int 63569 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2152)) = *(*uintptr)(unsafe.Pointer(&struct { 63570 f func(*libc.TLS, uintptr, int32) int32 63571 }{sqlite3.Xsqlite3_column_int})) 63572 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2168)) = test_stmt_int 63573 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2176)) = *(*uintptr)(unsafe.Pointer(&struct { 63574 f func(*libc.TLS, uintptr, int32) int32 63575 }{sqlite3.Xsqlite3_column_bytes})) 63576 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2192)) = test_stmt_utf8 63577 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2200)) = *(*uintptr)(unsafe.Pointer(&struct { 63578 f func(*libc.TLS, uintptr, int32) uintptr 63579 }{sqlite3.Xsqlite3_column_decltype})) 63580 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2216)) = test_stmt_utf8 63581 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2224)) = *(*uintptr)(unsafe.Pointer(&struct { 63582 f func(*libc.TLS, uintptr, int32) uintptr 63583 }{sqlite3.Xsqlite3_column_database_name})) 63584 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2240)) = test_stmt_utf8 63585 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2248)) = *(*uintptr)(unsafe.Pointer(&struct { 63586 f func(*libc.TLS, uintptr, int32) uintptr 63587 }{sqlite3.Xsqlite3_column_table_name})) 63588 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2264)) = test_stmt_utf8 63589 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2272)) = *(*uintptr)(unsafe.Pointer(&struct { 63590 f func(*libc.TLS, uintptr, int32) uintptr 63591 }{sqlite3.Xsqlite3_column_origin_name})) 63592 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2288)) = test_stmt_int 63593 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2296)) = *(*uintptr)(unsafe.Pointer(&struct { 63594 f func(*libc.TLS, uintptr, int32) int32 63595 }{sqlite3.Xsqlite3_column_bytes16})) 63596 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2312)) = test_stmt_utf16 63597 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2320)) = *(*uintptr)(unsafe.Pointer(&struct { 63598 f func(*libc.TLS, uintptr, int32) uintptr 63599 }{sqlite3.Xsqlite3_column_text16})) 63600 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2336)) = test_stmt_utf16 63601 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2344)) = *(*uintptr)(unsafe.Pointer(&struct { 63602 f func(*libc.TLS, uintptr, int32) uintptr 63603 }{sqlite3.Xsqlite3_column_name16})) 63604 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2360)) = add_alignment_test_collations 63605 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2384)) = test_stmt_utf16 63606 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2392)) = *(*uintptr)(unsafe.Pointer(&struct { 63607 f func(*libc.TLS, uintptr, int32) uintptr 63608 }{sqlite3.Xsqlite3_column_decltype16})) 63609 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2408)) = test_stmt_utf16 63610 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2416)) = *(*uintptr)(unsafe.Pointer(&struct { 63611 f func(*libc.TLS, uintptr, int32) uintptr 63612 }{sqlite3.Xsqlite3_column_database_name16})) 63613 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2432)) = test_stmt_utf16 63614 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2440)) = *(*uintptr)(unsafe.Pointer(&struct { 63615 f func(*libc.TLS, uintptr, int32) uintptr 63616 }{sqlite3.Xsqlite3_column_table_name16})) 63617 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2456)) = test_stmt_utf16 63618 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2464)) = *(*uintptr)(unsafe.Pointer(&struct { 63619 f func(*libc.TLS, uintptr, int32) uintptr 63620 }{sqlite3.Xsqlite3_column_origin_name16})) 63621 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2480)) = test_create_collation_v2 63622 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2504)) = test_global_recover 63623 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2528)) = working_64bit_int 63624 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2552)) = vfs_unlink_test 63625 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2576)) = vfs_initfail_test 63626 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2600)) = vfs_unregister_all 63627 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2624)) = vfs_reregister_all 63628 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2648)) = file_control_test 63629 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2672)) = file_control_lasterrno_test 63630 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2696)) = file_control_lockproxy_test 63631 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2720)) = file_control_chunksize_test 63632 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2744)) = file_control_sizehint_test 63633 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2768)) = file_control_data_version 63634 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2792)) = file_control_persist_wal 63635 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2816)) = file_control_powersafe_overwrite 63636 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2840)) = file_control_vfsname 63637 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2864)) = file_control_reservebytes 63638 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2888)) = file_control_tempfilename 63639 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2912)) = file_control_external_reader 63640 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2936)) = vfs_list 63641 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2960)) = test_create_function_v2 63642 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 2984)) = test_collate 63643 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3008)) = test_collate_needed 63644 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3032)) = test_function 63645 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3056)) = test_utf16bin_collate 63646 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3080)) = test_errstr 63647 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3104)) = tcl_variable_type 63648 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3128)) = test_enable_shared 63649 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3152)) = sqlite3BtreeSharedCacheReport 63650 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3176)) = test_libversion_number 63651 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3200)) = test_table_column_metadata 63652 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3224)) = test_blob_reopen 63653 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3248)) = test_pcache_stats 63654 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3272)) = test_unlock_notify 63655 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3296)) = test_wal_checkpoint 63656 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3320)) = test_wal_checkpoint_v2 63657 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3344)) = test_wal_autocheckpoint 63658 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3368)) = test_sqlite3_log 63659 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3392)) = test_print_eqp 63660 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3416)) = test_test_control 63661 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3440)) = test_getrusage 63662 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3464)) = tclLoadStaticExtensionCmd 63663 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3488)) = sorter_test_fakeheap 63664 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3512)) = sorter_test_sort4_helper 63665 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3536)) = vfsCurrentTimeInt64 63666 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3560)) = test_snapshot_get 63667 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3584)) = test_snapshot_open 63668 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3608)) = test_snapshot_free 63669 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3632)) = test_snapshot_cmp 63670 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3656)) = test_snapshot_recover 63671 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3680)) = test_snapshot_get_blob 63672 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3704)) = test_snapshot_open_blob 63673 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3728)) = test_snapshot_cmp_blob 63674 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3752)) = test_delete_database 63675 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3776)) = test_atomic_batch_write 63676 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3800)) = test_mmap_warm 63677 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3824)) = test_config_sorterref 63678 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3848)) = test_autovacuum_pages 63679 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3872)) = test_decode_hexdb 63680 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3896)) = test_write_db 63681 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3920)) = test_register_cksumvfs 63682 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd1)) + 3944)) = test_unregister_cksumvfs 63683 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd10)) + 8)) = test_intarray_create 63684 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd10)) + 32)) = test_intarray_bind 63685 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 8)) = test_malloc 63686 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 32)) = test_realloc 63687 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 56)) = test_free 63688 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 80)) = test_memset 63689 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 104)) = test_memget 63690 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 128)) = test_memory_used 63691 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 152)) = test_memory_highwater 63692 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 176)) = test_memdebug_backtrace 63693 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 200)) = test_memdebug_dump 63694 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 224)) = test_memdebug_fail 63695 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 248)) = test_memdebug_pending 63696 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 272)) = test_memdebug_settitle 63697 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 296)) = test_memdebug_malloc_count 63698 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 320)) = test_memdebug_log 63699 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 344)) = test_config_pagecache 63700 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 368)) = test_alt_pcache 63701 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 392)) = test_status 63702 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 416)) = test_db_status 63703 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 440)) = test_install_malloc_faultsim 63704 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 464)) = test_config_heap 63705 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 488)) = test_config_heap_size 63706 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 512)) = test_config_memstatus 63707 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 536)) = test_config_lookaside 63708 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 560)) = test_config_error 63709 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 584)) = test_config_uri 63710 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 608)) = test_config_cis 63711 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 632)) = test_config_pmasz 63712 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 656)) = test_db_config_lookaside 63713 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 680)) = test_dump_memsys3 63714 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 704)) = test_dump_memsys3 63715 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 728)) = test_install_memsys3 63716 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd11)) + 752)) = test_vfs_oom_test 63717 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd12)) + 8)) = register_schema_module 63718 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd13)) + 8)) = register_tclvar_module 63719 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 8)) = test_create_window 63720 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 32)) = test_create_window_misuse 63721 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 56)) = test_create_sumint 63722 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd14)) + 80)) = test_override_sum 63723 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd2)) + 8)) = register_echo_module 63724 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd2)) + 32)) = declare_vtab 63725 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 8)) = c_misuse_test 63726 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 32)) = c_realloc_test 63727 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd3)) + 56)) = c_collation_test 63728 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd4)) + 8)) = register_tcl_module 63729 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 8)) = test_blob_open 63730 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 24)) = test_blob_close 63731 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 40)) = test_blob_bytes 63732 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 56)) = test_blob_read 63733 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd5)) + 72)) = test_blob_write 63734 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd6)) + 8)) = register_fs_module 63735 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 8)) = autoinstall_test_funcs 63736 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 24)) = abuse_create_function 63737 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd7)) + 40)) = install_fts3_rank_function 63738 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 8)) = hexio_read 63739 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 24)) = hexio_write 63740 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 40)) = hexio_get_int 63741 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 56)) = hexio_render_int16 63742 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 72)) = hexio_render_int32 63743 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 88)) = utf8_to_utf8 63744 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 104)) = read_fts3varint 63745 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd8)) + 120)) = make_fts3record 63746 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 8)) = init_wrapper_install 63747 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 24)) = init_wrapper_query 63748 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 40)) = init_wrapper_uninstall 63749 *(*func(*libc.TLS, ClientData, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&aObjCmd9)) + 56)) = init_wrapper_clear 63750 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 8)) = *(*uintptr)(unsafe.Pointer(&struct { 63751 f func(*libc.TLS, uintptr, int32, int32) int32 63752 }{ts_open})) 63753 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 40)) = *(*uintptr)(unsafe.Pointer(&struct{ f func(*libc.TLS, int32) int32 }{ts_close})) 63754 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 72)) = *(*uintptr)(unsafe.Pointer(&struct { 63755 f func(*libc.TLS, uintptr, int32) int32 63756 }{ts_access})) 63757 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 104)) = *(*uintptr)(unsafe.Pointer(&struct { 63758 f func(*libc.TLS, uintptr, size_t) uintptr 63759 }{ts_getcwd})) 63760 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 136)) = *(*uintptr)(unsafe.Pointer(&struct { 63761 f func(*libc.TLS, uintptr, uintptr) int32 63762 }{ts_stat})) 63763 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 168)) = *(*uintptr)(unsafe.Pointer(&struct { 63764 f func(*libc.TLS, int32, uintptr) int32 63765 }{ts_fstat})) 63766 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 200)) = *(*uintptr)(unsafe.Pointer(&struct { 63767 f func(*libc.TLS, int32, off_t) int32 63768 }{ts_ftruncate})) 63769 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 232)) = *(*uintptr)(unsafe.Pointer(&struct { 63770 f func(*libc.TLS, int32, int32, uintptr) int32 63771 }{ts_fcntl})) 63772 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 264)) = *(*uintptr)(unsafe.Pointer(&struct { 63773 f func(*libc.TLS, int32, uintptr, size_t) int32 63774 }{ts_read})) 63775 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 296)) = *(*uintptr)(unsafe.Pointer(&struct { 63776 f func(*libc.TLS, int32, uintptr, size_t, off_t) int32 63777 }{ts_pread})) 63778 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 328)) = *(*uintptr)(unsafe.Pointer(&struct { 63779 f func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) int32 63780 }{ts_pread64})) 63781 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 360)) = *(*uintptr)(unsafe.Pointer(&struct { 63782 f func(*libc.TLS, int32, uintptr, size_t) int32 63783 }{ts_write})) 63784 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 392)) = *(*uintptr)(unsafe.Pointer(&struct { 63785 f func(*libc.TLS, int32, uintptr, size_t, off_t) int32 63786 }{ts_pwrite})) 63787 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 424)) = *(*uintptr)(unsafe.Pointer(&struct { 63788 f func(*libc.TLS, int32, uintptr, size_t, sqlite3_uint64) int32 63789 }{ts_pwrite64})) 63790 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 456)) = *(*uintptr)(unsafe.Pointer(&struct { 63791 f func(*libc.TLS, int32, mode_t) int32 63792 }{ts_fchmod})) 63793 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 488)) = *(*uintptr)(unsafe.Pointer(&struct { 63794 f func(*libc.TLS, int32, off_t, off_t) int32 63795 }{ts_fallocate})) 63796 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 520)) = *(*uintptr)(unsafe.Pointer(&struct { 63797 f func(*libc.TLS, uintptr, size_t, int32, int32, int32, off_t) uintptr 63798 }{ts_mmap})) 63799 *(*sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&aSyscall)) + 552)) = *(*uintptr)(unsafe.Pointer(&struct { 63800 f func(*libc.TLS, uintptr, size_t, size_t, int32, uintptr) uintptr 63801 }{ts_mremap})) 63802 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 8)) = amatchConnect 63803 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 16)) = amatchConnect 63804 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 24)) = amatchBestIndex 63805 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 32)) = amatchDisconnect 63806 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 40)) = amatchDisconnect 63807 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 48)) = amatchOpen 63808 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 56)) = amatchClose 63809 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 64)) = amatchFilter 63810 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 72)) = amatchNext 63811 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 80)) = amatchEof 63812 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 88)) = amatchColumn 63813 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 96)) = amatchRowid 63814 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&amatchModule)) + 104)) = amatchUpdate 63815 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 8)) = apndClose 63816 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 16)) = apndRead 63817 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 24)) = apndWrite 63818 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 32)) = apndTruncate 63819 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 40)) = apndSync 63820 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 48)) = apndFileSize 63821 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 56)) = apndLock 63822 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 64)) = apndUnlock 63823 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 72)) = apndCheckReservedLock 63824 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 80)) = apndFileControl 63825 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 88)) = apndSectorSize 63826 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 96)) = apndDeviceCharacteristics 63827 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 104)) = apndShmMap 63828 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 112)) = apndShmLock 63829 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 120)) = apndShmBarrier 63830 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 128)) = apndShmUnmap 63831 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 136)) = apndFetch 63832 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_io_methods)) + 144)) = apndUnfetch 63833 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 40)) = apndOpen 63834 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 48)) = apndDelete 63835 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 56)) = apndAccess 63836 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 64)) = apndFullPathname 63837 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 72)) = apndDlOpen 63838 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 80)) = apndDlError 63839 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 88)) = apndDlSym 63840 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 96)) = apndDlClose 63841 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 104)) = apndRandomness 63842 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 112)) = apndSleep 63843 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 120)) = apndCurrentTime 63844 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 128)) = apndGetLastError 63845 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 136)) = apndCurrentTimeInt64 63846 *(*func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 144)) = apndSetSystemCall 63847 *(*func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 152)) = apndGetSystemCall 63848 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&apnd_vfs)) + 160)) = apndNextSystemCall 63849 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 16)) = carrayConnect 63850 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 24)) = carrayBestIndex 63851 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 32)) = carrayDisconnect 63852 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 48)) = carrayOpen 63853 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 56)) = carrayClose 63854 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 64)) = carrayFilter 63855 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 72)) = carrayNext 63856 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 80)) = carrayEof 63857 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 88)) = carrayColumn 63858 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&carrayModule)) + 96)) = carrayRowid 63859 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 8)) = cksmClose 63860 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 16)) = cksmRead 63861 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 24)) = cksmWrite 63862 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 32)) = cksmTruncate 63863 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 40)) = cksmSync 63864 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 48)) = cksmFileSize 63865 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 56)) = cksmLock 63866 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 64)) = cksmUnlock 63867 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 72)) = cksmCheckReservedLock 63868 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 80)) = cksmFileControl 63869 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 88)) = cksmSectorSize 63870 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 96)) = cksmDeviceCharacteristics 63871 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 104)) = cksmShmMap 63872 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 112)) = cksmShmLock 63873 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 120)) = cksmShmBarrier 63874 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 128)) = cksmShmUnmap 63875 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 136)) = cksmFetch 63876 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_io_methods)) + 144)) = cksmUnfetch 63877 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 40)) = cksmOpen 63878 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 48)) = cksmDelete 63879 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 56)) = cksmAccess 63880 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 64)) = cksmFullPathname 63881 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 72)) = cksmDlOpen 63882 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 80)) = cksmDlError 63883 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 88)) = cksmDlSym 63884 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 96)) = cksmDlClose 63885 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 104)) = cksmRandomness 63886 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 112)) = cksmSleep 63887 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 120)) = cksmCurrentTime 63888 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 128)) = cksmGetLastError 63889 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 136)) = cksmCurrentTimeInt64 63890 *(*func(*libc.TLS, uintptr, uintptr, sqlite3_syscall_ptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 144)) = cksmSetSystemCall 63891 *(*func(*libc.TLS, uintptr, uintptr) sqlite3_syscall_ptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 152)) = cksmGetSystemCall 63892 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&cksm_vfs)) + 160)) = cksmNextSystemCall 63893 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 8)) = closureConnect 63894 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 16)) = closureConnect 63895 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 24)) = closureBestIndex 63896 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 32)) = closureDisconnect 63897 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 40)) = closureDisconnect 63898 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 48)) = closureOpen 63899 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 56)) = closureClose 63900 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 64)) = closureFilter 63901 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 72)) = closureNext 63902 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 80)) = closureEof 63903 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 88)) = closureColumn 63904 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&closureModule)) + 96)) = closureRowid 63905 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 40)) = cfOpen 63906 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 48)) = cfDelete 63907 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 56)) = cfAccess 63908 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 64)) = cfFullPathname 63909 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 72)) = cfDlOpen 63910 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 80)) = cfDlError 63911 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 88)) = cfDlSym 63912 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 96)) = cfDlClose 63913 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 104)) = cfRandomness 63914 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 112)) = cfSleep 63915 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 120)) = cfCurrentTime 63916 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&crashVfs)) + 128)) = cfGetLastError 63917 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demoio)) + 8)) = demoClose 63918 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demoio)) + 16)) = demoRead 63919 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demoio)) + 24)) = demoWrite 63920 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demoio)) + 32)) = demoTruncate 63921 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demoio)) + 40)) = demoSync 63922 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demoio)) + 48)) = demoFileSize 63923 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demoio)) + 56)) = demoLock 63924 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demoio)) + 64)) = demoUnlock 63925 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demoio)) + 72)) = demoCheckReservedLock 63926 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demoio)) + 80)) = demoFileControl 63927 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demoio)) + 88)) = demoSectorSize 63928 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demoio)) + 96)) = demoDeviceCharacteristics 63929 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demovfs)) + 40)) = demoOpen 63930 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demovfs)) + 48)) = demoDelete 63931 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demovfs)) + 56)) = demoAccess 63932 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demovfs)) + 64)) = demoFullPathname 63933 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&demovfs)) + 72)) = demoDlOpen 63934 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&demovfs)) + 80)) = demoDlError 63935 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&demovfs)) + 88)) = demoDlSym 63936 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&demovfs)) + 96)) = demoDlClose 63937 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demovfs)) + 104)) = demoRandomness 63938 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demovfs)) + 112)) = demoSleep 63939 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&demovfs)) + 120)) = demoCurrentTime 63940 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 8)) = devsymClose 63941 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 16)) = devsymRead 63942 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 24)) = devsymWrite 63943 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 32)) = devsymTruncate 63944 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 40)) = devsymSync 63945 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 48)) = devsymFileSize 63946 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 56)) = devsymLock 63947 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 64)) = devsymUnlock 63948 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 72)) = devsymCheckReservedLock 63949 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 80)) = devsymFileControl 63950 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 88)) = devsymSectorSize 63951 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 96)) = devsymDeviceCharacteristics 63952 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 104)) = devsymShmMap 63953 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 112)) = devsymShmLock 63954 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 120)) = devsymShmBarrier 63955 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_io_methods)) + 128)) = devsymShmUnmap 63956 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 40)) = devsymOpen 63957 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 48)) = devsymDelete 63958 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 56)) = devsymAccess 63959 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 64)) = devsymFullPathname 63960 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 104)) = devsymRandomness 63961 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 112)) = devsymSleep 63962 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&devsym_vfs)) + 120)) = devsymCurrentTime 63963 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 8)) = echoCreate 63964 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 16)) = echoConnect 63965 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 24)) = echoBestIndex 63966 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 32)) = echoDisconnect 63967 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 40)) = echoDestroy 63968 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 48)) = echoOpen 63969 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 56)) = echoClose 63970 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 64)) = echoFilter 63971 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 72)) = echoNext 63972 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 80)) = echoEof 63973 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 88)) = echoColumn 63974 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 96)) = echoRowid 63975 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 104)) = echoUpdate 63976 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 112)) = echoBegin 63977 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 120)) = echoSync 63978 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 128)) = echoCommit 63979 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 136)) = echoRollback 63980 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 144)) = echoFindFunction 63981 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModule)) + 152)) = echoRename 63982 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 8)) = echoCreate 63983 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 16)) = echoConnect 63984 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 24)) = echoBestIndex 63985 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 32)) = echoDisconnect 63986 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 40)) = echoDestroy 63987 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 48)) = echoOpen 63988 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 56)) = echoClose 63989 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 64)) = echoFilter 63990 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 72)) = echoNext 63991 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 80)) = echoEof 63992 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 88)) = echoColumn 63993 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 96)) = echoRowid 63994 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 104)) = echoUpdate 63995 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 112)) = echoBegin 63996 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 120)) = echoSync 63997 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 128)) = echoCommit 63998 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 136)) = echoRollback 63999 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 144)) = echoFindFunction 64000 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 152)) = echoRename 64001 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 160)) = echoSavepoint 64002 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 168)) = echoRelease 64003 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&echoModuleV2)) + 176)) = echoRollbackTo 64004 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 8)) = expertConnect 64005 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 16)) = expertConnect 64006 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 24)) = expertBestIndex 64007 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 32)) = expertDisconnect 64008 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 40)) = expertDisconnect 64009 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 48)) = expertOpen 64010 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 56)) = expertClose 64011 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 64)) = expertFilter 64012 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 72)) = expertNext 64013 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 80)) = expertEof 64014 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 88)) = expertColumn 64015 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 96)) = expertRowid 64016 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&expertModule)) + 104)) = expertUpdate 64017 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 16)) = explainConnect 64018 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 24)) = explainBestIndex 64019 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 32)) = explainDisconnect 64020 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 48)) = explainOpen 64021 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 56)) = explainClose 64022 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 64)) = explainFilter 64023 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 72)) = explainNext 64024 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 80)) = explainEof 64025 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 88)) = explainColumn 64026 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&explainModule)) + 96)) = explainRowid 64027 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 8)) = fsConnect 64028 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 16)) = fsConnect 64029 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 24)) = fsBestIndex 64030 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 32)) = fsDisconnect 64031 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 40)) = fsDisconnect 64032 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 48)) = fsOpen 64033 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 56)) = fsClose 64034 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 64)) = fsFilter 64035 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 72)) = fsNext 64036 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 80)) = fsEof 64037 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 88)) = fsColumn 64038 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsModule)) + 96)) = fsRowid 64039 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 8)) = fsClose1 64040 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 16)) = fsRead 64041 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 24)) = fsWrite 64042 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 32)) = fsTruncate 64043 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 40)) = fsSync 64044 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 48)) = fsFileSize 64045 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 56)) = fsLock 64046 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 64)) = fsUnlock 64047 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 72)) = fsCheckReservedLock 64048 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 80)) = fsFileControl 64049 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 88)) = fsSectorSize 64050 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_io_methods)) + 96)) = fsDeviceCharacteristics 64051 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 40)) = fsOpen1 64052 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 48)) = fsDelete 64053 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 56)) = fsAccess 64054 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 64)) = fsFullPathname 64055 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 72)) = fsDlOpen 64056 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 80)) = fsDlError 64057 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 88)) = fsDlSym 64058 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 96)) = fsDlClose 64059 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 104)) = fsRandomness 64060 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 112)) = fsSleep 64061 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fs_vfs)) + 120)) = fsCurrentTime 64062 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 8)) = fsdirConnect1 64063 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 16)) = fsdirConnect1 64064 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 24)) = fsdirBestIndex1 64065 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 32)) = fsdirDisconnect1 64066 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 40)) = fsdirDisconnect1 64067 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 48)) = fsdirOpen1 64068 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 56)) = fsdirClose1 64069 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 64)) = fsdirFilter1 64070 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 72)) = fsdirNext1 64071 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 80)) = fsdirEof1 64072 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 88)) = fsdirColumn1 64073 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule)) + 96)) = fsdirRowid1 64074 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 16)) = fsdirConnect 64075 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 24)) = fsdirBestIndex 64076 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 32)) = fsdirDisconnect 64077 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 48)) = fsdirOpen 64078 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 56)) = fsdirClose 64079 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 64)) = fsdirFilter 64080 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 72)) = fsdirNext 64081 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 80)) = fsdirEof 64082 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 88)) = fsdirColumn 64083 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fsdirModule1)) + 96)) = fsdirRowid 64084 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 8)) = fstreeConnect 64085 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 16)) = fstreeConnect 64086 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 24)) = fstreeBestIndex 64087 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 32)) = fstreeDisconnect 64088 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 40)) = fstreeDisconnect 64089 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 48)) = fstreeOpen 64090 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 56)) = fstreeClose 64091 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 64)) = fstreeFilter 64092 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 72)) = fstreeNext 64093 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 80)) = fstreeEof 64094 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 88)) = fstreeColumn 64095 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fstreeModule)) + 96)) = fstreeRowid 64096 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 8)) = fts5tokConnectMethod 64097 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 16)) = fts5tokConnectMethod 64098 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 24)) = fts5tokBestIndexMethod 64099 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 32)) = fts5tokDisconnectMethod 64100 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 40)) = fts5tokDisconnectMethod 64101 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 48)) = fts5tokOpenMethod 64102 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 56)) = fts5tokCloseMethod 64103 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 64)) = fts5tokFilterMethod 64104 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 72)) = fts5tokNextMethod 64105 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 80)) = fts5tokEofMethod 64106 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 88)) = fts5tokColumnMethod 64107 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fts5tok_module)) + 96)) = fts5tokRowidMethod 64108 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 8)) = fuzzerConnect 64109 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 16)) = fuzzerConnect 64110 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 24)) = fuzzerBestIndex 64111 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 32)) = fuzzerDisconnect 64112 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 40)) = fuzzerDisconnect 64113 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 48)) = fuzzerOpen 64114 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 56)) = fuzzerClose 64115 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 64)) = fuzzerFilter 64116 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 72)) = fuzzerNext 64117 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 80)) = fuzzerEof 64118 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 88)) = fuzzerColumn 64119 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&fuzzerModule)) + 96)) = fuzzerRowid 64120 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 8)) = intarrayCreate 64121 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 16)) = intarrayCreate 64122 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 24)) = intarrayBestIndex 64123 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 32)) = intarrayDestroy 64124 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 40)) = intarrayDestroy 64125 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 48)) = intarrayOpen 64126 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 56)) = intarrayClose 64127 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 64)) = intarrayFilter 64128 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 72)) = intarrayNext 64129 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 80)) = intarrayEof 64130 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 88)) = intarrayColumn 64131 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&intarrayModule)) + 96)) = intarrayRowid 64132 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 8)) = jtClose 64133 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 16)) = jtRead 64134 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 24)) = jtWrite 64135 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 32)) = jtTruncate 64136 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 40)) = jtSync 64137 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 48)) = jtFileSize 64138 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 56)) = jtLock 64139 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 64)) = jtUnlock 64140 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 72)) = jtCheckReservedLock 64141 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 80)) = jtFileControl 64142 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 88)) = jtSectorSize 64143 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_io_methods)) + 96)) = jtDeviceCharacteristics 64144 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 40)) = jtOpen 64145 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 48)) = jtDelete 64146 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 56)) = jtAccess 64147 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 64)) = jtFullPathname 64148 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 72)) = jtDlOpen 64149 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 80)) = jtDlError 64150 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 88)) = jtDlSym 64151 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 96)) = jtDlClose 64152 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 104)) = jtRandomness 64153 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 112)) = jtSleep 64154 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 120)) = jtCurrentTime 64155 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 128)) = jtGetLastError 64156 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&jt_vfs)) + 136)) = jtCurrentTimeInt64 64157 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 16)) = prefixesConnect 64158 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 24)) = prefixesBestIndex 64159 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 32)) = prefixesDisconnect 64160 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 48)) = prefixesOpen 64161 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 56)) = prefixesClose 64162 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 64)) = prefixesFilter 64163 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 72)) = prefixesNext 64164 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 80)) = prefixesEof 64165 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 88)) = prefixesColumn 64166 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&prefixesModule)) + 96)) = prefixesRowid 64167 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&pzNeededCollation)) + 0)) = uintptr(unsafe.Pointer(&zNeededCollation)) 64168 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 16)) = qpvtabConnect 64169 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 24)) = qpvtabBestIndex 64170 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 32)) = qpvtabDisconnect 64171 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 48)) = qpvtabOpen 64172 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 56)) = qpvtabClose 64173 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 64)) = qpvtabFilter 64174 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 72)) = qpvtabNext 64175 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 80)) = qpvtabEof 64176 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 88)) = qpvtabColumn 64177 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&qpvtabModule)) + 96)) = qpvtabRowid 64178 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 8)) = schemaCreate 64179 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 16)) = schemaCreate 64180 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 24)) = schemaBestIndex 64181 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 32)) = schemaDestroy 64182 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 40)) = schemaDestroy 64183 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 48)) = schemaOpen 64184 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 56)) = schemaClose 64185 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 64)) = schemaFilter 64186 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 72)) = schemaNext 64187 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 80)) = schemaEof 64188 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 88)) = schemaColumn 64189 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&schemaModule)) + 96)) = schemaRowid 64190 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 16)) = seriesConnect 64191 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 24)) = seriesBestIndex 64192 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 32)) = seriesDisconnect 64193 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 48)) = seriesOpen 64194 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 56)) = seriesClose 64195 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 64)) = seriesFilter 64196 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 72)) = seriesNext 64197 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 80)) = seriesEof 64198 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 88)) = seriesColumn 64199 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&seriesModule)) + 96)) = seriesRowid 64200 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 8)) = spellfix1Create 64201 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 16)) = spellfix1Connect 64202 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 24)) = spellfix1BestIndex 64203 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 32)) = spellfix1Disconnect 64204 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 40)) = spellfix1Destroy 64205 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 48)) = spellfix1Open 64206 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 56)) = spellfix1Close 64207 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 64)) = spellfix1Filter 64208 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 72)) = spellfix1Next 64209 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 80)) = spellfix1Eof 64210 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 88)) = spellfix1Column 64211 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 96)) = spellfix1Rowid 64212 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 104)) = spellfix1Update 64213 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&spellfix1Module)) + 152)) = spellfix1Rename 64214 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 8)) = tclConnect 64215 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 16)) = tclConnect 64216 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 24)) = tclBestIndex 64217 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 32)) = tclDisconnect 64218 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 40)) = tclDisconnect 64219 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 48)) = tclOpen 64220 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 56)) = tclClose 64221 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 64)) = tclFilter 64222 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 72)) = tclNext 64223 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 80)) = tclEof 64224 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 88)) = tclColumn 64225 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclModule)) + 96)) = tclRowid 64226 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 8)) = tclvarConnect 64227 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 16)) = tclvarConnect 64228 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 24)) = tclvarBestIndex 64229 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 32)) = tclvarDisconnect 64230 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 40)) = tclvarDisconnect 64231 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 48)) = tclvarOpen 64232 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 56)) = tclvarClose 64233 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 64)) = tclvarFilter 64234 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 72)) = tclvarNext 64235 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 80)) = tclvarEof 64236 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 88)) = tclvarColumn 64237 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 96)) = tclvarRowid 64238 *(*func(*libc.TLS, uintptr, int32, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tclvarModule)) + 104)) = tclvarUpdate 64239 *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 8)) = uintptr(unsafe.Pointer(&testpcacheGlobal)) 64240 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 16)) = testpcacheInit 64241 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 24)) = testpcacheShutdown 64242 *(*func(*libc.TLS, int32, int32, int32) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 32)) = testpcacheCreate 64243 *(*func(*libc.TLS, uintptr, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 40)) = testpcacheCachesize 64244 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 48)) = testpcachePagecount 64245 *(*func(*libc.TLS, uintptr, uint32, int32) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 56)) = testpcacheFetch 64246 *(*func(*libc.TLS, uintptr, uintptr, int32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 64)) = testpcacheUnpin 64247 *(*func(*libc.TLS, uintptr, uintptr, uint32, uint32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 72)) = testpcacheRekey 64248 *(*func(*libc.TLS, uintptr, uint32))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 80)) = testpcacheTruncate 64249 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&testPcache)) + 88)) = testpcacheDestroy 64250 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 8)) = tmpClose 64251 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 16)) = tmpRead 64252 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 24)) = tmpWrite 64253 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 32)) = tmpTruncate 64254 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 40)) = tmpSync 64255 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 48)) = tmpFileSize 64256 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 56)) = tmpLock 64257 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 64)) = tmpUnlock 64258 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 72)) = tmpCheckReservedLock 64259 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 80)) = tmpFileControl 64260 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 88)) = tmpSectorSize 64261 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tmp_io_methods)) + 96)) = tmpDeviceCharacteristics 64262 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 8)) = tvfsClose 64263 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 16)) = tvfsRead 64264 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 24)) = tvfsWrite 64265 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 32)) = tvfsTruncate 64266 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 40)) = tvfsSync 64267 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 48)) = tvfsFileSize 64268 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 56)) = tvfsLock 64269 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 64)) = tvfsUnlock 64270 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 72)) = tvfsCheckReservedLock 64271 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 80)) = tvfsFileControl 64272 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 88)) = tvfsSectorSize 64273 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 96)) = tvfsDeviceCharacteristics 64274 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 104)) = tvfsShmMap 64275 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 112)) = tvfsShmLock 64276 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 120)) = tvfsShmBarrier 64277 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 128)) = tvfsShmUnmap 64278 *(*func(*libc.TLS, uintptr, sqlite3_int64, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 136)) = tvfsFetch 64279 *(*func(*libc.TLS, uintptr, sqlite3_int64, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_io_methods)) + 144)) = tvfsUnfetch 64280 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 40)) = tvfsOpen 64281 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 48)) = tvfsDelete 64282 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 56)) = tvfsAccess 64283 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 64)) = tvfsFullPathname 64284 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 104)) = tvfsRandomness 64285 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 112)) = tvfsSleep 64286 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&tvfs_vfs)) + 120)) = tvfsCurrentTime 64287 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 8)) = unionConnect 64288 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 16)) = unionConnect 64289 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 24)) = unionBestIndex 64290 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 32)) = unionDisconnect 64291 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 40)) = unionDisconnect 64292 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 48)) = unionOpen 64293 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 56)) = unionClose 64294 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 64)) = unionFilter 64295 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 72)) = unionNext 64296 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 80)) = unionEof 64297 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 88)) = unionColumn 64298 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&unionModule)) + 96)) = unionRowid 64299 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 8)) = vfslogClose 64300 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 16)) = vfslogRead 64301 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 24)) = vfslogWrite 64302 *(*func(*libc.TLS, uintptr, sqlite3_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 32)) = vfslogTruncate 64303 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 40)) = vfslogSync 64304 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 48)) = vfslogFileSize 64305 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 56)) = vfslogLock 64306 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 64)) = vfslogUnlock 64307 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 72)) = vfslogCheckReservedLock 64308 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 80)) = vfslogFileControl 64309 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 88)) = vfslogSectorSize 64310 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 96)) = vfslogDeviceCharacteristics 64311 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 104)) = vfslogShmMap 64312 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 112)) = vfslogShmLock 64313 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 120)) = vfslogShmBarrier 64314 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_io_methods)) + 128)) = vfslogShmUnmap 64315 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 8)) = vlogConnect 64316 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 16)) = vlogConnect 64317 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 24)) = vlogBestIndex 64318 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 32)) = vlogDisconnect 64319 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 40)) = vlogDisconnect 64320 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 48)) = vlogOpen 64321 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 56)) = vlogClose 64322 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 64)) = vlogFilter 64323 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 72)) = vlogNext 64324 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 80)) = vlogEof 64325 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 88)) = vlogColumn 64326 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_module)) + 96)) = vlogRowid 64327 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 40)) = vfslogOpen 64328 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 48)) = vfslogDelete 64329 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 56)) = vfslogAccess 64330 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 64)) = vfslogFullPathname 64331 *(*func(*libc.TLS, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 72)) = vfslogDlOpen 64332 *(*func(*libc.TLS, uintptr, int32, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 80)) = vfslogDlError 64333 *(*func(*libc.TLS, uintptr, uintptr, uintptr) uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 88)) = vfslogDlSym 64334 *(*func(*libc.TLS, uintptr, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 96)) = vfslogDlClose 64335 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 104)) = vfslogRandomness 64336 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 112)) = vfslogSleep 64337 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 120)) = vfslogCurrentTime 64338 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 128)) = vfslogGetLastError 64339 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&vfslog_vfs)) + 136)) = vfslogCurrentTimeInt64 64340 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 8)) = wholenumberConnect 64341 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 16)) = wholenumberConnect 64342 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 24)) = wholenumberBestIndex 64343 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 32)) = wholenumberDisconnect 64344 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 40)) = wholenumberDisconnect 64345 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 48)) = wholenumberOpen 64346 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 56)) = wholenumberClose 64347 *(*func(*libc.TLS, uintptr, int32, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 64)) = wholenumberFilter 64348 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 72)) = wholenumberNext 64349 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 80)) = wholenumberEof 64350 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 88)) = wholenumberColumn 64351 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&wholenumberModule)) + 96)) = wholenumberRowid 64352 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 8)) = devsymClose 64353 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 16)) = devsymRead 64354 *(*func(*libc.TLS, uintptr, uintptr, int32, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 24)) = writecrashWrite 64355 *(*func(*libc.TLS, uintptr, sqlite_int64) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 32)) = devsymTruncate 64356 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 40)) = devsymSync 64357 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 48)) = devsymFileSize 64358 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 56)) = devsymLock 64359 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 64)) = devsymUnlock 64360 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 72)) = devsymCheckReservedLock 64361 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 80)) = devsymFileControl 64362 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 88)) = writecrashSectorSize 64363 *(*func(*libc.TLS, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 96)) = writecrashDeviceCharacteristics 64364 *(*func(*libc.TLS, uintptr, int32, int32, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 104)) = devsymShmMap 64365 *(*func(*libc.TLS, uintptr, int32, int32, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 112)) = devsymShmLock 64366 *(*func(*libc.TLS, uintptr))(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 120)) = devsymShmBarrier 64367 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_io_methods)) + 128)) = devsymShmUnmap 64368 *(*func(*libc.TLS, uintptr, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 40)) = writecrashOpen 64369 *(*func(*libc.TLS, uintptr, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 48)) = devsymDelete 64370 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 56)) = devsymAccess 64371 *(*func(*libc.TLS, uintptr, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 64)) = devsymFullPathname 64372 *(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 104)) = devsymRandomness 64373 *(*func(*libc.TLS, uintptr, int32) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 112)) = devsymSleep 64374 *(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(uintptr(unsafe.Pointer(&writecrash_vfs)) + 120)) = devsymCurrentTime 64375 } 64376 64377 var ts1 = "%s\x00internal error!\x00SELECT * FROM main.%Q WHERE sample()\x00expert\x00PRAGMA table_xinfo=%Q\x00main\x00binary\x00, \x00%Q\x00 COLLATE %Q\x00 COLLATE %s\x00 DESC\x00PRAGMA index_list=%Q\x00PRAGMA index_xInfo=%Q\x00%s_idx_%08x\x00SELECT count(*) FROM sqlite_schema WHERE name=%Q AND type in ('index','table','view')\x00CREATE INDEX \"%w\" ON \"%w\"(%s)\x00CREATE INDEX %s ON %s(%s)\x00EXPLAIN QUERY PLAN %s\x00 USING INDEX \x00 USING COVERING INDEX \x00%s\n\x00%s;\n\x00SELECT 'CREATE TEMP' || substr(sql, 7) FROM sqlite_schema WHERE tbl_name = %Q AND type IN ('table', 'trigger') ORDER BY type;\x00ALTER TABLE temp.%Q RENAME TO %Q\x00INSERT INTO %Q VALUES(\x00%s?\x00\x00)\x00UPDATE %Q SET \x00%s%Q=?\x00DELETE FROM %Q\x00t592690916721053953805701627921227776\x00DROP TABLE t592690916721053953805701627921227776\x00SELECT type, name, sql, 1 FROM sqlite_schema WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%%' UNION ALL SELECT type, name, sql, 2 FROM sqlite_schema WHERE type = 'trigger' AND tbl_name IN(SELECT name FROM sqlite_schema WHERE type = 'view') ORDER BY 4, 1\x00CREATE TABLE x(\x00%s%Q COLLATE %s\x00CREATE VIRTUAL TABLE %Q USING expert(%Q)\x00SELECT max(i.seqno) FROM sqlite_schema AS s, pragma_index_list(s.name) AS l, pragma_index_info(l.name) AS i WHERE s.type = 'table'\x00%sx.%Q IS rem(%d, x.%Q) COLLATE %s\x00%s%d\x00SELECT %s FROM %Q x ORDER BY %s\x00SELECT %s FROM temp.t592690916721053953805701627921227776 x ORDER BY %s\x00%d\x00 %d\x00DROP TABLE IF EXISTS temp.t592690916721053953805701627921227776\x00CREATE TABLE temp.t592690916721053953805701627921227776 AS SELECT * FROM %Q\x00SELECT s.rowid, s.name, l.name FROM sqlite_schema AS s, pragma_index_list(s.name) AS l WHERE s.type = 'table'\x00SELECT name, coll FROM pragma_index_xinfo(?) WHERE key\x00INSERT INTO sqlite_stat1 VALUES(?, ?, ?)\x00ANALYZE; PRAGMA writable_schema=1\x00rem\x00sample\x00ANALYZE sqlite_schema\x00:memory:\x00SELECT sql FROM sqlite_schema WHERE name NOT LIKE 'sqlite_%%' AND sql NOT LIKE 'CREATE VIRTUAL %%'\x00Cannot find a unique index name to propose.\x00%s;%s%s\n\x00 -- stat1: \x00no such handle: \x00sql\x00TABLE\x00analyze\x00count\x00report\x00STMT EREPORT\x00destroy\x00SUBCOMMAND ...\x00sub-command\x00indexes\x00plan\x00candidates\x00DB\x00sqlite3expert%d\x00out of memory\x00sqlite3_expert_new\x00SQLITE_DONE\x00SQLITE_ERROR\x00SQLITE_OK\x00SELECT fts5(?1)\x00error: \x00fts5_api_ptr\x00f5t_2_%lld\x00xColumnCount\x00xRowCount\x00xColumnTotalSize\x00COL\x00xTokenize\x00TEXT SCRIPT\x00xPhraseCount\x00xPhraseSize\x00PHRASE\x00xInstCount\x00xInst\x00IDX\x00xRowid\x00xColumnText\x00xColumnSize\x00xQueryPhrase\x00PHRASE SCRIPT\x00xSetAuxdata\x00VALUE\x00xGetAuxdata\x00CLEAR\x00xSetAuxdataInt\x00INTEGER\x00xGetAuxdataInt\x00xPhraseForeach\x00IPHRASE COLVAR OFFVAR SCRIPT\x00xPhraseColumnForeach\x00IPHRASE COLVAR SCRIPT\x00SUB-COMMAND\x00f5t_%lld\x00bytearray\x00boolean\x00double\x00wideInt\x00int\x00DB NAME SCRIPT\x00?-subst? DB NAME TEXT\x00-subst\x00unrecognized option: \x00no such tokenizer: \x00error in tokenizer.xCreate()\x00error in tokenizer.xTokenize()\x00document\x00aux\x00query\x00prefixquery\x00invalid\x00-colocated\x00sqlite3_fts5_token may only be used by tokenizer callback\x00?-colocated? TEXT START END\x00error in fts5_api.xCreateTokenizer()\x00NSLOT TOKEN\x00sqlite3_fts5_create_tokenizer\x00sqlite3_fts5_token\x00sqlite3_fts5_tokenize\x00sqlite3_fts5_create_function\x00sqlite3_fts5_may_be_corrupt\x00sqlite3_fts5_token_hash\x00sqlite3_fts5_register_matchinfo\x00sqlite3_fts5_register_fts5tokenize\x00unrecognized matchinfo flag: %c\x00pcx\x00matchinfo\x00CREATE TABLE x(input HIDDEN, token, start, end, position)\x00fts5tokenize\x00apndvfs\x00Start-Of-SQLite3-\x00apnd(%lld)/%z\x00SQLite format 3\x00%s: cost must be between 1 and %d\x00%s: maximum string length is %d\x00%s: iLang must be between 0 and %d\x00?\x00SELECT * FROM %Q.%Q\x00%s: %s\x00%s: %s has %d columns, expected 4\x00vocabulary_table\x00vocabulary_word\x00vocabulary_language\x00edit_distances\x00unrecognized argument: [%s]\n\x00no edit_distances table specified\x00CREATE TABLE x(word,distance,language,command HIDDEN,nword HIDDEN)\x000123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ^abcdefghijklmnopqrstuvwxyz~\x00SELECT \"%w\" FROM \"%w\"\x00 WHERE \"%w\">=?1 AND \"%w\"=?2 ORDER BY 1\x00SELECT \"%w\" FROM \"%w\" WHERE \"%w\">=?1 ORDER BY 1\x00*\x00DELETE from %s is not allowed\x00UPDATE of %s is not allowed\x00INSERT INTO %s allowed for column [command] only\x00approximate_match\x00int32\x00int64\x00char*\x00CREATE TABLE x(value,pointer hidden,count hidden,ctype hidden)\x00carray-bind\x00carray\x00unknown datatype: %Q\x00inttoptr\x00cksmvfs\x00ZV-\x00checksum fault offset %lld of \"%s\"\x00checksum_verification\x00enable%\x00yes\x00on\x00page_size\x00cksm/%z\x00verify_checksum\x00tablename\x00idcolumn\x00parentcolumn\x00CREATE TABLE x(id,depth,root HIDDEN,tablename HIDDEN,idcolumn HIDDEN,parentcolumn HIDDEN)\x00SELECT \"%w\".\"%w\" FROM \"%w\" WHERE \"%w\".\"%w\"=?1\x00transitive_closure\x00rb\x00cannot open '%s' for reading\x00line %d: unescaped %c character\x00line %d: unterminated %c-quoted field\n\x00more than one '%s' parameter\x00true\x00no\x00off\x00false\x00header\x00more than one 'header' parameter\x00testflags\x00columns\x00more than one 'columns' parameter\x00column= value must be positive\x00bad parameter: '%s'\x00must specify either filename= or data= but not both\x00%sc%d TEXT\x00,\x00%s\"%w\" TEXT\x00bad schema: '%s' - %s\x00filename\x00data\x00schema\x00csv\x00csv_wr\x00decimal_sum\x00decimal\x00decimal_cmp\x00decimal_add\x00decimal_sub\x00decimal_mul\x00 \x00eval\x00CREATE TABLE x(addr,opcode,p1,p2,p3,p4,p5,comment,sql HIDDEN)\x00EXPLAIN %s\x00explain\x00wb\x00wrong number of arguments to function writefile()\x00failed to create symlink: %s\x00failed to create directory: %s\x00failed to write file: %s\x00CREATE TABLE x(name,mode,mtime,data,path HIDDEN,dir HIDDEN)\x00cannot read directory: %s\x00%s/%s\x00cannot stat file: %s\x00table function fsdir requires an argument\x00table function fsdir requires a non-NULL argument\x00fsdir\x00readfile\x00writefile\x00lsmode\x00%s: ruleset must be between 0 and %d\x00%s: wrong number of CREATE VIRTUAL TABLE arguments\x00CREATE TABLE x(word,distance,ruleset)\x00fuzzer\x00ieee754(%lld,%d)\x00ieee754\x00ieee754_mantissa\x00ieee754_exponent\x00ieee754_to_blob\x00ieee754_from_blob\x00BEGIN; SELECT * FROM %s%q%ssqlite_schema\x00'\x00'.\x00PRAGMA %s%q%spage_size\x00sqlite3_mmap_warm_cache: Warmed up %d pages of %s\x00END\x00AND (%s)\x00collate \"%w\"\x00SELECT %s FROM %s WHERE %s>=(?1 || ?2) %s AND %s<=(?1 || char(1114111)) %s %s ORDER BY 1 %s ASC LIMIT 1\x00next_char\x00NULL\x00is\x00not\x00in(\x00in(select\x00in(with\x00?,?,?\x002nd argument to percentile() is not a number between 0.0 and 100.0\x002nd argument to percentile() is not the same for all input rows\x001st argument to percentile() is not numeric\x00Inf input to percentile()\x00percentile\x00CREATE TABLE prefixes(prefix TEXT, original_string TEXT HIDDEN)\x00prefixes\x00prefix_length\x00vn\x00ix\x00cn\x00op\x00ux\x00rhs\x00a\x00b\x00c\x00d\x00e\x00flags\x00CREATE TABLE x( vn TEXT, ix INT, cn TEXT, op INT, ux BOOLEAN, rhs TEXT, a, b, c, d, e, flags INT HIDDEN)\x00%lld\x00%!f\x00x'\x00%02x\x00nConstraint,%d,,,,\n\x00aConstraint,%d,%s,%d,%d,\x00\n\x00nOrderBy,%d,,,,\n\x00aOrderBy,%d,%s,%d,,\n\x00rowid\x00sqlite3_vtab_distinct,%d,,,,\n\x00idxFlags,%d,,,,\n\x00colUsed,%d,,,,\n\x00idxNum,%d,,,,\n\x00orderByConsumed,%d,,,,\n\x00qpvtab\x00unknown \\ escape\x00afnrtv\\()*.+?[$^{|}]\x00\a\f\n\r\t\v\x00unmatched '('\x00'*' without operand\x00'+' without operand\x00'?' without operand\x00'{m,n}' without operand\x00unmatched '{'\x00n less than m in '{m,n}'\x00both m and n are zero in '{m,n}'\x00POSIX character classes not supported\x00unclosed '['\x00unrecognized character\x00regexp\x00regexpi\x00remember\x00CREATE TABLE x(value,start hidden,stop hidden,step hidden)\x00first argument to \"generate_series()\" missing or unusable\x00generate_series() requires SQLite 3.8.12 or later\x00generate_series\x00.ABCDHLRMY9 ?\x00non-ASCII input to editdist()\x00NULL input to editdist()\x00SELECT iLang, cFrom, cTo, iCost FROM \"%w\" WHERE iLang>=0 ORDER BY iLang\x00editdist3\x00DROP TABLE IF EXISTS \"%w\".\"%w_vocab\"\x00CREATE TABLE x(word,rank,distance,langid, score, matchlen, phonehash HIDDEN, top HIDDEN, scope HIDDEN, srchcnt HIDDEN, soundslike HIDDEN, command HIDDEN)\x00CREATE TABLE IF NOT EXISTS \"%w\".\"%w_vocab\"(\n id INTEGER PRIMARY KEY,\n rank INT,\n langid INT,\n word TEXT,\n k1 TEXT,\n k2 TEXT\n);\n\x00CREATE INDEX IF NOT EXISTS \"%w\".\"%w_vocab_index_langid_k2\" ON \"%w_vocab\"(langid,k2);\x00edit_cost_table=\x00bad argument to spellfix1(): \"%s\"\x00SELECT id, word, rank, coalesce(k1,word) FROM \"%w\".\"%w_vocab\" WHERE langid=%d AND k2>=?1 AND k2<?2\x00SELECT word, rank, NULL, langid, id FROM \"%w\".\"%w_vocab\"%s\x00 WHERE rowid=?\x00ROLLBACK\x00IGNORE\x00ABORT\x00REPLACE\x00DELETE FROM \"%w\".\"%w_vocab\" WHERE id=%lld\x00NOT NULL constraint failed: %s.word\x00reset\x00null\x00unknown value for %s.command: \"%w\"\x00INSERT INTO \"%w\".\"%w_vocab\"(rank,langid,word,k1,k2) VALUES(%d,%d,%Q,nullif(%Q,%Q),%Q)\x00INSERT OR %s INTO \"%w\".\"%w_vocab\"(id,rank,langid,word,k1,k2) VALUES(%lld,%d,%d,%Q,nullif(%Q,%Q),%Q)\x00UPDATE OR %s \"%w\".\"%w_vocab\" SET id=%lld, rank=%d, langid=%d, word=%Q, k1=nullif(%Q,%Q), k2=%Q WHERE id=%lld\x00ALTER TABLE \"%w\".\"%w_vocab\" RENAME TO \"%w_vocab\"\x00spellfix1_translit\x00spellfix1_editdist\x00spellfix1_phonehash\x00spellfix1_scriptcode\x00spellfix1\x00922337203685477580\x00tointeger\x00toreal\x00sql error: %s\x00_rowid_\x00integer\x00no such rowid table: %s%s%s\x00.\x00SELECT group_concat(quote(name) || '.' || quote(type)) FROM pragma_table_info(?, ?)\x00source table schema mismatch\x00swarmvtab: no such SQL parameter: %s\x00maxopen\x00swarmvtab: illegal maxopen value\x00missing\x00swarmvtab: duplicate \"missing\" option\x00SELECT \"%w\"(?%s)\x00,?\x00openclose\x00swarmvtab: duplicate \"openclose\" option\x00SELECT \"%w\"(?,?%s)\x00swarmvtab: unrecognized option: %s\x00SELECT \"%w\"(?)\x00swarmvtab: parse error: %s\x00swarmvtab\x00unionvtab\x00temp\x00%s tables must be created in TEMP schema\x00wrong number of arguments for %s\x00SELECT * FROM (%z) ORDER BY 3\x00rowid range mismatch error\x00no source tables configured\x00SELECT 'CREATE TABLE xyz(' || group_concat(quote(name) || ' ' || type, ', ') || ')',max((cid+1) * (type='INTEGER' COLLATE nocase AND pk=1))-1 FROM pragma_table_info(%Q, ?)\x00SELECT rowid, * FROM %Q %s %lld\x00WHERE _rowid_ <=\x00-- \x00%z%sSELECT rowid, * FROM %s%q%s%Q\x00 UNION ALL \x00%z WHERE rowid=%lld\x00WHERE\x00%z WHERE rowid>=%lld\x00AND\x00%z %s rowid<=%lld\x00CREATE TABLE x(value)\x00wholenumber\x00rbu_delta\x00step\x00close\x00create_rbu_delta\x00savestate\x00dbMain_eval\x00SQL\x00bp_progress\x00db\x00RBU\x00state\x00progress\x00close_no_error\x00temp_size_limit\x00LIMIT\x00temp_size\x00dbRbu_eval\x00METHOD\x00method\x00 - \x00oal\x00move\x00checkpoint\x00done\x00error\x00NAME TARGET-DB RBU-DB ?STATE-DB?\x00NAME TARGET-DB ?STATE-DB?\x00?-default? NAME PARENT\x00NAME\x00sqlite3rbu_db(0, 0)!=0\x00sqlite3rbu\x00sqlite3rbu_vacuum\x00sqlite3rbu_create_vfs\x00sqlite3rbu_destroy_vfs\x00sqlite3rbu_internal_test\x00%p\x00zero\x00user\x00user_is_zero\x00box\x00DB SCRIPT\x00partly\x00fully\x00aParam\x00aCoord\x00anQueue\x00iLevel\x00mxLevel\x00iRowid\x00rParentScore\x00eParentWithin\x00value\x00qbox\x00register_box_geom\x00register_box_query\x00DB SQL\x00error in sql_exec_changeset()\x00sqlite3session_streams\x00attach\x00changeset\x00delete\x00enable\x00BOOL\x00indirect\x00isempty\x00table_filter\x00SCRIPT\x00patchset\x00diff\x00FROMDB TBL\x00memory_used\x00changeset_size\x00object_config_size\x00CMD DB-HANDLE DB-NAME\x00n\x00i\x00f\x00t\x00FOREIGN_KEY\x00INSERT\x00UPDATE\x00DELETE\x00DATA\x00NOTFOUND\x00CONFLICT\x00CONSTRAINT\x00OMIT\x00-nosavepoint\x00-invert\x00?-nosavepoint? ?-inverse? DB CHANGESET CONFLICT-SCRIPT ?FILTER-SCRIPT?\x00DB CHANGESET CONFLICT-SCRIPT ?FILTER-SCRIPT?\x00DB CHANGESET\x00CHANGESET\x00LEFT RIGHT\x00-next\x00?-next? ?-invert? VARNAME CHANGESET SCRIPT\x00configure\x00REBASE-BLOB\x00rebase\x00OP VALUE\x00strm_size\x00sqlite3session\x00sqlite3session_foreach\x00sqlite3changeset_invert\x00sqlite3changeset_concat\x00sqlite3changeset_apply\x00sqlite3changeset_apply_v2\x00sqlite3changeset_apply_replace_all\x00sql_exec_changeset\x00sqlite3rebaser_create\x00sqlite3session_config\x00incrblob\x00incrblob_%d\x00sqlite_unlock_notify_arg\x00sqlite_unlock_notify_argcount\x00SQLITE_COPY\x00SQLITE_CREATE_INDEX\x00SQLITE_CREATE_TABLE\x00SQLITE_CREATE_TEMP_INDEX\x00SQLITE_CREATE_TEMP_TABLE\x00SQLITE_CREATE_TEMP_TRIGGER\x00SQLITE_CREATE_TEMP_VIEW\x00SQLITE_CREATE_TRIGGER\x00SQLITE_CREATE_VIEW\x00SQLITE_DELETE\x00SQLITE_DROP_INDEX\x00SQLITE_DROP_TABLE\x00SQLITE_DROP_TEMP_INDEX\x00SQLITE_DROP_TEMP_TABLE\x00SQLITE_DROP_TEMP_TRIGGER\x00SQLITE_DROP_TEMP_VIEW\x00SQLITE_DROP_TRIGGER\x00SQLITE_DROP_VIEW\x00SQLITE_INSERT\x00SQLITE_PRAGMA\x00SQLITE_READ\x00SQLITE_SELECT\x00SQLITE_TRANSACTION\x00SQLITE_UPDATE\x00SQLITE_ATTACH\x00SQLITE_DETACH\x00SQLITE_ALTER_TABLE\x00SQLITE_REINDEX\x00SQLITE_ANALYZE\x00SQLITE_CREATE_VTABLE\x00SQLITE_DROP_VTABLE\x00SQLITE_FUNCTION\x00SQLITE_SAVEPOINT\x00SQLITE_RECURSIVE\x00????\x00SQLITE_DENY\x00SQLITE_IGNORE\x00RELEASE _tcl_transaction\x00COMMIT\x00ROLLBACK TO _tcl_transaction ; RELEASE _tcl_transaction\x00option\x00?CALLBACK?\x00?DATABASE? FILENAME\x00cannot open target database: \x00backup failed: \x00CALLBACK\x00cache option ?arg?\x00flush\x00size\x00size n\x00cannot convert \"\x00\" to integer\x00bad option \"\x00\": must be flush or size\x00NAME SCRIPT\x00?OPTION? ?BOOLEAN?\x00unknown config option: \"\x00\"\x00CONFLICT-ALGORITHM TABLE FILENAME ?SEPARATOR? ?NULLINDICATOR?\x00\t\x00Error: non-null separator required for copy\x00rollback\x00abort\x00fail\x00ignore\x00replace\x00Error: \"\x00\", conflict-algorithm must be one of: rollback, abort, fail, ignore, or replace\x00SELECT * FROM '%q'\x00Error: no such table: \x00Error: \x00Error: can't malloc()\x00INSERT OR %q INTO '%q' VALUES(?\x00Error: cannot open file: \x00BEGIN\x00Error: %s line %d: expected %d columns of data but found %d\x00, failed while processing line: \x00?DATABASE? VALUE\x00-maxsize\x00-readonly\x00unknown option: \x00unable to set MEMDB content\x00extension loading is turned off at compile-time\x00-withoutnulls\x00unknown option: \"\x00?OPTIONS? SQL ?ARRAY-NAME? ?SCRIPT?\x00NAME ?SWITCHES? SCRIPT\x00-argcount\x00option requires an argument: \x00number of arguments must be non-negative\x00-deterministic\x00-directonly\x00-innocuous\x00-returntype\x00real\x00text\x00blob\x00any\x00type\x00\": must be -argcount, -deterministic, -directonly, -innocuous, or -returntype\x00?-readonly? ?DB? TABLE COLUMN ROWID\x00NULLVALUE\x00N CALLBACK\x00KEY\x00cannot open source database: \x00restore failed: \x00restore failed: source database busy\x00?DATABASE?\x00(step|sort|autoindex)\x00sort\x00autoindex\x00vmstep\x00bad argument: should be autoindex, step, sort or vmstep\x00MILLISECONDS\x00?CALLBACK? ?MASK?\x00trace type\x00SAVEPOINT _tcl_transaction\x00[TYPE] SCRIPT\x00transaction type\x00BEGIN EXCLUSIVE\x00BEGIN IMMEDIATE\x00?SCRIPT?\x00SUB-COMMAND ?ARGS?\x00hook ?SCRIPT?\x00INDEX\x00-use-legacy-prepare\x00-last-stmt-ptr\x00unknown argument: \x00authorizer\x00backup\x00bind_fallback\x00busy\x00cache\x00changes\x00collate\x00collation_needed\x00commit_hook\x00complete\x00config\x00copy\x00deserialize\x00enable_load_extension\x00errorcode\x00erroroffset\x00exists\x00function\x00interrupt\x00last_insert_rowid\x00nullvalue\x00onecolumn\x00preupdate\x00profile\x00rekey\x00restore\x00rollback_hook\x00serialize\x00status\x00timeout\x00total_changes\x00trace\x00trace_v2\x00transaction\x00unlock_notify\x00update_hook\x00version\x00wal_hook\x00defensive\x00dqs_ddl\x00dqs_dml\x00enable_fkey\x00enable_qpsg\x00enable_trigger\x00enable_view\x00fts3_tokenizer\x00legacy_alter_table\x00legacy_file_format\x00load_extension\x00no_ckpt_on_close\x00reset_database\x00trigger_eqp\x00trusted_schema\x00writable_schema\x00statement\x00row\x00deferred\x00exclusive\x00immediate\x00depth\x00hook\x00new\x00old\x00HANDLE ?FILENAME? ?-vfs VFSNAME? ?-readonly BOOLEAN? ?-create BOOLEAN? ?-nofollow BOOLEAN? ?-nomutex BOOLEAN? ?-fullmutex BOOLEAN? ?-uri BOOLEAN?\x00-version\x00-sourceid\x00-has-codec\x000\x00-key\x00-vfs\x00-create\x00-nofollow\x00-nomutex\x00-fullmutex\x00-uri\x00-translatefilename\x00sqlite3\x00sqlite\x003.39.3\x00if {[llength $argv]>=1} {\nset argv0 [lindex $argv 0]\nset argv [lrange $argv 1 end]\nsource $argv0\n} else {\nset line {}\nwhile {![eof stdin]} {\nif {$line!=\"\"} {\nputs -nonewline \"> \"\n} else {\nputs -nonewline \"% \"\n}\nflush stdout\nappend line [gets stdin]\nif {[info complete $line]} {\nif {[catch {uplevel #0 $line} result]} {\nputs stderr \"Error: $result\"\n} elseif {$result!=\"\"} {\nputs $result\n}\nset line {}\n} else {\nappend line \\n\n}\n}\n}\n\x00SQLITE_DEBUG_BREAK\x00attach debugger to process %d and press any key to continue.\n\x00utf-8\x00argc\x00argv0\x00argv\x00errorInfo\x00%s: %s\n\x00SQLITE-CONNECTION\x00command not found: \x00error code %s (%d) does not match sqlite3_errcode %s (%d)\x00OMIT_MISUSE\x00wrong # args: should be \"\x00 DB FORMAT STRING\x00 DB HEX\x00 DB\x00 DB SQL\x00%z%s%s\x00%s%n\x00abcdefghijklmnopqrstuvwxyz\x00 DB FORMAT STRING ?COUNT?\x00 DB\"\x00 FILENAME\"\x00%04x\x00tkt2213 is not fixed\x00text16\x00bytes\x00bytes16\x00noop\x00x_coalesce\x00hex8\x00hex16\x00tkt2213func\x00pointer_change\x00counter1\x00counter2\x00intreal\x00x_sqlite_exec\x00value of 40 handed to x_count\x00x_count totals to 42\x00x_count\x00legacy_count\x00 TEXT\"\x00 FORMAT INT INT INT\"\x00argument is not a valid 64-bit integer\x00 FORMAT INT INT ?STRING?\"\x00 INT FORMAT INT INT ?STRING?\"\x00N must be non-negative\x00 FORMAT INT INT DOUBLE\"\x00 FORMAT DOUBLE DOUBLE\"\x00 FORMAT STRING\"\x00%08x%08x\x002nd argument should be 16-characters of hex\x00?BOOLEAN?\x00DB BOOLEAN\x00DB dbname tblname colname\x00CHANNEL ROWID\x00DB-HANDLE NAME CMP-PROC DEL-PROC\x00sqlite3_create_collate_v2() failed to detect an invalid encoding\x00utf8\x00utf16\x00utf16le\x00utf16be\x00DB NAME NARG ENC SWITCHES...\x00encoding\x00-func\x00-step\x00-final\x00-destroy\x00switch\x00DB-HANDLE FILE ?PROC?\x00this build omits sqlite3_load_extension()\x00DB-HANDLE ONOFF\x00string\x00first argument should be one of: int int64 string double null value\x00 DB FUNCTION-NAME\x00 <STMT>\x00STMT PARAMETER RESETFLAG\x00SQLITE_STMTSTATUS_FULLSCAN_STEP\x00SQLITE_STMTSTATUS_SORT\x00SQLITE_STMTSTATUS_AUTOINDEX\x00SQLITE_STMTSTATUS_VM_STEP\x00SQLITE_STMTSTATUS_REPREPARE\x00SQLITE_STMTSTATUS_RUN\x00SQLITE_STMTSTATUS_MEMUSED\x00NBYTE\x00DB DBNAME\x00DB DBNAME SNAPSHOT\x00SNAPSHOT\x00SNAPSHOT1 SNAPSHOT2\x00bad SNAPSHOT\x00FILE\x00PATH\x00 DB STMT\x00 STMT\x00 FROM-STMT TO-STMT\x00 VM IDX VALUE (null|static|normal)\"\x00static\x00static-nbytes\x00normal\x00blob10\x00abc\x00xyz\x00pq\x004th argument should be \"null\" or \"static\" or \"normal\"\x00(%d) \x00test_collate\x00UTF-8\x00UTF-16LE\x00UTF-16BE\x00 <DB> <utf8> <utf16le> <utf16be>\x00utf16bin\x00utf16_unaligned\x00utf16_aligned\x00test_function\x00<error code>\x00STMT IDX N\x00 STMT N VALUE\x00NaN\x00SNaN\x00-NaN\x00-SNaN\x00+Inf\x00-Inf\x00Epsilon\x00-Epsilon\x00NaN0\x00-NaN0\x00 STMT N\x00 STMT N VALUE BYTES\x00 STMT N DATA BYTES\x00cannot use %d blob bytes, have %d\x00STMT N NEW|OLD IDX\x00expected new or old, got: \x00STMT N SELECT\x00error in SQL: \x00error runnning SQL: \x00-transient\x00-static\x00-int32\x00-int64\x00-double\x00-text\x00--\x00text data must be either -static or -transient\x00cannot be both -static and -transient\x00[OPTIONS] STMT IDX VALUE ...\x00STMT\x00STMT N\x00STMT NAME\x00 DB sql bytes ?tailvar?\x00 DB sql bytes tailvar\x00 DB sql bytes flags tailvar\x00\x00SELECT 1\x00 filename options-list\x00FILENAME FLAGS VFS\x00SQLITE_OPEN_READONLY\x00SQLITE_OPEN_READWRITE\x00SQLITE_OPEN_CREATE\x00SQLITE_OPEN_DELETEONCLOSE\x00SQLITE_OPEN_EXCLUSIVE\x00SQLITE_OPEN_AUTOPROXY\x00SQLITE_OPEN_MAIN_DB\x00SQLITE_OPEN_TEMP_DB\x00SQLITE_OPEN_TRANSIENT_DB\x00SQLITE_OPEN_MAIN_JOURNAL\x00SQLITE_OPEN_TEMP_JOURNAL\x00SQLITE_OPEN_SUBJOURNAL\x00SQLITE_OPEN_SUPER_JOURNAL\x00SQLITE_OPEN_NOMUTEX\x00SQLITE_OPEN_FULLMUTEX\x00SQLITE_OPEN_SHAREDCACHE\x00SQLITE_OPEN_PRIVATECACHE\x00SQLITE_OPEN_WAL\x00SQLITE_OPEN_URI\x00SQLITE_OPEN_EXRESCODE\x00flag\x00<utf-16 sql>\x00 STMT column\x00FLOAT\x00TEXT\x00BLOB\x00 DB function-name\x00VARIABLE\x00?N?\x001234567890000000\x00__one\x00__two\x00notadatabase\x00Unexpected non-zero errno: \x00DB [DBNAME]\x00%u\x00DB DBNAME SIZE\x00 DB PWD\x00PWD too big\x00%s/test.proxy\x00Lock proxy file did not match the previously assigned value\x00 DB FLAG\x00%d %d\x00 DB ?AUXDB?\x00DB N\x00 DB ID VALUE\x00unknown limit type: \x00SQLITE_LIMIT_LENGTH\x00SQLITE_LIMIT_SQL_LENGTH\x00SQLITE_LIMIT_COLUMN\x00SQLITE_LIMIT_EXPR_DEPTH\x00SQLITE_LIMIT_COMPOUND_SELECT\x00SQLITE_LIMIT_VDBE_OP\x00SQLITE_LIMIT_FUNCTION_ARG\x00SQLITE_LIMIT_ATTACHED\x00SQLITE_LIMIT_LIKE_PATTERN_LENGTH\x00SQLITE_LIMIT_VARIABLE_NUMBER\x00SQLITE_LIMIT_TRIGGER_DEPTH\x00SQLITE_LIMIT_WORKER_THREADS\x00SQLITE_LIMIT_TOOSMALL\x00SQLITE_LIMIT_TOOBIG\x00SEED ?DB?\x00BOOLEAN\x00current\x00max\x00min\x00recyclable\x00DB ?NAME?\x00passive\x00full\x00restart\x00truncate\x00DB MODE ?NAME?\x00mode\x00DB VALUE\x00COMMAND ...\x00command has no objProc: \x00%d %d %d %s\n\x00SQLITE_TESTCTRL_LOCALTIME_FAULT\x00SQLITE_TESTCTRL_SORTER_MMAP\x00SQLITE_TESTCTRL_IMPOSTER\x00SQLITE_TESTCTRL_INTERNAL_FUNCTIONS\x00VERB ARGS...\x00VERB\x000|1|2\x00DB LIMIT\x00DB dbName onOff tnum\x00ru_utime=%d.%06d ru_stime=%d.%06d ru_minflt=%d ru_majflt=%d\x00DB OPT BOOLEAN\x00unknown optimization - should be one of:\x00all\x00none\x00query-flattener\x00groupby-order\x00factor-constants\x00distinct-opt\x00cover-idx-scan\x00order-by-idx-join\x00transitive\x00omit-noop-join\x00stat4\x00skip-scan\x00push-down\x00balanced-merge\x00DB NAME ...\x00no such extension: \x00initialization of \x00 failed: \x00amatch\x00appendvfs\x00closure\x00fileio\x00nextchar\x00series\x00spellfix\x00totype\x00DB SQL1 NSTEP SQL2\x00data error: (a!=b)\x00checksum mismatch\x00sql error: \x00TYPE\x00Deliberate panic\x00DB SETTING [VALUE]\x00SQLITE_*\x00DBCONFIG_*\x00ENABLE_*\x00unknown sqlite3_db_config setting\x00FKEY\x00TRIGGER\x00FTS3_TOKENIZER\x00LOAD_EXTENSION\x00NO_CKPT_ON_CLOSE\x00QPSG\x00TRIGGER_EQP\x00RESET_DB\x00DEFENSIVE\x00WRITABLE_SCHEMA\x00LEGACY_ALTER_TABLE\x00DQS_DML\x00DQS_DDL\x00LEGACY_FILE_FORMAT\x00DB ?SCHEMA?\x00icecube\x00DB ?DBNAME?\x00DB OFFSET DATA\x00HEXDB\x00| size %d pagesize %d\x00bad 'pagesize' field\x00bad 'size' field\x00| page %d offset %d\x00| %d: %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x\x00DB ?SCRIPT?\x00sqlite3_autovacuum_pages() returns %d\x00sqlite_search_count\x00sqlite_found_count\x00sqlite_sort_count\x00sqlite3_max_blobsize\x00sqlite_like_count\x00sqlite_interrupt_count\x00sqlite_open_file_count\x00sqlite_current_time\x00sqlite_hostid_num\x00sqlite3_xferopt_count\x00sqlite3_pager_readdb_count\x00sqlite3_pager_writedb_count\x00sqlite3_pager_writej_count\x00unaligned_string_counter\x00sqlite_last_needed_collation\x00sqlite_query_plan\x00sqlite_opentemp_count\x00sqlite_static_bind_value\x00sqlite_static_bind_nbyte\x00sqlite_temp_directory\x00sqlite_data_directory\x00bitmask_size\x00longdouble_size\x00sqlite_sync_count\x00sqlite_fullsync_count\x00db_enter\x00db_leave\x00sqlite3_mprintf_int\x00sqlite3_mprintf_int64\x00sqlite3_mprintf_long\x00sqlite3_mprintf_str\x00sqlite3_snprintf_str\x00sqlite3_mprintf_stronly\x00sqlite3_mprintf_double\x00sqlite3_mprintf_scaled\x00sqlite3_mprintf_hexdouble\x00sqlite3_mprintf_z_test\x00sqlite3_mprintf_n_test\x00sqlite3_snprintf_int\x00sqlite3_last_insert_rowid\x00sqlite3_exec_printf\x00sqlite3_exec_hex\x00sqlite3_exec\x00sqlite3_exec_nr\x00sqlite3_get_table_printf\x00sqlite3_close\x00sqlite3_close_v2\x00sqlite3_create_function\x00sqlite3_create_aggregate\x00sqlite3_drop_modules\x00sqlite_register_test_function\x00sqlite_abort\x00sqlite_bind\x00breakpoint\x00sqlite3_key\x00sqlite3_rekey\x00sqlite3_interrupt\x00sqlite_delete_function\x00sqlite_delete_collation\x00sqlite3_get_autocommit\x00sqlite3_busy_timeout\x00printf\x00sqlite3IoTrace\x00clang_sanitize_address\x00sqlite3_db_config\x00sqlite3_txn_state\x00bad_behavior\x00register_dbstat_vtab\x00sqlite3_connection_pointer\x00intarray_addr\x00int64array_addr\x00doublearray_addr\x00textarray_addr\x00sqlite3_bind_int\x00sqlite3_bind_zeroblob\x00sqlite3_bind_zeroblob64\x00sqlite3_bind_int64\x00sqlite3_bind_double\x00sqlite3_bind_null\x00sqlite3_bind_text\x00sqlite3_bind_text16\x00sqlite3_bind_blob\x00sqlite3_bind_value_from_select\x00sqlite3_bind_value_from_preupdate\x00sqlite3_carray_bind\x00sqlite3_bind_parameter_count\x00sqlite3_bind_parameter_name\x00sqlite3_bind_parameter_index\x00sqlite3_clear_bindings\x00sqlite3_sleep\x00sqlite3_errcode\x00sqlite3_extended_errcode\x00sqlite3_errmsg\x00sqlite3_error_offset\x00sqlite3_errmsg16\x00sqlite3_open\x00sqlite3_open16\x00sqlite3_open_v2\x00sqlite3_complete16\x00sqlite3_normalize\x00sqlite3_prepare\x00sqlite3_prepare16\x00sqlite3_prepare_v2\x00sqlite3_prepare_v3\x00sqlite3_prepare_tkt3134\x00sqlite3_prepare16_v2\x00sqlite3_finalize\x00sqlite3_stmt_status\x00sqlite3_reset\x00sqlite3_expired\x00sqlite3_transfer_bindings\x00sqlite3_changes\x00sqlite3_step\x00sqlite3_sql\x00sqlite3_expanded_sql\x00sqlite3_next_stmt\x00sqlite3_stmt_readonly\x00sqlite3_stmt_isexplain\x00sqlite3_stmt_busy\x00uses_stmt_journal\x00sqlite3_release_memory\x00sqlite3_db_release_memory\x00sqlite3_db_cacheflush\x00sqlite3_system_errno\x00sqlite3_db_filename\x00sqlite3_db_readonly\x00sqlite3_soft_heap_limit\x00sqlite3_soft_heap_limit64\x00sqlite3_hard_heap_limit64\x00sqlite3_thread_cleanup\x00sqlite3_pager_refcounts\x00sqlite3_load_extension\x00sqlite3_enable_load_extension\x00sqlite3_extended_result_codes\x00sqlite3_limit\x00dbconfig_maindbname_icecube\x00save_prng_state\x00restore_prng_state\x00reset_prng_state\x00prng_seed\x00extra_schema_checks\x00database_never_corrupt\x00database_may_be_corrupt\x00optimization_control\x00tcl_objproc\x00sqlite3_column_count\x00sqlite3_data_count\x00sqlite3_column_type\x00sqlite3_column_blob\x00sqlite3_column_double\x00sqlite3_column_int64\x00sqlite3_column_text\x00sqlite3_column_name\x00sqlite3_column_int\x00sqlite3_column_bytes\x00sqlite3_column_decltype\x00sqlite3_column_database_name\x00sqlite3_column_table_name\x00sqlite3_column_origin_name\x00sqlite3_column_bytes16\x00sqlite3_column_text16\x00sqlite3_column_name16\x00add_alignment_test_collations\x00sqlite3_column_decltype16\x00sqlite3_column_database_name16\x00sqlite3_column_table_name16\x00sqlite3_column_origin_name16\x00sqlite3_create_collation_v2\x00sqlite3_global_recover\x00working_64bit_int\x00vfs_unlink_test\x00vfs_initfail_test\x00vfs_unregister_all\x00vfs_reregister_all\x00file_control_test\x00file_control_lasterrno_test\x00file_control_lockproxy_test\x00file_control_chunksize_test\x00file_control_sizehint_test\x00file_control_data_version\x00file_control_persist_wal\x00file_control_powersafe_overwrite\x00file_control_vfsname\x00file_control_reservebytes\x00file_control_tempfilename\x00file_control_external_reader\x00sqlite3_vfs_list\x00sqlite3_create_function_v2\x00add_test_collate\x00add_test_collate_needed\x00add_test_function\x00add_test_utf16bin_collate\x00sqlite3_test_errstr\x00tcl_variable_type\x00sqlite3_enable_shared_cache\x00sqlite3_shared_cache_report\x00sqlite3_libversion_number\x00sqlite3_table_column_metadata\x00sqlite3_blob_reopen\x00pcache_stats\x00sqlite3_unlock_notify\x00sqlite3_wal_checkpoint\x00sqlite3_wal_checkpoint_v2\x00sqlite3_wal_autocheckpoint\x00test_sqlite3_log\x00print_explain_query_plan\x00sqlite3_test_control\x00getrusage\x00load_static_extension\x00sorter_test_fakeheap\x00sorter_test_sort4_helper\x00vfs_current_time_int64\x00sqlite3_snapshot_get\x00sqlite3_snapshot_open\x00sqlite3_snapshot_free\x00sqlite3_snapshot_cmp\x00sqlite3_snapshot_recover\x00sqlite3_snapshot_get_blob\x00sqlite3_snapshot_open_blob\x00sqlite3_snapshot_cmp_blob\x00sqlite3_delete_database\x00atomic_batch_write\x00sqlite3_mmap_warm\x00sqlite3_config_sorterref\x00sqlite3_autovacuum_pages\x00decode_hexdb\x00test_write_db\x00sqlite3_register_cksumvfs\x00sqlite3_unregister_cksumvfs\x00*** OBSOLETE VARIABLE ***\x00 FILENAME N-PAGE\"\x00 ID\"\x00ref\x00page\x00err\x00hit\x00miss\x00ovfl\x00 ID PGNO\"\x00 PAGE\"\x00 PAGE DATA\"\x00 N-MEGABYTES FILE\"\x00open failed: \x00Hello, World!\x00write failed: \x00 PENDING-BYTE\"\x00fault simulator script failed: [%s]\x00 SCRIPT\"\x00 SIZE PROGRAM\"\x00sqlite_io_error_pending\x00sqlite_io_error_persist\x00sqlite_io_error_hit\x00sqlite_io_error_hardhit\x00sqlite_diskfull_pending\x00sqlite_diskfull\x00sqlite_pending_byte\x00pager_open\x00pager_close\x00pager_commit\x00pager_rollback\x00pager_stmt_begin\x00pager_stmt_commit\x00pager_stmt_rollback\x00pager_stats\x00pager_pagecount\x00page_get\x00page_lookup\x00page_unref\x00page_read\x00page_write\x00page_number\x00pager_truncate\x00fake_big_file\x00sqlite3BitvecBuiltinTest\x00sqlite3_test_control_pending_byte\x00sqlite3_test_control_fault_install\x00 FILENAME NCACHE FLAGS\"\x00read\x00write\x00 ID TABLENUM WRITEABLE\"\x00 START MULTIPLIER COUNT INCREMENT\"\x00putVarint returned %d - should be between 1 and 9\x00putVarint returned %d and getVarint returned %d\x00Wrote 0x%016llx and got back 0x%016llx\x00putVarint returned %d and GetVarint32 returned %d\x00Wrote 0x%016llx and got back 0x%016llx from GetVarint32\x00 DB-HANDLE ?N?\"\x00No such db-handle: \"\x00 BT NCACHE\"\x00?-intkey? CSR KEY VALUE\x00btree_insert\x00btree_open\x00btree_close\x00btree_begin_transaction\x00btree_pager_stats\x00btree_cursor\x00btree_close_cursor\x00btree_next\x00btree_eof\x00btree_payload_size\x00btree_first\x00btree_varint_test\x00btree_from_db\x00btree_ismemdb\x00btree_set_cache_size\x00thread ID must be an upper case letter\x00 ID FILENAME\x00thread \x00 is already running\x00failed to create the thread\x00 ID\x00no such thread\x00 ID N\x00column number out of range\x00no database is open\x00 ID SQL\x00no virtual machine available\x00 IDL\x00 ID1 ID2\x00 ID DB\x00thread_create\x00thread_wait\x00thread_halt\x00thread_argc\x00thread_argv\x00thread_colname\x00thread_result\x00thread_error\x00thread_compile\x00thread_step\x00thread_finalize\x00thread_swap\x00thread_db_get\x00thread_db_put\x00thread_stmt_get\x00 <repeat-count> <do-calls>\x00hello world\x00UTF8\x00UTF16LE\x00UTF16BE\x00UTF16\x00No such encoding: \x00 <string/blob> <from enc> <to enc>\x00binarize\x00test_value_overhead\x00test_translate\x00translate_selftest\x00out of memory in the crash simulator\n\x00atomic\x00atomic512\x00atomic1k\x00atomic2k\x00atomic4k\x00atomic8k\x00atomic16k\x00atomic32k\x00atomic64k\x00sequential\x00safe_append\x00powersafe_overwrite\x00batch-atomic\x00-sectorsize\x00-characteristics\x00Bad option: \"\x00\" - must be \"-characteristics\" or \"-sectorsize\"\x00Option requires an argument: \"\x00no such flag\x00ENABLE ?DEFAULT?\x00crash\x00?OPTIONS? DELAY CRASHFILE\x00Filename is too long: \"\x00NWRITE\x00?-default? PARENT-VFS\x00-default\x00\": must be -default\x00Error in jt_register\x00sqlite3_crash_enable\x00sqlite3_crashparams\x00sqlite3_crash_now\x00sqlite3_simulate_device\x00sqlite3_crash_on_write\x00unregister_devsim\x00register_jt_vfs\x00unregister_jt_vfs\x00client_create\x00client_wait\x00client_halt\x00client_argc\x00client_argv\x00client_colname\x00client_result\x00client_error\x00client_compile\x00client_step\x00client_reset\x00client_finalize\x00client_swap\x00echo_module_fail(%s,%s)\x00echo-vtab-error: %s\x00SELECT * FROM %Q\x00PRAGMA index_list(%s)\x00PRAGMA index_info(%s)\x00echo_module\x00SELECT sql FROM sqlite_schema WHERE type = 'table' AND name = ?\x00%s%s\x00xCreate\x00CREATE TABLE %Q(logmsg)\x00xConnect\x00xDisconnect\x00xDestroy\x00DROP TABLE %Q\x00xOpen\x00xNext\x00xColumn\x00xFilter\x00, *\x00%z, %s\x00%z, NULL\x00echo_module_ignore_usable\x00xBestIndex\x00echo_module_cost\x00SELECT count(*) FROM %Q\x00SELECT rowid%z FROM %Q\x00=\x00<\x00>\x00<=\x00>=\x00LIKE\x00like\x00glob\x00 %s %s LIKE (SELECT '%%'||?||'%%')\x00 %s %s %s ?\x00DESC\x00ASC\x00 ORDER BY %s %s\x00xUpdate\x00 SET\x00UPDATE %Q\x00 SET rowid=?1 \x00%s %Q=?%d\x00 WHERE rowid=?%d\x00DELETE FROM %Q WHERE rowid = ?1\x00INSERT INTO %Q (\x00%s%Q\x00%s?%d\x00) VALUES(\x00echo(%s)\x00xBegin\x00echo_module_begin_fail\x00xSync\x00echo_module_sync_fail\x00xCommit\x00xRollback\x00::echo_glob_overload\x00xRename\x00ALTER TABLE %s RENAME TO %s%s\x00function_that_does_not_exist_0982ma98\x00echo\x00echo_v2\x00register_echo_module\x00sqlite3_declare_vtab\x00N/A\x00sqlite3_create_collation\x00Error testing function: \x00sqlite3_malloc\x00sqlite3_realloc\x00c_misuse_test\x00c_realloc_test\x00c_collation_test\x00sqlite3_reset_auto_extension\x00npage\x00finish\x00remaining\x00pagecount\x00CMDNAME DESTHANDLE DESTNAME SRCHANDLE SRCNAME\x00sqlite3_backup_init() failed\x00sqlite3_backup\x00wrong number of arguments\x00unexpected: %s\x00eq\x00gt\x00le\x00lt\x00ge\x00match\x00ne\x00isnot\x00isnotnull\x00isnull\x00limit\x00offset\x00column\x00usable\x00desc\x00constraints\x00orderby\x00mask\x00distinct\x00in\x00rhs_value\x00INDEX BOOLEAN\x00INDEX ?DEFAULT?\x00bestindex%d\x00cost\x00idxnum\x00idxstr\x00rows\x00use\x00omit\x00unexpected: %d\x00tcl\x00register_tcl_module\x00incrblob_\x00DB DATABASE TABLE COLUMN ROWID FLAGS VARNAME\x00HANDLE\x00CHANNEL OFFSET N\x00out of memory in testdata/sqlite-src-3390300/src/test_blob.c\x00HANDLE OFFSET DATA ?NDATA?\x00sqlite3_blob_open\x00sqlite3_blob_close\x00sqlite3_blob_bytes\x00sqlite3_blob_read\x00sqlite3_blob_write\x00sqlite_options\x00malloc_usable_size\x00rowid32\x00casesensitivelike\x00configslower\x001.0\x00curdir\x001\x00win32malloc\x00debug\x00default_ckptfullfsync\x00direct_read\x00dirsync\x00lfs\x00pagecache_overflow_stats\x00mmap\x00worker_threads\x008\x00memdebug\x008_3_names\x00cursorhints\x00hiddencolumns\x00mathlib\x00mem3\x00mem5\x00offset_sql_func\x00snapshot\x00mutex\x00mutex_noop\x00altertable\x00api_armor\x00atomicwrite\x00geopoly\x00json1\x00has_codec\x00like_match_blobs\x00auth\x00autoinc\x00autoreset\x00autovacuum\x00default_autovacuum\x00between_opt\x00builtin_test\x00bloblit\x00cast\x00check\x00cte\x00columnmetadata\x00oversize_cell_check\x00compileoption_diags\x00compound\x00conflict\x00crashtest\x00datetime\x00decltype\x00deprecated\x00diskio\x00floatingpoint\x00foreignkey\x00fts1\x00fts2\x00fts3\x00fts5\x00fts3_unicode\x00fts4_deferred\x00gettable\x00icu\x00icu_collations\x00integrityck\x00legacyformat\x00like_opt\x00load_ext\x00localtime\x00lookaside\x00long_double\x00memorydb\x00memorymanage\x00mergesort\x00null_trim\x00or_opt\x00rbu\x00pager_pragmas\x00pragma\x00reindex\x00rtree\x00rtree_int_only\x00schema_pragmas\x00schema_version\x00session\x00stmtvtab\x00scanstatus\x00lock_proxy_pragmas\x00prefer_proxy_locking\x00shared_cache\x00subquery\x00tclvar\x00threadsafe\x00threadsafe1\x00threadsafe2\x00tempdb\x00trigger\x00truncate_opt\x00vacuum\x00view\x00vtab\x00wal\x00wsd\x00update_delete_limit\x00fast_secure_delete\x00secure_delete\x00userauth\x00multiplex_ext_overwrite\x00yytrackmaxstackdepth\x00sqllog\x00uri_00_error\x00normalize\x00windowfunc\x00SQLITE_MAX_LENGTH\x00SQLITE_MAX_COLUMN\x00SQLITE_MAX_SQL_LENGTH\x00SQLITE_MAX_EXPR_DEPTH\x00SQLITE_MAX_COMPOUND_SELECT\x00SQLITE_MAX_VDBE_OP\x00SQLITE_MAX_FUNCTION_ARG\x00SQLITE_MAX_VARIABLE_NUMBER\x00SQLITE_MAX_PAGE_SIZE\x00SQLITE_MAX_PAGE_COUNT\x00SQLITE_MAX_LIKE_PATTERN_LENGTH\x00SQLITE_MAX_TRIGGER_DEPTH\x00SQLITE_DEFAULT_CACHE_SIZE\x00SQLITE_DEFAULT_PAGE_SIZE\x00SQLITE_DEFAULT_FILE_FORMAT\x00SQLITE_DEFAULT_SYNCHRONOUS\x00SQLITE_DEFAULT_WAL_SYNCHRONOUS\x00SQLITE_MAX_ATTACHED\x00SQLITE_MAX_DEFAULT_PAGE_SIZE\x00SQLITE_MAX_WORKER_THREADS\x00TEMP_STORE\x00__GNUC__\x00%s-journal\x00%s-wal\x00%s-shm\x00%s%03d\x00%s-journal%03d\x00%s-wal%03d\x00Loadable extensions are not supported\x00demo\x00register_demovfs\x00unregister_demovfs\x00devsym\x00writecrash\x00CREATE TABLE xyz(dir, name);\x00CREATE TABLE xyz(path, size, data);\x00WITH r(d) AS ( SELECT CASE WHEN dir=?2 THEN ?3 ELSE dir END || '/' || name FROM fsdir WHERE dir=?1 AND name NOT LIKE '.%' UNION ALL SELECT dir || '/' || name FROM r, fsdir WHERE dir=d AND name NOT LIKE '.%') SELECT d FROM r;\x00/\x00CREATE TABLE x(path TEXT, data TEXT)\x00SELECT * FROM %Q.%Q WHERE rowid=?\x00fs\x00fstree\x00register_fs_module\x00abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-!,:*^+=_|?/<> \x00sqlite3_prepare_v2() error: %s\x000123456789abcdef\x00test_agg_errmsg16\x00randstr\x00test_destructor\x00test_destructor16\x00hex_to_utf16be\x00hex_to_utf16le\x00hex_to_utf8\x00test_destructor_count\x00test_auxdata\x00test_error\x00test_eval\x00test_isolation\x00test_counter\x00real2hex\x00test_decode\x00test_extract\x00test_zeroblob\x00test_getsubtype\x00test_setsubtype\x00test_frombind\x00tx\x00funcxx_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789\x00nullx_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789\x00sqlite3_create_function abused test failed\x00invalid matchinfo blob passed to function rank()\x00wrong number of arguments to function rank()\x00rank\x00autoinstall_test_functions\x00abuse_create_function\x00install_fts3_rank_function\x000123456789ABCDEF\x00FILENAME OFFSET AMT\x00r\x00cannot open input file \x00FILENAME OFFSET HEXDATA\x00r+b\x00r+\x00cannot open output file \x00HEXDATA\x00[utf8_to_utf8] unavailable - SQLITE_DEBUG not defined\x00BLOB VARNAME\x00LIST\x00hexio_read\x00hexio_write\x00hexio_get_int\x00hexio_render_int16\x00hexio_render_int32\x00utf8_to_utf8\x00read_fts3varint\x00make_fts3record\x00mem\x00pcache\x00Unknown argument: \"\x00init_wrapper_install\x00init_wrapper_query\x00init_wrapper_uninstall\x00init_wrapper_clear\x00CREATE TABLE x(value INTEGER PRIMARY KEY)\x00CREATE VIRTUAL TABLE temp.%Q USING %Q\x00INTARRAY\x00SQLITE_NOMEM\x00sqlite3_intarray_create\x00sqlite3_intarray_bind\x00jt\x00-journal\x00NBYTES\x00PRIOR NBYTES\x00bad pointer: \x00PRIOR\x00ADDRESS SIZE HEX\x00size must be positive\x00no data\x00ADDRESS SIZE\x00?RESET?\x00DEPT\x00FILENAME\x00COUNTER ?OPTIONS?\x00-repeat\x00-benigncnt\x00TITLE\x00SUB-COMMAND ...\x00start\x00stop\x00dump\x00clear\x00sync\x00SIZE N\x00INSTALLFLAG DISCARDCHANCE PRNGSEEED HIGHSTRESS\x00discard-chance should be between 0 and 100\x00SIZE COUNT\x00BUFID SIZE COUNT\x00illegal arguments - see documentation\x00NBYTE NMINALLOC\x00[DB]\x00sqlite3_db_config(db, 99999) does not return SQLITE_ERROR\x00sqlite3_config(99999) does not return SQLITE_ERROR\x00PARAMETER RESETFLAG\x00SQLITE_STATUS_MEMORY_USED\x00SQLITE_STATUS_MALLOC_SIZE\x00SQLITE_STATUS_PAGECACHE_USED\x00SQLITE_STATUS_PAGECACHE_OVERFLOW\x00SQLITE_STATUS_PAGECACHE_SIZE\x00SQLITE_STATUS_SCRATCH_USED\x00SQLITE_STATUS_SCRATCH_OVERFLOW\x00SQLITE_STATUS_SCRATCH_SIZE\x00SQLITE_STATUS_PARSER_STACK\x00SQLITE_STATUS_MALLOC_COUNT\x00DB PARAMETER RESETFLAG\x00SQLITE_\x00DBSTATUS_\x00LOOKASIDE_USED\x00CACHE_USED\x00SCHEMA_USED\x00STMT_USED\x00LOOKASIDE_HIT\x00LOOKASIDE_MISS_SIZE\x00LOOKASIDE_MISS_FULL\x00CACHE_HIT\x00CACHE_MISS\x00CACHE_WRITE\x00DEFERRED_FKS\x00CACHE_USED_SHARED\x00CACHE_SPILL\x00?INTEGER?\x00sqlite3_free\x00memset\x00memget\x00sqlite3_memory_used\x00sqlite3_memory_highwater\x00sqlite3_memdebug_backtrace\x00sqlite3_memdebug_dump\x00sqlite3_memdebug_fail\x00sqlite3_memdebug_pending\x00sqlite3_memdebug_settitle\x00sqlite3_memdebug_malloc_count\x00sqlite3_memdebug_log\x00sqlite3_config_pagecache\x00sqlite3_config_alt_pcache\x00sqlite3_status\x00sqlite3_db_status\x00install_malloc_faultsim\x00sqlite3_config_heap\x00sqlite3_config_heap_size\x00sqlite3_config_memstatus\x00sqlite3_config_lookaside\x00sqlite3_config_error\x00sqlite3_config_uri\x00sqlite3_config_cis\x00sqlite3_config_pmasz\x00sqlite3_db_config_lookaside\x00sqlite3_dump_memsys3\x00sqlite3_dump_memsys5\x00sqlite3_install_memsys3\x00sqlite3_memdebug_vfs_oom_test\x00%05u\x00 FILENAME [OFFSET AMT]\"\x00unable to open file \"\x00\" for reading\x00md5\x00md5-10x8\x00md5file\x00md5file-10x8\x00md5sum\x00%03d\x00multiplexor.xAccess failure on %s\x00multiplexor.xOpen failure on %s\x00multiplex_control\x00chunksize\x00multiplex_\x00multiplex_truncate\x00multiplex_enabled\x00multiplex_chunksize\x00multiplex_filecount\x00multiplex/%z\x00multiplex\x00NAME MAKEDEFAULT\x00-force\x00?-force?\x00chunk_size\x00max_chunks\x00HANDLE DBNAME SUB-COMMAND INT-VALUE\x00expected database handle, got \"\x00sqlite3_multiplex_initialize\x00sqlite3_multiplex_shutdown\x00sqlite3_multiplex_control\x00fast\x00recursive\x00static_main\x00static_mem\x00static_open\x00static_prng\x00static_lru\x00static_pmem\x00static_app1\x00static_app2\x00static_app3\x00static_vfs1\x00static_vfs2\x00static_vfs3\x00mutex counters are \x00already installed\x00not installed\x00singlethread\x00multithread\x00serialized\x00mutex name\x00disable_mutex_init\x00disable_mutex_try\x00sqlite3_shutdown\x00sqlite3_initialize\x00sqlite3_config\x00enter_static_mutex\x00leave_static_mutex\x00enter_db_mutex\x00leave_db_mutex\x00alloc_dealloc_mutex\x00install_mutex_counters\x00read_mutex_counters\x00clear_mutex_counters\x00\x00\x00\x00\x00\x00\x00\x00vfslog/%z\x00sqlite_ostrace1.....\x00xClose\x00xRead\x00xWrite\x00xTruncate\x00xFilesize\x00xLock\x00xUnlock\x00xCheckResLock\x00xFileControl\x00xSectorSize\x00xDeviceChar\x00xDelete\x00xAccess\x00xFullPathname\x00xRandomness\x00xSleep\x00xCurrentTime\x00xShmUnmap\x00xShmLock\x00xShmBarrier\x00xShmMap\x00annotation\x00CREATE TABLE xxx(event, file, click, rc, size, offset)\x00vfslog\x00VFS\x00failed\x00VFS PARENT LOGFILE\x00bad sqlite3 handle: \x00annotate\x00finalize\x00register\x00quota/%z\x00quota\x00::piLimit_\x00PATTERN LIMIT SCRIPT\x00FILENAME MODE\x00HANDLE SIZE NELEM\x00HANDLE SIZE NELEM CONTENT\x00HANDLE ?HARDSYNC?\x00HANDLE OFFSET WHENCE\x00SEEK_SET\x00SEEK_CUR\x00SEEK_END\x00WHENCE should be SEEK_SET, SEEK_CUR, or SEEK_END\x00HANDLE SIZE\x00PATTERN TEXT\x00sqlite3_quota_initialize\x00sqlite3_quota_shutdown\x00sqlite3_quota_set\x00sqlite3_quota_file\x00sqlite3_quota_dump\x00sqlite3_quota_fopen\x00sqlite3_quota_fread\x00sqlite3_quota_fwrite\x00sqlite3_quota_fclose\x00sqlite3_quota_fflush\x00sqlite3_quota_fseek\x00sqlite3_quota_rewind\x00sqlite3_quota_ftell\x00sqlite3_quota_ftruncate\x00sqlite3_quota_file_size\x00sqlite3_quota_file_truesize\x00sqlite3_quota_file_mtime\x00sqlite3_quota_remove\x00sqlite3_quota_glob\x00sqlite3_quota_file_available\x00sqlite3_quota_ferror\x00cube\x00circle\x00Qcircle\x00breadthfirstsearch\x00register_cube_geom\x00register_circle_geom\x00CREATE TABLE x(database,tablename,cid,name,type,not_null,dflt_value,pk)\x00SELECT name FROM sqlite_temp_schema WHERE type='table'\x00SELECT name FROM %Q.sqlite_schema WHERE type='table'\x00PRAGMA %Q.table_info(%Q)\x00PRAGMA database_list\x00register_schema_module\x00PRAGMA main.journal_mode\x00CMDNAME PATH ?VFS? ?BUSY-HANDLER-SCRIPT?\x00sqlite3demo_superlock\x00open\x00access\x00getcwd\x00stat\x00fstat\x00ftruncate\x00fcntl\x00pread\x00pread64\x00pwrite\x00pwrite64\x00fchmod\x00fallocate\x00mremap\x00SYSCALL-LIST\x00system-call\x00?COUNT PERSIST?\x00EACCES\x00EINTR\x00EIO\x00EOVERFLOW\x00ENOMEM\x00EAGAIN\x00ETIMEDOUT\x00EBUSY\x00EPERM\x00EDEADLK\x00ENOLCK\x00SYSCALL ERRNO\x00errno\x00PGSZ\x00getpagesize\x00pgsz out of range\x00fault\x00install\x00uninstall\x00list\x00defaultvfs\x00pagesize\x00VFS does not support xSetSystemCall\x00test_syscall\x00load_testfixture_extensions\x00SLAVE\x00CREATE TABLE x( name TEXT, arrayname TEXT, value TEXT, fullname TEXT PRIMARY KEY) WITHOUT ROWID\x00array names\x00tclvar_filter_cmd\x00%s(%s)\x00expr {[info exists ::tclvar_set_omit] && $::tclvar_set_omit}\x00the 'fullname' column must be TEXT\x00prohibited TCL variable change\x00proc like {pattern str} {\n set p [string map {% * _ ?} $pattern]\n string match $p $str\n}\nproc tclvar_filter_cmd {eq match glob regexp like} {\n set res {}\n set pattern $eq\n if {$pattern=={}} { set pattern $match }\n if {$pattern=={}} { set pattern * }\n foreach v [uplevel #0 info vars $pattern] {\n if {($glob=={} || [string match $glob [uplevel #0 set $v]])\n && ($like=={} || [like $like [uplevel #0 set $v]])\n && ($regexp=={} || [regexp $regexp [uplevel #0 set $v]])\n } {\n lappend res $v\n }\n }\n set res\n}\n\x00register_tclvar_module\x00clock_seconds\x00sqlthread\x00sqlite3_blocking_step\x00sqlite3_blocking_prepare_v2\x00sqlite3_nonblocking_prepare_v2\x00set\x00Error in Tcl_CreateThread()\x00no parent thread\x00parent\x00spawn\x00VARNAME SCRIPT\x00DBNAME\x00id\x00%s \x00SQLITE_IOERR\x00SQLITE_LOCKED\x00SQLITE_BUSY\x00SQLITE_READONLY\x00SQLITE_READONLY_CANTINIT\x00SQLITE_NOTFOUND\x00SQLITE_OMIT\x00normal|dataonly\x00full|dataonly\x00xCheckReservedLock\x00BEGIN_ATOMIC_WRITE\x00COMMIT_ATOMIC_WRITE\x00ZIPVFS\x00anon\x00SQLITE_ACCESS_EXISTS\x00SQLITE_ACCESS_READWRITE\x00SQLITE_ACCESS_READ\x00xShmOpen\x00 lock\x00 unlock\x00 shared\x00 exclusive\x00shm\x00filter\x00ioerr\x00fullerr\x00cantopenerr\x00script\x00devchar\x00sectorsize\x00subcommand\x00FILE ?VALUE?\x00failed to get full path: \x00no such file: \x00unknown method: \x00?CNT PERSIST?\x00default\x00undeletable_when_open\x00immutable\x00?ATTR-LIST?\x00bad flags: \x00?VALUE?\x00-noshm\x00-szosfile\x00-mxpathname\x00-iversion\x00-fullshm\x00VFSNAME ?-noshm BOOL? ?-fullshm BOOL? ?-default BOOL? ?-mxpathname INT? ?-szosfile INT? ?-iversion INT?\x00shared\x00lock\x00unlock\x00DB DBNAME (shared|exclusive) (lock|unlock) OFFSET N\x00ARG\x00DB DBNAME SLOT ?VALUE?\x00*-shm is not yet mapped\x00testvfs\x00vfs_shmlock\x00vfs_set_readmark\x00DB NAME XSTEP XFINAL XVALUE XINVERSE\x00fff\x00misuse test error\x00invalid argument\x00sumint\x00sum\x00sqlite3_create_window_function\x00test_create_window_function_misuse\x00test_create_sumint\x00test_override_sum\x00" 64378 var ts = (*reflect.StringHeader)(unsafe.Pointer(&ts1)).Data